当程序员已经两年了,这中间服务的公司有四家了,现在是第五家公司,在这些公司里面遇到很多,他们都教会我很多东西这里来分享一个程序员的一点经验。
- 学会总结,将部署的程序,或者一些有价值的东西,总结写下来,形成自己的知识库。
- 学着对代码进行抽象,将共用的代码放入到自己的代码库中,形成自己的代码库。
- 工程化自己的项目
形成自己的知识库
好记性不如烂笔头,这是一句都知道的谚语,但是很少有人去实践他。对于程序员来说,却尤为重要,因为每天接触到的东西特别多,人的记忆力不可能将这些东西都记住。例如,昨天部署的mysql的主从,在中间遇到很多坑,查找了很多资料,最后解决了。但是第二天或者是以后的时间,很多东西都忘记了,如果再次部署,又会话很多的时间将这些坑重新踩一遍,这种重复的操作一点都没有增长自己的经验,反而是花费更多的时间。而将这些步骤,和错误及错误解决的方法记录下来,下次再部署时,按步骤走,会节省非常多的时间,并且也不会话特别多的精力在这上面,程序员有一条,避免重复的操作,如果可以都会将其自动化。这也是很多公司在走的道路,例如,每次上面都要花费精力去部署程序,而且这中间还不能有错,那么通过自动化完成这些重复的操作,很省时省力。
程序员有一个特别就是持续性学习,而且需要学习特别多的东西,接触的东西也很多,例如,要学习一门新的语言,但很多时候,仅仅是在这个项目中使用,在很长一段时间不会使用,当再次使用的时候,是否需要重新学一遍。在学习的过程中,将知识的要点终结起来,当需要使用的时候,将这些要点串联起来,加上以前使用过的一点经验,很容易重新上手该语言。还有就是看到很多关于程序或者语言的分析,很多有一个习惯,就是收藏起来,其实这也可以,但是需要更近一步,如何将其提炼出来,总结出自己的东西并记录下来,所有的这些都变成了自己的知识库,逐渐的遇到问题,能够从容的去解决。
形成自己的代码库
每天都会写很多代码,重复的也会很多,如何去避免,如何能够高效的完成。其中有一点就是形成自己的代码库。例如,java中对时间的操作,如果需要将时间向前推三天,或者是将字符串的时间转化为Date型的时间,这样每次至少多写一行代码,并且很多时候,不可能记住,都是查找一些,还有更复杂的操作,都需要上网查,或者从一点的程序中copy过来,如果有自己的代码库,那么很多操作都会非常快。有很多是重复的,时间的操作,文件的操作,加密的操作,字符中间的转化,网络的请求等等这些都是公共的部分,并不依赖与业务,将这些抽出来,放入到公共库中,这也是高级开发人员一个比较好的特征。经验就是这样得来的。
如果以后自己去架构自己的程序,首先第一点就是这个公共库的使用,能节省其他程序员的特别多的时间,也有一些公共库,例如common-lang3这个公共库中,很多方法是经常要使用的。每天工作的时间8个小时,如何在这8个小时中完成并且是非常好的完成自己的工作,是很难的,因为有很多其他事情打扰到。代码库能够让自己更能够轻松的写出很好的代码,不会因为一些自己写过的代码,但是具体的不太清楚,去打断自己的思路去网络查询。
工程化自己编写的项目
很多时候,java开发都是做提供接口的事情,查询数据库,然后返回接口。很多工作都已经由其他人完成,能够让自己做的就是增删改查,写多了之后,其实都是一样。虽然都是一样,但是确能够有很多工作可以做,单元测试是否完善,单元测试,是否覆盖到了关键功能,代码格式是否规范,是否有按照公司的代码规范去完成,是否有参照阿里java开发规范去做,是否使用sonarlint代码质量管理。是否完善了文档,文档上的流程图,时序图是否都完善。代码是否可以进行重构。这些就是工程化自己的项目,让自己的项目更像是复合高标准的项目。
为什么要测试,其实网上有很多文章都全面的介绍了单元测试的重要性,虽然操作起来很费时费力,但是单元测试能够极大的减少了代码的错误率,反而最后能够极大提升效率,最为关键的地方是,在代码修改或者是重构的时候,自己有很足的底气去修改,而不是一沉不变的老代码永远留在那里。为什么sonarlint做代码质量管理,因为好的代码是赏心悦目的,能够让其他维护的人都会高标准的去完善它,都会称赞该代码写的好,也愿意在起基础上让该代码变的更好,让项目变的质量更高。为什么要完善文档,因为其他人第一眼看的是文档的内容,通过文档的内容能够大概的了解项目,能够让接手的人容易上手,也让其他对接口的人易懂。为什么要重构代码,是让一些过时的代码,一些不优雅的代码重新变的更完美,虽然没有完美的代码,但是可以朝完美的方向前进。
总结,当好一个java开发人员,如果很低的要求的话,工作几年之后,可以变的很轻松,每天就是提供接口,然后下班走人,工资也要求不高。但是如果有更高的要求的话,那么就需要花费特别多的经历去修炼,慢慢的做积累,总有一天,能够坐上架构师的位置,带着一帮志同道合的人开发出好的项目。
以此共勉。