一个老程序员的30年生涯回顾(译文)

作者: 阮一峰

日期: 2019年12月19日

前几天,我读到一篇文章,一个60多岁老程序员回顾自己的人生。

读完以后,我很受触动,觉得对于软件行业的很多看法,我也有同感。下面就是这篇文章的翻译。

====================================

一个老程序员的30年生涯回顾(译文)

原文网址:hackernoon.com

作者:Chris Fox

1、

1967年,我13岁时开始学习编程。

1988年,我正式进入了软件行业,通过编程养活自己。那一年,我34岁。

2、

1989年,我加入微软公司,那是微软为程序员提供单人办公室的最后一年。我们编程时,几乎没有干扰,这真是太好了。当时,微软的观念是必须为程序员创造不受打扰的环境,让他们全身心地投入工作。

3、

1990年5月,Windows 3.0 发布,公司出现了真正的变化。

突然之间,我与一个吸烟的同事共用一个办公室,他整天在电话里大声聊天。更糟糕的是,我们开始有更多的会议。

4、

接下来的20年,情况越变越糟。程序员像农奴一样被使用,许多人饱受压力、精疲力尽,每周工作70个小时以上。但是实际上,其中真正用来完成工作的时间只有4-6个小时,其余时间都为通过质量检查系统苦苦挣扎,设法应付各种质量措施。

5、

到了2009年,一切都变得混乱了。程序员对代码质量的热爱,完全被复选框式的机械处理取代了。在2008年末,我的主管要求我,代码都必须有单元测试,以便在系统中为该项目勾选"具有单元测试"的那个框。不久,他又要求我尝试"测试驱动的开发"(TDD)的新编程模式。

最后,当他们要求我做结对编程时,第二天我就因为愤怒而辞职了。

6、

离开微软后,我去了西雅图市中心的 Real Networks 公司工作。在西雅图,交通堵塞是一个大问题,我一般在早上高峰时间之后的9:30去上班,这样只要开车30分钟,就能到公司,还算不错。

7、

不久,我所在的团队开始尝试敏捷开发,每天早上8:30举行一次"站立会议"。这正好赶上早高峰,30分钟的通勤时间变成了90分钟,我必须在早上7:00出门才行。我几乎没有办法准时到达,并且感到非常疲倦。我询问是否可以稍微推迟会议。不行,你难道不知道站立会议必须在早晨举行吗?

为此,我只能(无偿地)多花了额外的时间开车去上班。

8、

这种会议真是很荒谬,每个程序员报告自己正在做的事情。大部分时候,我们做的事情跟昨天相同,偶尔会做一些新的事情,但没有什么特别可说的。会议上,产品经理会表现出生机勃勃、欢快愉悦的情绪,听起来很投入,而实际上我知道他们上班时很多时间都在脸书上玩游戏。

9、

许多次,我听到"故事"(Story)这个词。我问,"故事"是什么意思?回答是用户场景或者使用案例的新名称。随着我对敏捷开发的了解越多,遇到的重命名和名词重定义就越多。我看不出来这能对工作带来多少的新价值,唯一带来的就是更多的会议。

我建议不要使用"故事"这个名词,结果被冷淡地告知,"故事"是敏捷开发的一部分,我们将紧跟这种新的开发方法。

10、

我的原计划是,2019年65岁时退休,然后搬到东南亚国家享受退休生活。但是,经历过了沉闷的站立会议、白板上的迭代看板、一系列高压力的工作、对"故事"的不停谈论,我越来越对这个工作感到恶心。

2010年11月15日,56岁时,我退休了。

11、

我在越南买了一栋房子(上图),然后收拾行装,离开了美国。我非常喜欢这栋漂亮的新房子,准备在那边弹吉他,阅读物理书籍,体验截然不同的文化,放松身心。

12、

在越南过了一段日子以后,生活变得很闲,我只好把时间用来学越南语,否则就太无聊了。

13、

一位朋友建议我可以试试 iPhone 和 iPad 开发,软件工具是免费的。我怀念编程,就买了一台 MacBook,学习了 iOS、Objective-C 和 Xcode,很快就写出了一个可以出售的 App。我又回到了这个行业。

