【译文】一个年轻程序员的奋斗

这是一个几乎真实的故事,讲述的是一位充满激情的年轻开发人员的故事。那是 2004 年末,他刚刚开始在一家小公司工作,这家公司能提供他想要的一切:高薪、使用他喜欢的编程语言、处理复杂问题和架构建模。

这并不是这位年轻开发人员的第一次工作经历。但事实证明,他的第一个项目就存在问题。当时他认为功能永远不会改变。但他错了,每一次功能变化都需要彻底重构,从而导致错误和大量时间的浪费。他甚至尝试过一些良策,比如编写测试。但他的测试需要维护,需要时间编写,更需要时间执行。

和其他年轻开发者一样,他也是听着一位经验丰富的开发者的话长大的,这位开发者经常说 “小心!过早优化是邪恶的!”,然后又说 “写测试!测试!测试!”。也许他只是在重构一个小的实用程序方法时,这位经验丰富的开发人员会用严厉的眼神警告他:”你没有过早优化吧?”或者 “你写测试了吧?”。

但所有这些警告他都充耳不闻。因为这位年轻的开发人员不明白,为什么过早优化是恶,而测试是善。根据他以前的经验,他知道从长远来看,遵循规范是行不通的(因为规范往往会改变),而编写测试则是浪费时间。

“究竟为什么我每次都要重写代码?当我现在就能写出世界上最好的代码时,我究竟为什么要现在写代码,然后再重构它?还有,我到底为什么要把时间都花在编写无用的测试上?

有一天,这位年轻的开发人员开始开发一个新项目。他决定无视经验丰富的开发人员的警告;他希望每一段代码都能快速、可配置、健壮,以应对每一次规范变更。规范是明确的,但他会超出规范。例如,当功能是构建一个以大写字母 “S “结尾的产品代码时,他创建了一个配置器对象,这样就可以通过配置来决定结尾字母,还可以通过配置来决定字母是大写还是小写。

当需要进行特定验证时,他设计了一个广泛的验证器,不仅能处理指定的要求,还能处理更多的要求。

在完成项目的核心部分后,一种完美的感觉涌上了这位年轻的开发人员的心头。他眼中闪烁着胜利的光芒,感叹道:”经验丰富的开发人员错了!”。他没日没夜地完善自己的作品,最终在几周后正式发布。

时间流逝…

有一天,客户向他们报告了一个错误。经验丰富的开发人员检查了这个问题,却被显示器上显示的内容吓坏了。年轻的开发人员看到的是一座大教堂,而经验丰富的开发人员看到的却是一片贫民窟。年轻开发人员眼中的模式,在经验丰富的开发人员眼中却是错综复杂的类网络。看似比光还快的代码,实际上是由不必要的复杂算法组成的一团乱麻。经验丰富的开发人员无心处理如此艰巨的任务。无奈之下,他要求年轻的开发人员自己解决这个错误。

一想到自己的代码在别人看来并不美观,年轻的开发人员就心烦意乱。他满怀愤怒地打开了项目……却发现代码对他来说也是难以理解的!代码背后没有明确的含义。”这就是我不再使用这种语言的原因。它的语法太难看了”,这是这位年轻开发人员的第一反应。但他深知,这并不是真正的问题所在。真正的问题是他自己。

一天结束时,错误被修复了,但第二天又发现了另一个错误。每一次修复都在改变项目内部的平衡,就像在闪亮的白裙子上打上了一个小黑补丁。

这位年轻的开发商现在已经绝望了。他的大教堂已经开始摇摇欲坠,他觉得倒塌在即。”也许我不适合这份工作。为什么我不能用正确的方法写代码呢?”这位年轻的开发人员问自己。在郁闷和愤怒交织的情绪中,年轻的开发人员打开了一个由经验丰富的开发人员维护的项目。

他被自己的发现震惊了:代码的可读性极高,充满了注释和全面的测试。这让他想起了自己早年写的代码,但有一些明显的不同。没有过于复杂的配置;每一行代码都经过了细致的测试,每个方法都有一个有意义的简洁名称(最多不超过十行代码),每个方法只执行必要的功能。此外,每个文件都精确地包含了完成指定任务所需的方法。

在沮丧的时刻,这位经验丰富的开发人员走近了这位年轻的开发人员。在靠近他的同时,他开始重构导致所有这些错误的代码。

他们一起工作了好几天,有时是经验丰富的开发人员在写,年轻的开发人员在看经验丰富的开发人员如何解决问题;有时是年轻的开发人员在写,经验丰富的开发人员在监督。

几天后,一个新的部署将错误标记为已修复。这一小部分导致错误的代码现在经过了测试,易于阅读,而且很稳定。经验丰富的开发人员看着年轻的开发人员:”你现在明白了吗?

年轻的开发人员点了点头。他现在明白了。完美的关键不在于预测未来,而在于编写易于更改和测试(这样更改就不会导致任何错误)的代码,并且只满足当前的要求。当他意识到这一点时,他发现自己正在发生变化,他正在成为一名经验丰富的开发人员。

“年轻的开发人员问道:”我们现在能重构整个项目吗?

“当然不行!经验丰富的开发人员斩钉截铁地回答。

“年轻开发人员问道:”但如果出现其他错误怎么办?

“经验丰富的开发人员回答说:”我们会找一个自由职业者来解决这些问题。

然后,这位几乎经验丰富的开发人员开始写好代码,准备吸取另一个教训。但这是另一个故事。

奋斗中的年轻程序员

对年轻开发人员的启示:不断回顾你过去写的代码,如果你的代码看起来不像以前那么漂亮了,也不要感到失望。

对经验丰富的开发人员的启示:当身边有一个年轻的开发人员时,你必须处理他的一些烂摊子。你最好的机会是,他迟早会学会如何写出像样的代码。

对自由职业者的启示:不妨提高你的收费标准。

 

本文文字及图片出自 The Struggles of a Young Developer

余下全文(1/3)
分享这篇文章:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注