以下这段极富洞察力的文字源自 James Hague 撰写的一篇文章 Organization skills beat algorithmic wizardry

当我们谈及代码编写的时候,最重要的一项技能就是如何保持软件功能与代码的简单性,即软件开发的复杂度管理。我曾经工作过的项目包括大型通信系统、主机游戏、博客系统以及一大堆个人工具类软件,在这些项目的实际开发过程中,很少出现特别棘手的数据结构和算法之类的问题,相反,大量亟待解决的问题大都与状态跟踪、代码组织、特殊情况处理以及系统交互相关。在一定程度上,代码编写这个行为本身,实质上就是一个组织、重构以及简化的过程 - 探究和思考如何移除隐藏在各处的无关或冗余操作。

算法技能与诸如代码组织相关的复杂度管理技能相比,更容易教授和学习,因此,我们一般通过课堂和博客来传递这方面的知识信息。一节个把小时的课程或博客文章就能够清晰地展现一个聪明的算法。然而,对于复杂度管理技能来说,有谁知道究竟应该如何呈现吗?如果你直接给出答案,不仅枯燥乏味,而且效果非常不好。“这是我总结的一个小经验。别看它不怎么起眼,但请相信我,它真的很有用,你要知道,这是我费了九牛二虎之力才想出来的呀。” 或者更糟糕的情况,“这是一堆中等难度的代码,但在此之前,这些代码要比现在复杂得多。起码从目前看来,至少有人已经可以理解它了。” 这多没意思呀,你要是在场,想必也会哈欠连天。

只有在真正体验过混乱之后,你才能认识到复杂度管理的重要性。但是,如果你根本不关心这些杂乱无章的混乱状况,你不可能有埋头处理它们的耐心。只有当处理这些混乱变成了你的义务或责任,或者换言之,你不再将其看作是另一次案例学习的时候,你才会深入地研究、学习和提高自己的复杂度管理技能。我的意思是说,你完全可以通过类似家庭作业的方式学习和掌握算法技能,但是,你不太可能学到复杂度管理这项技能,除非你在一个你真正关心的大型项目上工作过,而且,大多数情况下,这种事情发生的前提条件是:有人付钱让你来关心这件事情。


作者:John D.Cook,数学博士,应用数学、统计学及软件开发顾问,生活在美国休斯敦。

原文:The most important skill in software development

感谢:Qingniu 帮助审阅并完成校对。