前不久一个周六的下午,就着暖阳,袁帅连饮两杯Passion[1],不经意瞥到书架上的《架构整洁之道》一书,恰逢最近在项目上频繁聊到架构,他由着性子取下便翻阅了起来。

读完陈皓老师(左耳朵耗子)的推荐序,他停顿良久,无意识地不停点头:陈皓老师将程序员分成三个阶段 — 普通程序员、工程师、架构师。

凭借微醺的兴致,他萌生了站在巨人的肩膀上写点什么的想法,权当消化陈皓老师的文字,附加巩固自己的理解,遂从书桌上取来笔记本放置在膝盖上开始了指尖训练。

喜欢琢磨的袁帅为其增加了一个阶段,并微调了一个阶段,加起来构成新的4个阶段,分别是:

  1. 码农
  2. 程序员
  3. 工程师
  4. 架构师

鉴于这4个阶段本身的定义就包含了『程序员』这个术语,他决定使用『开发人员』来代表这4个阶段的人。

4新阶段

码农

此『码农』区别于一些业界同仁自嘲时以『码农』自诩的称谓。以前,袁帅也时不时会用这个词语来调侃自己。

码农[2],代表那些连软件(框架)运行基本原理都没搞懂的人,他们通过速成班的培训,在现成框架基础上依葫芦画瓢通过大量复制粘贴来完成软件的功能开发。通常CTCV(Ctrl C + Ctrl V)开发人员就在这个阶段,有时候袁帅会调换一下顺序,称之为CCTV。

当然,他们还懂一些基本的条件控制语句,编程语言的语法的最基础的部分。大部分情况下也能写出机器可执行的代码,只是一旦程序报错,常常目瞪口呆、不知所措,不太会阅读和分析错误信息,重度依赖开发工具的调试功能。

编码对他们来说只是重复的每日工作,大量的粘贴复制让他们惰于思考。编写的代码缺乏良好的结构,充斥着大量的神秘命名,每天工作最核心的目标是把现有的功能“抄完”,没错,就是参照现有代码的方式,不论好坏,也不在乎好坏。业余时间可能除了提升编码技能,其他事情都会吸引他。

码农,在当前行业存在不在少数,也许你以为这是在初学编码毕竟的阶段。的确不否认,开发人员从0-1都可能经历这个阶段,但如果某某都正式参加工作半年了,甚至 1 ~ 2年了,在这之前还有一段较长的学习 + 实习的过程,然后在正式工作后很长一段时间里却仍然处于这个阶段,5年的经验更像是1年的经验重复了5次。

程序员

程序员是袁帅很尊敬的群体,可能主要源于很早前就根植于他心中的一句话:”Codes Change the World“,在他心里,能够称得上程序员的人,已经摆脱了码农特质,或者在极少的情况下会表现出码农的特质。

程序员是软件的主要编码者,他们掌握编程语言的主要核心特性,熟悉整个程序的逻辑及处理过程,也熟悉一些计算机操作系统的交互调用方式,能够写出从用户侧交互,到数据和业务逻辑处理,再到与计算机系统交互的代码,有效地把用户信息、数据、业务和计算机串联和拼装出来。

除此之外,他们还会关注代码的结构是否良好,命名是否表意。在遗留系统工作时,即便存在着交付压力,他们也不会无脑的粘贴复制,而是会考虑可否优化,加班改进系统或者学习提升技能是他们乐于为之的事情。

他们脑海里开始植入了童子军军规[3],他们熟练实践过《编写可读代码的艺术》、《整洁代码之道》、《重构》等书籍中的知识和技能,他们很看重程序的易读性,甚至有可能因此养成代码洁癖。

工程师

一些喜欢打怪升级的程序员意识到不能止步于编写出整洁可用的代码,还要考虑让软件如何适应外界的变化,他们不希望未来花多倍的时间来维护代码,他们开始考虑程序的可维护性、可扩展性以及复用性。

