ESR在其個人網站上談論了年紀越來越大的黑客。
近來我一直在與某資深開源開發團隊中的多個成員纏斗,盡管密切關注我的人們會在讀完本文后猜到是哪個組織,但我不會在這里說出這個組織的名字。
怎么讓某些人進入21世紀就這么難呢?真是的…
我快56歲了,也就是大部分年輕人會以為的我將時不時朝他們發出諸如“滾出我的草坪”之類歇斯底里咆哮的年齡。但事實并非如此——我發現,尤其是在技術背景之下,我變得與我的年齡非常不相稱。
在我這個年齡的大部分人確實變成了愛發牢騷、墨守成規的老頑固。并且,尷尬的是,偶爾我會成為那個打斷談話的人,我會指出他們某個在1995年(或者在某些特殊情況下,1985年)時很適合的方法…幾十年后的今天就不再是好方法了。
為什么是我?因為年輕人在我的同齡人中很難有什么說服力。如果有人想讓那幫老頭改變主意,首先他得是自己同齡人中具有較高思想覺悟的佼佼者。即便如此,在與習慣做斗爭的過程中,我也比看起來花費了更多的時間。
年輕人犯下無知的錯誤是可以被原諒的。他們還年輕。年輕意味著缺乏經驗,缺乏經驗通常會導致片面的判斷。我很難原諒那些經歷了足夠多本該有經驗的人,卻被長期的固化思維蒙蔽,無法發覺近在咫尺的東西。
?。ㄑa充一下:我真的不是保守黨擁護者。那些和我爭論政治的,無論保守黨還是非保守黨都沒有注意到這點,我覺得這頗有點嘲諷的意味。)
那么,現在我們來討論下GNU更新日志文件(ChangeLog)這件事。在1985年的時候,這是一個不錯的主意,甚至可以說是必須的。當時的想法是用單獨的更新日志條目來記錄多個相關文件的變更情況。用這種方式來對那些存在版本缺失或者非常原始的版本進行版本控制確實不錯。當時我也在場,所以我知道這些。
不過即使到了1995年,甚至21世紀早期,許多版本控制系統仍然沒有太大改進。也就是說,這些版本控制系統并非對批量文件的變化進行分組再保存到一條記錄上,而是對每個變化的文件分別進行記錄并保存到不同的地方。CVS,當時被廣泛使用的版本控制系統,僅僅是模擬日志變更——并且在這方面表現得很糟糕,導致大多數人不再依賴這個功能。即便如此,更新日志文件的出現依然是必要的。
但隨后,版本控制系統Subversion于2003年發布beta版,并于2004年發布1.0正式版,Subversion真正實現了更新日志記錄功能,得到了人們的廣泛認可。它與一年后興起的分布式版本控制系統(Distributed Version Control System,DVCS)共同引發了主流世界的激烈爭論。因為如果你在項目上同時使用了分布式版本控制與更新日志文件記錄的功能,它們將會因為爭奪相同元數據的控制權而產生不可預料的沖突。
有幾種不同的方法可以折衷解決這個問題。一種是繼續將更新日志作為代碼變更的授權記錄。這樣一來,你基本上只能得到簡陋的、形式上的提交評論數據。
另一種方法是對提交的評論日志進行授權。如果你這樣做了,不久后你就會開始思忖為什么自己仍然對所有的日志更新條目進行記錄。提交元數據與變化的代碼具有更好的相容性,畢竟這才是當初設計它的目的。
(現在,試想有這樣一個項目,同樣本著把項目做得最好的想法,但兩撥人卻做出了完全不同的選擇。因此你必須同時閱讀更新日志和評論日志以了解到底發生了什么。最好在矛盾激化前把問題解決….)
第三種辦法是嘗試同時使用以上兩種方法——在更新日志條目中,以稍微變化后的的格式復制一份評論數據,將其作為評論提交的一部分。這會導致各種你意想不到的問題,最具代表性的就是它不符合“真理的單點性(single point of truth)”原理;只要其中有拷貝文件損壞,或者日志文件條目被修改,這就不再是同步時數據匹配的問題,它將導致在其后參與進來的人試圖搞清人們是怎么想的時候變得非常困惑。(LCTT譯注:《程序員修煉之道》(The Pragmatic Programmer):任何一個知識點在系統內都應當有一個唯一、明確、權威的表述。根據Brian Kernighan的建議,把這個原則稱為“真理的單點性(Single Point of Truth)”或者SPOT原則。)
或者,正如這個我就不說出具體名字的特定項目所做的,它的高層開發人員在電子郵件中最近聲明說,提交可以包含多個更新日志條目,并且提交的元數據與更新日志是無關的。這導致我們直到現在還得不斷進行記錄。
當時我讀到郵件的時候都要吐了。什么樣的傻瓜才會意識不到這是自找麻煩——事實上,在DVCS中針對可靠的提交日志有很好的瀏覽工具,圍繞更新日志文件的整個定制措施只會成為負擔和拖累。
唉,這是比較特殊的笨蛋:變老的并且思維僵化了的黑客。所有的合理化改革他都會極力反對。他所遵循的行事方法在幾十年前是有效的,但現在只能適得其反。如果你試圖向他解釋這些不僅僅和git的摘要信息有關,同時還為了正確適應當前的工具集,以便實現更新日志的去條目化…呵呵,那你就準備好迎接無法忍受、無法想象的瘋狂對話吧。
的確,它成功激怒了我。這樣那樣的胡言亂語使這個項目變成了很難完成的工作。而且,同樣的糟糕還體現在他們吸引年輕開發者的過程中,我認為這是真正的問題。相關Google+社區的人員數量已經達到了4位數,他們大部分都是孩子,還沒有成長起來。顯然外界已經接受了這樣的信息:這個項目的開發者都是部落中地位根深蒂固的崇高首領,最好的崇拜方式就是遠遠的景仰著他們。
這件事給我的最大觸動就是每當我要和這些部落首領較量時,我都會想:有一天我也會這樣嗎?或者更糟的是,我看到的只是如同鏡子一般對我自己的真實寫照,而我自己卻渾然不覺?我的意思是,我所得到的印象來自于他的網站,這個特殊的笨蛋要比我年輕。年輕至少15歲呢。
我總是認為自己的思路很清晰。當我和那些比我聰明的人打交道時我不會受挫,我只會因為那些思路跟不上我、看不清事實的人而沮喪。但這種自信也許只是鄧寧·克魯格效應(Dunning-Krueger effect)在我身上的消極影響,我并不確定這意味著什么。很少有什么事情會讓我感到害怕;而這件事在讓我害怕的事情名單上是名列前茅的。
另一件讓人不安的事是當我逐漸變老的時候,這樣的矛盾發生得越來越頻繁。不知怎的,我希望我的黑客同行們能以更加優雅的姿態老去,即使身體老去也應該保持一顆年輕的心靈。有些人確實是這樣;但可惜絕大多數人都不是。真令人悲哀。
我不確定我的職業生涯會不會完美收場。假如我最后成功避免了思維僵化(注意我說的是假如),我想我一定知道其中的部分原因,但我不確定這種模式是否可以被復制——為了達成目的也許得在你的頭腦中發生一些復雜的化學反應。盡管如此,無論對錯,請聽聽我給年輕黑客以及其他有志青年的建議。
你們——對的,也包括你——一定無法在你中年老年的時候保持不錯的心靈,除非你能很好的控制這點。你必須不斷地去磨練你的內心、在你還年輕的時候完成自己的種種心愿,你必須把這些行為養成一種習慣直到你老去。
有種說法是中年人鍛煉身體的最佳時機是30歲以前。我以為同樣的方法,堅持我以上所說的習慣能讓你在56歲,甚至65歲的時候仍然保持靈活的頭腦。挑戰你的極限,使不斷地挑戰自己成為一種習慣。立刻離開安樂窩,由此當你以后真正需要它的時候你可以建立起自己的安樂窩。
你必須要清楚的了解這點;還有一個可選擇的挑戰是你選擇一個可以實現的目標并且為了這個目標不斷努力。這個月我要學習Go語言。不是指游戲,我早就玩兒過了(雖然玩兒的不是太好)。并不是因為工作需要,而是因為我覺得是時候來擴展下我自己了。
保持這個習慣。永遠不要放棄。