不愿將多種編程語言雜糅在一起?可能你還沒意識到而已
譯文之前我曾經(jīng)在一篇博文中就多語言開發(fā)的問題進(jìn)行過探討,這一周來很多朋友發(fā)來了評論與郵件,其中自然不乏支持與反對的聲音。其實(shí)這也早在意料之中,此類爭議性話題總會帶來兩個(gè)不同陣營,雙方分執(zhí)一詞吵個(gè)不可開交。
我實(shí)在弄不清楚為什么事情總要變成這樣,也許這一切早在我們的孩提時(shí)代就已有征兆:那時(shí)候偏愛雪佛蘭品牌的小孩兒會在福特汽車上小便,而支持福特品牌的小孩兒也樂于用污物糊雪佛蘭一熊臉。也許隨著年紀(jì)的增長、我們不會再糾結(jié)于超人和蝙蝠俠誰更厲害,但類似的爭論卻仍然經(jīng)常性、持續(xù)性出現(xiàn)在我們身邊。
我們往往會對自己“最偏愛”的語言產(chǎn)生過度依賴,對于任何人來說掙脫自己熟悉的一切、踏出邁向未知領(lǐng)域的步伐都相當(dāng)困難。我們都喜歡躲在自己選定的“shell(殼)”里平靜生活。從通用的Bash shell轉(zhuǎn)向Zsh確實(shí)能讓我們接觸到一個(gè)迥異于前且突破了思維慣性的新世界,但由此帶來的陌生感、失落感以及學(xué)習(xí)過程所必須投入的寶貴時(shí)間都不免讓人感到惱火,有時(shí)候我們甚至寧愿拋開這一切、再度回到Bash的懷抱。這并不難理解,畢竟不是每個(gè)人都擁有充足的時(shí)間來推翻自己過去幾十年中積累的經(jīng)驗(yàn)、下定決心從頭學(xué)起——無論最終成果有多么誘人,這樣的成本都實(shí)在太過高昂了。
然而在不同編程語言之間游弋對于開發(fā)人員來說是一種非常理想的自我提升方式,這是永遠(yuǎn)顛撲不破的真理。無論是編程語言、shell還是應(yīng)用程序,我們總是會選擇那些自己最為熟悉的命令及實(shí)踐方式,而且一旦建立起基本工作習(xí)慣、我們就再也不想離開這個(gè)溫暖而舒適的安樂窩了。
舉例來說,今天在使用Vi編輯器的時(shí)候,我仍然習(xí)慣性地連敲三次“w”鍵來將光標(biāo)向前推向三個(gè)詞距,或者按下“0”來直接將光標(biāo)移至本行末尾;我當(dāng)然知道可以使用“3w”或者“)”這類更為簡潔的運(yùn)算符,但習(xí)慣的力量就是這么可怕。同樣的道理,當(dāng)需要上移至文件頂端時(shí),我永遠(yuǎn)會本能地使用“1G”而非“gg”。這些直觀反應(yīng)已經(jīng)溶化在了我的血液當(dāng)中。
這類情況在開發(fā)工作中同樣數(shù)見不鮮。我們擁有自己積累下來的函數(shù)認(rèn)知、久經(jīng)考驗(yàn)且穩(wěn)定可靠的處理方法,也在自己喜愛的語言中掌握了拿來就用的操作模塊。盡管我們清楚其它語言的用法,但在真正面對這些功能元素時(shí)、我們?nèi)匀粫蟹N踏入未知水域的莫名恐懼感。
有趣的是,在多數(shù)情況下,浪費(fèi)在反復(fù)使用固有方法上的時(shí)間足以幫助我們學(xué)習(xí)并掌握其它語言所提供的更為科學(xué)的處理機(jī)制。一旦我們擁有了數(shù)十次同一內(nèi)容的編寫經(jīng)驗(yàn),我們就會喪失觀察其背后邏輯的愿望與理由。我們只知道我們可以將這些函數(shù)添加進(jìn)來、為其填寫內(nèi)容,它們就自然會給出相應(yīng)的正確答案。如此這般,青春就在重復(fù)中離我們而去。但如果換一種思路,立足于不同語言對同樣的函數(shù)加以審視、我們往往會發(fā)現(xiàn)更多原先從未意識到的優(yōu)化空間。用新視角觀察舊代碼既新鮮刺激又令人恐懼,但這也正是其意義所在。
但撥開重重迷霧,大家必須認(rèn)清這樣一個(gè)事實(shí):大部分開發(fā)者已經(jīng)在工作過程中使用多種語言進(jìn)行程序編寫——只不過很多人還沒有意識到。我們所編寫的代碼又會編寫出其它代碼,而這些“其它代碼”又會生成新的代碼,這正是現(xiàn)代Web應(yīng)用的特性。我們所編寫的Python、PHP或者Ruby代碼會生成JavaScript以及HTML。而在使用Rails等框架時(shí),我們編寫的代碼會引用函數(shù)、從而為我們生成HTML、CSS、SQL以及JavaScript等結(jié)果。
在這樣的情況下,無論選擇哪一種核心語言、Web應(yīng)用開發(fā)人員都必須在剛剛開始工作時(shí)就熟練掌握多種編程語言。當(dāng)然,看起來在Rails中編寫十行代碼以保證Web應(yīng)用能夠執(zhí)行某些簡單功能——例如將文本字段插入到數(shù)據(jù)庫當(dāng)中再將返回結(jié)果顯示出來——好像沒什么難度,但如果大家不熟悉相關(guān)語言的真正基礎(chǔ),那么在嘗試解決限制性問題或者檢查代碼問題的過程中必然會碰到很多其它更為嚴(yán)峻的挑戰(zhàn)。
正如我在上周的文章中所說,選擇成為一位掌握多種語言的開發(fā)者不僅能夠拓寬我們的選擇范圍,同時(shí)也能幫助大家更清醒地意識到當(dāng)前項(xiàng)目的實(shí)際需求與特定語言的實(shí)際功能之間存在著怎樣的交集與差異。當(dāng)然,最理想的情況是大家已經(jīng)擁有多種語言開發(fā)能力,而且從事過Web應(yīng)用的相關(guān)工作。
考慮到這一點(diǎn),大家不妨拿出幾天時(shí)間把自己已經(jīng)利用某種語言編寫出的成果換作另一種語言再重新編寫一次,在我看來這是掌握新語言的最快方法。沒錯,這屬于那種“重新發(fā)明輪子”的重復(fù)勞動過程,但由于模板由我們自己提供、因此我們所重現(xiàn)的輪子至少源于自己的創(chuàng)新成果。
英文:http://www.infoworld.com/d/data-center/dont-want-mix-programming-languages-you-already-do-239907
【編輯推薦】
- 2014年5月編程語言排行榜:Adobe ActionScript進(jìn)入top20
- 技術(shù)趣聞:十三種編程語言和它們名稱背后的故事
- 你最深愛的編程語言其實(shí)很爛
- 2014年4月編程語言排行榜:Perl 創(chuàng)歷史新低
- 90分鐘實(shí)現(xiàn)一門編程語言——極簡解釋器教程