優(yōu)秀的程序員就像藝術(shù)家?
優(yōu)秀的代碼能不能算藝術(shù)品?軟件工藝這一理論是否有點(diǎn)矯枉過正?怎么樣才算是一名真正“優(yōu)秀”的程序員?
讓我們先從一個(gè)問題引入話題。假設(shè)你雇了一個(gè)水管工替換地下室里已經(jīng)老化的舊水管,在整個(gè)過程中,這家伙一個(gè)勁地給你灌輸這些水管是有多么多么的有藝術(shù)美感。
“哇哦,看看這根管子彎曲的角度,它與墻壁對(duì)齊得是這么的漂亮!簡(jiǎn)直就是藝術(shù)品??!”你會(huì)怎么看這個(gè)水管工?
寫代碼也是如此。再也沒有比一個(gè)開發(fā)人員非要將他的代碼寫成藝術(shù)的模式更糟的了。上述比喻來自一篇廣受好評(píng)的文章《programming is not a craft》,其作者是Dan North,“Agile troublemaker”和BDD方法的創(chuàng)始人。
軟件藝術(shù)
該理論的作者是 Kevlin Henney、Bob Martin、Corey Haines和Glenn Vanderburg,以下就是軟件藝術(shù)的要領(lǐng)。
- 不僅得能正常運(yùn)作,還應(yīng)該精心制作
- 不僅可以應(yīng)對(duì)變化,還能穩(wěn)步增值
- 有良好的個(gè)體交流,以及專業(yè)人士組成的社區(qū)
- 和諧的客戶合作關(guān)系,富有成效的伙伴關(guān)系
而現(xiàn)在的問題是,很多軟件開發(fā)人員往往會(huì)因?yàn)樘^自大反而不能很好地完成軟件項(xiàng)目。因?yàn)樽源髸?huì)讓他們將軟件藝術(shù)捧得很高,North 說。Web服務(wù)和J2EE的項(xiàng)目就是這方面的例子,該項(xiàng)目的失敗有很大一部分歸咎于將軟件藝術(shù)放到了過于崇高的地位。
優(yōu)秀的程序員
你或許早就在一些小的IT項(xiàng)目中就領(lǐng)略過上述問題的存在了。如果有開發(fā)人員堅(jiān)持使用某種特定的美學(xué)技術(shù)而不愿意務(wù)實(shí)的話,那么我敢肯定他已經(jīng)被所謂的“軟件藝術(shù)”洗腦了。
好的代碼應(yīng)該是高效的代碼,而不是因?yàn)樗拿烙^。不管它是什么樣子,只要它可靠、高效就成。換言之就是不管黑貓白貓,能抓老鼠的就是好貓。也可以歸結(jié)為理解和實(shí)現(xiàn)簡(jiǎn)單流程的能力。
“一個(gè)經(jīng)驗(yàn)豐富的編程團(tuán)隊(duì)完全可以在很短的時(shí)間內(nèi)拿出驚人的業(yè)務(wù)成績(jī)。只有真正的專業(yè)人士和真正的軟件匠手才能在毫無頭緒一團(tuán)糟中,例如各種企業(yè)軟件,發(fā)現(xiàn)被拋棄的優(yōu)雅與樸素。”——Dan North
但可悲的是,即使是優(yōu)秀的程序員也經(jīng)常會(huì)忘記何謂優(yōu)秀軟件的核心功能——過分重視所謂的軟件藝術(shù)往往是罪魁禍?zhǔn)住?/p>
“軟件從業(yè)者——具有諷刺意味的是,尤其是一些優(yōu)秀人才——卻經(jīng)常會(huì)犯此錯(cuò)誤。他們愛上了軟件本身,然后覺得自己已經(jīng)化身成了軟件藝術(shù)工匠。”——Dan North
程序員的才華
全文這個(gè)辯論是基于一個(gè)問題展開的,這個(gè)問題就是:軟件工程是否是藝術(shù)形式的一種?
據(jù)說性能和效率的比重在軟件行業(yè)里已經(jīng)有所下降,而怎么樣才能成為一名優(yōu)秀的開發(fā)人員卻依然沒有達(dá)成共識(shí)。“偉大的程序員,只需要幾個(gè)小時(shí)或者幾天就能完成普通程序員需要數(shù)周或者數(shù)月才能搞定的任務(wù)。”Dan North堅(jiān)持這么認(rèn)為。
“作為買家,你難道不想知道你的系統(tǒng)是由大師級(jí)工匠還是臨時(shí)工做的嗎?你付了錢,就應(yīng)該有這個(gè)知情權(quán)。所以如何辨別兩者就很重要了。”——Dan North
North也承認(rèn),好不好看并不能讓我們正確區(qū)分兩者。任何開發(fā)人員都可以自詡為軟件匠手,也能做到對(duì)何為“軟件架構(gòu)之美”侃侃而談。North誠(chéng)摯地希望能有有識(shí)之士重新編寫軟件藝術(shù)的概念,這是最基礎(chǔ)的理念問題。
站在背后的代碼
我們并不在乎水管長(zhǎng)啥樣——反正是埋在里面的。這同樣適用于軟件。無論是客戶還是用戶,都只關(guān)心代碼是否能工作以及頁(yè)面看上去ok就行。
“同樣的,我只想請(qǐng)專家電工來給我的房子布線而不是一個(gè)濫竽充數(shù)的家伙,我也只想要專業(yè)程序員來寫代碼,” North鄭重其事地說,“我最討厭的就是,一個(gè)自命不凡自以為是的水管工一刻不停地談?wù)撍麅?yōu)雅美麗富有藝術(shù)感的水管。”
譯文鏈接:http://www.codeceo.com/article/art-of-programming.html
英文原文:The ‘art’ of good programming
翻譯作者:碼農(nóng)網(wǎng) – 小峰