谷歌大牛:程式設計的骯髒小祕密

黃詩友發表於2014-05-10

【伯樂線上注】:Steve Yegge 是業界大牛程式設計師,目前效力於 Google。他有一個部落格,常寫程式語言、效率和軟體文化相關話題文章。伯樂線上曾翻譯過他的一篇憋了很長時間才寫的Google面試文章。這篇也是他憋了很久的長文,各位悠著點看。

“對於說這不是大學所要求的無稽之談,我說想說一句:‘給我他媽的好好學習打字。’”—— Mr.Pink

這是另外一篇我最想寫的文章。老兄,我試過很多次了,但都沒什麼用。再一次,我無法擺脫對一些事情的強烈看法,這給我闡明自己的觀點帶來不少困難。

所以,只有一件事可供嘗試了,那就是敞開心扉,看究竟能否達到目的。與其墨守成規,這往往讓人生厭,不如另闢蹊徑,換一種方式。

從前……

好像是在1982年,的確過了很長時間了,這實際上像個童話故事。

在1982年的時候,有一個叫Yeev Staigey 的12歲笨小孩,不過這個人完完全全是人們杜撰的,他在加州天堂市裡的天堂高中裡忍受著他的高二生活。Yeev直接跳了3年級,7年級和8年級,11歲進入高中,以一種英雄般的巨大勝利,但這也造成了他日後生活社交能力的缺失。

孩子,我可以告訴你所有關於小Yeev在那個年紀的故事。他甚至是落伍的,比你想象的還要可悲。但我們今天的故事是關於Yeev的一些選修課。我也不確定大家把它叫什麼,但是在Yeev的學校,你不能一直做像數學、科學、語言和歷史等這類無聊的事情。絕對不行!因為Yeev是在美國接受教育,所以他必須選修一些選修課,可以被粗略地定義為“橄欖球教練教授的課程,因為法學院說橄欖球教練不得不除了橄欖球外,還得教授另外一門課。”

這些選修課(你可以選擇不上,但這樣他們也能選擇讓你畢不了業)是這樣一些課,他們將活力帶給了活躍的美國人。他們就像木材店、金屬店、汽車店,自然也是那種不惜一切為了滿分的人多常年追捧的店。

在我們的故事開始之時,我們可憐的英雄Yeev正透過他巨大的有刮痕的雙焦眼鏡,凝視著選修課表,試圖找到一門不涉及油脂、放電的課,一門任課老師不會為了一個醫學學生就尖叫”誰會做止血帶,快來幫幫我“的課,以及任何那些大多是數美國人可以在上述“商店”中找到的課。

Yeev 注意到單子上有一門課,很顯然是被放錯地方了,就是打字課,例如在打字機上。Yeev認為在這些課中,這門課看起來相對無害。可能發生的最糟糕的事無非就是手指被打字機軋了一下,就像閃電擊中建築物,使你大聲尖叫,這種尖叫方式就好像是你的褲子突然滑落到膝蓋,然後所有人嘲笑你媽媽給你在Mervyn店買的白色內褲。這可能少許尷尬,但在接下來的幾年中,沒人會想起這事除非他們看見你。

儘管會有潛在的尷尬,打字課絕對比止血店更吸引人。

Yeev檢查了下,然後十分確信學校橄欖球教練在教授這門課。真的,想著這將是Yeev在他整個學習生涯中離橄欖球場最近的一次,Yeev決定選擇這門課。Yeev那時並不知道,但人們都說教練是最好的老師。要知道,這只是人們說的而已。事實上也有幾分真實性。教練不得不憑著像即飢渴的雄山羊的專注度,將大量複雜的資訊傳遞給學生。正如他們所說,這需要十分特殊的技巧。

你曾經是否注意到,在國家橄欖球聯賽黃金檔期間,前任教練評論員以及他們帶領的前任運動員評論員的手通常都十分大而且結實。他們在談論時會向你揮手,吸引你的注意力。那是因為你的爬行動物腦袋會想,“那傢伙要打我。”教練知道如何讓你集中注意力,他們知道如何上課。

