前几天,看了一篇60多岁的老程序员回顾人生的文章。读后感触颇深,觉得对于软件行业的很多观点,我也有同感。下面是这篇文章的译文。1.1967年,我13岁开始学习编程。1988年正式进入软件行业,靠编程养活自己。那一年,我34岁。2、我是1989年加入微软的,那是微软为程序员提供单人办公室的最后一年。在我们编程时很少分心是件好事。当时微软的理念是要为程序员创造一个不受打扰的环境,让他们全身心投入到工作中。3、1990年5月,Windows3.0发布,公司发生了真正的变化。突然间,我和一位整天在电话里抽烟和大声聊天的同事共用一个办公室。更糟糕的是,我们开始召开更多会议。4.在接下来的20年里,情况变得越来越糟。程序员像农奴一样被使用,许多人压力很大,精疲力尽,每周工作70多个小时。但实际上,只有4-6个小时的时间真正用于完成工作,其余时间都花在了通过QA系统和尝试应对各种质量措施上。5.到2009年,一切都搞砸了。程序员对代码质量的热爱已经完全被复选框的机械处理所取代。2008年底,我的主管要求我所有的代码都必须有单元测试,所以我在这个项目的系统中勾选了“有单元测试”的复选框。很快,他让我尝试“测试驱动开发”(TDD)的新编程模型。最后,当他们让我做结对编程时,我第二天就一怒之下退出了。6.离开微软后,我去了西雅图市中心的RealNetworks工作。在西雅图,堵车是个大问题,我一般早高峰过后9:30上班,开车30分钟就到了,还不错。7.很快,我的团队开始尝试敏捷开发,每天早上8:30召开“站会”。这正好赶上早高峰,30分钟的通勤时间变成了90分钟,我必须在早上7:00之前出门。我几乎不可能准时到达,而且我很累。我问会议是否可以推迟一点。不是,你不知道站会必须在早上开吗?为此,我不得不花额外的时间开车(无偿)上班。8、这种开会真是可笑,每个程序员都报告自己在干什么。大多数时候,我们做着和昨天一样的事情,偶尔做一些新的事情,但没什么特别的。在会议上,产品经理们会兴高采烈,听起来很投入,而我实际上知道他们在工作中花了很多时间在Facebook上玩游戏。9.很多次,我听到“故事”这个词。我问,“故事”是什么意思?答案是用户场景或用例的新名称。越了解敏捷开发,越是遇到术语的重命名和重新定义。我看不出这会给工作带来多少新价值,唯一会带来的是更多的会议。我建议不要使用术语“故事”只是为了漫不经心地告诉“故事”是敏捷开发的一部分,我们将遵循这种新的开发方法。10.原计划2019年65岁退休,然后移居东南亚国家享受退休生活。但是,在沉闷的站会、白板上的迭代看板、一系列高压力的工作、不停讲“故事”之后,我越来越厌恶这份工作。2010年11月15日,我56岁退休了。11.我在越南买了房子(上图),收拾行李离开了美国。我非常喜欢这座美丽的新房子,并准备弹吉他、阅读物理书籍、体验截然不同的文化并在那里放松身心。12.在越南生活了一段时间后,生活变得很闲,所以我不得不花时间学习越南语,否则太无聊了。13.朋友建议我试试iPhone和iPad开发。软件工具是免费的。我错过了编程,所以我买了一台MacBook,学习了iOS、Objective-C和Xcode,并迅速编写了一个畅销的应用程序。我又回来了。14.2011年到2016年间,我开始为自己编写iOS和MacOS应用程序并进行销售。这还不错,但我想赚更多的钱,所以我开始通过自由职业网站的中介接一些客户工作。15.2017年,我在一家加利福尼亚公司找到了一份远程工作,为他们做服务器端开发。我学习了C#、实体框架、ASP.NET。推荐我的人走后,我接手了服务器端和数据库的开发。这种情况已经持续了30个月。这是一次很棒的经历,让我掌握了一些新技能,我喜欢服务器端和数据库编程。这些时候我一直在独自工作,但也作为团队的一员。整个开发部门都是远程的,浏览器客户端开发人员在悉尼,我在越南。我们通过RESTfulAPI协作,每个API彼此独立工作。16、回顾我30年的程序员生涯,软件行业发生了翻天覆地的变化。现在的软件行业有更多时髦的行话和术语,比如用户故事、技术债务、敏捷、重构、迭代、里程碑等等。在我看来,所谓的迭代就是你在这个时期会过度劳累,并且有没有别的意思。奇怪的是,他们用各种方法来监督程序员,但在招聘的时候,职位要求还是写了,需要有独立工作精神和高度主动性的人。这很讽刺。17、现在软件行业还流行开放式办公室,这意味着完全不可能集中精力。你的工作不断被打断,没有办法关上门静静专注。如果您戴着耳机,则意味着您的团队精神不够好。18.最后,测试失败了。以前,当我在微软时,我们并没有那么认真地对待测试。微软经常开玩笑说,没有人应该使用偶数版本的软件,因为它是为愿意向我们报告错误的客户提供的测试版。例如,不要使用2.0版,因为2.1版会修复客户报告的所有2.0错误,至少是较严重的错误。今天的软件行业提倡可笑的测试驱动开发方法。我在很多地方都读到过,在软件开发中,没有什么比单元测试甚至可交付成果本身更重要的了。单元测试是设计,其中定义了API。如果测试覆盖率低于100%,则为欠缺。100%的覆盖率是程序员的荣誉,开发者应该对自己的产品负责。我们不再需要黑盒测试流程,也不再需要测试工程师。我认为,这些态度充满了狂热。每个人都有盲点,总会有疏忽写测试的情况和疏忽写代码的情况。19.我从小就喜欢编程、解决问题和开发功能,现在仍然如此。以前,我选择服从那些流行的做法,但现在不是了。我不在开放式办公室工作,我不听所谓的一周行话,我不用新词描述旧事物,我不结对编程,我不去频繁开会,我不关心团队合作精神的要求不会取笑那些单独工作的人。20、我喜欢服务端开发,希望以后能从事这方面的工作。与此同时,我正在转向技术写作和学习远程工作所需的新技能。我喜欢一点也不疯狂的环境。