为了提升程序的扩展性、复用性,他们会不断在实践中运用一些设计模式和设计原则,将程序进行模块化来提升程序的灵活性,在实践过程中继续深化对SOLID、IOC、迪米特法则、KISS原则的理解,以至于在很长一段时间里,他们作为团队里的一盏明灯,为团队引入更多光明。

他们具备较强的业务视角,关注软件业务需求,会注重跟业务人员的沟通协作来达成业务共识,从而避免方向走偏。在质量内建上,除了身先士卒,掌握必要的自动化测试实践来为程序保驾护航,他们还会注重跟质量分析师的高效协作,以终为始,价值驱动。

持续精进是他们的职业信条之一,工匠精神也在他们身上体现的更为明显。《程序员的职业素养》也是他们在工作上为人处世的参考原则之一,甚至生活上也会如此。

在他们眼里,软件开发是一个体系工程,从需求分析、功能开发、质量保障都会用心去对待。

架构师

拥有工匠精神的工程师们渐渐发现,软件世界里有很多问题就像翘翘板,只能要一边,这一边上去了,另一边就下来了。每当引入一个新的技术来解决一个已有的问题时,这个新的技术就会带来新的问题,问题就像一个生命体不断地繁殖和进化。

渐渐地,他们发现,问题的多少和系统的复杂度呈正相关性(线性或指数),这些问题越来越多困扰他们去做技术决定。经过多次碰壁,他们看清了一个事实 — 世界不存在完美的解决方案,无论什么方案都有好的一面和不好的一面,就像分布式系统CAP也只能三选二(CP或AP)。逐渐地,他们开始主张:

成年人的世界里没有对与错,只有利与弊。

软件系统的稳定性(高可用)、安全性、扩展性、性能(吞吐量)、运维监控等是他们需要通盘考虑的方方面面,而这些核心指标的服务对象就是业务目标,所以他们不会孤注一掷地去企图打造一枚不容挑剔的银弹来解决软件开发的烽火战乱,而是实事求是地在现有的约束下,试图以最优的资源配置来达成业务目标。

在聚焦业务目标、遵守约束的大前提下,他们也会尝试不断突破,探索前沿技术,引入更高级的技术来强化系统。他们遵循简单设计,致力于化繁为简,不断琢磨如何让系统更加轻便灵活的同时还拥有大能耐。犹如一枚真正的健身达人,肌肉块头不大,但兼具 力量 + 爆发力+ 耐力。

他们通过持续地输入来精进自己,像《企业应用架构模式》、《架构整洁之道》、《领域驱动设计》、《分析模式》、《微服务设计》等书籍总在他们的书架上看到。同时他们善于思考,勤于总结,奋笔疾书,凝炼实用的框架、分享落地的案例来引领行业前进,为后辈们指引方向。

酒醒了

一晃2小时过去了,夕阳仍旧美好,晒得袁帅脸部微微发烫,酒劲也差不多消失了,趁头脑清醒了回过头自己通读了刚写的文字。

他又陷入了沉思,心中升起复杂的感觉。他觉得站在巨人的肩膀上发挥一下还挺过瘾,讲得好像还蛮有道理。但又感觉有点儿像说了一推正确的废话,而且这个定义也只是一家之言,又或者是两家之言(陈浩老师背锅)。

纠结中,他把第一瓶的最后一杯一饮而尽,正要拿着开酒器开第二瓶,手停在了瓶盖半分钟后,心里突然释然:“怎么定义这些词重要吗?不重要,重要的是 — 是否在成长?

“砰~” 瓶盖撬开后,袁帅朝着太阳举起瓶子:“感谢你为人类带来了光和暖!”

注释

  1. Passion,1664 百香果口味酒。
  2. 码农,区别于国家正名的新生代农民工。
  3. 童子军军规,美国童子军军规:“让营地比你来时更干净”,Bob大叔的《代码整洁之道》一书中提到。

附录

  • 陈浩老师在《架构整洁之道》中文版一书中的推荐序

image.png

  • 国家正名的新生代农名工文件

image.png