Teaser Image

Nie&Gao

Anyway, life is elsewhere and we all know it.




这是一本关于方法论的书,这是一本关于如何成为注重实效的程序员(方便起见,我称他为好的程序员)的书;这是一本很大的书,也是一本很小的书,这本书就是《程序员修炼之道 从小工到专家》,而这就是我作为刚入行的程序员读完此书后,对它的看法。

修炼是浪漫的程序员们借用武侠玄幻来表达自我能力提升的一种形象化表达方式。看过武侠的朋友都知道,在纷争动乱的江湖背景下,无论是华山论剑,睥睨天下的自我实现,还是路见不平,拔刀相助的侠肝义胆,都需要以强大的实力为支撑,不然剑还没拔,就已经成为路边亡魂,带着虚妄的江湖梦找马克思报道去了。在程序的江湖里(仿佛比武侠的世界更动荡,因为技术的更迭太快了)也是一样,没有足够的实力,也只能哀叹:程序是一袭华美的袍,爬满了bug,让你把头不停的挠。

关于程序员的修炼,借用江湖术语,还有更近一步的描述:内外兼修。内指的是内功,从编程的角度看,我愿意把他理解为逻辑思维方式以及抽象能力;外指的是招式,在程序的世界里,就是涉及到语言,技术和架构等关于代码的一切。仔细想想,这种类比是有一定的相似性可言:内功强大的人,招式上大多手到擒来,技术一般也具有触类旁通的特性,底子好的程序员接触上手一项新知识,也不会高呼:噫吁嚱,危乎高哉!蜀道难,难于上青天;但终究还是有些区别,我们没有一本内功秘籍可以练,程序员的内力还是需要长期耳濡目染,慢慢的悟,投入的有效时间够了,自然水到渠成。所以,肉眼可见的修炼大都集中在外力上。

虽然都是外力,但也应该有层级之分。由于工作需要以及个人兴趣,对Java服务端开发的技能与技术有持续关注。以下引用网上的一张关于Java服务端开发的基础技能图谱:

java服务端技能图谱

在博文作者罗列的知识体系下,对Java核心概念(对象模型和接口设计)知识的掌握,需要有底层JVM,操作系统等知识的辅助,而上层的网络应用框架也少不了对Java语言和TCP/IP协议等的辅助。 其实这不难理解,我们知识积累的方式就像是盖房子,地基挖的越深,房子架构越合理,房子就能越盖越高,越牢固。

回到武侠世界里来,本书所提及的修炼仍然是外力上的持续进步,但并不是从上述知识图谱的角度来向读者介绍,成为一个好的程序员应该学习哪些具体招式,我觉得它更像是一个拳谱或者剑谱的总纲,是作者在软件开发领域多年奋斗经验,炼化成的知识结晶,可谓字字珠玑。它不讲解知识点,只给出如何向一个好的程序员迈进最中肯的建议,我把它们理解为好程序员的基本素养。

无论工作领域与研究方向的差异,程序员最直观的生产力就是代码。好程序员的素养在编码之前,编码过程中,编码之后具体体现如下(纯属个人总结):

  • 充分掌握需求:用户是产品的审判员,挖掘他们最深沉的需求,确保质量成为需求的一部分,不过分偏执,知道该何时止步。
  • 手有利器:一个熟练高效操作的编辑器,进行文本和数据处理的shell命令,版本控制系统
  • 不留破窗,不惧变化:不让破窗理论坏了自己的代码;懂得解耦,保持功能模块的正交性;不留重复;充分抽象,利用元数据的优势
  • 无情测试:早测试,多测试,自动测试,保证你手里出去的代码是可靠的
  • 知识资产储备:保持学习,扩展视野
  • 承担责任:勇于承认错误;这是我的代码,我的品牌

前面说过,这是一本总纲,但凡在招式上每有所成,回头来看总会有新的体会。我想这也是为什们不少业界大师与偶像们,对此书盛赞频频或奉为圭臬的原因吧。 作为入门学徒,虽然有疑惑不解之处,不能完全掌握其紧要,初次读来,结合自身经验,但亦有所初悟。

最后,以江湖规矩与自己立个盟约:青山不改,绿水长流,两年之后,重读此书,愿领悟更深,不见不散。