跟敬姐读《程序员的自我修养》

最近刚读完陈逸鹤老师的《程序员的自我修养》,结合敬姐十几年的程序员生涯,分享给大家。

短视频为王的时代,为什么要阅读?

敬姐也曾经有过这种想法,读过的书,不管当时觉得多么震撼和共鸣,过一段时间好像都会忘记。那我们还为什么要花费时间去阅读呢?我赞同这本书里面的一段话:

阅读就像是跨越时空的对话,这本书中的一些文章可能让你产生共鸣,一些可能对你有所帮助,而另一些你可能并不喜欢甚至感到厌恶,但这恰恰说明你在阅读的过程中进行了思考,我的想法蹦到了你的脑子里,衍生出你的新想法,这个连锁反应在你脑中反复激荡,最终让你看得更加透彻,思考得更深入,而这才应该是本书的真正目的和意义所在。

另外关于阅读范围,不要只局限于技术书籍。我们可以涉猎任何历史、经济、人文、艺术类的书籍,它们都能够帮助你丰富自己的知识和思想,使你变得更加全面和完善,而这反过来又能帮助你建立信心。

关于修炼技术硬实力

从业程序员十几年,并没有成为业界大佬,还是个认真的螺丝钉。关于书中提到的对程序员的几点启示,还是有感而发:

“优秀的程序员往往会被同天才或高智商的人联系在一起,但我想告诉你,你周围所看到的那些天才只是在你没看到的时候花了更多时间工作或者学习而已,当你也坚持这么做时,你也会变得和他们一样优秀。”

身边确实遇到过一些优秀的同事,无论技术水平,还是做事风格,都值得学习,除了聪明,他们的努力是不容置疑的。

我们使用的技术在变,软件领域的实践方法在变,我们所做的项目在变,公司的组织架构在变,我们自己的职位和角色在变,甚至还有我们的老板也如走马灯般换来换去。面对层出不穷的新技术,我们要去理解软件领域最根本的知识,掌握一些最佳实践。比如了解GOF模式最佳实践有助于我们快速掌握各种框架的原理;理解SOA或者微服务架构;理解DEVOPS运维理念;此外还需要掌握网络运维、性能调优、代码优化各方面的最佳实践。这些最佳实践或由此衍生出来的框架、工具都是那些富有经验的程序员通过大量实践,总结出来的最优秀的软件开发思想。

关于一些软技能

开发技能是你的硬实力,而附加技能则可以看作是你的软实力,只有同时具备这两方面技能,才能成为一名优秀的全栈工程师。

适当的自我营销

除了那些经常挂在嘴边的诚实守信、踏实肯干、严谨之外,我们不难发现,那些业界大佬普遍具备的一种能力就是自我营销,这一点对程序员同样适用。自我营销往往能够有效地放大你所做的努力,并且在你成功的道路上起到催化剂的作用。

建立自己的个人品牌

比如打造一个个人网站、写技术博客等。在创建个人品牌的初期,很少有人会关注你,写一个技术博客会是不错的选择 ;还有就是开源自己的业余项目。

跳出程序员思维

程序员们其实是依靠他们所特有的程序员思维在进行编程,而他们中的佼佼者正是那些有着更高思维成熟度的优秀程序员们。我们必须通过大量地学习编程之外的各种知识来完善自己的知识体系,并从中获得不同的视角。

新一代的程序员不仅需要具备很强的编程能力,我们还要学会跳出程序员思维,站在用户、设计师、产品经理的不同角度去进行分析和判断的能力。那些真正优秀的程序员在与用户进行沟通时,总是试图去理解用户所提出需求背后的真正原因,因为他们知道用户往往会按照自己对问题的理解去给出他们认为正确的方案,而很多情况下,他们所给出的并不是正确或是最优的。那些优秀的程序员会站在用户的角度,认清问题,并像专家一样给出他们认为最优的方案。

团队的力量

你不应该成为一匹独狼,优秀的程序员绝不孤单,他们的身边不乏志同道合者,这可能也是他们能够变得越发出色的原因吧。

一些最佳实践

重构新思路-微服务

持续重构就是我们给系统做的保养,这对于保证系统的稳定运行非常关键。  在做关键功能重构时所采用的步骤:

  • 详细Review该功能的需求。
  • 针对需求,完善自动化单元测试案例。
  • 将这部分单元测试的执行引入到每次自动化构建中。

作者介绍了利用微服务进行重构的方案,这个没有实践,不失为一种新的思路:

