3

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

 1 month ago
source link: https://www.techug.com/post/the-struggles-of-a-young-developer/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

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

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

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

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

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

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

时间流逝…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

奋斗中的年轻程序员

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

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

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

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

TB238EDdfQs8KJjSZFEXXc9RpXa_!!2768491700.jpg_640x640q80_.webp

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK