在我心里,程序员可以分为三个层次:普通程序员、工程师和架构师。

普通程序员是编写代码的人。编写代码的方式有很多,只要能让程序跑起来,能正确地处理业务流程和对数据进行计算,就可以说“会编写代码”。程序员需要熟悉整个程序的逻辑及处理过程,需要熟悉程序语言的特性,还需要熟悉一些计算机操作系统的交互调用方式,才能写出从用户侧交互,到数据和业务逻辑处理,再到与计算机系统交互的代码,有效地把用户信息、数据、业务和计算机串联和拼装出来。

然而,其中一些程序员发现,只让代码跑起来是不够的,因为这个世界是不断变化的,他们发现自己需要花更多的时间来维护代码:增加新的需求,扩展原有的流程,修改已有的功能,优化性能……一个人完全维护不过来,还需要更多的人,于是代码还需要在不同人之间轮转;他们发现代码除了需要跑起来,还需要易读、易扩展、易维护,甚至可以直接重用。于是,这些人使用各种各样的手段和技术不断提高代码的易读性、可扩展性、可维护性和重用性。我们把这些有“洁癖”、有工匠精精、有修养的程序员叫作工程师,工程师不仅仅是在编写代码,他们会用工程的方法来编写代码,以便让编程开发更为高效和快速。他们把编程当成一种设计,一种工业设计,把代码模块化,让这些模块可以更容易地交互拼装和组织,让代码排列整齐——阅读和维护这些代码就像看阅兵式一样舒心畅快。

但是故事还没完,这些拥有工匠精神的工程师们还是难以解决某些问题,这些人渐渐地发现,这个世界上有很多问题就像翘翘板一样,只能要一边,这一边上去了,另一边就下来了。就像要么用空间换时间,要么用时间换空间一样,你很难找到同时满足空间和时间要求的“双利解”;就像 CAP 的三选二的理论一样,这个世界不存在完美的解决方案,无论什么方案都有好的一面和不好的一面。而且,这些工程师还渐渐发现,每当引入一个新的技术来解决一个已有的问题时,这个新的技术就会带来更多的问题,问题就像有一个生命体一样,它们会不断地繁殖和进化。渐渐地,他们发现,问题的多少和系统的复杂度呈正比,而且不仅是线性正比,还可能呈级数正比,此时就越来越难做技术决定。但是有一些资深的工程师开始站出来挑战这些问题,有的基于业务分析给出平衡的方案,有的开始尝试设计更高级的技术,有的开始设计更灵活的系统,有的则开始简化和轻量化整个系统……这些高智商、经验足、不怕难的工程师们引领着整个行业前行。他们就是架构师

感觉 Bob 大叔的系列著作好像也在走这个过程,Clean Code 教你写出易读、可扩展、可维护、可重用的代码,Clean Coder 教你怎样变成一个有修养的程序员,而Clean Architecture(《架构整洁之道》)基本上是在描述软件设计的一些核心理论与观念。《架构整洁之道》大体分成三个部分:编程范式(结构化编程、面向对象编程和函数式编程),设计原则(主要是 SOLID),以及软件架构(其中讲了很多高屋建翎的内容)。总体来说,这本书中的内容可以让你从微观(代码层面)和宏观(架构层面)两个层面对整个软件设计有一个全面的了解。

但是,如果你想从这本书里找到一些可以立马解决具体问题的工程架构和技术,恐怕你会感到失望。这本书中更多的是一些基础的理论知识,看完后你可能会比较“无感”,因为这些基础知识对于生活在这个高速发展的喜欢快餐文化的社会中的人来说,可能很难理解其中的价值——大多数人的目标不是设计出一个优质的软件或架构,而是快速地解决一个具体的问题,完成自己的工作。然而,可能只有你碰过足够多的壁,掉过足够多的坑,经历过足够多的痛苦后,再来读这本书时,你才会发现本书中的这些“陈旧的知识”是多么充满智慧。而且,如果有一天,你像我这个老家伙一样,看到今天很多很多公司和年轻的程序员还在不断地掉坑和挣扎,你就会明白这些知识的重要性了。

我个人觉得,这本书可视作架构方面的启蒙读物,但经验不足的读者一时间不会产生最多的共鸣。有 3~5 年编程经验、需要入门软件设计和架构的工程师或程序员,则完全会有不同的感受。

最后,我想留下一个观点和一组问题。

观点:无论是微观世界的代码,还是宏观层面的架构,无论是三种编程范式还是微服务架构,它们都在解决一个问题——分离控制和逻辑。所谓控制就是对程序流转的与业务逻辑无关的代码或系统的控制(如多线程、异步、服务发现、部署、弹性伸缩等),所谓逻辑则是实实在在的业务逻辑,是解决用户问题的逻辑。控制和逻辑构成了整体的软件复杂度,有效地分离控制和逻辑会让你的系统得到最大的简化。

问题:如果你要成为一名架构师,你需要明确地区分几组词语(如何区分它们正是留给你的问题),否则你不可能成为一名合格的工程师或架构师。这几组词语是简单 vs.简陋、平衡 vs.妥协、迭代 vs.半成品。如果你不能很清楚地定义出其中的区别,那么你将很难做出正确的决定,也就不可有成为一名优秀的工程师或架构师。

我相信这个观点和这组问题将有助于你更好地阅读并理解这本书,也会让你进行更多的思考,带着思考读这本书,会让你学到更多!