“微服务并非是一个全新的架构方法论,而是对SOA——面向服务架构的一次升级。它的出现源于云计算、容器技术、DevOps等技术,以及全新运维理念的不断成熟。 由于采用微服务架构,所以我们并不会在原有系统上进行重构,而是创建一个新的基于Spring Boot的项目,将原有系统的功能,逐步拆分成一个个服务,并将它们添加到新的项目中,然后利用一些开关设置,将原有功能平滑地切换到新的基于微服务的系统中,这是与以前系统重构的一个很大区别。      
由于采用微服务架构,所以我们并不会在原有系统上进行重构,而是创建一个新的基于Spring Boot的项目,将原有系统的功能,逐步拆分成一个个服务,并将它们添加到新的项目中,然后利用一些开关设置,将原有功能平滑地切换到新的基于微服务的系统中,这是与以前系统重构的一个很大区别。  ”

测试

关于单元测试:测试一定是用来证明特定需求是否得到满足的,你应该为那些可能存在不确定性的需求或者对外提供的服务来编写全面的测试案例,而不仅仅是为了满足测试覆盖率,去给那些明明知道必然正确的实现细节做测试。

优秀代码

优秀的程序员不仅熟练掌握一门编程语言的语法和语义,他们还会:

  • 掌握这门语言的使用哲学:包括那些最佳实践、设计模式及它们背后所蕴含的原则。
  • 他们能够熟练地使用IDE,他们不依赖菜单,而是使用快捷键来操控代码,从查找文件、文本编辑到格式化代码、文本替换都尽可能使用快捷键,这使得他们的开发工作更加连贯,也更高效。
关于代码易读性

作者的观点有些独到,却也有几分道理“因为代码并不是自然语言,它本来就是难以阅读的,况且代码是否易读不仅与代码本身有关,还与阅读代码的人对系统的理解程度,以及他们自身的技术水平有关 “。

为什么团队要构建自己的应用框架?

在大多数情况下,构建应用框架的目的并不是为了给开发者提供一个比Spring更强大的框架,恰恰相反,它们在大多数时候,是为了限制框架的使用,而使整个系统变得更加标准且易于维护。 架构师应该承担起应用架构、代码规范制定、系统接口定义、技术风险识别、指导团队开发等很多工作。

关于代码设计

我总是不鼓励程序员们去写过多Hack Code或为了引入那些不必要的可配置功能而使整个系统过于复杂。千万不要在刚了解一个新的技术或者模式的时候,手里拿着锤子,看啥都像钉子。

关于35岁

都说不想当将军的不是好士兵,可是敬姐多年来一直乐于当个好士兵,和自己团队的小伙伴冲锋陷阵拿下众多项目,并以团队为荣。与优秀者同行,你也将变得更加优秀。

最近几年,所有大中长都降本增效,于是35岁毕业不再是戏谑,而是身边的现实。直接的方向和良药本人也没有找到,但是从个人角度而言,三十多岁正是经验十足、生活稳定、性格各方面都有所积累的好年纪,希望整个环境能慢慢改变吧。

至少在我们还有机会从事自己喜欢的行业时,努力做好自己的每一件事,即便是一个螺丝钉,也要留下自己的一丝痕迹。即便大环境卷也好,反卷也罢,要保持自己的初心不改。

有很多因素会使一名程序员走向平庸,而最最直接的便是失去对编程的热情和兴趣。当一名程序员不再能够感受编程所能带来的乐趣时,编程对他来说,只是一项不得不去完成的工作,而他也将失去继续学习的动力,无法再与优秀沾边了。

关于前途,作者提到:“像企业一样运作:即使你没有成立公司,你也应该把自己当作一个公司来进行运作。这意味着你需要懂得最基本的销售、市场、财务及商务知识。 请记住,一名自由程序员总是需要很长的时间才能建立起自己的行业声誉,而一个草率的决定往往就能使之前的所有努力化为乌有。”

关于生活

关于程序员职业,有一种普遍的印象,格子衫、面对电脑、孤言寡语、不懂生活,也许片面了些,但是反映了一个普遍问题, 那便是程序员不懂得生活。我希望每个程序员都能明白工作、技术、写代码这些并不是你存在的意义,而生活才是,你需要懂得生活,并且学会生活。

拿敬姐本人来说,其实从小没有运动的习惯,结果工作没几年就出现颈椎病和鼠标手的症状。后来有意识的开始锻炼,结识尊巴舞蹈,到现在变成了一种爱好。个人感觉身体健康状况和精神状态都有了明显的改善。

程序员普遍有熬夜的习惯,其实对于每个人来说睡眠都非常重要,通过牺牲睡眠来获得一两个小时的时间,到头来只会是恶性循环,得不偿失。合理安排时间,提升效率,努力做到11点睡觉。

最后

写博客的这些年,主要都是伴随着技术栈的技术文章系列为主,第一次写非技术类的文章,也欢迎大家多多分享自己的观点