|
英文原文:Beautiful Code and Beautiful Software
譯者:legendsland
2007-10-29
編程很有意思,是因?yàn)槲铱梢宰鲆恍┖芸岬臇|西,但是實(shí)際上讓我著迷的卻是那一行行代碼的語(yǔ)法和語(yǔ)義。保持對(duì)好代碼和壞代碼之間差異的敏感相當(dāng)激勵(lì)人,同時(shí),去尋找編寫(xiě)高效、自文檔化和經(jīng)過(guò)深思熟慮良好組織的代碼的方法將會(huì)永遠(yuǎn)吸引著我。這便是我對(duì)所在領(lǐng)域鐘愛(ài)的原因 —— 編程的藝術(shù) —— 這種奇妙的復(fù)雜物(complex craft)將會(huì)讓你花費(fèi)一生的時(shí)間去成為大師。
續(xù)Ruby之后,我學(xué)習(xí)了Java和Objective-C,我開(kāi)始享受到底層軟件開(kāi)發(fā)的樂(lè)趣。我是在一個(gè)討厭繁縟語(yǔ)言開(kāi)發(fā)的社區(qū)(Rails社區(qū))成長(zhǎng)起來(lái)的,但是當(dāng)我第一次接觸這類(lèi)語(yǔ)言之后,發(fā)現(xiàn)我喜歡上了它們。它們(和Ruby比較起來(lái))是不同的語(yǔ)言,但仍然具有它們特有的樂(lè)趣。以Java 里面的for循環(huán)為例,當(dāng)以我的高級(jí)程序語(yǔ)言的背景,編寫(xiě)了一些這樣的基礎(chǔ)代碼后,發(fā)現(xiàn)這種代碼可以更好地幫助我理解面向?qū)ο蟮囊恍?shí)踐,但同時(shí)我也對(duì)for循環(huán)本身產(chǎn)生了興趣。這不僅僅是優(yōu)美的語(yǔ)言吸引了我,也是語(yǔ)法背后的邏輯和不同語(yǔ)法形式讓我著迷。計(jì)算機(jī)語(yǔ)言,以及它們之間的差異,本身就極具魅力。
當(dāng)這學(xué)期我在學(xué)校學(xué)匯編語(yǔ)言的時(shí)候,獲得了相同的滿(mǎn)足感。匯編很繁瑣,有時(shí)相當(dāng)痛苦,但是讓我去思考使用這種新的方式去實(shí)現(xiàn)基本的程序功能,跟痛苦相比,是完全值得的。當(dāng)然,意識(shí)到自己編寫(xiě)的代碼如此底層,也讓我享受到了極客(Geek)的快感。
情況變得更糟了!在今年的早些時(shí)候,當(dāng)我讀到Wolf的程序員不喜歡編碼時(shí),我經(jīng)歷了一個(gè)很不錯(cuò)的自我發(fā)現(xiàn)過(guò)程。我確實(shí)是喜歡在編碼過(guò)程中解決問(wèn)題,進(jìn)行優(yōu)雅地創(chuàng)造,以及通過(guò)編碼來(lái)學(xué)習(xí),但實(shí)際上我意識(shí)到我也是因?yàn)橄矚g編碼而編碼。至少,這就是我享受CSS和XHTML的方式。我擁有大量的Web前端開(kāi)發(fā)經(jīng)驗(yàn),并且最近沒(méi)怎么碰到新的問(wèn)題(事實(shí)上,難搞的問(wèn)題和我從沒(méi)有見(jiàn)過(guò)的Bug會(huì)讓我異常興奮)。盡管如此,我仍然喜歡這些東西。比如,整理一下我完全理解的代碼讓它變得好看點(diǎn),就像是在我的筆記本上重復(fù)地畫(huà)一些卡通貓,或者是坐在鋼琴前重復(fù)地彈三個(gè)相同的音調(diào)一樣,這讓我感到放松。甚至僅僅去閱讀漂亮的CSS(我自己寫(xiě)的CSS),上面每一樣?xùn)|西都整齊有序、縮進(jìn)良好,并且進(jìn)行了正確的層疊(CSS里面很重要的一種技術(shù))而感到心情舒暢;相反,當(dāng)我看到某些論壇的樣式表里面混亂的縮進(jìn)、多余的空行、被注掉的一些老代碼,以及通過(guò)故意使用錯(cuò)誤的屬性名來(lái)屏蔽掉的樣式的時(shí)候,我感到難受,就像是生病了一樣。
當(dāng)你可以如此輕易地被激起興趣 ,就是上面這個(gè)結(jié)果。僅僅是墻上的影子就足夠讓你繼續(xù)生活下去(譯注:看來(lái),她對(duì)柏拉圖很有興趣)。你得不斷地重新審視自己的敏感度,以便讓你的聲色品味與你口袋里的鈔票相匹配。(你對(duì)代碼或者軟件的品味來(lái)自于你自己的能力水平)
這樣來(lái)講吧,這些天我一直在思考(整個(gè))軟件開(kāi)發(fā)中的軟件部分。特別是軟件中的用戶(hù)界面設(shè)計(jì)。今年在BARcamp,我喜歡Aza Raskin的一個(gè)實(shí)驗(yàn),他讓所有的開(kāi)發(fā)人員舉起手,然后是設(shè)計(jì)人員,接著他說(shuō)那些第一次舉手的人在第二次也應(yīng)該舉手。所有的開(kāi)發(fā)人員必須是設(shè)計(jì)人員。至少,幸運(yùn)的是,所有的開(kāi)發(fā)人員在他們的工作中可以對(duì)軟件設(shè)計(jì)發(fā)表自己的意見(jiàn)。
我越來(lái)越對(duì)軟件開(kāi)發(fā)中設(shè)計(jì)部分的重要性感到興奮,尤其是當(dāng)我反思我對(duì)過(guò)去所做的事情在不同方面的熱情與心得的時(shí)候。在Web應(yīng)用領(lǐng)域,開(kāi)發(fā)和設(shè)計(jì)一般是分離的。有時(shí)候,設(shè)計(jì)部分的工作在項(xiàng)目中被最少化了,這是因?yàn)榭蛻?hù)是為軟件的特性買(mǎi)單,而不會(huì)為漂亮的設(shè)計(jì)付帳。在一個(gè)項(xiàng)目中,我同時(shí)扮演了開(kāi)發(fā)和設(shè)計(jì)的角色,回想起來(lái),我對(duì)只分配了兩天時(shí)間來(lái)完成可視化的設(shè)計(jì)感到耿耿于懷。這決不是兩天的事情。這是一個(gè)很復(fù)雜的應(yīng)用軟件,需要花上幾周的時(shí)間與客戶(hù)交流和迭代設(shè)計(jì)。不幸的是,客戶(hù)并不會(huì)因此而買(mǎi)單。相反,客戶(hù)對(duì)我花了幾個(gè)小時(shí)的原型感到無(wú)比滿(mǎn)意,就這樣,我們有了這個(gè)產(chǎn)品的第一個(gè)版本。
在今年的C4上我有了另一次覺(jué)悟。好像很多Mac下的開(kāi)發(fā)人員都在(私下)做自己的產(chǎn)品。這樣,他們真的必須既是設(shè)計(jì)師又是開(kāi)發(fā)人員。事實(shí)上,設(shè)計(jì)是最重要的部分,并且用戶(hù)體驗(yàn)和制造了不起的產(chǎn)品看起來(lái)要比代碼本身更具有熱情。在C4的一個(gè)晚上,有人在向我描述他的工作的時(shí)候,無(wú)意中幫助我看到了這一點(diǎn):編碼這個(gè)基本要素是最容易的部分。那僅僅需要幾周而已。真正困難和耗費(fèi)時(shí)間的是搞定UI的規(guī)格。
哇噢,我在想,為什么這看起來(lái)如此正確?為什么對(duì)我而言是這么的酷?哦,是的,那是因?yàn)槲沂菑脑O(shè)計(jì)人員開(kāi)始的。我享受開(kāi)發(fā)、設(shè)計(jì)和藝術(shù)的方式絕然不同,這就導(dǎo)致了這三種享受之間巨大的差別。我一直在嘗試整合開(kāi)發(fā)和藝術(shù)(這兩個(gè)方面),但是我其實(shí)應(yīng)該整合這三個(gè)方面。
畢竟,我的天啊!我們想要漂亮的代碼或者是漂亮的軟件嗎?我生活中的另一個(gè)觀點(diǎn)是:由于我的思想極具開(kāi)放性和強(qiáng)吸收性,我發(fā)現(xiàn)我自己可以接受各種相互矛盾的觀點(diǎn),有時(shí)候甚至是相反的觀點(diǎn)。這種問(wèn)題目前不會(huì)困擾我,因?yàn)槲艺幵谔剿髂J降碾A段,而不是在只接受我所相信的階段,但是,當(dāng)然啦,為了保持我思想自身的一致性,當(dāng)它們有點(diǎn)頭緒的時(shí)候必須要好好的整理一下。
所以,為了后續(xù)的考慮,我按照軟件開(kāi)發(fā)給人們帶來(lái)的由內(nèi)至外的收獲,簡(jiǎn)單地列出了這個(gè)清單。我沒(méi)有選擇其他一些極好的介質(zhì),比如社區(qū)、開(kāi)源和挑戰(zhàn)等等,是因?yàn)檫@些都很難按順序列到里面去,不過(guò)我相信你可以領(lǐng)會(huì)到其中的要點(diǎn)。這個(gè)順序?qū)ξ叶允菢O度重要的,因?yàn)樾睦韺W(xué)家講過(guò),內(nèi)因的力量更為強(qiáng)大,更能讓你堅(jiān)持。比如,一個(gè)為了想從擊打和踢腿中感覺(jué)到力量和興奮而參加空手道訓(xùn)練的人,肯定要比僅僅為了健康的人更容易達(dá)到黑段水平。
編程也是如此嗎?
* 代碼感(譯者:還記得圣斗士里面的第六感嗎?)
* 編碼的知識(shí)
* 享受計(jì)算機(jī)邏輯
* 享受計(jì)算機(jī)語(yǔ)言
* 優(yōu)雅的語(yǔ)法
* 優(yōu)美的語(yǔ)義
* 學(xué)習(xí)代碼
* 問(wèn)題求解
* 了解問(wèn)題
* 獲得可用性
* 完成一個(gè)產(chǎn)品
* 優(yōu)雅的軟件
* 解決人的問(wèn)題
* 解決商業(yè)的問(wèn)題
* 滿(mǎn)足市場(chǎng)需求
* 賺錢(qián)
* 有一個(gè)穩(wěn)定的職業(yè)
哪個(gè)是最能持續(xù)激勵(lì)人的收獲?更重要的是,哪種動(dòng)機(jī)可以制造出最好的軟件?有時(shí)候我很想在這個(gè)話題上做一個(gè)很正式的研究,當(dāng)我們希望軟件既滿(mǎn)足可用,又具備可維護(hù)性,同時(shí)還叫買(mǎi),而且還要滿(mǎn)足一些其他的目標(biāo)的時(shí)候,我很確信這個(gè)答案就是清單上面各種條目之間健康的平衡。我同時(shí)還很確信這種平衡性是因情況和人而異的。現(xiàn)在,我已經(jīng)勾畫(huà)出了一條鐘形曲線(正態(tài)分布),那些可以促成最佳的軟件的動(dòng)機(jī)位于曲線的中間部分;但是,我想實(shí)際上所有的動(dòng)機(jī)在某些方面都是有益的,并且當(dāng)程序員有她自己的優(yōu)先級(jí)的時(shí)候,動(dòng)機(jī)自然是越多越好。
我們領(lǐng)域的悲哀在于大多數(shù)程序員并不會(huì)欣賞上面大部分的收獲,尤其是那些更為重要的。這個(gè)清單很有用,因?yàn)榇蠖鄶?shù)編程的工作無(wú)法滿(mǎn)足那些關(guān)心所有這些事情的人。同樣地,我很好奇,如果我們每個(gè)人都從內(nèi)心關(guān)心我們做的東西,并且不會(huì)有人為了穩(wěn)定的工作而去選擇計(jì)算機(jī)科學(xué)者個(gè)專(zhuān)業(yè),那么這個(gè)(軟件)領(lǐng)域?qū)?huì)成為什么樣子呢?我好奇這樣會(huì)對(duì)整個(gè)世界產(chǎn)生什么影響?
我想我每年都應(yīng)該反思一下這種問(wèn)題,以便成為一個(gè)更好的軟件開(kāi)發(fā)人員。盡管如此,我還是覺(jué)得我的信念已經(jīng)固定下來(lái)了:越是成長(zhǎng),就越希望能夠在一個(gè)足夠自由的環(huán)境里面創(chuàng)造美妙的東西。值得注意的是,美妙和自由都是模糊和主觀的概念,可以任意地去理解。我只知道,在大多數(shù)的編程工作中對(duì)代碼之美和軟件設(shè)計(jì)之美的妥協(xié)永遠(yuǎn)會(huì)讓我感到不滿(mǎn)。如果到最后,我選擇成為一個(gè)自由開(kāi)發(fā)者去做Web設(shè)計(jì),以滿(mǎn)足這種自我的生活風(fēng)格,我不會(huì)對(duì)此感到意外。
最終我會(huì)從計(jì)算機(jī)上面退休,并且用我剩下的時(shí)間在國(guó)外美麗的農(nóng)場(chǎng)里面畫(huà)畫(huà)。或者是,過(guò)上在街頭涂涂抹抹和牢房之間互動(dòng)的感性城市生活。想象一下,當(dāng)我覺(jué)得技術(shù)玩完了的時(shí)候,接下來(lái)要去哪里將是很有趣的。但愿永遠(yuǎn)不要發(fā)生這種事情,因?yàn)槲蚁M蔀橐粋€(gè)酷酷的guru奶奶,到時(shí)候給孩子們上一些編程的必修課呢!(Fantastic guru girl !!)
it知識(shí)庫(kù):編程的藝術(shù):漂亮的代碼和漂亮的軟件,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。