所以,Yeev很幸運地得到了一位教練老師。但現實並不總那麼一帆風順。從某種意義上來講,Yeev很不幸生活在1982年,他幾乎沒有什麼與計算機打交道的經驗,而且他的學校太落後以至於2008年以前,他的學校都沒有一個像樣的網站。在1982年,他們付得起一半的電式打字機;剩下的都是老舊的,手動的,靠馬拉的那種打字機。

如果Yeev現在來學打字,條件會好很多。現在人們擁有快速的鍵盤,而且智慧程式可以精確地顯示你的進度等等。我都有點嫉妒現在那些要學打字的人了,你難道不是嗎?但是在1982年,帶著眼鏡的小Yeev沒有軟體培訓專案,所以他不得不像一位橄欖球教練學習。不過考慮到所有的情況,這已經是十分幸運的了。接下來讓我講講事情是怎麼變得讓人失望的……

 

學習音樂小片段

你之前是否觀察過一個專業的音樂家訓練?我指那些世界一流的,在中國和俄羅斯劇院受訓過的那種音樂家,他們結合了日本機器人的技術以及,額,日本機器人的靈魂。他們練習就像這樣:快、慢,中速。快、慢,中速。一遍又一遍。這有點像溝迪洛克斯,你們還記得她對吧,就是那個在童話故事裡被熊吃掉的小女孩。不斷地選擇,直到找到正確的感覺,這就是音樂家練習的方式。

在古典音樂裡,音樂家們稱有難度的繁雜的樂章為“樂群”。在電子吉他音樂裡,他們稱之為樂句片段。其實兩者十分相同。你想訓練你的手指掃過那些樂章就如同柴郡貓在舔它燦爛的笑容。

下面是你訓練你手指的方式。你從一篇樂章開始,任何東西都行。最開始只是一個單個的音符,然後是一些音符,一些樂句,最後變成一些旋律。你想要去掌握那些開始讓你棘手的東西。

開始的時候,你儘可能快地彈奏這些片段,你並不在意犯錯,因為練習這些樂句的目的是為了放鬆你的手指。你想讓它們知道自然的速度是怎樣的,就像輕風拂過髮絲。接下來,你會盡可能慢地彈奏。在這個階段,你會使用一些恰當的技巧,實際上意味著你應當儘可能地做到恰如其分,因為藝術的狀態技巧在不斷地進化著,並且總是有幾分個性化。你學習任何規律,它們的技術思想有各種各樣的學派。這些東西都沒有統一的答案,因為我們的身體的工作方式或多或少的會有不同。你只需要學習你最喜歡的技巧,然後努力掌握它。最終,你可以創造出你自己的技巧。有時候你是被迫的,我在後面會跟你解釋的。但是在最開始的時候,你得學習他人努力得來的正確的技巧,在你掌握它們之後,再來決定你是否想要改變它。在你想要以自己獨特的方式來改變它們的時候,你需要掌握自己的風格。

形式是自由的。相信這一點,他們是這樣說的,而且還言之鑿鑿。

不論你選擇什麼樣的技巧,在緩慢的學習過程中,你根本不會在乎速度。你在意的是準確性。慢工出細活,熟能生巧。你想要你的手指去體會正確的感覺。你並不會在意是否要花上30秒才彈奏一個音符。做對就行,如果出錯了,重頭再來,這次更慢點。

最後,你按一定速度訓練。如果你在練習一門樂器,你會按既定的速率彈奏。你想讓你的手指感受樂感。音樂家通常認為在這個階段你不想犯錯,或者是你恰恰就在以錯誤的方式練習。但從現實角度來講,大多數音樂家很可能願意在第三階段做出一點小犧牲來保證音樂的優美和流暢。我們稱之為一分鐘犧牲五次,這就是你的目標。