14、

2011年到2016年,我一开始为自己写 iOS 和 MacOS 应用程序,然后出售。这样也不错,但是我想挣更多的钱,就开始通过自由职业网站的中介,接一些客户的活。

15、

2017年,我获得了一家加利福尼亚公司的远程工作,为他们做服务器端开发。我学习了 C#、Entity 框架、ASP. NET。当推荐我的人离职了,我就接管了服务器端和数据库开发。这样已经持续了30个月。这是一段很棒的经历,让我掌握了一些最新技能,我喜欢服务器端和数据库编程。

这些时间我一直是一个人工作,但也是团队的一员。整个开发部门都是远程的,浏览器客户端开发人员在悉尼,我在越南。我们通过 RESTful API 协作,彼此都是独立工作。

16、

回顾我的30年程序员生涯,软件行业发生了翻天覆地的变化。

现在的软件业有更多时尚的行话和术语,比如用户故事、技术债务、敏捷、重构、迭代、里程碑等等。在我看来,所谓迭代,就是说这段时间你会过度劳累,没有其他含义。

奇怪的是,他们用各种办法监督程序员,但是招聘的时候,职位要求依然写着,需要具有独立工作精神、高度主动性的人。这真是讽刺。

17、

现在的软件业还流行开放办公室,这意味着完全不可能集中精力。你的工作被持续不断地打断,没法关门保持沉默和集中注意力。如果你戴着耳机,就意味着你的团队合作精神不够。

18、

最后,测试已经变味了。以前,我在微软公司,我们没有那么认真对待测试。微软经常开玩笑说,任何人都不应该使用偶数版本的软件,因为它是测试版,适合那些愿意向我们报告错误的客户。比如,请勿使用2.0版,因为2.1版将修复客户报告的所有2.0版的错误,至少是比较严重的错误。

现在的软件业提倡测试驱动开发这种荒谬方法。我在许多地方都读到,在软件开发中,没有什么比单元测试更重要了,甚至比交付成果的本身还要重要。单元测试是设计,是定义API的地方。测试覆盖率不到100%,就是存在欠缺,100%覆盖率是程序员的荣誉, 开发人员应该负责测试他们的产品。我们不再需要黑匣子测试流程,也不需要测试工程师。

我认为,这些态度充满了狂热主义。每个人都有盲点,总是会存在忽略编写测试的案例与忽略编写代码的案例。

19、

我喜欢编程,喜欢解决问题和开发功能,从小开始直到现在都是如此。

以前,我选择服从那些流行的做法,但是现在不会了。我不会在开放式办公室工作,不会持续一个星期听所谓的专业术语,不会将各种新词用来描述旧事物,不会结对编程,不会参加频繁的会议,不会在意对团队协作精神的要求,也不会嘲笑那些独自工作的人。

20、

我喜欢服务器端开发,未来希望还可以做这方面的工作。同时,我正在转向技术写作,学习远程工作所需的新技能。

我喜欢现在这种一点不疯狂的环境。

(完)

留言(71条)

离职状态,找工作中。

现在的程序员,大多数都没有独立生存(挣钱)的能力,所以不得依存于公司生存,不得不上班,接受管理和「剥削」。国内的环境又决定了远程开发是理想主义。

离职待业时,反而是学习东西最快的时候。因为一旦工作,大多数时候就是开发业务需求,常常加班,大小周,没有太多的精力去学习。等适应后,又不容易从舒适区中走出来。进而死循环。

作者是 真.程序员,普通码农没办法,混口饭吃啊

退休后远程自由编写代码这一段很酷。。。

1.原来好多欧美人退休都是去东南亚,真爽
2.但是要有钱

看到第二张图,我还以为是David Cutler的故事......

开发方式变化了,早年的编程是近乎科学,因为涉及到受限环境(内存和硬盘小,处理器慢),算法的要求高;现在的编程相对更傻瓜化,避免出错,更大众化,所以待遇也从“单人办公室”到了“大通铺”的时代,这个似乎,,,,只能这样了。

退休后的生活才是真自我

