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