编程小贴士

给你的编程提供小点子


怎么成为一个有经验的程序员

这是关于一位有激情的年轻开发者的、几乎真实的故事。在2004年年末,他开始在一家小公司上班,这家公司有他想要的一切:丰厚的薪水、使用他钟情的编程语言,处理复杂性和搭建架构。

这并不是该年轻开发者的首次工作经历。但是他的第一个项目已经被证明是有问题的。当时,他认为功能从来不会改变。但是他错了,每次修改功能都需要一 次彻底的重构,引发了bug以及大量时间的浪费。他甚至尝试过编写测试之类的、有效的方式。不过他的测试需要维护、编写所需时间、甚至更多执行的时间。

对于每个年轻的开发者,他在成长过程中总是听到有经验的开发者说到的“当心!过早优化是万恶之源!”、“编写测试!测试!测试!”。或许他只是在重 构一个微小的实用程序方法,而这时有经验的开发者将走过来、以严厉的表情警告说“你没有做过早优化,对吧?”、或“你在写测试,是吗?”。

但是所有这些警告都被忽视了。因为年轻开发者不理解过早优化为什么是万恶之源、也不理解测试应该是正确的。根据他自己的经验,他知道下面的需求从长期看是不合理的(因为它们可能有修改),编写测试就是在浪费时间。

“我究竟为什么每次都必须重写我的代码?我究竟为什么必须在当下编写代码、随后再重构,我什么时候能够编写世界上最好的代码?还有,我究竟为什么不得不用我所有的时间来编写没用的测试?”这就是年轻开发者的疑惑。

一天,年轻开发者开始着手一个新项目。他决定无视有经验开发者的警告;为了应对每次需求变化,他期望每块代码是快速的、可配置的和健壮的。需求清晰 了,不过他要做得更好。比如,当有个功能,生成以大写‘S’结尾的产品代码时,他创建一个配置对象,这样结尾的字母就可以通过配置来修改,通过配置还可以 决定这个字母应该是大写还是小写。当需求说明需要一些校验时,他就创建一个庞大的校验器,不仅包含需求要求的,还有很多没要求的。

在编写了项目的核心之后,一种完美的感觉充满了年轻开发者的全身。“那个有经验的开发者是错误的!”年轻开发者看着自己的杰作得意地说。他夜以继日地工作,认为数周后就可以发布产品了。

光阴荏苒……

一天,客户告知他们一个bug。有经验的开发者看到这个bug,对显示器上出现的情况保留着厌恶:年轻开发者看到了大教堂,而有经验开发者看到的是 贫民窟;年轻开发者看到了模式,而有经验开发者看到的是一个充斥着class的复杂网络;年轻开发者看到了比光速还快的代码,而有经验开发者看到的是不必 要的复杂算法。他不想碰这些代码,因此他让这个年轻的开发者去修复自己的bug。

其他人不认为年轻开发者的代码是优美的,只有这个想法让他感到失望。他充满愤怒地打开了项目……才发现代码对于他来说,也是费解的!代码背后没有清 晰的意义。“这就是我不打算再使用这门语言的原因,语法太糟糕了”,往往是年轻开发者的第一反应。但是他在内心深处知道,这不是真正的问题。真正的问题是 他。

一天结束的时候,bug修复好了,却产生了另一个bug,这是那一天之后发现的。每次修复都在影响着项目内部的瘦弱的平衡,就像亮白色衣服上的一小块黑色补丁。

此时这个年轻的开发者绝望了,他的大教堂开始摇晃,他感到离崩塌不远了。年轻开发者自问,“或许我不是这份工作的合适人选。为什么我不能编写恰当的代码呢?”带着沮丧和愤怒的交织心情,年轻的开发者打开了有经验开发者维护的项目。

他看到的代码让他感到吃惊:代码有注释和测试,易于阅读。和他最初开始写的代码没有太多区别,有一些清晰的例外:没有可扩展的配置,每行代码都被测试了,每个方法都取着有意义的名字、且简短(最多10行代码),只做必要的,每个文件只包含了能够严格做本质工作的方法。

在这个忧郁的时刻,有经验开发者来到了年轻开发者身边,和他挨得很近,开始重构引起所有bug的代码。

他们一起工作了数天,有时候,有经验开发者写代码,而年轻开发者观看有经验开发者如何解决问题;另些场合,年轻开发者写代码,而有经验开发者在旁边监督。

数天后,一次新的部署标志着bug已被修复。引起bug的小部分代码,现在可以被测试了、易于阅读了,也很稳定。有经验开发者看着年轻开发者说:“你现在明白了吗?

年轻开发者点了点头,他现在明白了。完美的关键不是预测将来,而是编写容易修改、测试(这样修改就不会引发其它bug了)以及只需满足当前需求的代码。当他意识到这一点时,他注意到他正在变化,正在变成差不多有经验的开发者。

年轻开发者问,“我们现在能够重构整个项目吗?”
有经验开发者干脆地答道,“当然不可以!没有预算”
年轻开发者问,“但是,如果其它bug出现了,该怎么办?”
有经验开发者答道,“我们将找个自由职业者(freelancer)来修复”

然后,这个差不多有经验的开发者开始编写优秀的代码,准备学习另外的经验。不过这是另外一个故事了。

  • 年轻开发者的启示:回头看看你过去写的代码,如果你的代码看起来还不够优美,不要感到失望。
  • 有经验开发者的启示:当周围有年轻开发者时,你将不得不给他擦屁股。你最好的机会就是他将学习如何编写得体的代码,越快越好。
  • 自由职业者的启示:你或许想提高你的报价

2 Responses to “ 怎么成为一个有经验的程序员 ”

  1. adidas nmd说道:

    Thank you for all your valuable hard work on this site. Ellie take interest in going through investigation and it’s simple to grasp why. Almost all learn all of the compelling ways you produce valuable techniques on this web blog and in addition improve participation from website visitors on this point plus our princess has always been discovering a lot of things. Take advantage of the remaining portion of the year. You’re doing a very good job.

  2. Ron Tackitt说道:

    Excellent beat ! I would like to apprentice whilst you amend your site, how could i subscribe for a blog website? The account helped me a acceptable deal. I have been a little bit familiar of this your broadcast provided shiny transparent idea.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>