我从事专业编程工作已经十余年了,有些过时的东西我早就应该把它们全都忘掉(噢,天啊,ColdFusion)。但是截至目前为止,依然有许多工具、技巧以及概念继续在我的工作中发挥着重要的作用。以下内容是我的一个小结。与此同时,我也希望了解一下你们的情况,这样的话,我不仅可以体验一下发现的乐趣,而且我或许还能从中找到一些后悔当初没有早点儿接触的知识、理论或者其它有趣的工具。

关系代数 / 结构化查询语言

我感觉自己非常幸运。十四岁那年的夏天,我当时由于没有什么朋友,所以除了独自翻阅一本名为 MySQL and mSQL 的专业书籍之外,实在没有其它什么更好的事情可干。在这本书的评论里,尽管你可以看到这样的评价:『粗糙、不完整、几乎没有任何用处。』 然而事实上,我确实从中收获了结构化查询语言和数据库方面的知识。稍后不久,我又学习了关系代数(关系型数据库系统的基础理论),这成为我一生中最有价值的一项投资。我几乎无法统计出仅仅一条 LEFT OUTER JOIN 语句到底有多少次拯救我于水火之中。

就在我加入企业级软件技术公司之后,当我需要从 MySQL 转换到 Oracle 以及 MS SQL 的时候,关系代数的学习为我奠定了坚实的基础。在没有编程框架或者关系对象模型库的情况下,深入了解如何与数据库交互,帮助我快速地拓展了职业生涯。这就是为什么当我仅有二十岁时,我就能担负起一份为新墨西哥州圣达菲市搭建一个定制化网站的项目,而不是像其他同龄人那样,整天摆弄 Wordpress 和 Drupal 的各种功能插件。

如果你来自 Rails 阵营,或者经常使用其它那些原生支持数据库交互的编程框架,你能为你的职业生涯所做的最好的一件事情,就是学习关系理论以及结构化查询语言。阅读任何一本 C.J.Date 撰写的书都行。

Unix 进程模型

理解 Unix 进程帮助我真正搞懂了,当我运行一个计算机程序时,究竟发生了哪些事情。当然,它也帮助我深入理解了一个 Web 服务器到底是个什么东东,以及当我编写一个 Web 应用程序时,我实际是在做些什么。《高级 Linux 编程》有一个可供免费阅读的章节专门讲述了这一主题。实际上,这本书的所有内容全部开源免费。

当你还不了解进程这个概念的时候,编程对你来说就会变得更加困难、甚至更加神秘莫测。你将很难理解一个程序的性能表现,你将很难理解一个程序如何与其它程序交互。当你实际运行一个自己编写的程序时,如果你对将要发生的事情,有一种模模糊糊的感觉,学习 Unix 进程模型必将对你清除这些障碍大有益处。

正则表达式

是啊,是啊,我们全都听说过这个笑话:『总有一些人,当他们面对一个问题时,最直接的想法就是 ‘我应该使用正则表达式。’ 那么接下来,他们将不得不面对两个问题。』就我本人而言,我不太明白这段话的真正含义,因为正则表达式真 TMD 太牛逼了。我清晰地记着,十八岁的时候,我在一家酒店兼职担任夜间审计员,在晚上十一点到早上七点的时段里,当我翻阅完 O'Reilly 那本又厚又重的正则表达式教程书之后,我完全被它所拥有的强大功能给震撼住了。我们总在说,程序员特别擅长与文本打交道,但要是和正则表达式相比,根本不值一提。正则表达式是一个非常重要的工具,你通过这个学习资源就能够学会并掌握它们。

有限状态机

正则表达式就是在有限状态机的基础上构建的。这是一个关于有限状态机的优质教程,它给我们展示了一个正则表达式的具体实现过程。真是酷毙了!

我认为有限状态机应当属于计算机科学的基础理论范畴,但是由于我在大学只待了一年时间,而且即使在那一年里,我学习的东西全部是诞生于几千年前的作品,其年代远远早于计算机革命。直至大约六年前,我才开始实际接触这一专业理论。当时,我与同事正在开发一个移动应用程序。我们遭遇的问题是,我们必须以一种特定的顺序初始化这个程序,但是,确保正确实现的逻辑关系却因为相互纠缠而变成了一团乱麻。

尽管学习有限状态机占用了我们一些时间,但是在我们掌握了这个概念之后,描述这个程序的初始化过程一下子变得非常简单和清晰 - 只需表示成序列化状态和过渡就可以了。自那时起,我发现了绝大多数复杂用户界面代码都能采用这一方法加以改进和完善。就在几个月前,正当我使用 Hoplon 编程框架,准备从头开始设计实现一个在功能上类似 typeahead 实时提示特性的关头碰到了一个难题。但是,当我发现这个难题只需利用所有可能状态进行跟踪就可以很好解决的时候,我只用了几分钟时间就把这个问题搞定了,然后我重归正常工作状态。

情绪 & 情感管理

在个人生活中,我一直在学习和尝试情绪管理的各种方法和技巧。这主要是源于我渴望改善他人生活的愿望。另外,从自私的角度来说,学习它们能够帮助我更好地完成工作。情绪管理可能是我们每个人都亟待开发的一项最重要的元能力(meta-skill)。我的意思是说,情绪与情感正是我们人类的核心组成要素。

这本《非暴力沟通》是一份学习如何处理情绪问题的优质参考资料。另外,我的朋友 Alex Harms 近期刚刚编写完成了一部面向技术人员的专著,当然也同样值得一读。

这些就是我个人选出的最佳编程工具 - 我希望你们都能从中找到对自己真正有用的东西!


作者:Daniel Higginbotham,程序员,技术图书作者,Clojure 语言忠实拥趸。

原文:Timeless Programming Tools

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