你好,我是朱晔。
今天直播,我准备和你聊聊程序员成长的话题。我从毕业后入行到现在作为⼀个⾼级管理者,已经在互联网领域拼搏了15年了。我把这些年自己的成长历程、心得体会整理成了“程序员成长28计”。开始入门的时候,我们可能都会纠结于选择前端还是后端,选择了后端还犹豫到底选Java、 Go还是Python。其实,我觉得不⽤过于纠结。如果说你对偏前端的内容感兴趣,那就从前端入手;对数据库方面的内容感兴趣,那就从后端入手。等你真正入门以后,你再去转⽅向、转技术栈都会⾮常容易,因为技术都是相通的。这⾥我说的第⼀步,不是说开始看某个领域的书了,⽽是真正把IDE下载好、把编程环境搭建好,并实现⼀个最简单的程序。我⼀直觉得,把编程环境搭建好,就已经算是入门一半了。如果你只是停留在看书这个层次上的话,是永远入不了门的。因为这些知识只是停留在书上, 还没有真正变成你自己的。只有自己写过、实践过,才能真正掌握。
刚入门的时候,⾯对各种各样的语⾔、技术你很可能会迷茫。就比如说,刚入门后端的时候,Spring全家桶有十几样,还有各种数据库方面的,Java程序本身的语法和框架,那到底先学什么呢?这个时候,只要找人给你指点⼀下学习的顺序,以及按照怎样的主线来学习,就会事半功倍。否则,你会在大量的资料里花费大量的时间、消耗大量的精力。在我看来,选择入门资料,需要注意两点:1. ⼀定要选择手把手的资料,也就是从搭环境开始怎么⼀步步地去操作,并带⼀些实战项⽬。这样看,视频课程可能更合适。2. 要难度合适。那怎么理解“难度合适”呢?举个例⼦,你看的这本书的知识深度在70分,⽽你自己的知识深度在60分,那这本书⾮常合适。因为从60到65的感觉是⾮常爽的。在60分的时候,你有能⼒去汲取70分深度的书⾥⾯的知识点,然后你会变成65分。⽽如果你现在的知识深度在20分去看70分的书,或者你的知识深度在75分却去看70分的书,就不会有任何感觉、任何收益。所以,很多同学看我的专栏课程会有共鸣,也是这个原因。
步⼊两年这个阶段后,我们要开始想办法系统性地学习了,⽐如系统性地学习设计模式、算法、数据库。只有系统性地学习,才能给我们建⽴起完整的知识框架。因为⼀定是先有知识网络,才能在网络上继续铺更多的东⻄。第⼀,分享可以让⾃⼰有动⼒。⽐如,你说要写⼀个什么系列的⽂章,那话说出去了,就会逼着⾃⼰去实现。第⼆,花钱买课程,做系统性的学习。当你花了几百甚至几千块钱去买课程的时候,就会逼着自己学习,不然钱就浪费掉了。选择⼀份好工作,也就是选择⼀个好的项⽬,从⽽积累⼀些⼈脉资源,是⾮常重要的,可能要比技术成长更重要些。比如说,你能够进入到⼀个相对较⼤的公司,它能带给你的最最主要的就是⼈脉资源,也就是你能够认识更多、更优秀的人。认识这些人,就是你日后的机会。 我们不能期望项⽬经验⼀定或者说⼀直会给⾃⼰带来技术提升。即使是你能接触⼀些⾼并发的、比较复杂的项⽬,它们带来的提升也是有限的,或者说持续的时间通常会比较短。 因为大多数公司在乎的都是你的输出,输出你的能⼒和经验。所以说,学习和成⻓这件事儿, 必须靠⾃觉,包括⾃觉地去想如何系统性地学习、如何有计划地学习,以及平时要多问为什么。这⾥也是说,我们在看书的过程中,要注意去鉴别书的层次,选择难度合适的书。其实,在做程序员前两年的时间⾥,我不太建议去⼴泛地看书,要先想办法能够专注些,打好自己主要的编程语⾔的基础;然后,围绕着自己主要的编程语⾔或者主要使⽤的技术去看书。 将来踏上技术管理路线之后,你有可能管的团队不是你这个领域,比如你是后端出身可能要带领移动团队。如果你不知道移动端最基本的东⻄的话,是没有办法跟团队成员沟通的。所以说,你可以有自己的⼀个专长,但是你要知道其他领域最基本的东⻄。 第⼀,体验全栈。如果你是做后端的,就应该去⼤概了解下客户端、移动端,或者说⼤前端;可以了解下测试和运维怎么做,了解运维的话帮助可能会更⼤。你还可以动⼿做⼀个⾃⼰的项目,就从云服务器的采购开始。在搭建项⽬部署的过程中,你可以⾃⼰去搭建运维相关的部分,甚⾄是自己搭建⼀些中间件。因为在大厂,⼀般都有⾃动化发布系统、有⼯程化平台、有自己的运维体系、有自己的监控系统等等。但是,如果只是使⽤这些⼯具的话,我们是没法建⽴⼀个全局观的,因为我们不知道它们是怎么运作的。 第⼆,多学⼀些编程语⾔。但是学了几门编程语⾔后,你会发现每门语⾔都有自己的特色和软肋。这就会引发你很多的思考,比如为什么这个语⾔没有这个特性,⼜怎么样去解决。另外, 每⻔语⾔他都有⾃⼰的技术栈,你会来回地⽐较。这些思考和比较,对自己的成⻓都很有⽤。如果你对⼀个语⾔的掌握⽐较透彻的话,再去学其他语⾔不会花很久。我刚毕业是做.net,后来转了Java,再后来⼜去学Python。因为⾼级语⾔的特性基本上都差不多,你只要学⼀些语法,⽤到的时候再去查更多的内容,然后做个项⽬,所以学⼀门语⾔可能也就需要⼀个⽉甚⾄会更快⼀些。第⼀,造轮⼦。所谓的造轮⼦,不⼀定是要造完要⽤,你可以拿造轮⼦来练⼿,⽐如徒⼿写⼀个框架。在这个过程中,你会遇到很多困难,然后可能会想办法去学习⼀些现有技术的源码,这对技术深度的理解是⾮常有帮助的。第⼆,看⼀些源码。如果你能够理清楚⼀些源码的主线,然后你能积累很多设计模式的知识。第三,学⼀些偏向于底层的东⻄,可以帮助你理解技术的本质。上层的技术都依赖于底层的技术,所以你学完了底层的技术后,就会发现上层的技术再变也没有什么本质上的区别,然后学起来就会⾮常快。对于程序员来说,最好可以使⽤Google来搜索,也就是说要使⽤英⽂的关键字来搜索。⼀⽅⾯,通过Google你可以搜到更多的内容,另⼀⽅⾯国外的技术圈或者网站关于纯技术的讨论会多⼀些。我觉得,写⽂档是在锻炼自己的总结能⼒和表达能⼒,画图更多的是在锻炼自己的抽象能⼒。写⽂档、画架构图,不仅仅是架构师需要具备的能⼒,还是你准确表达自己观点的必备方式。所以,我们不要觉得,宁肯写100⾏代码,也不愿意写⼀句话。
这时候你已经有了好几年的经验了,那除了技术方面,还要注意软素质,比如沟通、⾃我驱动、总结等能⼒的提升。比如说沟通能⼒,就是你能不能很流畅地表达自己的观点,能不能比较主动地去沟通。这些素质在⽇常⼯作中还是挺重要的,因为你做了架构师之后,免不了要去跟业务⽅和技术团队,甚⾄是其他的团队的架构师去沟通。如果你的这些软素质不过硬,那可能你的⽅案就得不到认可,没办法达成自己的目标。当你在⼀个领域工作几年之后,你就会对这个领域的产品⾮常熟悉,甚⾄⽐产品经理更懂产品。也就是说,即使这个产品没有别⼈的帮助,你也可以确保它朝着正确的⽅向发展。如果你想⼀直在这个领域⼯作的话,这种领域经验的积累就对⾃⼰的发展⾮常有帮助。所以说,有些⼈做的是业务架构师,他可能在技术上并不是特别擅⻓,但对这个领域的系统设计或者说产品设计特别在⾏。如果说,你不想纯做技术的话,可以考虑积累更多的领域经验。我以前做架构师的时候发现,有些架构师给出的方案⾮常漂亮,但就是不接地⽓、很难去落地。所以,在我看来,架构⼯作必须要接地⽓,包括三个⽅⾯:产出符合实际情况的⽅案、⽅案要落地实际项目、不要太技术化。这⾥其实会有⼀个⽭盾点:如果你想要提升⾃⼰的经验、技术,很多时候就需要去引⼊⼀些新技术,但是这些新技术的引入需要成本。⽽这⾥的成本不仅仅是你⾃⼰学习的成本,还需要整个团队有⼀定的经验。比如Kubernetes,不是你引⼊了团队⽤就完事⼉,整个团队的技术都需要得到提升,才能够驾驭这个系统。如果我们是为了⾃⼰的利益去引⼊⼀些不太符合公司实际情况的技术的话,其实对公司来说是不负责任的,⽽且这个⽅案很⼤程度上有可能会失败。 所以说,我觉得做架构⼯作是要产出⼀些更接地⽓的⽅案。⽐如同样是解决⼀个问题,有些架构⽅式或设计⽐较“⽼⼟”,但往往是很稳定的;⽽⼀些复杂的技术,虽然有先进的理念和设 计,但你要驾驭它就需要很多成本,⽽且因为它的“新”往往还会存在各种各样的问题。这也就是说,我们在设计架构的时候,必须要权衡⽅案是否接地⽓。⼝碑就是你⽇常⼯作的态度,包括你的能⼒和沟通,会让⼈知道你靠不靠谱、能⼒是不是够强。好的⼝碑再加上宝贵的⼈脉,就是你⾮常重要的资源。⼝碑好的⼈基本上是不需要主动去找⼯作的,因为⼀直会有⼀些⽼领导或者朋友、同事会千⽅百计地想要给你机会。很多⼈的技术⾮常不错,但就是没⼈知道他,问题就出在影响⼒上。⽽提升影响⼒的⽅法,⽆外乎就是参加技术⼤会、做分享、写博客、写书等等。 有了影响力和⼝碑,让更多的⼈能接触到你、认识你,你就会有更多的机会。
“管事”就是你怎样去安排,这⾥包括了制定项⽬管理流程、制定技术标准、⼯具化和⾃动化三 个⽅⾯。
刚转做技术管理时容易犯的⼀个错的是,把事情都抓在⾃⼰⼿⾥。这时,你⼀定要想通,不是你⾃⼰在⼲活,你的产出是靠团队的。与其说什么事情都⾃⼰⼲,还不如说你去制定规范、流程和⽅向,然后让团队去做,否则你很容易就成了整个团队的瓶颈。
第18计:掌握带团队的方法。
第⼀,招⼈&放权。带团队的话,最重要是招到优秀的⼈,然后就是放权。不要因为担心招到的人会比自己优秀,就想要找“弱”⼀些的。只有团队的事情做得更好了,你的整个团队的产出才是最⾼。
第⼆,⼯程师文化。通过建立工程师文化,让⼤家去互相交流、学习,从⽽建⽴⼀个良好的学习⼯作氛围。
第三,适当的沟通汇报制度。这也属于制定流程⾥⾯的,也是要建⽴⼀个沟通汇报的制度。
第19计:关注前沿技术,思考技术创新。
做了技术管理之后,你的视⻆要更⾼。你团队的成员,可能只是看到、接触到这⼀个部分、这⼀个模块,没有更多的信息,也没办法想得更远。这时,你就必须去创新、去关注更多的前沿技术,去思考⾃⼰的项⽬能不能⽤上这些技术。
第20计:关注产品。
在我看来,⼀个产品的形态很多时候决定了公司的命运,在产品上多想⼀些点⼦,往往要⽐技术上的重构带来的收益更⼤。这⾥不仅仅包括这个产品是怎么运作的,还包括产品中包含的创新、你能否挖掘⼀些衍⽣品。
⾼级技术管理在这个层次上⾯,我们更⾼级的技术管理可能是总监级别甚⾄以上,我以前在两家百⼈以上的小公司做过CTO。我当时的感觉是,所做的事情不能仅限于产品技术本身了。
这和招⼈还不太⼀样,招⼈肯定招的是下属,⽽搭建团队是必须让团队有⼀个梯队。⼀旦你把⼀些核心的人固化下来以后,整个团队就发展起来了。所以,你要在招人⽅⾯花费更多的精力,当然不仅仅是指⾯试。搭建团队最重要的是你⾃⼰要有⼀个想法,知道⾃⼰需要⼀个什么样的职位来填补空缺,这个岗位上⼜需要什么样的⼈。 虽然在做技术管理的时候,我强调说要建⽴制度,但⽂化会更⾼于制度,⽽且⽂化没有那么强势。因为制度其实是列出来,要求⼤家去遵守,有“强迫”的感觉;而文化更强调潜移默化,通过耳濡目染获得⼤同感。这样⼀来,⼤家慢慢地就不会觉得这是⽂化了,而是说我现在就是这么⼲事儿的。价值观是说公司按照这个理念去运作,希望有⼀些志同道合的⼈在⼀起⼲活。所以价值观⼜会⾼于⽂化,是整个公司层⾯的,对⼤家的影响也会更多。虽然说价值观不会那么显性,但可以长久地确保公司⾥⾯的整个团队的心都是⻬的,⼤家都知道公司是怎么运作的,有相同的⽬标。到了高级技术管理的位置,你就不仅仅是⼀个打工的了,你的命运是和公司紧紧绑定在⼀起的。所以,你需要更多地关注公司的运营和财务。当你觉得⾃⼰的团队很小却要做那么多项⽬的时候,可以站在更⾼的⻆度去换位思考下。这时你可能就发现,你的团队做的事情并没有那么重要,对整个公司的发展来说你的团队规模已经⾜够了。如果说我们再大量招⼈的话,那么财务上就会⼊不敷出,整个公司的情况肯定也不会好。
⾸先,我们不要把汇报当作负担、当作浪费时间。汇报其实是双向的,你跟上级多沟通的话, 他可以反馈给你更多的信息,这个信息可能是你⼯作的⽅向,也可能是给你的⼀些资源,还可能是告诉你上级想要什么。因为你和你的上级其实在⼀个信息层⾯上是不对等的,他能收到更上级的信息,比如公司策略方面的信息。第⼀,如果说你的⽬标就是成功的话,那没有什么可以阻挡你。职场上的扯皮和甩锅,都是避免不了的。举个例⼦吧。我以前在⼀家公司⼯作的时候,别⼈不愿意配合我的⼯作。那怎么办呢,我知道⾃⼰的⽬标是把这件事⼉做成。当时,这个项⽬的很多内容,⽐如说运维,都不在我这边,需要其他同事来负责。但⼈家就是不配合,群⾥艾特也不看,打电话也不接,那我怎么办呢?多打两次呗,实在不⾏我就发邮件抄送⼤家的上级。总之,就是想尽办法去沟通,因为你的⽬标就是成功。很多时候,你觉得这个事情是做不成的,然后直接拒绝掉了,创新就没有了。但如果相信这个事情⼀定是可以做成的,你就会想⽅设法去实现它,这个时候你想出来的东⻄就是有开创性的,就是创新。 在职场上提炼⽅法论是⾮常重要的。你要去思考⾃⼰在⼯作中对各种各样的事情的处理,是不是妥当,是不是能够总结出⼀些⽅法论。把这些⽅法论提炼保留下来,将来是能够帮到你的。很多东⻄,⽐如复盘⾃⼰的⼯作经历、复盘⾃⼰的选择,都要动脑⼦、都要去写,不能说过去了就过去了。这些经历提炼出的⽅法论,都是你的经验,是⾮常有价值的。 和平级同事之间,要以帮助别⼈的心态来合作。我们和上下级的同事来沟通,⼀般是不会有什么问题的,但跟平级的,尤其是跨部⻔的平级同事去沟通的时候,往往会因为利益问题,不会很愉快。我觉得,这⾥最重要的就是以帮助别⼈的心态来合作。比如这样说“你有什么困难的话,可以来问我”“你⼈⼿是不是不够,我可以帮你⼀起把这个项⽬做好”。这样⼤家的合作会⽐较顺畅,别⼈也不会有那么多戒⼼。⼈和⼈的沟通,还在于有⼀层纱,突破了这层纱以后,⼤家就都会相信你,觉得你是⼀个靠谱的⼈。这样,平级同事也会愿意和你分享⼀些东⻄,因为他放⼼。
接下来,我要推荐的8条管理格⾔,是曹操管理和⽤⼈的理念,不是我⾃⼰总结出来的。第⼀,真心诚意,以情感人。人和人之间去沟通的时候,不管是和上级或者下级的沟通,都要以⾮常诚恳的态度去沟通。 第⼆,推心置腹,以诚待人。有事情不要藏在心里,做“城府很深”的管理者。我觉得更好的方式是,让⼤家尽可能地知道更多的事儿,统⼀战线,站在⼀个⻆度来考虑问题。第三,开诚布公,以理服人。把管理策略公布出来,不管是奖励也好惩罚也罢,让团队成员感觉公平公正。第四,言行一致,以信取人。说到做到,对于管理下属、和别⼈沟通都⾮常重要。第五,令行禁止,依法治人。管理上,你要制定好相关的制度,⽽且要公开出来。如果触犯了制度就需要惩罚,做得好了就要有奖赏。第六,设身处地,以宽容人。很多时候,我们和别⼈的⽭盾是没有⾜够的换位思考,没有设身处地地去想。如果说你的下属犯了错,还是要想⼀想是不是多给些机会,是不是能宽容⼀些。第七,扬人责己,以功归人。这是⾮常重要的⼀点。事情是团队⼀起做的话,那就是团队的功劳,甚至下属的功劳。如果别⼈做得好的话,就要多表扬⼀些。对自己要严格⼀些,很多时候团队的问题就是管理者的问题,跟下属没太多关系。 第八,论功行赏,以奖励人。做得好了,要多给别⼈⼀些奖励。这也是公平公正的,⼤家都能看得到。上⾯的28计加上最后的8条管理格⾔,就是我今天想要和⼤家分享的内容了。
往期推荐
技术琐话
以分布式设计、架构、体系思想为基础,兼论研发相关的点点滴滴,不限于代码、质量体系和研发管理。本号由坐馆老司机技术团队维护。