我最近收到了这封来自Artsicle公司创始人的邮件,我大一时整个夏天都在这家创业公司里实习。
来自:Scott Carleton主题:刚刚重构了你一年前写的 find_art.js 脚本从某些方面上看,我心里想:你是个相当混蛋的程序员。但从另一方面上讲,真扯蛋,这个脚本在过去的20个月里完美的运行,根本不需要我去碰它。:)
![Dan Shipper](https://i-blog.csdnimg.cn/blog_migrate/a95039320a953001b417678499c6d62d.png)
本文的作者: Dan Shipper
Scott说的一点没错:我是个混蛋程序员。我不认真的注释我的代码。有时,我会违反DRY编程原则。我不喜欢使用奇妙的三重操作符表达式,也不太在意空格的使用。我的数据结构有时会弄的丑陋不堪。
但从另一方面,我(大言不惭)是一个相当优秀的程序员。例如,Artsicle公司是一个Rails开发公司,之前在这个公司工作时,我对Rails和真正的MVC框架只有非常少的经验。但几周后,我差不多掌握了他们的代码库,并开发出了很少有错误的功能模块。
我自己也开发软件程序。很多的程序。在过去的2年里,开发并发布了20多款应用,用各种各样的语言和框架,从Python到Rails到Node到Backone等。
Ruby on Rails框架的创始公司42 Floors甚至还公开的邀请我加入他们的团队。你可以认为是他们看走眼了,但这些至少证明了我开发软件的能力。我们的双手,看起来,是亦正亦邪的造物主。
那我是一个烂程序员,还是一个好程序员呢?
我想,很显然,我们有一个定义上的麻烦:什么才是好的程序员?
可以这样说,我优先考虑的,在我开始编程的10年前就已经养成习惯了:如何能以最快的速度实现它?
对此,我有一个非常明确的原因:当你给自己开发一个东西(而且你正年轻)时,很有可能,没有哪个项目会很长久的占用你的精力。所以,对于我,我更愿意花最少的时间开发出漂亮的程序,这样,留出更多的时间用于测试我的这些小软件。我总是从一个非常实用的角度来开发程序。
对我来说,编程中的美丽就是这样一个事实:他能让我构建我想要的软件,而其中唯一的成本就是我的时间。
我总是先在脑子里开发我的软件,绝不会随便开发一个东西闹着玩。
但是,当我进入大学后,一些有趣的事情发生了。虽然我是主修哲学的,计算机课程我也上。从理论的视角——而不是以实用的角度——来看如何进行软件编程,这着实让我大开眼界。不仅我开发软件的方式受到了影响,我的学习兴趣也发生了变化。
真正理论上的计算机学(处理复杂理论的那些东西)实际上非常像哲学。有趣的事情是,很多我学到的纯理论上的知识,让我在真正开发软件时变得更成熟。
事实证明,通过掌握了一些计算机学原理上的基本原则后,你每天的日常开发都能从中受益。如果你懂得一些算法和数据结构,你就有了更好的储备来应付开发更复杂的Web应用时遇到的挑战。
所以,所谓好程序员,是指那些对计算机学知识在理论上有了基本掌握的人,不是吗?
错。
并不是因为你从著名学府里获得了计算机学位,你就能成为下一个Jason Cohen 或 Patrick McKenzie。你还要做大量的家庭作业才能成为一名优秀的程序员。
就像生活中的很多其它事情一样,这什么才是好程序员的答案,就介于那些想让程序最快的开发出来的人和那些让程序漂亮的开发出来的人之间。
答案就是:好的程序员知道什么时候应该快速开发而不拘小节,什么时候应该周全考虑而且代码整洁。你要学会问:这样东西真的是必要的吗?有些时候,你需要抽出额外时间设计,使你要开发的东西都是必要的。随着经验的增加,我越来越认识到其中的真谛。
如今我开发的东西比五年前开发的有更多的人使用。这要求我在思想上做一些调整。以前单纯的追求速度,现在还要更多的关注代码的优雅(否则,我的合伙人会杀了我)。
所以,当你下次开发一个项目时,花时间想想什么是最重要的:速度还是优雅?学会回答这个问题,你就成功了一半。
[本文英文原文链接:I Am A Terrible Programmer ]