--------------
他们用各种办法监督程序员,但是招聘的时候,职位要求依然写着,需要具有独立工作精神、高度主动性的人。这真是讽刺。
--------------

真实=. =!

很佩服阮一峰老师

确实有很多同感,当软件越来越复杂时,使用的技术会越来越多,需要学习的成本也会越来越高。客户或产品经理对产品的期望也越来越高。陷入了循环中。

看出来了,单身

感同身受,每天早上的晨会不知道有什么好说的,每天干的事大多数情况下都和昨天一样,再加上天天都要写的日报,吵闹的开放办公室,真是让人烦躁

阮老师 应该也是深有感触

好奇的是退休后搬去越南!
医疗怎么办?老了之后这是个大问题啊

想了解下国内远程工作。。。

程序员:
1、超长的工作时间;
2、超长的通勤时间;
3、所谓的测试驱动开发;
4、各种各样的会议;名词
5、频繁的需求变更导致的加班

我在现在还是25岁的时候就开始期待人家56岁的工作状态。但遗憾的却没有这个能力,不过至少有了一点盼头,有了目标,并且开始为之学习。

原本脑力密集型的程序开发工作变成了流水线式开发,业务越来越复杂,每个人负责的模块也越来越专业,但编程门槛越来越低。个人开发效率下降,但整体开发效率提升了。

你不去统治别人别人就统治你

作者真正的观点是:开发应该为解决问题、提供业务价值服务,而不是抓什么质量管理,流程管理,。。。那些只不过是管理人员找存在感的工具

引用czx的发言:

作者真正的观点是:开发应该为解决问题、提供业务价值服务,而不是抓什么质量管理,流程管理,。。。那些只不过是管理人员找存在感的工具

赞同

作者很幸运地找到了自己生活的平衡点,但是,我们呢?

如果你有足够的实力 你可以像他一样

程序员应该像作家或者画家那样工作,而不是流水线上的员工。

现在之所以越来越流水线化,我觉得根本原因是程序员本身没法创造需求,只能接受需求。作家或者画家之所以没有流水线化,因为他们时时刻刻都在创造。

所以要想保持创造力,再工作之余需要观察周围和社会,创造属于自己的软件,才能保持竞争。

向往这样的程序员生活

最低的开发成本,最短的开发时间,最快达到客户标准。其他的因素不在资本家考虑范围。
个体与集体的不同。

公司工作毕竟不同于科研单位,利润最大化才是资本家考虑的。唉。。。

国内项目是,没有功能需求只有想法,系统还没上线,功能需求已经更换N次了。

我也想远程工作,这样就能不上下班了,自由度也提高了。

普通美国程序员20万美元年薪,5万美元将工作包给中国程序员。美国程序员不用干活就能得到15万美元年薪;中国程序员也得到不用996的35万人民币年薪。皆大欢喜!

好棒。。感觉我的人生也有一样的轨迹了。。

大佬,我想把这篇文章搬运到我的公众号,可以吗?我会备注参考您的博客。

我没有那么长的工作时间,不过是个干了17年的程序员。在我看来,这篇文章中的很多观点是错的,或者不适于生成高质量、可维护、可靠的软件。我并不想一点一点地指出我认为不妥的地方。如果读者是资深程序员也就罢了。如果读者是Junior Engineer,那一定要用自己的脑袋仔细想一想论点是否可靠。观点可以商榷,但是无论做什么,Critical Thinking都是终生受益的技能。

这一直是我理想中的生活啊!

每个人都有自己向往的生活方式和行事准则,祝福前辈!

发愤忘食,乐以忘忧,不知老之将至

看完文章及评论的感受只能用“怪异”来形容。
一个30年的老程序员,不喜欢传统的软件开发流程,也不喜欢敏捷式的新式开发流程,似乎只能说明他喜欢的是独立开发这种。可是他难道真的不明白软件开发不是一个人的事,而是需要团队协作的?敏捷开发不正是为了防止瀑布开发那种僵化不能适应需求变化而创造出来的吗?他说“随着他对敏捷开发的理解越来越多”,但我实在不知道他对敏捷开发的实质理解有多少,而仅仅因为站会的召开时间而批判它。
另外评论也很搞笑,质量管理,测试驱动开发,敏捷开发,结对编程,这些基本在国内很少有被实践的事务被作者批评,竟然也引来附和。我记得当我第一次听说测试驱动敏捷开发时,感到的是“哦哈”。也许只是因为阮工和其他读者都是国内大互联网公司的员工,对这些司空见惯了?

