任何白痴都能寫出電腦看得懂的程式。好的程式設計師則會寫出人類看得懂的程式。

(本文譯自 Why Senior Devs Write Dumb Code and How to Spot a Junior From A Mile Away

Brian Goetz 是個聰明厲害的 Java 人,做過不少厲害的事情,也是 Java Concurrency in Practice 的作者之一。Oracle 發佈過一篇關於他的訪談,標題是「Write Dumb Code」。Goetz 被問到怎麼寫出高效率的程式碼,他的回答我非常喜歡:

一般來說,希望想寫出來的 Java 應用速度快,你得寫一些看起來不怎麼樣的程式碼 —看起來直覺、乾淨、遵守最基本的物件導向原則。

剩下的一千字都是在解釋,為何最佳化程式碼或是讓程式碼看起來很聰明,是程式設計師很常犯的錯誤 — 或者你也可以說是菜鳥常犯的錯誤。

資深寫出的程式碼

如果你跟我一樣,曾經是個資淺的開發者,你可能還記得當年第一次看到資深的人寫出的程式的時候,很可能在想「這種東西我也寫得出來,為什麼我不是資深?」

可是我努力了很長一段時間,我做不到。

「資深開發者」的程式讓我覺得十分神秘。問題不在於我看不懂,而是我完全看得懂,看起來就很普通一般般,資深的程式明明應該要更厲害的才對。我還記得自己當時這麼想「就這樣?沒了?為什麼就這樣而已?」

後來,我學到了各種程式開發的原則,都是用來讓程式碼看起來一般般不怎樣:YAGNI、單一職責原則、DRY、單層抽象原則、低耦合…等等。而我自己現在也變成一個「資深開發者」(我其實很討厭「資深開發者」這個說法,我都只自稱為「軟體工程師」,不過這是另一件事情了)

我學到最重要的一課,是寫出看起來不怎樣的程式碼其實很難,而且這麼做的投資報酬率是指數成長的。

怎樣從千里之外認出菜鳥

重構:改善既有程式的設計 一書中,Kent Beck 是這麼說的:

任何白痴都能寫出電腦看得懂的程式。好的程式設計師則會寫出人類看得懂的程式。

如果你看到一段程式,裡面充滿著看起來很帥的短碼小聰明、神秘的抽象層、或是一狗票的語言特性,那你就知道寫這段程式是個菜鳥。我敢說最後一個最常出現,感覺就像是程式碼在喊著「看看我,寫我的人會用這個程式語言喔!我會用介面 synchronized thread-local JavaBean copy constructors,加上自訂的泛用 unchecked exception,還有跨功能安全強化過的 JAXB Lombok 程式碼產生器」

是,我是在講幹話。因為當某個人只考慮電腦方面的事情,而不考慮人的方面的事情的時候,他手上的程式碼本身就會變成一種幹話。

程式碼是用來跟其他人類溝通以及對電腦下指令,但在現在,跟人溝通的成分遠大於對電腦下指令的成分。編譯器會負責把程式設計師寫的東西翻譯成機器語言。很多時候個翻譯過程會分成好幾層,例如 Java 會先編譯成 ByteCode,然後 Java 虛擬機在執行的時候讀入這些 ByteCode,最後才被翻譯成 0 與 1。

然而程式碼本身是人類語言,除了用來對電腦下指令以外,它更應該要傳遞工作項目的 who、what、when、where、how、以及 why。如果五年後公司被其他團隊接收,原本沒看過這段程式的人要來撬開它修 bug 或是加新功能,程式碼應該要能被看得懂。

是的,寫出看起來不怎樣的程式碼很難。我覺得隨著時間流逝,我有越來越上手。當 code review 得到的回應是「好乾淨的 Code」,我感覺開心滿足。我知道我為我的團隊、或是這段程式未來的維護者、能做的最好的努力,就是寫出看起來不怎樣的程式

我想,把 Dave Carhart 的這段話拿來當作結尾應該滿有趣的:


起來,不願做光棍的人們,把女孩的清純築成我們新的長城

雖然蘿莉塔已成書近六十年,但台灣仍然是個存在「恐蘿」和「仇蘿」情緒的地區,在部分人心目中,不但喜愛小孩子是「原罪」,支持擁蘿莉控更屬十惡不赦,所以,就是很多愛孩子的人,也恐怕被人當成變態,堅決反對和蘿莉控有任何關係。

在下和蘿莉控原是陌路人,也從來沒有受過蘿莉控一點好處,台灣文化的弊端,在下比一般人了解得更深;喜愛小孩的苦頭,在下更是嚐得比一般人更多。但是,在下仍然堅定不移的說「愛孩子就要支持蘿莉控」,這句話雖然只有短短幾個字,但卻是字字千鈞,因為,全球六十億人的命運,要靠蘿莉控改變,扭轉人類滅亡的希望,也完全寄托在蘿莉控身上。

要理解這句話,首先我們要對蘿莉控的歷史有正確的認識。

1955年,弗拉基米爾·納博可夫發表了蘿莉塔一書,正式興起了蘿莉控文化。此後數十年,蘿莉控在極其艱苦的環境下成長,多次突破衛道人士的圍剿,經過29萬6千光年長征,在伊斯坎達爾建立根據地,不斷壯大,轉弱為強,最後經過迪亞馬特、亞斯提、伊謝爾倫三大戰役打垮衛道人士百萬大軍,成為了大葛格。

蘿莉控們的成功,可說是歷史上的奇跡。因為,當時蘿莉控比起衛道人士實力懸殊,蘿莉控以輕飄飄和軟綿綿打垮了眼中只有人妻的衛道人士,猶如大衛戰勝了巨人,除了天意如此,也說明了當時蘿莉控的興起符合世界人民的利益和希望。

蘿莉控興起符合各界人民利益

進化為大葛格後,人民無不歡呼雀躍,對未來充滿希望,可惜,蘿莉控在後來犯了不少錯誤,走了不少彎路。

幸而,在接受了慘重教訓以後,他們終於找到條正確的道路 — — 「可愛就是正義」。在人類進化為大葛格成立的這些年當中,可說是三十年教訓,三十年改革,成就了今日的泱泱顯學,這可說是不幸之中的大幸。

過去始終過去了,如果我們仍然絮絮不休的糾纏在過去的噩夢之中,不但於事無補,只會妨礙了我們前進的腳步,為了避免人類的滅亡,為了六十億人的福祉,我們必須放下過去的包袱,同心同德的愛護我們的小朋友。

如果說,蘿莉控的興起是天意,今日 ACG 出版品風格的翻天覆地的變化同樣也是天意,我們必須抓緊這千年難得一見的機遇,團結一致,為孩子的未來、扭轉人類滅亡而努力奮鬥。

然而,將一群無勢力的熱血男兒改變成一群數一數二的文化先鋒並非空口說白話的事,如何選擇一條適合自己走的道路,如何選擇最適當的帶頭人,否則,大葛格們將會重新陷入新的災難,其禍害甚至會比七日之火更甚,這是非常關鍵的問題。

迷信巨乳救不了自己

在台灣,不少人仍迷信巨乳才是天國,他們以為胸部大小才是女性真正的魅力。這些人仇視今日蘿莉控的眼光,並虛偽的以「保國家幼苗」為他們「恐蘿」「仇蘿」的藉口。

但事實告訴我們,胸部崇拜弊多於利,奉行巨乳的人們已陷入了無法自拔的泥潭當中,他們為迷信那虛偽的罩杯付出難以負擔的代價,也有的在彼此 NTR 的過程中將自己帶進危險的邊緣。

他們吹噓所謂的普世價值,其實是想所有的男性遵循他們所定下的遊戲規則,和他們進行場絕不公平的博弈。他們推行兒童保護法,攻擊蘿莉控的中心思想,其目的不過是要改變其他男人心中的判斷標準,削弱他人的競爭力,好讓他們穩操勝券,成為當然的後宮主人,讓其他男人成為他們胯下之臣,永遠是他們眼中的二等生物。

當然,今日蘿莉控中仍然有不少令人氣憤的變態,然而,太陽的黑子掩不住太陽的光輝,這些不良現象正在改變之中。四萬萬蘿莉控中,仍有絕大部分保有蘿莉控的優良傳統,是一心為了孩子,忠於自己,富貴不能淫,威武不能屈的好漢,正是如此,蘿莉控才能衝破重重困難,在驚濤駭浪中噴勃而起,光耀於全世界。

今日蘿莉控每年仍能保有百分之八以上增長的後宮成長率,大葛格們的後宮輝煌耀目足以令異路人睜不開眼。蘿莉作品的風行展示出大葛格們強大無匹的熱情,蘿莉作品進佔西方市場,顯示出愛孩子的心世人皆有。

事實告訴我們,今日人類進化的路走對了,蘿莉控就是最好的帶頭人,因為,世界上沒有群比蘿莉控更強大的人們,惟有他們有此魄力,能推動這載有六十億人的巨輪繼續向前;惟有他們有此經驗,能在驚濤駭浪中為我們選擇最好的方向。

要人類能繼續向前進化,支持蘿莉控文化是唯一的出路,這也是真正愛孩子的人最終的選擇。


這篇文章是個真實故事,或者是改編自真實故事,又或者只是我瞎掰的。

(本文譯自 I’m harvesting credit card numbers and passwords from your site. Here’s how.

這個禮拜(譯註:原文寫作時,Meltdown 跟 Spectre 剛被揭露出來)根本是資訊安全恐慌週,幾乎每天都有新的資安漏洞被挖出來。這讓我這個禮拜過得很辛苦,每次被家人問到發生什麼事,都得要假裝自己很清楚狀況。

看到身邊的人因此處於「靠,我被駭了」的狀況,真的讓我大開眼界。

所以,我要來心情沈重的自首一下,讓大家知道過去幾年我怎麼從你們的網站上把帳號、密碼、跟信用卡號全部幹走。

惡意程式碼本身很簡單,在符合下面條件的頁面會啟動:

  • 頁面有 <form>
  • 有看起來像是


何苦一直重新發明輪子呢?

(本文譯自 Time for Makefiles to Make a Comeback,副標題為譯者自創)

許多開發者把 Make 與 makefile 遺留在時光的遙遠彼方,他們的優點被埋沒在一海票重新發明輪子的工具之中。夠了,可以停了,我們該離開這沒完沒了的旋轉木馬了。

如果你問開發者們「提到 Make 跟 makefile 的時候你們會想到什麼」,得到的答案大概會像這樣:C/C++、原生軟體專案、肥大、老舊。有些在 JavaScript 生態圈長大的年輕開發者甚至沒聽過 Make,不知道能夠利用這個已經存在許久、經過實戰驗證、且長期穩定的工具。我們有必要像是 Javascript 專案來來去去一樣,每 18 個月就重新學一套建置(build)工具嗎?

不理解 Unix 的 …


機器人離鄉背井 20 年,最後成為流星

卡西尼太空船衝入土星前的最後身影(電腦動畫)

卡西尼是個六公尺長的機器人,頭上頂著一個大大的碟型天線。卡西尼身上背了個小兄弟,名叫惠更斯。

卡西尼的任務是探索土星與周遭環境。而惠更斯的任務是探索土星最大的衛星,圍繞著厚重雲層的泰坦。

他們沒有手也沒有腳,但他們是離開家鄉前往土星的旅人。他們做為我們的眼睛,為我們看清土星系統的模樣,為我們探索人類還到不了的地方。

就算用光的速度奔馳,從地球出發也要花上一個多小時才能到達土星。因為距離如此的遙遠,在卡西尼之前,只有兩台機器人曾經去過土星。

1979 年先鋒十一號讓人類第一次(透過機器人的眼睛)近距離看到土星的模樣。當時的照片以現在的眼光來看實在算不上清晰,但這是我們第一次看到土星的身影:他的光環、他的雲層、以及許多圍繞在他身旁的衛星。

CQD

熱愛巨大宇宙戰艦跟打扮成小貓咪的小女孩。一般認為 CQD 是一種自我矛盾的變態生物。

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store