缺乏想象力的程序員
我認(rèn)識(shí)一個(gè)演員,且叫她Esmerelda吧,她曾說(shuō),“我無(wú)法想象除了當(dāng)演員我還能做什么。”對(duì)于此有人反擊說(shuō),“你肯定不能成為一個(gè)優(yōu)秀的演員,不是嗎?”
當(dāng)某人向我談?wù)揋o語(yǔ)言時(shí),我想起了這個(gè)爭(zhēng)論。他說(shuō),“我不能想象如何用一種沒(méi)有范型的編程語(yǔ)言進(jìn)行編程。”我的反駁——當(dāng)時(shí)并沒(méi)有說(shuō)出來(lái)——是,“那你一定不能成為一個(gè)優(yōu)秀的程序員,不是嗎?”
這篇文章并不是討論范型問(wèn)題的(范型是個(gè)好東西,也許某一天Go語(yǔ)言里也會(huì)有,也許不會(huì)),而是關(guān)于想象力的,或者,至少是關(guān)于被程序員們誤認(rèn)為是想象力的:抱怨。一個(gè)朋友發(fā)現(xiàn),現(xiàn)代一種流行的娛樂(lè)方式就是去上網(wǎng)抱怨。對(duì)于抱怨者,這很有趣,對(duì)于抱怨的接收者,是使其沮喪消沉。作為一個(gè)抱怨接收者,我一定會(huì)把抱怨反送回去。
不是很久以前,所謂程序員是指一個(gè)能編程的人,但如今看起來(lái),編程變成了程序員的***一件事情。如今,程序員的定義是:一個(gè)會(huì)抱怨的人,除非問(wèn)題已經(jīng)被解決,并且解決方案用一行代碼就可以表示。(從一個(gè)語(yǔ)言設(shè)計(jì)者的角度,這能推導(dǎo)出一個(gè)成功的語(yǔ)言的必然結(jié)論:任何程序都能夠縮減成一行代碼,否則,這種語(yǔ)言很爛。語(yǔ)言算法課程不需要存在了。)
一個(gè)不同的、更公正的定義應(yīng)該是:程序員是永遠(yuǎn)用同一種方法解決任何問(wèn)題、并在這種方法不好用時(shí)抱怨這些用到的工具和技術(shù)。
對(duì)于程序員大眾來(lái)說(shuō),這種現(xiàn)代的消遣方式要求:當(dāng)一個(gè)人需要編程,或至少需要去思考編程時(shí),他不去編程,而是去寫一篇博客/一條微博/一句牢騷。我曾看到有人寫了數(shù)千行一句話式的咒罵,抱怨某個(gè)問(wèn)題需要讓他多敲幾下鍵盤,可卻沒(méi)有意識(shí)到反諷的是,如果他把這發(fā)牢騷的功夫用在編程上,他甚至可以把這個(gè)問(wèn)題解決數(shù)百次,而不用敲這么多鍵盤來(lái)抱怨。但是,當(dāng)然,這需要編程。
兩年前,Go語(yǔ)言面世。今年,Dart語(yǔ)言對(duì)外發(fā)布。兩個(gè)都來(lái)自谷歌,但出自不同的團(tuán)隊(duì),為著不同的目的;它們少有相似之處。然而,在Dart 語(yǔ)言推出后的前幾天,我被一系列對(duì)這種語(yǔ)言的批評(píng)震驚:如果你把“Dart”全文替換成“Go”,你會(huì)發(fā)現(xiàn)很多早期對(duì)Go語(yǔ)言的抱怨很適合當(dāng)成現(xiàn)在對(duì) Dart語(yǔ)言的漫罵。沒(méi)有必要非要先試試Go或Dart才去公開(kāi)對(duì)它們品頭論足;事實(shí)上,不去試是很重要的(因?yàn)檫@需要去編程)。批評(píng)的聲音很大,很喧囂,但毫不相關(guān),因?yàn)樗麄冋f(shuō)的跟語(yǔ)言沒(méi)有任何關(guān)系。他們只是對(duì)一種新的事物做出的一種標(biāo)準(zhǔn)反應(yīng)。毫無(wú)意義。這是現(xiàn)代程序員對(duì)任何意外事物進(jìn)行抱怨的表現(xiàn)。抱怨是可以無(wú)限重復(fù)利用的。(“我不能想象一種語(yǔ)言竟然沒(méi)有XXX功能”)。畢竟,他們說(shuō)的話不需要有很高的質(zhì)量:不需要編譯器編譯檢查它們。
當(dāng)Go語(yǔ)言發(fā)布了一段時(shí)間后,這張批評(píng)聲的基調(diào)發(fā)生了一些變化。有些人真正的用過(guò)了它,但還是有很多抱怨者。包括上面引用的一條?,F(xiàn)在的問(wèn)題其實(shí)是缺乏想象力:Go是一種用來(lái)寫Go程序的語(yǔ)言,不是用來(lái)寫Java程序或Haskell程序或任何其它程序的。你需要換一種不同的思維方式來(lái)寫出好的 Go程序。但這需要時(shí)間和努力,需要你去研究它。而通常我們聽(tīng)到的故事是把一種其它語(yǔ)言的程序翻譯成Go語(yǔ)言程序,然后看是什么結(jié)果??墒?,翻譯會(huì)丟失方言成語(yǔ)。例如,試圖在Go語(yǔ)言里寫出Java構(gòu)造器,這不會(huì)有好結(jié)果,然而,使用Go語(yǔ)言里一些特定的編寫方式卻能收到意想不到的效果。在經(jīng)過(guò)了10年的 Java編程和10分鐘的Go編程后,任何對(duì)語(yǔ)言能力的比較都不會(huì)比出深層次的內(nèi)容,然而,比較的結(jié)果卻出來(lái)了,因?yàn)檫@是現(xiàn)代程序員的工作。
當(dāng)然,也有好樣的。兩年來(lái),Go語(yǔ)言擁有了大批的粉絲愿意去花時(shí)間研究究竟該如何使用它,很多愿意去對(duì)它進(jìn)行投資的人最終得到了很好的回報(bào)。需要你花時(shí)間,需要你有想象力,需要你去編程,這才能知道如何更好的使用一種語(yǔ)言,這需要你很多的時(shí)間。這不斷壯大的Go語(yǔ)言社區(qū)創(chuàng)造出了大量的優(yōu)秀的軟件,這給了我希望,讓我看到世界上還有真正的程序員存在。
然而,網(wǎng)上關(guān)于Go語(yǔ)言的一知半解的責(zé)罵還是很多,所以,在2012年,我的一個(gè)自我防御的新年計(jì)劃就是:
我決定要更多的去揭露這些抱怨者的真實(shí)嘴臉,而不是關(guān)心他們抱怨的東西。威信不是靠發(fā)牢騷獲得的,而是靠經(jīng)驗(yàn)和洞察力,這需要你去實(shí)踐和想象力,包括做一些編程工作。
[本文英文原文鏈接: ]
原文鏈接:http://www.aqee.net/esmereldas-imagination/
【編輯推薦】