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