快,慢,勻速,一遍又一遍,這就是他們練習的方式,並且很有效果。

 

學習打字

Yeev的橄欖球教練很善於教學。我不知道他是否玩過樂器,但他肯定使用了經典練習法的思想。

Yeev十分認真地上一天一次的課。首先他需要學習打字的基本知識,事實上,並沒有多少基礎知識。你把你的手放在中間行的固定位置,使你的手腕離開鍵盤。會有圖例告訴你哪個手指該按哪些鍵。記住這些規則,將每個鍵都練習幾次。想想上幼兒園的時候,當老師讓你寫字母表時,你會將一行寫滿A,然後下一行寫滿B,就像這樣。

在一到兩天內,你就可以記住鍵盤格局,然後就可以不看鍵盤打出任何東西,雖然可能比較慢。僅僅需要一到兩天,你就在嘗試打字了。在學完基礎之後,不出意料地,Yeev班上練習了很久《Typing Football》這個遊戲。教練發明了這個遊戲,來使學習打字充滿樂趣。因為教練十分精明地意識到,並不是班上所有人都記得全國橄欖球聯盟規則書和策略書。這個遊戲規則涉及到將班級分為兩半,然後通過哪一半打字比較好來移動球。Yeev在1982年使用的練習在現在通過軟體的使用而做的更好。見鬼,現在人們通過軟體讓你射殺殭屍來練習打字,這真是太有趣了。

如果有什麼技巧學習打字,那就是堅持。Yeev的班上堅持了,連著12周,一週5天,他們都練習打字。他們沒有家庭作業,因為學校並沒期望他們成為打字員。他們只是來上課,練習《Typing Football》這個遊戲,做著快,慢,中等的練習。

當然也有細微的差別。有時候他們自己選擇語言來練習字母群,Yeev選的是英語。像“tion”、“the”、“ing”等群組需要被練習的知道他們能毫不費力的打出它們來。有時他們練習的東西里會包含大量標點、數字或奇怪的間距。這些細節並不在我們的故事範圍內,它們都被現在的軟體所解決了,你會發現這點的。

那麼結果如何呢?在學期末,Yeev一分鐘打對了60個詞,而且他甚至不是班上最好的。這可是45天,每天50分鐘的付出,並且充滿了樂趣。實際上,隨著更好的軟體和鍵盤出現,現在的打字學習可能就是30天,每天30分鐘的付出。現在Yeev可以每分鐘打120個詞。他進大學時還只是每分鐘打大約60到65個詞,但他決定提高速度,在他遇見了一個叫凱利的同級學生,他通過UNIX上的“talk”軟體每分鐘能打120個詞。在他們較量時,Yeev能夠感受到她的不耐煩。他提到了這點,她迴應到,“你該看看我在Dvorak鍵盤上打字時的水平”。Yeev在那時已經深諳社交了,他咬緊牙關,不在打任何東西。但關於Yeev的故事已經足夠了,畢竟他是人們虛構的。

 

你需要學習打字嗎?

嗯,你知道你是需要的。這正是你所需要的東西。即便你可以找藉口,但你深深明白你需要學習它。打字是我們現在與整個世界互動的方式。讓自己不便並沒有什麼意義。你可能會像其他人一樣說,“我並不受限於速度,我把全部時間用來設計,而且它們與編碼無關。”我經常聽到這樣的話。但是你錯了,程式設計師一天到晚都需要打字,即便他們在設計。實際上尤其是他們在設計時,他們更需要打字,因為他們要與其他在外地的參與者交流。

這就是這個行業的無恥的祕密:不按指法打字的程式設計師就像文盲。

