本文罗列了 6 位年龄超过 40 岁的老程序员们的故事,他们都是顶级的软件开发者,拒绝从事管理岗位,仍然活跃在开发一线,将编程作为生活收入的主要来源。
杨先生,软件工程师,50多岁
专长:Windows、Linux/Unix、嵌入式;算法设计、C++、C、多线程和分布式、电信、安全、套接字编程、标准委员会成员、产品计划和概念落地;TQM、ISO 9000、敏捷开发和传统开发方法论。
软件开发仍然是一个年轻的领域,工具和技术仍然在发生快速的变化。如果软件开发人员不能持续地更新他们的技能,在不到 20 年的时间里,他们就会过时。所以,一个 40 岁的老程序员很快就会发现自己已经无法胜任工作,而且前途堪忧。
好的开发人员会持续学习,直到他们退休,比如 Ken Thompsons 和 Bjarne Stroustrups。不过,我们大多数人(特别是 40 岁左右的)最终都会意识到,我们并不能成为行业的大神。
C++ 变化很大,每几年就会有新版本出现,并且包含了全新的特性,我从来没有停止过学习。也就是说,我已经成为了一个非常有经验的 C++ 开发者,拥有超过 20 年的全职系统编程经验。如果有人要我给自己的经验打分,从 1 分到 10 分,那么毫无疑问,我会给打自己 9 分,因为比我更了解 C++ 的人只有那些写书的人。后来,我写了一本有关 C++ 优化的书。
编程是一件很容易的事情。你告诉它们做什么,它们就做什么。它们是可以信赖的,也是可靠的。对于代码来说,无所谓好日子,也无所谓糟糕的日子,它们存在的意义就是在你与它们发生交互的时候。代码可能会是难啃的骨头,它们要求对细节的重度关注和相当程度的脑力付出。
人类与代码完全不一样,人类狡猾、变化多端,而且不可能充当工具使用。你不能直接告诉他们做什么,你要去影响他们,这样他们才会做你需要他们做的事情。他们不会直接对你的输入做出响应,而是间接地对你的鼓励或者你所提供的一些奖励物品做出响应。虽然人类对奖惩很敏感,但如果只是通过这种方式来管理人类并不会奏效。管理应该要像与家人、朋友和同伴互动一样。如果你喜欢与人打交道,那么你就会喜欢上管理。如果你不喜欢与人打交道,那么你就不会成为一个成功的管理者。
薪水高的管理者比薪水高的程序员赚得更多,不过他们需要有很多名校的学历背景,拥有良好的人际网络和政治同盟,也需要有一定程度的冷酷无情来震慑大部分人。而编程不需要这种冷酷无情,这也就是编程很好的一个方面。编程是关于创新,而不是操纵。
所以,你要问问自己,你更喜欢哪一种交互模式,是代码的确定性和优雅,还是人类的友情和领导力?喜欢代码完全没有问题,那些高级架构师和 CTO 也能赚很多钱。
吴先生,高级软件工程师,54岁
专长:编程方面擅长 Python、Linux、C/C++、.NET,数据库方面精通 MS Access、MySQL 和所有基于 SQL 的环境,还有 TCP/IP、企业系统自动化和分布式计算方面的经验。
架构与管理是两道平行线。在超过 250 人的公司里,技术人员一般都会有这两条路可以走。
你喜欢你正在做的事情吗?如果是,那么就继续做下去。为了一点薪水而放弃你所喜欢的事情,整天摆弄会议和邮件,这样会让你得不偿失。
每过两年,游戏规则就会发生变化。不过不用为此感到苦恼。花 3 到 4 天时间学习新的编程环境,然后用它们来支持业务。在过去的 30 年,我几乎每 4 年就要学习新的东西。我所在的团队有 6 个人,年龄从 48 岁到 56 岁。我们经历了 3 到 8 次的技术更新。
以下是我的职业概览。
从使用 C 和汇编语言编写 MS-DOS 代码开始
学习使用 C++ 和 MFC 开发 Windows 应用程序
学习使用 Unix Perl 开发基于 CGI-BIN 的 Web 应用
学习 C#
学习 Java 和 JSP
学习智能手机开发:iOS/Android/Blackberry
回到 Unix,开始使用 Python
AWS 开发(EC2、RDS、SQS,等等)
陈先生 ,高级软件工程师,50多岁
专长:框架、解析器、建模、图形、数据库子系统的设计和实现,数据库设计(SQL、DML、DDL 和 LINQ)、xml 设计、单点登录方案(SSO)、互联网应用、Windows 应用和动画。
我已经做了 34 年的程序员,而我的简历只要一张纸就可以装下。所有超过 5 年的技术在简历上都只是一笔带过。我有第二张简历,上面列出了所有我用过的编程语言和开发工具、数据库、动画系统,等等。这样,大家可以更容易了解我。我只在被问到的时候才会拿出第二张简历。
在大公司里(至少对于我来说),老程序员一般都想转到管理层,这也是很常见的一种现象。我一直面临着类似的选择,但我不擅长管理,我只喜欢成为一名程序员或架构师。
我发现我的记忆力大不如前,也没办法记住大型系统的全部模型。不过,我发现我那些丰富的经验变得越来越有价值。
我们不得不承认我们的整个职业生涯必须不断地接收训练成长,世事变化得太快,如果止步不前,终将被淘汰。
每两年我就会学习一种新的编程语言,有一些是我自己想学的,不过大部分是因为技术发展的需要(也有的是因为新工作的要求)。这样很有趣。目前我在学习数据仓库(OLAP)、ETL 处理、Star Schemas 和 Cubes。
李先生,软件架构师和软件工程师,60岁
专长:C、C++、Java
在我准备成为一名律师的时候,我才开始学习计算机科学(如果你可以想象这是怎样的一种情况)……现在,我通过编写大量具有良好文档化和功能性的 Java 代码来获得我的生活收入(起码现阶段是这样的)。
在 Windows 3.0 时代(大约是在 1986 年前后,我也记不太清楚了)我就开始在 Windows 上做开发。大约是在 10 年前,我转到 Mac 上,之后就没有再回到 Windows 上。我感觉自己就是一个使用 MacBook Pro 工作的极客……使用 C、C++、Java 和 Swift 进行开发……
我最近的一份工作需要从头设计一整个系统,这也是我第一次做这样的事情。我现在要跟上 Web 和移动开发的速度有点吃力,但离 “垂暮” 还很远,尽管我已经 60 岁了。过去我也获得一些 “管理者” 相关的工作,不过我都拒绝了,我还是更愿意选择编程工作……
不过,我也知道,我的一些与我年纪相仿(或者年纪更大)但已下岗的同事在找工作时遇到了麻烦(“是因为经验太丰富了吗”),所以我知道人们是怎么看待那些过了一把年纪的人,认为他们没有未来。但是,我认为最关键的是,你要为你的雇主持续地创造价值。
我目前是 Apache 软件基金会 Pivot 项目的 PMC 主席。作为一名 Java 开发人员(Java 相关项目的提交者),我希望 Java 会永生。最起码不要出现更好的语言,要我把所有的代码都移植过去……
石先生,软件顾问,60多岁
专长:面向对象软件设计、测试驱动开发(C、C++、Java、C#)、嵌入式软件、重构、极限编程、Scrum、敏捷开发、发布计划、增量计划。C 和 C++ 单元测试框架 CppUTest 的主要贡献者之一。嵌入式系统大会和敏捷大会的演讲人。Agile Manifesto 的初始作者之一。
保持学习,我 62 岁了还在编程,我喜欢编程。
我会花一些时间在管理上,这对我来说是很重要的。不过我还是决定把编程和软件设计作为我的最爱。在我从管理上学了一些东西之后,我决定还是回到我最喜欢的软件开发上。
为了保证你的价值,你要确保 40 年的经验是不重复的。我们生活在一个快速变化的世界,不仅仅是技术,也包括我们如何构建软件。
把东西做出来固然是好,但那样还远远不够。你还要让产品和代码更有用,能存活更长的时间。你要知道如何成为团队的一员。要想让职业生涯长久、成功,同时能赚到钱,只是把东西做出来是远远不够的。
欢迎工作一到五年的Java工程师朋友们加入Java高级架构:790147974
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,
MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)
合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
有疑问加站长微信联系(非本文作者)