简评:程序员的工做不是写代码,而是解决问题。成为高级工程师后,若是不作管理者,你还能作什么呢?html
你作程序员已经有好几年而且已经晋升过一两次,最终升任了高级工程师或一些其余的同等职位,在此以前,你的职业道路简单明了:你学会如何独立工做,而后一步步升任为高级工程师。程序员
如今的你开始思考本身职业生涯的下一步是什么,若是你尚未明确的规划,问本身几个问题:web
- 你是否成为了一个管理者且再也不编程?
- 仅仅学习新技术,你是否以为不够?
- 你的目标是什么?
本文我想提出一个职业发展的替代方案,一个能给你更多自主权和讨价还价能力的替代方案。与成为管理者不一样的是,它仍然容许你编程。编程
从写代码到解决问题
做为程序员的工做到最后是解决问题,而不是编写代码,解决问题须要这些步骤:架构
- 发现和确认问题
- 提出解决方案
- 实施解决方案
这里面的每个均可以被认为是一种技能树:一组能够单独和并行开发的相关技能。可是在实践中,你一般会从使用第三个技能树开始,在变得更有经验的时候,才逐个添加其余技能。学习
Randall Koutnik 把这些描述为一种职业头衔,一个职业发展走向:实施者、解决者和发现者。网站
做为实施者,你是一名没有经验的程序员,你的任务由其余人定义:你只需实现小的、明确指定的代码块。设计
假设一下,你在一家为养宠物的人搭建网站的公司工做。你在上班的时候会接收到一个任务:“在这里添加一个下拉菜单,列出全部的鬣蜥疾病,你能够从 IGUANA_DISEASE 表中获取这些疾病。选择一个菜单项应重定向到适当的页面。”code
你不知道用户为何会须要列出鬣蜥疾病,也没必要花费太多时间来弄清楚如何实现它,照吩咐去作就好了。htm
当你变得更有经验时,你就成了一个解决者:你可以为不太明确的问题想出解决方案。
当你遇到一个问题:“咱们须要在网站上添加一个部分,让宠物主人知道本身的宠物是否生病了。”你先获悉本身拥有什么数据,可使用哪些 API,而后与设计师一块儿设计 UI,建立一个实现计划,最后编写代码。
最终你会成为一个发现者:你开始本身发现问题并找出其根本缘由。
你会去和你的经理谈鬣蜥:几乎没人拥有鬣蜥,为何它们在页面上和猫狗有同样的空间?更不用说给鬣蜥编写特定的代码,这彻底是在浪费时间,难道不是应该编写适用于全部动物的通用代码吗?
通过一番讨论,你发现必须重作网站架构、业务逻辑和设计,这样就没必要在每次添加新动物的时候都编写新代码。若是你提出正确的架构,使得添加一个新的动物只须要花一个小时,公司就能够以低成本服务于许多动物利基市场。你将与整个团队一块儿合做完成解决方案的设计和实施。
成为发现者的好处
许多程序员最终停留在解决者这个角色,不知道下一步该作什么。若是你不作管理,那么成为一个发现者是一个很好的选择,缘由有两点:自主性和生产力。
Kutnk 的主要观点是,这三个阶段每走向下一步都会给你更多的自主权。做为实现者,几乎没有自主权,做为解决者,会拥有稍多的自主权,做为发现者,你拥有很是多的自主权:你被赋予一些模糊的目标和约束,由你本身来决定作什么。这会带来不少乐趣。
除此以外,还有一个好处:从 Implementer 到 Solver 再到 Finder,你将变得更有生产力,由于你所作的没必要要的工做变得更少。
- 若是你只是在执行别人指定的解决方案,可能会陷入低效的工做。
- 若是你只看到问题的表面就提出一个解决方案,那最终解决的可能不是真正的问题。
你越擅长诊断和发现潜在的问题,提出解决方案,并与他人一块儿工做,你就越少作没必要要的工做,你就会更有效率。
利用你的生产力
若是你是一个发现者,你的工做效率就会大大提升,这会让你成为一个更有价值的员工。擅长挖掘高价值问题的人能发现那些无人知晓的障碍,发现客户真正想要的东西,你会成为他们中的一员。
这意味着你有更多的谈判优点:
- 协商加薪更容易成功。
- 能够找到更好的工做,即便这个工做涉及到你不了解的技术。
- 甚至能够申请为期三天的周末。
所以,若是你想在继续编程的同时事业上也取得进步,就从如今开始去寻找问题吧。一旦专门去注意这件事情,你会发现问题无处不在。
英文原文:The next career step for Senior Software Engineers (that isn’t management)