zoukankan      html  css  js  c++  java
  • 成为高级工程师后,职业生涯的下一步是什么

    简评:程序员的工作不是写代码,而是解决问题。成为高级工程师后,如果不做管理者,你还能做什么呢?

    你做程序员已经有好几年并且已经晋升过一两次,最终升任了高级工程师或一些其他的同等职位,在此之前,你的职业道路简单明了:你学会如何独立工作,然后一步步升任为高级工程师。

    现在的你开始思考自己职业生涯的下一步是什么,如果你还没有明确的规划,问自己几个问题:

    1. 你是否成为了一个管理者且不再编程?
    2. 仅仅学习新技术,你是否觉得不够?
    3. 你的目标是什么?

    本文我想提出一个职业发展的替代方案,一个能给你更多自主权和讨价还价能力的替代方案。与成为管理者不同的是,它仍然允许你编程。

    从写代码到解决问题

    作为程序员的工作到最后是解决问题,而不是编写代码,解决问题需要这些步骤:

    1. 发现和确认问题
    2. 提出解决方案
    3. 实施解决方案

    这里面的每一个都可以被认为是一种技能树:一组可以单独和并行开发的相关技能。但是在实践中,你通常会从使用第三个技能树开始,在变得更有经验的时候,才逐个添加其他技能。

    Randall Koutnik 把这些描述为一种职业头衔,一个职业发展走向:实施者、解决者和发现者

    作为实施者,你是一名没有经验的程序员,你的任务由其他人定义:你只需实现小的、明确指定的代码块。

    假设一下,你在一家为养宠物的人搭建网站的公司工作。你在上班的时候会接收到一个任务:“在这里添加一个下拉菜单,列出所有的鬣蜥疾病,你可以从 IGUANA_DISEASE 表中获取这些疾病。选择一个菜单项应重定向到适当的页面。”

    你不知道用户为什么会需要列出鬣蜥疾病,也不必花费太多时间来弄清楚如何实现它,照吩咐去做就行了。

    当你变得更有经验时,你就成了一个解决者:你能够为不太明确的问题想出解决方案。

    当你遇到一个问题:“我们需要在网站上添加一个部分,让宠物主人知道自己的宠物是否生病了。”你先获悉自己拥有什么数据,可以使用哪些 API,然后与设计师一起设计 UI,创建一个实现计划,最后编写代码。

    最终你会成为一个发现者:你开始自己发现问题并找出其根本原因。

    你会去和你的经理谈鬣蜥:几乎没人拥有鬣蜥,为什么它们在页面上和猫狗有一样的空间?更不用说给鬣蜥编写特定的代码,这完全是在浪费时间,难道不是应该编写适用于所有动物的通用代码吗?

    经过一番讨论,你发现必须重做网站架构、业务逻辑和设计,这样就不必在每次添加新动物的时候都编写新代码。如果你提出正确的架构,使得添加一个新的动物只需要花一个小时,公司就可以以低成本服务于许多动物利基市场。你将与整个团队一起合作完成解决方案的设计和实施。

    成为发现者的好处

    许多程序员最终停留在解决者这个角色,不知道下一步该做什么。如果你不做管理,那么成为一个发现者是一个很好的选择,原因有两点:自主性和生产力。

    Kutnk 的主要观点是,这三个阶段每走向下一步都会给你更多的自主权。作为实现者,几乎没有自主权,作为解决者,会拥有稍多的自主权,作为发现者,你拥有非常多的自主权:你被赋予一些模糊的目标和约束,由你自己来决定做什么。这会带来很多乐趣。

    除此之外,还有一个好处:从 Implementer 到 Solver 再到 Finder,你将变得更有生产力,因为你所做的不必要的工作变得更少。

    • 如果你只是在执行别人指定的解决方案,可能会陷入低效的工作。
    • 如果你只看到问题的表面就提出一个解决方案,那最终解决的可能不是真正的问题。

    你越擅长诊断和发现潜在的问题,提出解决方案,并与他人一起工作,你就越少做不必要的工作,你就会更有效率。

    利用你的生产力

    如果你是一个发现者,你的工作效率就会大大提高,这会让你成为一个更有价值的员工。擅长挖掘高价值问题的人能发现那些无人知晓的障碍,发现客户真正想要的东西,你会成为他们中的一员。

    这意味着你有更多的谈判优势:

    • 协商加薪更容易成功。
    • 可以找到更好的工作,即使这个工作涉及到你不了解的技术。
    • 甚至可以申请为期三天的周末。

    因此,如果你想在继续编程的同时事业上也取得进步,就从现在开始去寻找问题吧。一旦专门去注意这件事情,你会发现问题无处不在。

    英文原文:The next career step for Senior Software Engineers (that isn’t management)

  • 相关阅读:
    R语言 实验三 数据探索和预处理
    Java学习——包及可见性
    Java学习——包及可见性
    Java学习——使用Static修饰符
    Java学习——使用Static修饰符
    CSDN也有我的博客啦
    将博客搬至CSDN
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)编程计算100+98+96+。。。+4+2+1的值,用递归方法实现
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)编程计算100+98+96+。。。+4+2+1的值,用递归方法实现...
    Java学习——方法中传递参数分简单类型与复杂类型(引用类型)
  • 原文地址:https://www.cnblogs.com/jpush88/p/9879369.html
Copyright © 2011-2022 走看看