本文选自《架构整洁之道》Clean Architecture,电子工业出版社10月出版。

整洁之道再续新篇

Bob大叔封山之作

熔举世热门架构于一炉

揭通用黄金法则以真言

左耳朵耗子|余晟倾情作序

了解本书详情:https://u.jd.com/zzVkmM

从程序员到架构师——踏上架构旅途 思考从未止步相关推荐

  1. 程序员和架构师的区别在哪里?Android程序员如何才能实现技术上的进阶?

    Android开发这么多年,但是还是经常会有人分不清程序员和架构师,在招聘的时候,明明招聘信息写的是"招架构师",但是,来的人更多的人说着要当架构师,其实能力也只是普通" ...

  2. java程序员内功_Java程序员如何成为内功深厚的架构师

    一听到架构师,首先便想到的是在一间宽敞的房间中间坐着一位衣着得体的中年男人,望着落地窗外的风景凝思,万千思绪在脑海里翻腾,颇有运筹帷幄千里外的气势.程序员究竟是做架构师还是项目经理,最近看到微软潘正磊 ...

  3. Java程序员如何成为内功深厚的架构师

    一听到架构师,首先便想到的是在一间宽敞的房间中间坐着一位衣着得体的中年男人,望着落地窗外的风景凝思,万千思绪在脑海里翻腾,颇有运筹帷幄千里外的气势.程序员究竟是做架构师还是项目经理,最近看到微软潘正磊 ...

  4. 作为程序员,我在电脑上都装过哪些 Chrome 插件?

    作者 | GitHubDaily 本文经授权转载自 GitHubDaily 相信在座大部分从事软件开发的同学都与我一样,每天在 PC 端上使用最多的几类产品,无疑是浏览器.编辑器和命令行终端. 而一旦 ...

  5. 假如你想成为一名测试工程师(程序员找茬师)

    假如你想成为一名测试工程师(程序员找茬师) 先扯点虚的 测试工程师是个啥? 设计用例 常说的那些个口头语 练好招数 先扯点虚的 大学扩招,经济下行,疫情肆虐... 从小到大,我们经历了无数的考试,打怪 ...

  6. 程序员的自我进化——补上最短的那块情商木板

    程序员的自我进化--补上最短的那块情商木板 也许当微软的工程师们还在思考如何让聊天机器人快速进化的时候,万万没想到,刚刚上线一天,Tay就因在Twitter上言论不当而被强制下线.据说她不但辱骂用户, ...

  7. 快速找到由程序员到CTO发展道路上的问路石

    快速找到由程序员到CTO发展道路上的问路石 本文选自<我也能做CTO之程序员职业规划 >一书 高阳兄发过来本书前六章样章时,我正在上班,任务比较紧,精神高度集中,却还是止不住地走神要翻来看 ...

  8. 程序员面试金典——9.1上楼梯

    程序员面试金典--9.1上楼梯 Solution1:我的破答案,复杂度太高未能AC 递归的毛病就是复杂度太高!!! class GoUpstairs { public:int countWays(in ...

  9. python程序员自我介绍范文_程序员的自我介绍|史上最有趣的版本

    原标题:程序员的自我介绍|史上最有趣的版本 这篇文章的原文来自:A Little Printf Story,作者仿照<小王子>中的情节,通过小printf遇见的不同类型的程序员,最后悟出什 ...

  10. 鲁班学院-java架构师线上培训机构哪家好

    2020年的开年对于我们来说打击是很大的,但是对于中华儿女的我们来说在面对苦难的时候都是众志成城的度过难关的.面对这些的武汉疫情,我们的中国儿女也是跟随着国家的步伐来抗"疫情"在疫 ...

最新文章

  1. Python基础教学系列— 基础语法
  2. Android广播机制
  3. 北京师范大学计算机系录取分数线,北京师范大学各省各专业录取分数线
  4. ldap数据库--ODSEE--复制协议
  5. mysql definer_mysql常见问题之视图权限控制--安全性为DEFINER
  6. P1552 [APIO2012]派遣
  7. 年逾九十院士潘际銮:身背千亿科研价值身居斗室
  8. bootstrap - navbar
  9. 嵌入式组态软件HMImaker(绿色版人机界面组态软件)
  10. Halcon 仿射变换
  11. 被Json格式化后那可怜的时间
  12. 自己整理的一套Java题库
  13. 计算机编程不等于符号,不等于符号(java)
  14. 企业建站使用哪些主流的CMS系统?
  15. 怎样设置计算机安全模式,电脑怎样进入安全模式
  16. 高兴就好,简单就好,明白就好
  17. 大数据可视化 课堂笔记-1
  18. 为什么会显示贵州云服务器,为什么云服务器都在贵州
  19. 搭建LNMP平台加NFS文件共享部署wordpress博客
  20. linux 开机画面

热门文章

  1. http/tcp/ip/端口
  2. JavaScript 如何工作:渲染引擎和性能优化技巧
  3. 软件工程作业团队作业No.5
  4. NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推 ||卡特兰数(转化成01字符串))...
  5. Win Form不能响应键盘事件
  6. (转)(VS2013 )由于应用程序配置不正确,程序未能启动”--原因及解决方法...
  7. Visual Studio 2008 WPF设计器智能提示(Intellisense)失效
  8. 冬至了,回家羊肉。:)
  9. zabbix api 接口的自动化
  10. MyBaits动态sql语句