如果你按指法打字,你就會明白我說的文盲。這個十分無恥,人們不會在正規公司談論骯髒的祕密。文盲就是和躲在工廠地下室的兒童亂倫的混蛋。我發誓,人們會感到不舒服談論這個。我們程式設計師在Reddit網上表現得很有教養,但是我們不能面對我們自己關於社會文化的最大的骯髒祕密。看到了吧,讓我來告訴你:我將要揭露骯髒的一面,不管你是否樂意。我所謂的文盲是什麼?——不按指法打字的人。他們為了維持他們的生產力需要做出犧牲。這不過是簡單的算術。如果你花更多時間碼程式碼,為了保持速度,你做其他事情的時間就會減少。

但是當談到程式設計,你有太多東西可以犧牲。你可以削減你的檔案,減少程式碼註釋,減少郵件通訊以及減少網上討論的時間,更多的加入小組討論和走廊交流。所以,猜猜看不按指法打字的人能犧牲什麼?幾乎上面所設計的任何東西。按指法打字的人在一英里外就可以發現一個很次的程式設計師,他們甚至不需要共處一室。對於初學者而言,人們察覺不到他們的外行,因為他們還沒有參與到我們的網上社群來。當你與他們一對一交談時,他們表現的很聰明。他們通常很聰明。但非打字員在網上通常只有隻言片語,所以他們的表現往往很有限。他們看起來近乎冷漠,對發展工程文化沒有任何興趣。這真是太好了!

這只是我說的文盲的第一部分。他們不合群,這就是他們所謂的“我大部分時間都在設計”瓦解的地方,因為設計需要交流,需要不斷記錄所做的決定。如果你沒有將打字作為你設計的一部分,那麼你設計的東西就不會正確。另外一點就是外行的程式碼往往是最短的。他們不會花費其他努力來註釋程式碼。如果他們的打字技巧太差,他們可能會選擇用一種偷懶的方式來註釋程式碼。難道他們是在用手肘打字?他們甚至不在意格式,這可以說是一個程式猿所犯的最大的罪。這還不是最糟糕的,最糟糕的是錯拼識別符號後還不修正過來,因為有太多地方需要修正。但實際上打字機的格式排版就在那裡。

你知道打字機格式嗎?你把你所有字母擠到打字機裡,然後集中輸出到螢幕上,砰!你覺得那是程式碼?我認識個像那樣寫程式碼的傢伙,實在是太可怕了。看著他幾乎就是件可怕的事情,因為他打字時一直盯著鍵盤在,而且僅用兩個手指,不管他是否兩個手指都用到了,並且他一分鐘才看一次螢幕。簡單看了看他打字,兩件事中的一件必然發生。第一個可能性就是拿滑鼠,因為在過去的一分鐘他都把內容打在了錯誤的視窗裡,結果很搞笑。如果他不伸手拿滑鼠,他就會按Enter鍵,而且按的次數幾乎與他打字敲擊的次數幾乎相同。這個傢伙是計算密集型而不是I/O密集型,儘管如此,我猜我還是會放他一馬。

 

但是重構不是有很好的作用嗎

沒錯,重構工具使你充滿了底氣。我聽說過這種說法,而且多次聽到。重構工具的存在使得打字顯得沒什麼實際用處,早已過時。你僅需要一天到晚按著選單鍵就可以領取工資了。我知道這種事。但事情是這樣的,大家都在嘲笑你。或者如果他們是你親密的朋友,他們僅僅在可憐你,因為你太老土了。如果你真的認為重構工具是打字的替代品,就好比你認為你可以砍掉你的雙腿,因為你有汽車。我們他媽的才不會買這種東西。

如果你是一個程式設計師或者正在利用計算機進行大規模生產的IT專家,有必須學習打字!我無法表示的更明確。如果你拒絕花時間去學習打字,那麼你就是朵奇葩。我可能有點誇張,但最好是這樣表述。我希望我們還能做朋友,你儘管去鄙視那些奇葩。

好訊息

這裡有些好訊息,既然你最終打算學習打字,我想告訴你一些好訊息。

