JQuery之父: 好好學習,天天編碼

edithfang發表於2014-11-20
去年秋天我的業餘程式設計專案(coding side projects)到了一個緊要關頭:沒有充足的進度,也不能夠找到一種方法在既不犧牲我可汗學院(Khan Academy)高效的工作的前提下完成更多的事情。

如何處理我的業餘程式設計專案是有一些嚴重問題的。我最主要是在週末或者某些工作日的晚上編寫程式碼。如同結果一樣,這種策略並不適合我。週末我拖著巨大的壓力嘗試完成儘可能多的高質量程式碼(如果我沒能完成我會認為自己很失敗)。這樣想有一個問題,因為沒有什麼能夠保證我每個週末都有空,並且想整個週末都寫程式而不是抓緊機會放鬆或娛樂。

每週寫程式碼之間空擋太長也是個問題。你很容易忘記在做什麼、什麼還沒做完(即使做記錄也於事無補)。更不用說如果你錯過一個週末,你就會面對長達兩週的間隔。大量兩週或者更多周的思維轉換可是致命的(我的很多業餘專案都由於精力不足而終止)。

我被Jennifer Dewalt去年完成的工作震驚了,她在180天內構建了180個網站以學習程式設計。受到她的啟發,我強迫自己嘗試一個相似的策略:每一天都要進行我的業餘專案。



我決定給自己制定一些規則:

  • 我必須每天都寫程式碼。我可以寫文件,部落格或其他的東西。但必須依附於我所寫的程式碼。
  • 程式碼必須是有用的。不能程式碼微調,不能程式碼重排,且儘量不要重構。(這些事情都是允許的,但不作為當天特有的工作。)
  • 所有程式碼必須在午夜前寫。
  • 程式碼必須開源且放在Github上。
其中的一些規則有點武斷。雖然從技術上來講程式碼沒必要非得在午夜前寫,但我想要避免熬夜太久寫糟糕的程式碼。而且程式碼沒必要開源放在Github上。這只是強迫我寫程式碼時多上點心(想想重用以及決定開發過程早點寫模組)。

到目前為止我進行得很順利,我已進行了20周的連續工作。我想要寫下這些是因為這方法完全改變了我的編碼方式並且對我的生活以及心智都有實質性的影響。



有這些規則後,習慣的改變導致了很多有趣的事情發生:

最少可行程式碼(Minimum viable code).

每天我被強迫寫至少30分鐘的程式碼。(少量時間內很難寫出有意義的程式碼,尤其是在記起前一天寫到哪裡後)有一些工作日我寫得多點,但通常少於1小時。而週末,我有時候能一整天當程式猿。

編碼即為習慣(Code as habit).

其實重要的一點是我並不特別在意Github上的(負面)聊天內容是如何被他人理解的。我認為這是從這個實驗中我學到的最重要的東西:這是關於在你一生中為了你自己而進行的改變而非為了讓你的工作能討好他人而進行的改變。這也適用於任何形式的節食或鍛鍊:如果你不在意提高自己,你是永遠也不會成功的。

抵抗焦慮(Battling anxiety).

在開始這個實驗之前我經常擔心不能夠完成足夠多的工作量或者取得足夠的進展(這兩點很難度量,因為我的業餘專案沒有明確的截止日期)。我發現想要取得進展與實際取得進展是同樣的重要。這讓我豁然開朗。一旦我開始每天取得持續的進展,焦慮就開始消失了。我對我不斷完成的工作量感到欣慰,並且我不再過度瘋狂地期望完成更多的工作。

週末(Weekends).

在週末完成的任務曾今對於推進進度是絕對重要的。的確有地表性地,這是我完成業餘專案顯著程式碼量的唯一時間。但現在並非如此,不過非常好。在週末完成我一整週所期望的有價值的內容只能以讓我以失望告終。我極少能夠完成我想要完成的所有工作,而這強迫我放棄其他週末我喜歡的活動(例如,吃中式點心,參觀博物館,去公園以及和我的小夥伴在一起玩等)以完成更多的工作。雖然我非常相信業餘專案真的很重要,但總之,他們不應該阻礙你的平時生活。

發呆(Background processing).

每天都寫業餘專案的一個有趣的副作用就是當前業餘專案的任務會頻繁地在你大腦中浮現。這導致當我走路,洗澡或則進行其他不耗費腦力的活動時,我總是在想接下來我要寫些什麼程式碼並且尋找好的方法來解決問題(譯者注:別人看來就是發呆)。這在我每週或隔一週寫一次程式碼的時候從未出現過。相反這些時間花費在了思考其他的一些任務上,通常是懊惱自己上週沒能完成業餘專案的工作量。

思維轉換(Context switch).

繼續業餘專案時總是會有思維轉換代價的。不幸的是,當一整週都在幹其他任務的工作時,這轉變是及其困難的。就每天都寫程式碼而言是非常有利的,因為工作間歇時間更短。這使得回憶起正在做什麼更容易。

工作權衡(Work balance).

這個改變最重要的一方面是直接學會了如何更好地權衡工作/生活/業餘專案。由於明確了我每天都會工作在業餘專案上,我必須更好地平衡我的時間。如果我計劃晚上外出並且會很晚才回來,那麼我會在一天中早些時候,既在開始我的可汗學院的主要工作前,完成我的業餘專案的工作量。而且如果我沒有完成我的任務,並且在外待得很晚,我會趕回家完成他而不遺漏一天。我應該注意到了我擁有更少地時間可花費在愛好上(例如版畫),但這是我需要面對的合理的折衷。

他人看法(Outward perception).

把這個新的習慣告訴別人讓我更受益。我的小夥伴理解我需要每天完成這個工作,因此有的時候活動安排也很遷就我的工作。能夠說“沒問題,我們可以出去玩/看電影/等,但我等會兒要當會兒程式猿”並且能夠被理解和考慮在內是相當欣慰的。

能寫多少程式碼?

我簡直不敢相信我上個月寫了多少程式碼。我製作了一堆新的網站,重寫一些框架,並且建立了大量新的節點模組(node modules)。我寫了如此的多,以至於我有時候都忘記了我到底幹了些什麼,前一週的工作都好像是很遙遠的記憶樣。我對我所完成的工作量是及其滿意的。

我認為這個習慣改變是一個很大的成功並且希望能儘可能地繼續下去。與此同時,我將傾盡所有將這個策略推薦給其他希望讓其業餘專案有實質進展的人。無論這個技術對於你是有用或者沒用,請告訴我。我會非常樂意聽更多的趣事的!
相關閱讀
評論(4)

相關文章