|
作者|Vladimir Kazankov7 F! }% z6 K1 T9 ]" h# c& [# Z
译者|薛命灯
+ e/ S6 b. W3 b! U3 G* I& R& z关于程序员是不是吃青春饭的讨论由来已久,对于那些步入中年的程序员来说,似乎不转管理岗就会被富有活力的年轻程序员替代。但总有些顶级的软件开发者,不愿意从事管理岗位,仍然活跃在一线写着代码。你知道的,有哪些?, v; @8 c: u8 ]+ L* {9 R% X7 B
写在前面4 t" Z4 u" C) q1 Z) z3 `
美国劳动力的中值年龄是 42 岁,而 Stack Overflow 的一项有关年龄的调查表明,40 岁之后的开发人员只占开发人员总数的 13%。那么其他人到哪里去了?他们被解雇了或者上升到管理岗位了吗?软件开发对于过了 40 岁的人来说,是不是就意味着终结?- a, c& s' i3 a6 M
本文罗列了 10 位年龄超过 40 岁的老程序员们的故事,他们都是顶级的软件开发者,拒绝从事管理岗位,仍然活跃在开发一线,将编程作为生活收入的主要来源。本文内容来自 Belisoft 博客,并已获得作者的翻译授权,查看原文 SOFTWARE DEVELOPERS AFTER 40, 50 AND 60 WHO ARE STILL CODING :
* p( t. N [5 P+ O1 ]4 P) }/ _$ Q Rob Fletcher,Netflix(Los Gatos,CA)的高级软件工程师,45岁
: n! M) ~* F9 r
* o1 {6 r* u: Z3 I专长: Web 开发、测试驱动开发、敏捷软件开发、Grails、Groovy、Spock 以及 AngularJS。6 Y" G8 n# G' {$ l( P4 _
我已经写了 16 年的代码,做了几年独立承包商之后,在 42 岁那年加入 Netflix,成为一名高级工程师。
6 N) c" D1 E( j+ f% ?; J我每天都写代码。目前最喜欢的语言是 Kotlin。我想学习 Go 语言,平常用得比较多的是 Java、Scala 和 Groovy。我一直在学习新的东西,哪怕是很小的事情。我知道自己会是一个糟糕的管理者,所以我压根没有想往管理方向发展。
! C2 a4 A! |8 l& b很多事情取决于你的态度。不要成为厌恶新技术的老技术人,也不要嘲笑那些正在使用新技术的人。在进行技术选型时,你的经验应该成为决策的基础。如果选择了老技术,那是因为它们正好适合当前的需求,而不是因为要保护你那积攒了多年却即将过时的专业知识,也不是因为害怕那些后进者带着 Node.js 和 Go 语言来抢夺你的工作。/ I0 ?+ n2 Z- x# K& \
Ebbe Kristensen,Prevas A/S(Denmark)的高级软件设计师,62岁
1 i# l0 N+ s3 A! @8 F
- B) j. ?) _! F4 m专长:开发实时嵌入式软件、软件配置管理、构建测试用例(系统测试和单元测试)。在实时嵌入式系统、Linux 和 Windows(包括。NET)方面有丰富的写作和文档经验,擅长 C、C++、Python、C# 和 Pascal。2 p$ h/ I3 V# _& |8 `. b
我在 1980 年获得了一个电力系统的电子工程学士学位,从我的第一份工作开始,我就以开发软件作为我的谋生手段。因为专业学位的问题,我花了将近一年的时间才找到第一份工作。但从那个时候开始,我一直是一名软件工程师。
3 Y' Y* A7 ?$ U. g/ g7 d我几乎天天写代码,不处理任何与管理相关的任务。事实上,在很早之前我就意识到,我在管理方面没有什么竞争力。; ~' e8 J \2 B8 Y
作为一名程序员,我很喜欢这个角色,我也很胜任这份工作。如果让我做一名管理者,肯定会有大麻烦,而且我一点也不享受管理工作。
( h S& k7 k0 r5 w4 z1 d! q9 e我的同事里只有两个人年纪比我大,其他的(包括上司们)都是比我年轻。我的直线经理不到 40 岁,而他是我见过的最好的管理者之一。我在 58 岁那年得到了这份工作,不过我并不是年纪最大的雇员,有两个同事年纪比我还大,尽管如此,他们还是被公司录用了。& o# D8 L8 ]3 T1 Z, V/ b
有时候,你几天甚至几周都不会学进去什么东西,而有时候几个小时学进去的东西就可以把之前 “损失” 的时间弥补回来。重要的是,你总是想方设法地去学习,时刻准备着,等待机会的出现。
! h& _$ [8 M- b5 J; m0 l, iJohn Brothers,Make&Build(Atlanta,GA)的高级软件架构师,47岁8 `$ b* A' l9 E" m- @( X2 e
! W8 J o4 Q" D! X' }& Z专长:企业架构和开发、敏捷教练、数据可视化软件。信用卡处理、IT 服务和移动应用开发。
2 e5 R4 D# ?7 L我喜欢解决问题,而且我喜欢寻找新的方式来解决问题。正因为如此,我似乎具备了与时俱进的技能。
- W# \7 t, ~3 t. J1 f我最近正在使用 Node.js 开发一个项目,之前也用过 Hadoop、NoSQL,开发过 Android 应用,也写过 Go 语言代码,还熟悉 jQuery 和 Bootstrap 的各种特性。我也关注 Java 的最新动态,还有 Spring、JMS、REST、JSON 和 JPA,以及其他相关的技术。% b w, r0 A' x( o: z! {! p
我也适当关注技术生态系统的其他部分。在过去的几年,我使用了 IntelliJ、Eclipse、Sublime、Emacs 和 Vi 这些开发工具,我很喜欢使用这些工具来解决各种问题。我一开始使用的是 CVS,后来学习了 Subversion,最近在学习 Git。我也有 AWS 相关的经验。我还是一个获得认证的 Scrum Master、产品经理和开发者。我写过很多自动化单元测试(在构建一个系统时,以测试驱动开发是我最喜欢的挑战之一)。
% }# m/ z5 i' h, K' s我不害怕学习新东西。我使用 Ruby on Rails/Grails 开发 Web 应用,使用 Perl、PHP 和 Python 开发应用解决业务问题。我也有 SOAP 和 AOP 的相关经验。
' r- e0 P% K. @我尝试着要成为一名全栈的开发者。我熟悉 Unix,经常编写 shell 脚本。我喜欢部署应用、服务器和工具,不管是为了开发还是为了生产。我熟悉 SQL 和 NoSQL,并且知道它们各自的优缺点。我了解 TCP/IP,我知道路由、DHCP 和各种代理的基础知识。我构建过 MVC 应用、消息驱动的应用、EJB 和基于 Spring 的服务。我也做过前端的 JavaScript 和 CSS 开发。我并不想成为一个可以拿奖的 UX 开发者,但最起码可以完成基本的功能。7 ^( R( H; v: r
我计划再干 21 年。如果我们从 Web 开发转向基于 D-ware 服务器的开发,我或许会落后;如果函数式编程最终一统天下,我或许会落后。不过真到了那个时候,我仍然心存希望。
/ w. E: D' d! ?1 pRoger Whitcomb,Actian 公司(Palo Alto,CA)的软件架构师和软件工程师,60岁. G& H8 D+ N! k0 D: h
9 @" r: [- b; x% D. W6 ^
专长:C、C++、Java- r! n J6 e R) V* t
在我准备成为一名律师的时候,我才开始学习计算机科学(如果你可以想象这是怎样的一种情况)……现在,我通过编写大量具有良好文档化和功能性的 Java 代码来获得我的生活收入(起码现阶段是这样的)。
2 D# F3 w0 w( s& j/ k+ S0 | w9 D在 Windows 3.0 时代(大约是在 1986 年前后,我也记不太清楚了)我就开始在 Windows 上做开发。大约是在 10 年前,我转到 Mac 上,之后就没有再回到 Windows 上。我感觉自己就是一个使用 MacBook Pro 工作的极客……使用 C、C++、Java 和 Swift 进行开发……8 `) Y6 b6 e- m9 v
我最近的一份工作需要从头设计一整个系统,这也是我第一次做这样的事情。我现在要跟上 Web 和移动开发的速度有点吃力,但离 “垂暮” 还很远,尽管我已经 60 岁了。过去我也获得一些 “管理者” 相关的工作,不过我都拒绝了,我还是更愿意选择编程工作……/ E7 z6 k- J; N; b* s. r4 p8 B
不过,我也知道,我的一些与我年纪相仿(或者年纪更大)但已下岗的同事在找工作时遇到了麻烦(“是因为经验太丰富了吗”),所以我知道人们是怎么看待那些过了一把年纪的人,认为他们没有未来。但是,我认为最关键的是,你要为你的雇主持续地创造价值。6 i& H. Z7 z& F& J' t! _
我目前是 Apache 软件基金会 Pivot 项目的 PMC 主席。作为一名 Java 开发人员(Java 相关项目的提交者),我希望 Java 会永生。最起码不要出现更好的语言,要我把所有的代码都移植过去……
7 E2 ]( G, m/ i4 u- GScott Gartner,Silverback Learning Solutions(Boise,ID)的高级软件工程师,50多岁/ O" r1 C5 k1 B" r+ i
! l. o$ h. H) `3 O v3 T
专长:框架、解析器、建模、图形、数据库子系统的设计和实现,数据库设计(SQL、DML、DDL 和 LINQ)、xml 设计、单点登录方案(SSO)、互联网应用、Windows 应用和动画。
8 w' D/ v: u5 p- U5 k/ Q# Z我已经做了 34 年的程序员,而我的简历只要一张纸就可以装下。所有超过 5 年的技术在简历上都只是一笔带过。我有第二张简历,上面列出了所有我用过的编程语言和开发工具、数据库、动画系统,等等。这样,大家可以更容易了解我。我只在被问到的时候才会拿出第二张简历。
6 w) N" B1 k+ g在大公司里(至少对于我来说),老程序员一般都想转到管理层,这也是很常见的一种现象。我一直面临着类似的选择,但我不擅长管理,我只喜欢成为一名程序员或架构师。+ d. j$ W7 L0 G6 p0 W; G0 u9 |0 I4 A6 F
我发现我的记忆力大不如前,也没办法记住大型系统的全部模型。不过,我发现我那些丰富的经验变得越来越有价值。+ b/ ?/ V7 k6 I/ i5 {! n
我们不得不承认我们的整个职业生涯必须不断地接收训练成长,世事变化得太快,如果止步不前,终将被淘汰。
2 G9 ?4 u6 x& _" V/ W: B每两年我就会学习一种新的编程语言,有一些是我自己想学的,不过大部分是因为技术发展的需要(也有的是因为新工作的要求)。这样很有趣。目前我在学习数据仓库(OLAP)、ETL 处理、Star Schemas 和 Cubes。$ `4 J% h3 E2 [+ Q$ V, U- j7 L
Brian Bowman,SAS(Cary,NC)的首席软件工程师,56岁% S, G5 J" f9 s# m5 h
5 {5 D2 ]2 t0 V2 k5 G/ {专长:专利文件系统或数据库的内部组件、持久化数据结构、目录和索引搜索技术、服务器管理、DASD IO 驱动、机器码生成或跨架构的代码转换、对象持久化、客户端与服务器端的接口、多租户、分布式缓存,以及大规模的授权系统(实施、管理和日志)。目前在 SAS Viya 平台上做 Cloud Analytics Service 方面的研究、设计和编程工作。
; z! r4 m0 j9 T: u% L/ ]2 `我目前团队成员的平均年龄为 50 岁,而且每一位成员都有超过 20 年的系统软件开发经验。
1 |: N" }( E6 E8 \我和我的同事们花了很多时间在编码、调试、测试和解答系统架构问题上面。有些同事还涉及硬件技术评估、在大会上呈献演讲,以及为开源社区贡献力量,等等。8 b' H2 P# i5 g' H# j: O3 q' S i
在过去两年,我一直是某软件公司精英团队的成员之一,这个公司有很多非常出色的工程师,很多都有高级的计算机和应用数学等专业的学位。在那之前,我在一个小型的团队里工作了超过 10 年的时间,我们从无到有设计开发了一个多线程的元数据对象集群服务器。3 b/ H3 |( y, U/ \& ^2 u8 l
团队里与我的关系最为密切的同事比我大 5 到 6 岁。在那期间,我获得了 4 项美国国家专利……那些都是在我 40 岁之后获得的。
% p- \ b* l- m4 A0 o% ^; o& p只要我还能做出有意义的贡献,我就会一直工作下去。我多次给我的职业生涯充电,从最早的学习和研究,到后来的工作岗位的需要。这是我的本性,也是激励我持续进步的动力。& Q9 q2 }- y; R5 D% | G
我不认为现今的技术只能让我干到 70 岁。我的职业生涯从 1983 年开始,我通过四项主要的计算机技能生存下来。
+ }6 V7 h# O t3 y. ~ H5 l7 q(1)汇编语言级别的大型机系统编程。2 Y) K$ a8 H. ]1 P- `
(2)基于 C 语言的多主机平台的可移植编程,包括桌面、中型 Unix 网络、小型机的后续产品(如 VAX),以及大型机。
' Q( w+ `3 C2 d(3)多层集群服务器环境,由后端的多线程 C 以及处于中间层满足高可用要求的 Java 组成,主要面向 Windows 服务器和 Unix 环境,也包括 Linux。" u- D5 f% _$ E7 B% T
(4)基于多线程 C 的大规模并行网格计算,满足虚拟的无限伸缩。. U5 P" w7 {- K9 ]
虽然我所拥有的这些技能可以干到退休,但在未来的几年,我还会将我的专业知识领域扩展到机器学习方面。1 B6 x- x9 L m
或许在 10 年之后,对普通程序员的需求会大幅下降。如果一个人真的喜欢计算机技术,但是在编程方面达不到更高的水平,那么可以考虑成为一名经验丰富的系统管理员。他们总有很多工作要做,比如配置、部署和维护系统。3 g( Y& x% t/ H" t$ B1 K
Alec Cawley,DisplayLink(Palo Alto,California)的首席软件研究员,60多岁
. r, B; i& `4 O! l" ?2 }& w8 ~4 u( ^ A: K
专长:嵌入式、多线程、多进程、驱动、通信栈、C/C++、Java、Python、硬件。软件架构师 / 工程师,特别是在与硬件紧密接触的软件系统,与硬件工程师一起工作,最大化发挥软件和硬件的效能。4 m/ w/ G& y% Q3 H$ S" X
在我 62 岁的时候,我已经是公司里年纪最大的开发者了,其他人大都是 40 多岁或 50 出头。
4 R( g. [, Y( W0 Q3 K我最年轻的同事应该是 20 多岁,他们与我有 35 年的年纪差别,不过这不是问题。: N4 a! e! s4 D' ~, H4 W6 x9 N
我们要拥抱技术。现在的世界与我的职业生涯刚开始的时候(穿孔纸带时期的 Fortran)已经很不一样了,而变化仍然在持续。但反过来说,需要解决的问题总是很相似的,无非就是如何将人类的需求转成计算机可以做的事情,以及如何避免犯错、如何找出不可避免所犯下的错误。编程语言、开发环境、工具套件、API 等东西只是解决问题的手段,我们只是在需要它们的时候才去学习如何使用它们。
+ |" a# ^" c8 G1 i我是从穿孔纸带开始的。即使是到了磁盘文件时代,我仍然是最早从行式打印机里读取程序的人。后来就有了普通文本编辑器。现在我使用具有语法高亮功能的 IDE。, ?) F% ?: K3 o- a: f4 y
我认为,在 10 到 20 年的时间里,仍然需要软件开发人员。在我看来,软件开发者的工作就是把客户的需求转换成计算机执行的指令,而这样的工作是不可或缺的。这个世界总是需要一些高手,他们在计算机方面比普通人懂得更多,并且掌握了大量与工具相关的知识(软件包、API、接口,等等)。* e& c( C+ |3 O2 v' @ N
在选择公司方面,我是幸运的。我的大部分时间都花在了软件开发上,而且总能做一些以前没有做过的事情。软件开发里总有一些重复性的工作,我可以想象得出那样做是很无聊的。不过,如果你总是在做新的东西,那就不会无聊了。1 w Q2 Y$ y) h, ^; k% D
我所在的嵌入式领域似乎比应用程序更加能够扛住潮流的冲刷。应用程序每几年就会有新的东西出现,有些几乎是昙花一现,有些会持续一段时间,经历巅峰,然后逝去。而嵌入式一直保持坚挺,以 C 语言为基础,再融合一点 C++。另一方面,硬件也在持续发生变化,这让事情变得更加有趣。
3 h) ~+ u& K* P# f+ lVictor Volkman,Proquest(Ann Arbor,MI)的高级软件工程师,54岁
/ s3 o. Z! u) N4 S& o: I
$ L& x7 M6 ~7 h* l4 s/ y' f( }; s专长:编程方面擅长 Python、Linux、C/C++、.NET,数据库方面精通 MS Access、MySQL 和所有基于 SQL 的环境,还有 TCP/IP、企业系统自动化和分布式计算方面的经验。2 |5 g+ ~7 V* C0 s- T7 ~
架构与管理是两道平行线。在超过 250 人的公司里,技术人员一般都会有这两条路可以走。1 |5 y& U0 b3 O8 O, z4 _" d5 t e
你喜欢你正在做的事情吗?如果是,那么就继续做下去。为了一点薪水而放弃你所喜欢的事情,整天摆弄会议和邮件,这样会让你得不偿失。
X2 C1 B( m* a( [1 d' c每过两年,游戏规则就会发生变化。不过不用为此感到苦恼。花 3 到 4 天时间学习新的编程环境,然后用它们来支持业务。在过去的 30 年,我几乎每 4 年就要学习新的东西。我所在的团队有 6 个人,年龄从 48 岁到 56 岁。我们经历了 3 到 8 次的技术更新。8 w! R. w# N+ I* o) G! Q
以下是我的职业概览。) r5 c6 e! E, M' Q1 p8 u
(1)从使用 C 和汇编语言编写 MS-DOS 代码开始# R8 `. o6 J& T) _% B! C
(2)学习使用 C++ 和 MFC 开发 Windows 应用程序) `! e3 H% @0 r2 D" Q s8 R" U5 q4 o
(3)学习使用 Unix Perl 开发基于 CGI-BIN 的 Web 应用
9 @' l, e9 [/ I$ G1 E2 n0 f4 `7 @(4)学习 C#
T M& R* e: K( }4 t* a(5)学习 Java 和 JSP$ M, U+ r$ I }; S
(6)学习智能手机开发:iOS/Android/Blackberry- H9 \3 l( N. [- t6 j, ?
(7)回到 Unix,开始使用 Python
& U* V \7 v; Z2 H+ L2 E4 n7 S4 q(8)AWS 开发(EC2、RDS、SQS,等等)
0 ]& Y4 c$ k: |9 YKurt Guntheroth,软件工程师,50多岁! ?" f: A i9 X, ^- R
- @) d& }( N$ S
专长:Windows、Linux/Unix、嵌入式;算法设计、C++、C、多线程和分布式、电信、安全、套接字编程、标准委员会成员、产品计划和概念落地;TQM、ISO 9000、敏捷开发和传统开发方法论。
! p" m9 ^, {7 L1 Y W$ j软件开发仍然是一个年轻的领域,工具和技术仍然在发生快速的变化。如果软件开发人员不能持续地更新他们的技能,在不到 20 年的时间里,他们就会过时。所以,一个 40 岁的老程序员很快就会发现自己已经无法胜任工作,而且前途堪忧。* I3 T- R" e& k Z0 r& \
好的开发人员会持续学习,直到他们退休,比如 Ken Thompsons 和 Bjarne Stroustrups。不过,我们大多数人(特别是 40 岁左右的)最终都会意识到,我们并不能成为行业的大神。& R$ r6 \4 r. h& C& B, f* A
C++ 变化很大,每几年就会有新版本出现,并且包含了全新的特性,我从来没有停止过学习。也就是说,我已经成为了一个非常有经验的 C++ 开发者,拥有超过 20 年的全职系统编程经验。如果有人要我给自己的经验打分,从 1 分到 10 分,那么毫无疑问,我会给打自己 9 分,因为比我更了解 C++ 的人只有那些写书的人。后来,我写了一本有关 C++ 优化的书。
# ~ k# n6 `1 P- S1 Y/ @: G% p编程是一件很容易的事情。你告诉它们做什么,它们就做什么。它们是可以信赖的,也是可靠的。对于代码来说,无所谓好日子,也无所谓糟糕的日子,它们存在的意义就是在你与它们发生交互的时候。代码可能会是难啃的骨头,它们要求对细节的重度关注和相当程度的脑力付出。
4 V+ t5 Y; U7 {! P! X4 \人类与代码完全不一样,人类狡猾、变化多端,而且不可能充当工具使用。你不能直接告诉他们做什么,你要去影响他们,这样他们才会做你需要他们做的事情。他们不会直接对你的输入做出响应,而是间接地对你的鼓励或者你所提供的一些奖励物品做出响应。虽然人类对奖惩很敏感,但如果只是通过这种方式来管理人类并不会奏效。管理应该要像与家人、朋友和同伴互动一样。如果你喜欢与人打交道,那么你就会喜欢上管理。如果你不喜欢与人打交道,那么你就不会成为一个成功的管理者。; l- ]. W# k. d/ R6 E/ x
薪水高的管理者比薪水高的程序员赚得更多,不过他们需要有很多名校的学历背景,拥有良好的人际网络和政治同盟,也需要有一定程度的冷酷无情来震慑大部分人。而编程不需要这种冷酷无情,这也就是编程很好的一个方面。编程是关于创新,而不是操纵。+ M! b5 l3 u& @# ^6 a T
所以,你要问问自己,你更喜欢哪一种交互模式,是代码的确定性和优雅,还是人类的友情和领导力?喜欢代码完全没有问题,那些高级架构师和 CTO 也能赚很多钱。
8 \* H7 v9 Z. p* Z! \James Grenning,软件顾问,60多岁
- p7 o) `$ A# q8 ^% h
0 z) B0 z6 E) [$ W6 N, Q专长:面向对象软件设计、测试驱动开发(C、C++、Java、C#)、嵌入式软件、重构、极限编程、Scrum、敏捷开发、发布计划、增量计划。C 和 C++ 单元测试框架 CppUTest 的主要贡献者之一。嵌入式系统大会和敏捷大会的演讲人。Agile Manifesto 的初始作者之一。
- k# S- r3 A! n保持学习。我 62 岁了还在编程,我喜欢编程。. W5 ^3 s, g9 f) D- r+ B
我会花一些时间在管理上,这对我来说是很重要的。不过我还是决定把编程和软件设计作为我的最爱。在我从管理上学了一些东西之后,我决定还是回到我最喜欢的软件开发上。
( B. ^; ?5 k, d' O! A+ T为了保证你的价值,你要确保 40 年的经验是不重复的。我们生活在一个快速变化的世界,不仅仅是技术,也包括我们如何构建软件。
4 |; p1 R# K: l8 q) l4 ~把东西做出来固然是好,但那样还远远不够。你还要让产品和代码更有用,能存活更长的时间。你要知道如何成为团队的一员。要想让职业生涯长久、成功,同时能赚到钱,只是把东西做出来是远远不够的。9 G) j# z* ]" ~4 a- f: l
写在最后/ Y4 F2 Z* k( u- }# j# H* {
笔者在很多地方都看到过关于程序员的年龄与职业发展的问题的讨论,让我印象最深的一条评论是这么说的:
+ M% R2 u% X/ x- e* T我想等到我八十多岁了,躺在医院的病床上,还能把医院的系统给黑了,生命不息,编程不止!( l5 |' E& ~( v( T4 c( o
你会在一线开发岗上待多久呢?
_! Z$ n x6 _# z# Y' W互联网的飞速发展也导致了一名优秀的程序员不能安于现状,停滞不前!“我自己是一名从事了10年的C/C++程序员,辞职目前在做讲师,今年年初我花了一个月整理了一份最适合2019年学习的c++项目实战以及基础教程干货,送给每一位编程小伙伴,这里是小白聚集地,欢迎初学和进阶中的小伙伴。"* E* n; S* T$ d2 n
官方企鹅群:868017157(持续招募中)
+ {7 ]; G+ x- ?1 j9 {% z+ I
J& T8 k9 f% u" ?来源:http://www.yidianzixun.com/article/0M9RQBeL; D& Z- s) o# E; w7 F7 x
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|