我知道你會去學習打字,我怎麼知道?因為你已經讀到這裡了。說真的,你所讀的東西使你與他人不同。當你得知有這麼多的程式設計師不知道如何閱讀,你一定會瞠目結舌。我沒開玩笑,你讀的速度可以比你打字的速度快很多,但是無數程式設計師不能跳讀這篇部落格。他們嘗試了,但不像快速閱讀者,他們無法輕易地獲取文章的中心內容。這是行業裡另外一些骯髒的小祕密。

所以,既然你都讀到這了,現在你明白你需要馬上學習打字了吧。你深知你可以做到的,而且你也不會覺得有多難。你無非就是少玩一些遊戲,然後很快地你就可以使你的生產力提高兩倍,而不需要像學習一門新的資料結構付出那麼多。

這就是我知道你為什麼會學習打字。所以我會告訴你一些好訊息:打字簡直簡單的一地。快,慢,中等速度。裝一些打字軟體然後就開始學習吧。我們並不是在談論節食或戒菸這種困難的事情。不管你什麼年紀,採取什麼樣的方式,它就是這麼簡單。你僅僅需要學習十幾個小時。如果你有什麼困難,儘管發郵件給我,我會讓你充滿鬥志。這不會花費我什麼時間,因為我打字很快,再加上你的郵件又不長。告訴你個事實:在我大三或大四之前,我都還不知道如何按指法打字。當我每次需要打一個數字時,我不得不坐起來,低頭看鍵盤,隨便用幾個手指撫摸鍵盤時,我才意識到這個事實。所以,我最終花了大概兩週的時間,每天15分鐘的樣子就學會了。就是這樣,你並不需要經常打數字,順其自然,差不多一週的樣子,每次我要打數字時,我就會慢下來,把它打對。這樣大概持續了兩週,我就學會了打數字。

這都是15年前的事了,15年啊。我喜歡盲打。實在是太有效率了,你可以想打對快就打多快,那麼你為什麼還想選擇其他方式呢?來吧,是時候開始學習了。

 

何時開始?

如果是我的話,我會上網找一些免費的打字軟體。我會找大概一個小時,最多兩個小時,持續大概一週。我會嘗試上面的任何東西。如果沒有免費的軟體合我的胃口,我就會試試Mavis Beacon這款軟體。我並不知道它是否好用,但絕對會比橄欖球教練教你在電印表機上打字要好得多。

我真是不明白,我就是無法理解為什麼會有專業的程式設計師允許自己不會打字。這毫無道理啊。這就好像一個演員不知道如何搭配衣服,毫無準備地參加一場遊戲、一次會議,去教室不帶作業,在奧運會上游泳時卻穿著Eddie Bauer的探險短褲。

承認吧,其實就是自己懶而已。沒有其他藉口了。我有一個朋友,叫約翰,只能使用一隻手,但是他卻能一分鐘打70個單詞。他創造了自己的小技巧。他沒有找藉口,而是在找藉口的人中間默默堅持著。感到羞愧吧!如果你雙手健全,完全正確地一分鐘打70個單詞是輕而易舉的,甚至更快。打字並沒有你想的那麼難,它比你想得更有用。

既然你今天就要開始學,你最好在德沃夏克鍵盤上學習,它可以促進你的學習速度,給自己一個有利的開頭。

dvorak-keyboard
譯註:德沃夏克鍵盤(Dvorak Keyboard),主流的鍵盤排列快蹄鍵盤(QWERTY)的對手。目前世界上最快的英文打字速度是在Dvorak鍵盤上創造的,平均每分鐘150個詞,峰值速度為每分鐘212個單詞。更多資訊,請參閱維基百科

我要說的就這麼多了,請一定去學習打字。這是一個行業裡每個人都應該談論的問題和髒祕密。告訴你的老闆你需要花時間去學習打字,並要求他支付軟體費用。要求他們派你去上相關課程,如果必須,你不能逃避責任。做一切需要做的,然後告訴我進展如何。不管你信不信,我想知道你們成功的故事。給我發郵件,我會很高興的。

Steve Yegge,2008年9月10日下午4:59

相關文章