给未来的消息
可能是因为其中的大多数都是聪明人,这些年来我教导过的和一起工作过的程序员们,似乎大多数都认为既然他们曾经研究的问题很难,那么答案对于每个人(可能即便是对于代码编写几个月后的自己)也应该一样难以理解和维护。
我记得和Joe的一件事。他是数据结构课程中的一名学生,找到我给我看了他写的东西。“Betcha猜不出这是做什么的。”他扬扬得意地说。
“你很对,”我同意他,没有花太多时间看他的例子并如何获取重要的信息,“我肯定你在这个问题上一定付出了很多努力。我在想,你是不是忽略了一些重要的东西。呃,Joe,你是不是有一个弟弟?”
“对。是的。Phil!他上你的导论课,也在学习编程。”Joe很自豪地宣称。
“很好,”我说,“我想知道他是不是能读这个代码。”
“不可能!”Joe说,“这是很难的东西!”
“设想一下,”我建议道,“这是真正的工作中的代码,并且几年后Phil被雇用来维护这个代码的升级。你给他做了什么?”Joe看着我只眨眼。“我们知道Phil真的很聪明,是吧?”Joe点头。“虽不想这么说,但我也很聪明。”Joe咧开嘴笑了。“所以如果我不能轻易理解你所做的,那么你那位很聪明的弟弟也很可能被这个难住,你写的这些到底是什么意思?”Joe看着他的代码,似乎和刚才不一样了。“这样如何,”我尽可能地用友好的导师的声音建议道:“把你写的每一行代码当成要传递给将来某个人的消息,那个人可能是你的弟弟,当成你在向这个聪明的人解释你在如何解决这个困难的问题。”
“你是你想像中要的吧?将来的那个聪明的程序员看到你的代码了,说‘哇!真了不起!我能完全理解这里做了什么,这段聪明的,不,漂亮的代码。我要给团队里面的其他人展示一下。这真是件杰作!’”
“Joe,你觉得你可以写出解决这个困难的问题的代码,而且是很漂亮的、歌唱的代码吗?对,就像是萦绕心头的旋律一末端。我想每个能弄懂这个非常困难的答案的人都写出一些漂亮的东西。嗯......我想我是不是应该提升一下美感,你觉得呢?”
Joe拿起他的作品,看着我,脸上浮出一些笑容。“我明白了,教授,我也该为了Phil把事情做得更好。谢谢!”