英文原文:Career Path of a Programmer
许多编程的职位都会到达最高峰,并开始衰落——这是很多程序员不想面对的,但却是一个不争的事实。这之后再找一份程序员的工作会变得越来越难,很多人发现这个事实时束手无策。本文会提供一些重要的职业信息,值得思考一下,以便有所准备。
TechCrunch 发布了一篇文章「硅谷黑幕:技术人员年龄歧视」,文中引用的研究发现:对一个程序员来说,能从事高效的开发的年龄段是有限的。这个问题确实存在,而且非常严峻。
程序员的未来是什么样的?
程序员的职业之路是什么样的?
对于这些路应有什么样的选择和期望?
人人都知道程序员可以向经理或团队领导发展。但很多程序员不明白经理这个职位的期望和工作要求。当然,我们都有经理,但怎样才能成为经理呢?要具备什么素质?中层管理者和一个高级程序员之间有什么区别?
在这篇文章中,我会拉开帷幕,介绍从一个从初级程序员到顶级 CTO 的潜在职业之路。
注意:很多伟大的职业生涯停留在了不同的职位上,直到退休。一些职业生涯却连连升级。但是管理和领导角色并不适合每一个人,几年以后你可能会发 现你在管理上的兴趣改变了。二十几岁的时候你可能不喜欢做经理,但是四十岁时你可能不再喜欢写代码了。未来什么样,谁都很难说。然而,多了解一下你的选择 和情况总是好的。
下面一张图表示的是程序员的各个职位的平均工资。注意在垂直水平上,一些人可能拿着两倍或者三倍于别人的工资(像是银行,贸易等行业)。所以这些数字仅代表了一个平均水平,并不全面。
初级程序员
- 0-3 年工作经验(一般是刚从大学毕业)
- 会写简单的脚本
- 初步了解整个应用程序的生命周期
- 初步了解数据库和应用程序的服务(队列,缓存等)
- 不需了解复杂的应用中的每一个部分
当你刚刚踏入程序员的行列中来的时候,可能会感到畏缩和烦恼。会时常感觉到自己资历尚浅,惊讶为什么会有人写出这么大而复杂的程序。不久之后,你就会想为什么自己还没有升级到高级程序员。看看其他的高级程序员,你觉得自己做着跟他们相同的工作。
但是区别就在于初级程序员缺乏经验。即使是学习最快、最聪明的初级程序员,也没有接触到足够多的代码和边界情况,以胜任高级程序员的工作。在软 件开发方面,软件设计模式也是一种智慧。虽然在这方面可以阅读相关的书籍,但还是需要写足够多的代码,将错误尽可能地暴漏出来,真正理解软件设计模式的价 值。
相关链接:
- 《设计模式》 Gamma 著
- “初级”程序员的真正含义
- 初级开发者如何提高自己
高级程序员
- 至少四年工作经验
- 能写较复杂的程序
- 深入理解整个应用程序的生命周期
- 掌握数据库和应用服务(队列,缓存等)
- 要了解应用程序的每一个方面
称职的高级程序员非常擅长构建大型程序。担任高级程序员占了程序员生涯的大部分。事实上,如果你不喜欢管理的工作而仅仅喜欢写代码,可以一直做一个高级程序员,我就雇佣了一些终生做程序员的人,但是,当老了以后,这项工作也会变得困难。
这个职位也可以作为一个过渡。一旦你掌握了足够的技术,那么很可能就有能力担任一家技术创业公司的创始人或者 CTO 了。作为一个创始人或者 CTO,写代码的就会就少了,更多的是需要处理事务的技巧。但是深入理解技术非常有必要,是做好这份工作必不可少的部分。
团队领导或架构师
- 七年以上开发经验
- 掌握高级程序员必备的技术
- 团队领导:向架构师过渡
- 架构师:没有更高的技术方面的职位
做了七年程序员之后,如果你觉得不喜欢管理方面的工作,那么可以考虑一下做架构师,这是技术方面最顶峰的职位。架构师有时候也写代码,但大多数 时间他们在设计复杂的系统,然后交给由初级和高级程序员们组成团队来实现。架构师的工作就是,利用他技术方面的智慧以及多年的经验(学习程序的模式和反模 式),来为软件项目创建合适的架构。有新的需求的时候,软件架构师需要对项目选择正确的方向,并估算应用程序的规模。
首席开发人员的工作是给其他初级的和高级的程序员指导和方向。虽然首席开发者通常不会做雇佣、解雇程序员的事情,但是他们的许多工作和经理无异。他们需做开发方面的协调,并在写代码的时候做出实现方面的决定。
中层领导
- 通常包含经理和负责人等职位(开发经理,项目经理,产品经理)
- 做发人员的老板(例如人事工作)
- 向高级主管汇报工作
管理人员通常向工程师发展。他们的方向很多:如果你喜欢接触开发团队,并对细节感兴趣,那么可以选择产品经理,做你的伙伴们的盟友;如果你对产品特性和增强其性能着迷,那么做一个产品经理是最好的选择。
然而大多数人的选择是开发经理。这是个经理中经典的职位,要求平衡项目经理和产品经理的需求和开发团队的性格之间的矛盾。这个职位对人事处理和 化解矛盾的技能要求较高,要经常做出退让。开发经理的工作不仅仅是雇佣新人,在必要时也要解聘一些人。这就意味着很难和他们成为朋友。因为一旦和他们成了 朋友,就处在了一个尴尬的位置。如果你认识的一个人从开发人员的职位升到了开发经理,你会发现这个人几乎在一夜之间变了。这就是为什么,这通常是一份费力 不讨好的工作。
但如果领导一个团队胜利了,也是非常有收获的。如果你想提高领导才能,准备做一个管理角色,可以读读 Phil Jackson 的书 《Eleven Rings: The Soul of Success》 。
高层领导
- VP,CTO 或 CEO
- 是中层领导的老板(例如负责人事)
- 向另一个高层领导或者董事会报告
和中层领导显而易见的不同是,高层领导负责管理中层领导。然而经理通常是不需要管理的,他们需要的是指导。中层领导需要知道高层领导的方向并跟进,不会得到非常具体的指示。
高层领导的工作是,做重要的决定,并激励工作人员紧跟决策,增加对工作目标的信心。
你在这条路上走得越远,写代码的机会就越少。到达顶峰的时候,做的都是人事方面的工作了。中层领导依然能在核心技术方方面体验到乐趣,但是对于 高层领导,就必须把所有的时间花在人事上:激励员工,领导,指定策略。如果你写代码,也只能是不重要的项目(除非你是比尔盖茨,但大多数人不是比尔,他是 个极端的特例)。Phil Jackson 的书要求,在这个职位上必须经常阅读,不能安于现状。
高层领导的工作要求确保公司的每一个人都朝着相同的方向努力,确保方向的正确,确保每一个人知道他们朝这个方向努力的原因。这个工作难度非常大,而且充满着危险,心酸和陷阱。如果你想要一个高层领导,读一读 Ben Horowitz 的《The Hard Thing About Hard Things》.
高层领导从来都不是天生的,而是经过不断地努力达到的。Ben Horowitz 的博客里有有关成为 CEO 的例子。
结论
今天,程序员的选择是丰富多彩的。而且对于程序员的职业要求比历史上任何时候都要高。对程序猿来说这是一个好的时代。但是任何时候规划你的职业都不算晚。希望本文能排得上用场,给你一些指导和精神食粮。
相关推荐
本书分析了程序员解决问题的方法,并且教授你其他图书所忽略的一种能力,即如何像程序员一样思考。 全书分为8章。第1章通对几个经典的算法问题切入,概括了问题解决的基本技巧和步骤。第2章通过实际编写c++代码来...
Agilent 34410A-11A-L4411A Programmer's Reference .。Agilent 34410A-11A-L4411A程序员参考帮助。 Agilent 34410A-11A 编程指令,SCPI指令。 This Help file contains reference information to help you program...
#8一个程序员的梦想【青春、励志、正能量】dream_of_a_programmer
The_life_of_programmer 这些文章包括普通的,有名的的程序员的经历,还有一些让人深思的程序员问题, 我把它们分成奋斗篇,中国篇,外国篇,反思篇,如果你想进入程序设计的世界,这 些文章应该能给你一些启示,也一定能...
Computer Systems A Programmer's Perspective Third Edition.pdf 深入理解计算机系统(原书第2版)的英文版本. 程序员必读经典著作!理解计算机系统*书目,10万程序员共同选择。 作者:(美)兰德尔?E.布莱恩特...
一本揭示高效程序员的... Whether you're a beginner or a pro with years of experience, you'll improve your work and your career with the simple and straightforward principles in The Productive Programmer.
《The Productive Programmer》这本书是为那些希望提升编程效率、改善工作流程的程序员量身定制的指南。书中涵盖了大量实用的技巧、工具和方法,旨在帮助程序员提高生产力,成为更有效的开发者。 首先,书中的核心...
Computer Systems - A Programmer's Perspective
How to be a Programmer: Community Version Robert L. Read with Community Copyright 2002, 2003, 2016 Robert L. Read Licensed under Creative Commons Attribution-ShareAlike 4.0 International License. ...
【《程序员数学指南》各章实现代码(Python)】’programmers-introduction-to-mathematics - Code for A Programmer's Introduction to Mathematics'
这里的“CH341A programmer”是一种通用的USB到串行接口芯片,常用于编程各种类型的电子存储器,如EEPROM(电可擦除可编程只读存储器)。 EEPROM是一种非易失性存储器,即使在断电后也能保持数据,这使得它非常适合...
《程序员的数学1》是一本面向程序员的数学入门书籍,旨在帮助编程人员理解和掌握数学在计算机科学中的应用。书中的内容可能涵盖了基础的数学概念、逻辑推理、算法分析以及更高级的数学工具,如线性代数、概率统计、...
总结来说,文档是关于一本名为《Android™: A Programmer’s Guide》的书的信息,该书是一本关于Android开发的编程指南,具有版权保护,使用前需遵守McGraw-Hill公司的使用条款,并且该书可以用于培训目的。...
程序员能力矩阵 Programmer Competency Matrix 注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识。
Computer Systems A Programmer's Perspective(2nd) 英文无水印pdf 第2版 pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自...
《程序员的数学2》是一本面向程序员的数学学习书籍,旨在帮助编程人员深入理解并运用数学思维解决实际问题。在编程领域,数学是基础且重要的工具,尤其在算法设计、数据结构、图形图像处理、机器学习等领域发挥着...
《ARM® Cortex®-A Series Programmer’s Guide for ARMv8-A》是针对ARM架构中Cortex-A系列处理器的权威编程指南,主要涵盖了ARMv8-A架构的详细信息和技术要点。ARMv8-A是ARM公司推出的64位指令集架构,为高性能...