从 PHP 到 Java
本文内容纲要:
-前言
-开始
-PHP
-转变
-过渡
-经验
-IDE
-部署运行
-Java语法
-小结
前言
最近主要编程语言从PHP转到了Java。这一个多月的经历对我很有意义,所以写文章记录一下。
编程语言各有侧重,它们之间的比较没什么意义,所以本文只写一下我对两种语言的看法,以及我转到另一种语言的经历,再分享一下最近学习Java的心得体会。
文章欢迎转载,请尊重作者劳动成果,带上原文链接:http://www.cnblogs.com/zhenbianshu/p/8510943.html
开始
PHP
说来人生际遇无常,因为从小会几手PS,直到大学,我的人生规划都是做一个平面设计师。大四时由于毕业和女朋友的压力,最终才入了编程的坑。幸好专业是计算机,应付考试的同时,学习专业课也为编程打下了一些基础。现在看来,以我的直男审美,第一批被阿里的鲁班这样的人工智能替代的人中就有我。
学习过程中的鸡汤不再泼洒,这里必须夸赞一下PHP非常平缓的学习曲线。语法简单能让人快速入手,解释性语言的特性也让人更易于理解,而且做出些什么产生的成就感会让人更愿意去学习。不过PHP是一个易懂难精的语言,前期使用它进行简单的开发很容易,中期需要学习MySQL、Redis、Nginx等知识,后期更是要了解架构、性能优化、C扩展等技术,所以Web靠PHP叩门真不是一句玩笑话。
每种编程语言都是完备的,PHP在各个领域都能有所发挥。我用PHP做过支付,也用PHP做过后台多进程开发,还有用PHP做游戏服务端的,PHP快速开发快速部署的特性完全契合敏捷开发的思想,节约了开发人员大量时间,对一些公司来说,快速开发意味着市场,意味着生存。
转变
当然各个语言都有自己擅长的领域,PHP适合敏捷开发、Web快速迭代,可是面对纯后端的高效率需求却有点捉襟见肘,效率真的是硬伤。出于对后端网络编程、并发编程的兴趣,我开始考虑换一种编译型语言。虽然说到了架构师、技术专家的层次,各个语言意义不大了,但其中的过程还是必须要考虑的。
由于PHP是纯粹的C系语言,我原准备继续学一门C系语言,跟PHP互补,我在PHP调用Go服务的正确方式一文里也提过,我的选择是Go。后来,我也写了一个小项目(Gotorch)来练手,也有Go为主题的几篇文章。Go确实是一门非常适合PHPer转的语言,天生适合并发,高效率,语言也很简洁。
但是世事难料嘛,刚好公司有比较好的工作机会,面试通过后就这么来了,这边的主要开发语言是Java,我也只好紧跟大家的步伐,上了Java的车。不过组内也有Go语言的项目,希望能有机会继续了解Go。
过渡
从PHP换到Java,确实有很多地方不适应,虽然大学时也学过Java,可是已经忘得差不多了,况且写小Demo和工业级开发是完全不同的,说说几个转变的点:
-
强类型:从弱类型到强类型语言,意外地过渡得非常自然,可能因为之前写了些Go和C,使用强类型语言并没什么不适应,反而因为强大的IDE的代码提示功能,代码更不容易出错,编码更顺畅了。
-
注解(反射):Java里注解非常繁杂,类、方法、变量上都是,不光基础类库、Spring框架里有很多,还可以自己定义新的注解。一开始见到满屏的
@
符号,很多功能莫名其妙地实现了,有些头大,后来慢慢发现常用的也就那么几个,学习了用法,又了解了下反射,也就清晰了。 -
类库:Java的类库非常全,我们需要的功能基本都有人提供,真是琳琅满目、亮瞎狗眼。比如仅Json相关,在maven仓库里就可以搜到2000多个结果。
类库多了,一开始使用时更容易一脸懵,连接数据库进行一次查询有N多种类搭配方式,创建一个线程有好多种写法,而且各个Java版本都会添加一些语法糖。用哪个方法都行,又没有一个权威指示的话,反而很难让人很难决定。
-
部署:项目的部署是让我最难适应的,小小的改动就需要把所有代码打成jar/war包,动辄几十M再上传到远程服务器上测试,如果有一点错误,又需要重来,非常蛋疼。而且部署框架有maven/gradle,使用什么包,每个包需要注意什么,也要学习适应。
-
生态:我认为Java很大的一个优势就是生态,当然适应成本也高。有各种框架和组件需要学习,如web框架spring系列、数据库框架mybatis、日志框架log4j2,测试框架spock,JVM语言groovy等等,每一种学习都需要花费很多时间。
幸运的是,部门对代码的要求很高,累积下来,让我有很多优秀的源码可以看,可以模仿;同事们也非常乐于助人,我有问题时甚至都追着解释;利益于Java生态,网上也有很多工具和经验能帮我简化繁杂的操作。所以入门虽然累,但也还算平稳。
经验
一个月多来,感觉自己勉强入门了,虽然还有很多东西不熟悉,甚至都没有接触过,但不再是之前的一头雾水,面对小问题也一脸茫然了。所以我觉得也有必要做一个小小的总结,不仅有利于自己进步,最好也能帮其他Java新人少走一些弯路。
IDE
首先要说IDE,一个好用的IDE可以帮你提示代码、解决依赖、代码追踪、文件搜索、部署运行,毫不夸张的说,一个好的IDE,能让你省一半的时间。
这里我推荐jetBean公司的IDEA,首先jetBean针对各种编程语言,有一系列的IDE,如果你之前使用过他们的产品,现在换成IDEA没有任何不适,当然,以后再使用别的产品也很轻松。
当然jetBean的产品都是收费的(虽然也有经过功能阉割的社区版),如果你认识在读的同学或教师,可以借用一下他的.edu
邮箱申请学生或教师账号,详情可以看链接:学生授权申请方式,如果资金无压力的话,还是支持一下正版,买一个比较省心。这里还有个IDEA使用教程:IntelliJIDEA日常操作,能帮你尽快熟悉IDEA。
部署运行
接下来是部署运行的问题了,只要代码能快速运行得起来,我们就可以对代码进行调试,慢慢掌握其他的开发技术。
部署运行要解决类库依赖问题,首先我们要知道我们需要哪些依赖,这个我们可以在mvnrepository.com查询自己需要的类库,点进版本号可以直接复制maven/gradle等依赖工具需要的语句。
部署框架推荐gradle,易学易配置,对新手很友好,自己花半小时使用它配置一个demo后就能用起来了。使用时,查到依赖后只需要在配置文件中添加一句compiledomain:lib:version
就能使用IDEA的Auto-Import
功能自动把jar包导入进来了。
运行代码一般有以下方式:
- 自己写
psvm
方法,自己写小demo时可以使用; - 使用gradle/maven打包部署在tomcat中运行,使用springboot等框架时可以使用;
- 使用spock等测试框架来运行,比较灵活,像测试一样提供多个case运行程序;
推荐学习使用spock,语法简洁,还可以省去不必要的打包时间,快速调试,可以在IDE里一键运行。
Java语法
至于Java语法的学习,我认为是最不需要着急的,它需要代码经验的积累,不是几天就搞得定的。
学习一门语言最好的方式就是阅读源码了,可以是开源项目,也可以是业务代码。阅读源码时,可以总结一下在什么时候使用哪种数据结构,面对什么样的数据结构时使用哪种语法最有效率、代码可读性最高。
然后是多写,自己经常写一些小demo,想到什么有意思的东西就动手去实践,遇到有疑问的地方也要自己写代码试运行来验证一下。
总结就是多读,多写,多问,多查。
小结
既然入了Java的坑,那么后续会多研究一下Java的技术,实现一些工具时也尽量使用Java,欢迎大家继续关注。
新的一年,新的一轮折腾,这下算是彻底走出了舒适区了,新的语言、新的业务、新的部门,总之生命不息,折腾不止。顺便写下今年的计划吧:满足工作需求之外,10+本技术书籍,25+篇技术博客,1+个开源小项目。
关于本文有什么问题可以在下面留言交流,如果您觉得本文对您有帮助,可以点击下面的推荐
支持一下我,博客一直在更新,欢迎关注
。
本文内容总结:前言,开始,PHP,转变,过渡,经验,IDE,部署运行,Java语法,小结,
原文链接:https://www.cnblogs.com/zhenbianshu/p/8510943.html