缺乏想像力的程式設計師 - OSCHINA - 中文開源技術交流社區

2020-12-05 開源中國

我認識一個演員,且叫她Esmerelda吧,她曾說,「我無法想像除了當演員我還能做什麼。」對於此有人反擊說,「你肯定不能成為一個優秀的演員,不是嗎?」

當某人向我談論Go語言時,我想起了這個爭論。他說,「我不能想像如何用一種沒有範型的程式語言進行編程。」我的反駁——當時並沒有說出來——是,「那你一定不能成為一個優秀的程式設計師,不是嗎?」

這篇文章並不是討論範型問題的(範型是個好東西,也許某一天Go語言裡也會有,也許不會),而是關於想像力的,或者,至少是關於被程式設計師們誤認 為是想像力的:抱怨。一個朋友發現,現代一種流行的娛樂方式就是去上網抱怨。對於抱怨者,這很有趣,對於抱怨的接收者,是使其沮喪消沉。作為一個抱怨接收 者,我一定會把抱怨反送回去。

不是很久以前,所謂程式設計師是指一個能編程的人,但如今看起來,編程變成了程式設計師的最後一件事情。如今,程式設計師的定義是:一個會抱怨的人,除非問 題已經被解決,並且解決方案用一行代碼就可以表示。(從一個語言設計者的角度,這能推導出一個成功的語言的必然結論:任何程序都能夠縮減成一行代碼,否 則,這種語言很爛。語言算法課程不需要存在了。)

一個不同的、更公正的定義應該是:程式設計師是永遠用同一種方法解決任何問題、並在這種方法不好用時抱怨這些用到的工具和技術。

對於程式設計師大眾來說,這種現代的消遣方式要求:當一個人需要編程,或至少需要去思考編程時,他不去編程,而是去寫一篇博客/一條微博/一句牢 騷。我曾看到有人寫了數千行一句話式的咒罵,抱怨某個問題需要讓他多敲幾下鍵盤,可卻沒有意識到反諷的是,如果他把這發牢騷的功夫用在編程上,他甚至可以 把這個問題解決數百次,而不用敲這麼多鍵盤來抱怨。但是,當然,這需要編程。

兩年前,Go語言面世。今年,Dart語言對外發布。兩個都來自谷歌,但出自不同的團隊,為著不同的目的;它們少有相似之處。然而,在Dart 語言推出後的前幾天,我被一系列對這種語言的批評震驚:如果你把「Dart」全文替換成「Go」,你會發現很多早期對Go語言的抱怨很適合當成現在對 Dart語言的漫罵。沒有必要非要先試試Go或Dart才去公開對它們品頭論足;事實上,不去試是很重要的(因為這需要去編程)。批評的聲音很大,很喧 囂,但毫不相關,因為他們說的跟語言沒有任何關係。他們只是對一種新的事物做出的一種標準反應。毫無意義。這是現代程式設計師對任何意外事物進行抱怨的表現。 抱怨是可以無限重複利用的。(「我不能想像一種語言竟然沒有XXX功能」)。畢竟,他們說的話不需要有很高的質量:不需要編譯器編譯檢查它們。

當Go語言發布了一段時間後,這張批評聲的基調發生了一些變化。有些人真正的用過了它,但還是有很多抱怨者。包括上面引用的一條。現在的問題其 實是缺乏想像力:Go是一種用來寫Go程序的語言,不是用來寫Java程序或Haskell程序或任何其它程序的。你需要換一種不同的思維方式來寫出好的 Go程序。但這需要時間和努力,需要你去研究它。而通常我們聽到的故事是把一種其它語言的程序翻譯成Go語言程序,然後看是什麼結果。可是,翻譯會丟失方 言成語。例如,試圖在Go語言裡寫出Java構造器,這不會有好結果,然而,使用Go語言裡一些特定的編寫方式卻能收到意想不到的效果。在經過了10年的 Java編程和10分鐘的Go編程後,任何對語言能力的比較都不會比出深層次的內容,然而,比較的結果卻出來了,因為這是現代程式設計師的工作。

當然,也有好樣的。兩年來,Go語言擁有了大批的粉絲願意去花時間研究究竟該如何使用它,很多願意去對它進行投資的人最終得到了很好的回報。需 要你花時間,需要你有想像力,需要你去編程,這才能知道如何更好的使用一種語言,這需要你很多的時間。這不斷壯大的Go語言社區創造出了大量的優秀的軟 件,這給了我希望,讓我看到世界上還有真正的程式設計師存在。

然而,網上關於Go語言的一知半解的責罵還是很多,所以,在2012年,我的一個自我防禦的新年計劃就是:

我決定要更多的去揭露這些抱怨者的真實嘴臉,而不是關心他們抱怨的東西。威信不是靠發牢騷獲得的,而是靠經驗和洞察力,這需要你去實踐和想像力,包括做一些編程工作。

[本文英文原文連結:Esmerelda's Imagination ]

相關焦點