第125讲|洪强宁:从程序员到架构师,从架构师到CTO(一)
文章目录
你好,我是爱因互动 CTO、TGO 会员洪强宁,在我的职业生涯中,经历了三个阶段,最初是一个典型的程序员,后来在豆瓣开始担任架构师,一直做到首席架构师,现在创业做 CTO。对我来说,每次职位的跃升,都是一个提升眼界的过程。今天,我把这些提升的经验和体会分享给你,希望对你有用。
我们知道,技术人最典型的一条职业发展路径,就是由程序员,到架构师,再到 CTO。那是不是技术人的职业通道就只有这一条呢?并不是,因为程序员、架构师和 CTO,这是三个职业,每个职业都可以单独发展,不断深入与精进。而从程序员到架构师,再到 CTO,主要差异在于看问题的层级和着眼点不同。
对于程序员来说,他们最关注的是技术中的细节处理,看到更多的是代码、模块这个层级,当程序员的着眼点从这个层级,提升到关注系统与协作时,他们就变成了架构师的角色。因为架构师会更加关注系统,着眼于组件和组件之间的协作,然后当架构师的着眼点再往上提升,关注更多的就是业务实现与战略发展,这时,角色就变成了 CTO。
因此,我总结自己多年的职业发展经验,得出一个论断:职业发展的过程,就是眼界不断提高的过程。这不仅仅是对于程序员、架构师、CTO 这个职业发展路线,还包括本岗位持续深入与精进的路线,比如程序员,随着能力的提高,眼界也在不断提升,关注点将不再是最初的细枝末节,而是会有大局观的意识,这也是一个优秀的程序员需要具备的思维。
优秀程序员需要具备的特质
其实相对于架构师和 CTO 来讲,做程序员是最简单的,只需要会写代码就可以,但问题是,只要会写代码就能成为一个优秀的程序员吗?答案显然是否定的。因为,成为一个优秀的程序员,需要多重考量,还需要具备一些特质。我根据自己的经验总结了五点,我把它称为“五精”。
1. 精细,在细节之处深思熟虑。比如代码结构、变量命名、作用域、封装、类的关系等细节。举个例子,对一个变量的命名,应该用短命名,还是长命名,用 A 来表示,还是用一个特别长的句子来表示?这些细节,在你写代码时,就应该仔细衡量,因为它将影响代码后续的可读性与可维护性。
2. 精湛,写出漂亮的代码。在豆瓣任职时,我们有一句半开玩笑的话,说豆瓣是工程师文化,意思是工程师要有文化。我觉得除了文化之外,工程师还需要有一定的美感,分辨一个设计是否简洁、优雅、高效。
3. 精通,了解上下游知识。除了关注自己写的代码与模块,一个优秀的程序员还需要对上下游的知识有所了解。比如你是负责前端的,那你也需要了解一下后端是如何迎合你的请求的;如果你负责后端,你还需要考虑你的代码是如何做运维的;当你去访问数据库时,你需要了解,数据库是怎样应对你的产品请求的。只有将上下游的支撑都了解之后,写代码时,才能够更加准确、更加高效。
4. 精深,掌握技术细节。包括语言细节、类库细节、算法细节、运行环境细节,等等。比如你使用一门语言,那你需要知道这门语言的各种语法细节,以及在什么地方最容易出错,怎么做能够有效的规避它等。再比如你使用的类库是怎样实现的,它在什么场景下的表现最好,在哪些场景下会出现问题等。还有运行环境,你不仅需要考虑业务逻辑,你可能还要考虑内存占用问题、缓存问题、磁盘问题等。这些都需要你对技术细节有较深的掌握度。
5. 精明,做到准确交付。一个优秀的程序员不仅需要优雅、高效的实现需求,还需要在准确的时间内,交付符合质量的内容,这就需要我们去理解需求,并通过协商和沟通对不合适的需求作出调整。另外,也需要我们准确的评估工作量,判断优先级事项,做出考量和取舍。
而当你到达考量与取舍阶段时,就说明你已经开始具备一些架构师所需的特质了。
如何成为一名优秀的程序员
那怎么做,才能拥有这些优秀程序员需要具备的特质呢?我认为最重要的事情是互相学习,向更优秀的人学习。
举个例子,在豆瓣时,我们有一个非常好的实践就是做 Code Review。最开始的时候,大家把所有的代码投到屏幕上,并各自讲出写代码的思路,其他人可以自由发表评论。这样做其实效率非常低,但我们一直坚持了下来,直到 GitHub 出现,我们用其中 Pull Request 的方式来做 Code Review,效率才大大提高。
用 GitHub 做 Code Review,收到的评论会非常多。如果一段代码几乎没有人表达反对意见,很大程度就能代表这是一个不错的代码。如果出现一段糟糕的代码,评论内容就会非常犀利的指出问题。也正是在这样不断评判与被评判的过程中,大家逐渐学会提高自己的代码水平,成为一个更加优秀的程序员。
另外,我们可以多参与技术社区,多参加各种技术交流活动和技术大会,多多跟他人交流。我们也可以不断地去参与开源项目,现在是一个最好的时代,GitHub 的存在,让每个程序员能更容易地看到更多优秀的代码。
从程序员到架构师
你可能会问,那是不是一个程序员,只要能写出漂亮的代码,并且能够优雅、高效地实现业务需求,做到准确交付,就一定能成为架构师呢?
答案是否定的,即使一个程序员做到了“五精”,把“五精”做得再好,他的个人能力也是有上限的,他所实现的系统的复杂度也是有上限的,而业务的发展会远远超出个人的能力。
因此,我们需要把业务需求拆分成多个组件,再将每个组件分发给优秀的程序员来完成,通过互相协作,最终完成一个整体的业务需求。
在这里,分发的工作就是架构师的职责,架构师主要在解决 Scalability 的问题。它包括两个方面,一方面是人的 Scale,比如业务需求变复杂后,单人不足以承担,这时就需要多人协作,那如何分解业务,如何将分解后的业务匹配合适的人,如何协作,就需要架构师来进行判断。
另一方面是量的 Scale,比如当 QPS 从几十个增加到成千上万个,甚至几十万个的时候,面对这种情况该怎么办?这就是架构师需要解决的问题。
因此,当你从实现一个具体的功能,到考虑解决 Scale 问题的时候,你就已经开始走上了架构师这条路。即使你的 title 还是程序员,但是,你已经开始向架构师这个角色转变了。
总结
本文,我主要分享了一名优秀程序员所需具备的特质,即精细、精湛、精通、精深、精明这五个特质。另外,从程序员到架构师,不在于 title 如何,而是当你的着眼点更上一个层级,更多的理解业务需求,然后思考如何解决宏观问题、提炼通用组件、设计协作方式等问题的时候,你就是一名架构师了。
下一篇文章中,我将分享优秀架构师所需要具备的特质,以及从架构师到 CTO 转变之路的关注点,欢迎持续关注。
作者简介
洪强宁,爱因互动 CTO,TGO 鲲鹏会会员,资深 Python 程序员,曾任豆瓣网首席架构师与宜信大数据创新中心首席架构师,编程 30 余年,拥有 11 年互联网从业经验。
文章作者 anonymous
上次更新 2024-03-26