这篇文章简直是,,,读那句话都很神清气爽

引用danmaidesenling的发言:

1.原来好多欧美人退休都是去东南亚,真爽
2.但是要有钱

去东南亚的欧美人都是没钱的。有钱的都去迈阿密了。

在国内都是为了生存,我也向往变成自由!哎。。。

引用mybells的发言:

我也想远程工作,这样就能不上下班了,自由度也提高了。

讲真,远程工作也要有独立的办公室,把办公桌和床放在同一个房间,效率能有多高?

毕竟博主在阿里,一定深有体会

一个10年+程序员路过,不知道从什么时候开始,大家都很瞧不起程序员,
刚开始学程序的时候,对这个东西是无比的好奇,看着自己用C在黑窗口写出的程序是那么的激动和自豪。
随着行业人员的饱和,写代码开始变成搬砖,对代码的好奇与激情早已淡去,只能每天麻木的搬砖。
还要应付不断的加班,身体也是越来越吃不消,真心不想再IT行业混了,可是离开,又不知道如何养活自己。
真羡慕文中的生活,还可以跑去越南买房子住,可是我们大部分程序员就连老家已经有房子了,也住不上!

原文作者是个怨妇,56岁以前是个loser,56岁以后,如果不是因为他是美国人,之前挣的是美元,他依然会是个loser。

难道真的就是要什么就学什么吗?作者从1967年开始学习编程, 到文末提到的2017年在远程工作,从事软件编程50余年。为何我都开始在感叹学不动了, 编程近7年,感觉心累。

不知道说什么,就是感觉心里有些酸楚

深有感触。

我非常反对TDD,Test-Driven Development。
TDD的方式是先写出一堆test cases,然后写代码,然后只要代码能通过所有的test cases,就可以提交,认为完成工作。
但是理论上,一个产品是永远没法穷尽测试的。比如一个API有N个参数,每个参数有一个取值范围。实际中是没法把所有参数的取值集合都穷尽的。
所以TDD在实际应用中,会演变为,程序员先写个滥代码,然后看哪个test case不能通过,然后针对这个case进行优化。最后提交的代码是滥得将将能通过测试的代码。
所以形式反而成了目的。

Agile我觉得有可取之处。但是实际应用中会走样。会导致不断修改短期目标,在不同task之间来回切换,导致大量无用overhead开销。至少在我见过的团队里感觉Agile都是弊大于利。比如每天早晨的站会就效率比较低。
包括配对编程pair programming也是这样。思路是好的。但是执行不好反而会影响效率。

可能我比较古板,但是我最认可的还是《人月神话》描述了一种方式,就是一个团队有个大牛做主刀医生,其他人都给他帮手。大牛要对这个病人,也就是项目负责,贯穿整个生命周期。
如果项目太大,就分成若干模块。然后每个模块由一个大牛负责。

写代码有些类似写书,没法用一种100%有效的工业方式管理起来提高效率,还能保证代码高质量。需要因团队,因项目不断调整。所以好的软件团队leader挺不容易的。

没工作这么久,没那么牛,没感觉。

很片面

远程办公真的很棒,既能给公司剩下一些资金,又让员工不用每天奔波在上下班的路上。

引用zhuameng.com的发言:

好奇的是退休后搬去越南!
医疗怎么办?老了之后这是个大问题啊

这有何难,去越南是生活,生病了就回美国

和代码相处是件很有意义的事情 ,比如linus ,不知道10个linus能不完成一个windows,不过微软的人数2019有13万(当然微软不只有windows),而且盖茨长时间占据世界首富位置,说明什么呢
想赚钱不要去当码农,也就是当码农赚不了大钱,但是可以给别人赚大钱,或者改变世界

