gitbook/技术领导力实战笔记/docs/69096.md
2022-09-03 22:05:03 +08:00

7.8 KiB
Raw Permalink Blame History

第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 年互联网从业经验。