程序员一路练级打怪的职业理想就是升任CTO,走上人生巅峰。
那你听说过辞任CTO,抄起键盘重返“码农”的吗?
还真有!这个不走寻常路的家伙就是开源公司HashiCorp的创始人MitchellHashimoto,一家估值52.7亿美元的明星公司技术掌门人。
图片来源:网络
今年7月底,他宣布辞任公司CTO、离开管理层,以独立贡献者的身份参与到公司产品开发中去。相比起领导团队,钻研技术才是Mitchell的一生所爱。但高管的身份让他失去了一部分沉浸编程的时间,权衡再三,他选择听从内心的声音。
似乎在人们的印象中,技术人员的上层通道总是通向管理,这样的刻板印象属实吗?从MitchellHashimoto的经历中我们能获得什么借鉴?程序员在职业规划上该走什么样的路?让我们听闪马智能的技术管理大佬们谈一谈!
他山之石
你怎么看待MitchellHashimoto的决定?
图片来源:网络
L哥:
很正常的事情,做一个公司的管理层,肯定要做很多融资、项目、商务、人员管理的事情,内容还是比较杂的,时间上互相影响,精力没法聚焦。对于纯粹的做技术来说,安安静静做事情更容易出成果。而对于管理层来说,带领团队实现目标是另一类成果。对于这位CTO个人来讲,其实两类内容并没那么冲突,但是他的兴趣爱好应该还是更喜欢技术,他选择了内心更爱的方向。
Y哥:
CTO放弃管理职务去写代码,这是一个个例,不具有普遍性,不过从这个事件上可以给我们一些启示:
一、什么时候做出改变都不算晚,前提是想明白自己到底适合做什么,适合自己的才是最佳选择。
二、管理不是职业发展的终点,只是选择之一,在外企经常会看到50岁以上的老爷爷在做一线开发工作。
三、很多人都想做管理,其实并不是每个人都适合做管理,一个好的管理者所面临的挑战和压力并不比写代码小。
四、一般来说管理和代码精进是有冲突的,很难同时把两件事都做得很好,还是要侧重一个方面。这位CTO的选择也许就是因为这个原因。
五、选择一个方向,把它做到极致,然后再考虑选择另一个方向。
Z哥:
做技术还是做管理,这个要看个人性格。比较内向、喜欢钻研的就可以坚持走技术路线;比较开朗、擅长协调的,就更偏管理,只要适合就没什么关系。这位CTO应该就是比起管理更喜欢技术,个人的选择而已。
向前方进发!
做管理工作和专注技术相比有什么不同?如何做好技术管理?
图片来源:网络
L哥:
做了管理者之后,就不能百分百地投入技术,要根据公司的需求来做权衡。但是做管理者,还是要保持对技术的透彻理解,因为他的决策会影响公司的技术方向。只是相比过去,管理人员不会再亲自一行行敲代码了,但是对技术的敏感度、甄别的能力必须要保证。细节是很难再管控了,但大方向一定要看清楚。
Y哥:
管理工作和专注于技术的工作相比,主要的变化在于可利用的资源不同,但本质都是解决问题、创造价值。技术是利用算法、设计和代码来解决问题,管理工作是利用人来解决问题,所以这两个工作所需要的技能就有所不同。技术管理工作是技术团队的管理,重点在管理,对象是技术团队,所以结合技术人员的特点来运用相应的管理手段、实现团队的目标。程序员其实是智力工作者,传统管理手段不适合如今的技术团队,管理者需要激发团队的创造力、自主性,来激励团队把工作做好、为组织创造更大价值。
Z哥:
做管理是和人打交道,做技术是和计算机打交道,感觉一定是不一样的。和人沟通的可变性太大,但也有乐趣在。而和计算机打交道呢,你可以沉浸进去做一件事,等出成果了感觉会非常爽,不同的方向有不同的结果。做技术管理要把两者结合起来,时间分配上要考虑清楚,做好了其实不会很冲突。
自古华山一条路?
程序员未来除了做管理就没别的选择了吗?
图片来源:网络
L哥:
不要想着必须做管理、不做就会被淘汰。国内这块风气不太好,总是说程序员过了三四十岁还没升管理就啥都不是了,这样肯定是不对的。在国外,有些程序员六七十岁还在写代码,还写得很牛。你可以把一门技术做精,之后再去做专家。对于这类人来说,不用去管项目,而是专注把技术挖深、啃透,做得好了其实比做管理更有价值。比如AI领域就还有很多技术难关没有攻克,还有很多东西可以做。
Y哥:
程序员其实有很多细分领域,不同领域都有相应的职业发展通道,每个职业发展通道都有专业型和管理型两个发展方向,所以程序员还是有很多选择的。当然,也可以跨界发展,程序员转型做产品、项目经理、设计、质量管理,甚至成为技术创业者。
Z哥:
首先,程序员一定要做一个长期的职业规划,不做的话,真的会很吃亏。我建议前3年踏踏实实把基础打好,3~5年把一些开源框架研究透,等6~7年就可以尝试转架构师或者管理了。循序渐进,是完全有上升空间的。甚至可以试试做IT培训讲师,去一些网站开课程,用另一种方式实现自己的价值,总之有很多路可以选。
专精or广博?
作为程序员,哪种学习方向更合适,是专注一块技术方向求精?还是做全面人才求广?
图片来源:网络
L哥:
这不是个二选一的问题,对于技术人,没有深度就不会有广度。我认为对于刚毕业的学生来说,刚开始还是专精一块比较好,等到后来经验丰富了,就可以多看看别的领域。但是广度最终还是要服务于你专注的方向。当你钻研到一个程度,去理解别的领域也会更容易些。而一开始就广撒网、每个领域都泛泛了解,就很容易变成“万金油”,习惯了浅再想求深就难了。所以我的建议是,先专注,打好基础,再考虑广度。
Y哥:
这两个方向都很重要,企业最需要专业性和全面性兼备的T型人才或者复合型人才。不过在不同的阶段,学习的方向具有一些侧重点,在职业发展的初期,还未确定自己的方向,可以多接触一些领域,对未来的多种可能性都能有所了解,在这个过程中对自己的优势和未来发展方向有了大致的了解,之后争取在某一方向上能够深入学习和实践,成为这个专业领域的专家。然后再逐步拓展到其他方向或者其他领域,逐步发展成为具有竞争力的T型人才。
Z哥:
这个和业务方向有关。有的业务,比如某类产品研发,就需要特定的人才,把技术点打通透。而有的,比如说做项目,针对客户做集成,就需要人员对技术一个广泛的了解,可能不需要很深入,但是要有一定认知。同时这也和发展阶段有关,刚毕业的技术人员前三年一定要沉下心来做,深入学习算法或者数据结构,把基础的地方夯实,等积累了3~5年经验的时候,就可以尝试多拓展一些范畴,去研究市面上的开源框架,积累应用原理的知识。
千里之行,始于足下!
有哪些程序员写代码需要的好习惯?
图片来源:网络
L哥:
代码一定要干净、简洁、高效!邋里邋遢的家伙别人看来第一印象就不好,代码也一样。代码不对齐、乱糟糟,看的人就会很难受。能花十行搞定就不要花一百行来啰嗦。注释、变量命名、函数关系也要表述清楚,不然读都读不懂。这几样是非常基础的东西,第一步都做不好的话,没人愿意继续看你的代码。但是把这种细节做好、养成习惯,将来就会受益无穷。
Y哥:
一、保持代码格式统一,遵守代码命名规范。
二、养成写备注、文档和提交说明的习惯。
三、建立测试驱动开发的思维模式,养成写测试代码的习惯。
四、频繁提交代码,实现持续集成。
Z哥:
我之前带过很多应届生,在这个方面很有感触。我和他们说,前3个月尽量不要自动生成代码,而是自己一行行手动敲,全是生成的话对代码的运行规则会比较生疏。这3个月手动敲代码,会比较辛苦,但是结果绝对是不一样的,你的规范性和代码质量经过锻炼都得到了保障。另外,一定要经常check自己的代码质量,时常用编辑器检查语法。同时,写代码也不要太埋头苦干,动手前先想5分钟,想什么呢?想业务逻辑能不能走通,这样可以少走很多弯路。
看过这样的分享,有何感触?岔路众多,却只有一个方向可供选择,程序员之路,你现在走到了哪一步呢?