我是一個(gè)混蛋程序員
我最近收到了這封來自Artsicle公司創(chuàng)始人的郵件,我大一時(shí)整個(gè)夏天都在這家創(chuàng)業(yè)公司里實(shí)習(xí)。
本文的作者: Dan Shipper
Scott說的一點(diǎn)沒錯(cuò):我是個(gè)混蛋程序員。我不認(rèn)真的注釋我的代碼。有時(shí),我會(huì)違反DRY編程原則。我不喜歡使用奇妙的三重操作符表達(dá)式,也不太在意空格的使用。我的數(shù)據(jù)結(jié)構(gòu)有時(shí)會(huì)弄的丑陋不堪。
但從另一方面,我(大言不慚)是一個(gè)相當(dāng)優(yōu)秀的程序員。例如,Artsicle公司是一個(gè)Rails開發(fā)公司,之前在這個(gè)公司工作時(shí),我對(duì)Rails和真正的MVC框架只有非常少的經(jīng)驗(yàn)。但幾周后,我差不多掌握了他們的代碼庫,并開發(fā)出了很少有錯(cuò)誤的功能模塊。
我自己也開發(fā)軟件程序。很多的程序。在過去的2年里,開發(fā)并發(fā)布了20多款應(yīng)用,用各種各樣的語言和框架,從Python到Rails到Node到Backone等。
Ruby on Rails框架的創(chuàng)始公司42 Floors甚至還公開的邀請(qǐng)我加入他們的團(tuán)隊(duì)。你可以認(rèn)為是他們看走眼了,但這些至少證明了我開發(fā)軟件的能力。我們的雙手,看起來,是亦正亦邪的造物主。
那我是一個(gè)爛程序員,還是一個(gè)好程序員呢?
我想,很顯然,我們有一個(gè)定義上的麻煩:什么才是好的程序員?
可以這樣說,我優(yōu)先考慮的,在我開始編程的10年前就已經(jīng)養(yǎng)成習(xí)慣了:如何能以最快的速度實(shí)現(xiàn)它?
對(duì)此,我有一個(gè)非常明確的原因:當(dāng)你給自己開發(fā)一個(gè)東西(而且你正年輕)時(shí),很有可能,沒有哪個(gè)項(xiàng)目會(huì)很長久的占用你的精力。所以,對(duì)于我,我更愿意花最少的時(shí)間開發(fā)出漂亮的程序,這樣,留出更多的時(shí)間用于測(cè)試我的這些小軟件。我總是從一個(gè)非常實(shí)用的角度來開發(fā)程序。
對(duì)我來說,編程中的美麗就是這樣一個(gè)事實(shí):他能讓我構(gòu)建我想要的軟件,而其中唯一的成本就是我的時(shí)間。
我總是先在腦子里開發(fā)我的軟件,絕不會(huì)隨便開發(fā)一個(gè)東西鬧著玩。
但是,當(dāng)我進(jìn)入大學(xué)后,一些有趣的事情發(fā)生了。雖然我是主修哲學(xué)的,計(jì)算機(jī)課程我也上。從理論的視角——而不是以實(shí)用的角度——來看如何進(jìn)行軟件編程,這著實(shí)讓我大開眼界。不僅我開發(fā)軟件的方式受到了影響,我的學(xué)習(xí)興趣也發(fā)生了變化。
真正理論上的計(jì)算機(jī)學(xué)(處理復(fù)雜理論的那些東西)實(shí)際上非常像哲學(xué)。有趣的事情是,很多我學(xué)到的純理論上的知識(shí),讓我在真正開發(fā)軟件時(shí)變得更成熟。
事實(shí)證明,通過掌握了一些計(jì)算機(jī)學(xué)原理上的基本原則后,你每天的日常開發(fā)都能從中受益。如果你懂得一些算法和數(shù)據(jù)結(jié)構(gòu),你就有了更好的儲(chǔ)備來應(yīng)付開發(fā)更復(fù)雜的Web應(yīng)用時(shí)遇到的挑戰(zhàn)。
所以,所謂好程序員,是指那些對(duì)計(jì)算機(jī)學(xué)知識(shí)在理論上有了基本掌握的人,不是嗎?
錯(cuò)。
并不是因?yàn)槟銖闹麑W(xué)府里獲得了計(jì)算機(jī)學(xué)位,你就能成為下一個(gè)Jason Cohen 或 Patrick McKenzie。你還要做大量的家庭作業(yè)才能成為一名優(yōu)秀的程序員。
就像生活中的很多其它事情一樣,這什么才是好程序員的答案,就介于那些想讓程序最快的開發(fā)出來的人和那些讓程序漂亮的開發(fā)出來的人之間。
答案就是:好的程序員知道什么時(shí)候應(yīng)該快速開發(fā)而不拘小節(jié),什么時(shí)候應(yīng)該周全考慮而且代碼整潔。你要學(xué)會(huì)問:這樣?xùn)|西真的是必要的嗎?有些時(shí)候,你需要抽出額外時(shí)間設(shè)計(jì),使你要開發(fā)的東西都是必要的。隨著經(jīng)驗(yàn)的增加,我越來越認(rèn)識(shí)到其中的真諦。
如今我開發(fā)的東西比五年前開發(fā)的有更多的人使用。這要求我在思想上做一些調(diào)整。以前單純的追求速度,現(xiàn)在還要更多的關(guān)注代碼的優(yōu)雅(否則,我的合伙人會(huì)殺了我)。
所以,當(dāng)你下次開發(fā)一個(gè)項(xiàng)目時(shí),花時(shí)間想想什么是最重要的:速度還是優(yōu)雅?學(xué)會(huì)回答這個(gè)問題,你就成功了一半。