太贴切了

@Xiang:

深有感触。

实施TDD的前提是有TDD的丰富经验(测试框架、mock框架、实施经验),但是这么有经验的话,一眼就能看出哪种实现有坑,哪里可能会产生问题,为什么还要TDD呢?没有经验的人写的测试代码必然会随时间逐渐腐化,也明显没有写的必要,但是我觉得练手写写单元测试熟悉测试框架还是不错的,可以作为日常工作的辅助工具。

至于TDD本身,我同意文章的观点,过于狂热了:普通人做不到,牛人也不需要做,即使做了也纯属个人爱好,不能要求所有人都做

远离奋斗逼~

太美好了,向往作者的发展方向,以后的生活也有点念头和盼头,期望可以实现,一个程序媛的弱弱发声

引用迷茫的程序媛的发言:

太美好了,向往作者的发展方向,以后的生活也有点念头和盼头,期望可以实现,一个程序媛的弱弱发声

今天我也来看啦

我连程序员都算不上,只是做简单的开发

深有同感,但是大部分人都挣扎于生存

作者没有提到一个生活中很重要的一个问题:家

我现在的生活状态,完全是为了赚钱养家。
业余时间很少能静下心来学习。
大多数时间金钱都花在了双方父母,孩子。

啊哈哈哈,嗝。
最后去越南的生活是每个人都想要的生活状态,只是这个世界好像有那么一丁点病态。

我以为,讨厌敏捷开发洗脑,觉得站会浪费时间,认为觉得自己是大佬编出一些稀奇古怪词语的人是SB。是因为我偏激呢,看来偏激的不只我一个

不用通勤太爽了,远程开发才是正道呀!

同是程序员,在北京工作过,目前在西雅图。
可能因为代际不同,我的感觉和文中主人公完全相反。
1. 开放式办公(北京)和独立办公室(西雅图)。
开放式办公室对我来说完全不是问题,一边编程,一边听同事聊天,很有生活气息,平时大家会分享饮料和零食,待一天也不会累。你可以从个人角度了解很多同事。但是独立办公室,大家聊天少了,安静了,但是工作效率并不会提高,反而更容易走神分心,尤其在团队活动不多的情况下,接触人群的面比较窄。
2. 敏捷开发等等现代开发方法。
因为以敏捷开发为代表的现代化的开发方法,是从学生时代就根深蒂固并且认同的,并且从课本上到实践都证明非常有效非常便捷。
3. 独立开发vs外包开发。
独立开发是非常有意思的,可以弥补在公司工作中无法实现的一些想法和兴趣。
外包开发是非常无聊的,做出的东西完全不属于自己,而且大部分时候都不是团队协作,很无趣。

还有他说的那个交通问题,完全可以选择居住在工作地点附近或者相对折中的位置。
基本上,感觉和这个人代际鸿沟太大了,他的观点也无法认同。

一边旅游一边编程真的很酷啊,将来我有钱了就买一个双体帆船,在大海上编程、钓鱼:)

其实程序员在国内是吃青春饭的,包括环境问题,技术难度问题,能力责任问题,人员成本问题,时间问题,就业问题,健康问题等。

引用隐冬的发言:

我以为,讨厌敏捷开发洗脑,觉得站会浪费时间,认为觉得自己是大佬编出一些稀奇古怪词语的人是SB。是因为我偏激呢,看来偏激的不只我一个

同感,极力反对站会,和一些新词装旧酒和一些故意装B的互联网黑话。

@AReader:

屁股决定脑袋吧,你喜欢的是团队协作,这个程序员习惯的是独立创作,就问最后的生活是不是大多数程序员梦寐以求的生活,成就他这种生活的不是工作方式,而是以往的薪金待遇,从公司角度来讲折腾各种管理流程无可厚非,从个人角度讲待遇给足,人自己愿意待下去既可以,批判不批判敏捷开发是每个人自己的看法,争论方法论毫无必要,能过上自己想要的生活才是赢家。

理想生活

"各种新词用来描述旧事物"
哈哈 比如 领域驱动

新晋程序媛~希望能想文中的人一样对技术保持热爱

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接