編程每一天(Write Code Every Day)
英文原文:Write Code Every Day
去年秋天,我的個人項目似乎走到了盡頭:我一直沒能取得必要的進展,在不犧牲我的主業(可汗學院的全職工作) 的情況下,我無法完成更多的個人編程事項。
我個人項目上的工作始終存在著幾個嚴重問題。我把這些工作主要放在周末,但有時也可能是周末的晚上。事實上,這種安排根本不合適。想要完成如此眾多的工作(如果沒有完成的話,我會產生挫折感),僅僅利用周末時間,對我來說壓力太大,我有點兒吃不消。而且,這個問題本身就充滿了矛盾 - 我既無法保證每個周末的空閑時間,也不想把整個周末都用在編程上(失去放松或者做點其他有趣事情的機會)。
另外一個問題是,間隔一周對于同一段代碼上的工作來說,時間太長了。很容易忘記自己究竟做過些什么(即使記筆記,幫助也不大)。如果碰巧錯過一個周末,將導致兩個星期的缺口。實際上,這種基于多個星期的工作環境切換非常致命(因為缺乏必要的關注,我的很多個人項目已經無疾而終)。
去年,Jennifer Dewalt 為了自學編程,在一百八十天內設計編寫了一百八十個 Web 應用程序和網站。我深受啟發和鼓勵,覺得自己很有必要嘗試一下類似的策略:每天都為自己的個人項目做一點工作,而不是集中在每個周末。
我決定給自己定下幾條規則:
- 每天編寫代碼。我可以撰寫文檔、博客、或者做任何其他事情,但必須在寫完代碼之后。
- 代碼必須可用。無需調整縮進,無需重新格式化,盡可能無需重構。
- 所有代碼必須在午夜前寫完。
- 代碼必須開源在 GitHub 上。
上述規則難免過于武斷。代碼不一定非要在午夜前寫完,我這么說只是為了避免過度勞累,導致不良代碼的產生。把代碼放在 Github 上,是為了強迫自己更加細心(讓自己盡早考慮代碼重用以及模塊化)。
截至目前,我已經連續工作接近二十周時間,而且取得了顯著的成功。我想告訴大家,這種策略改變了我編寫代碼的工作方式,對我的生活和精神產生了巨大的影響。
以下是習慣改變之后發生在我身上的幾件趣事:
最小可用代碼。我每天強制自己編寫代碼不少于三十分鐘。有時候工作時間可能稍長一些(但一般不超過一個小時),周末的時候,我常常工作一整天。
編程是一個習慣。有一點需要注意的是,我并不特別在意代碼在 Github 上的受關注程度。我認為我從這項實驗中得到的最大收獲是:這是我為我自己做出的改變,與其他人無關,我不想以此取悅任何人。就像培養個人飲食與健身習慣一樣:只有當你真正開始關心自己的進步狀況時,進步才會發生。
對抗焦慮。在開始這項實驗之前,我經常處于高度焦慮的狀態 - 總是擔心自己無法完成足夠的任務(盡管我給自己沒有設定最后期限)。我在實驗中慢慢意識到,感受進展本身與取得實際進展一樣重要。這一點讓我大開眼界,只要每天都能取得進展,焦慮感自然就會消失。我對工作不再抱有過高期望,這樣,我的內心就能始終保持平靜。
周末。以前,周末工作對我以及對項目進展來說,絕對至關重要(因為只有在這個時段,我才進行大量的編程)。現在的情況已經截然不同,這真是一件大好事。我之前每個周末都會給自己安排一定的工作任務,但實際完成情況常常令人失望。我很少能夠按時完成這些任務,以至于不得不退掉其他的周末活動,比如,吃吃點心,參觀博物館,逛公園,朋友聚會等。你知道,這些活動對我的生活都有著積極的作用。我強烈地感覺到,即使個人項目再重要,也不應該與生活中的其他內容發生沖突。
后臺處理。每天都為自己的個人項目做一點工作,將會產生一種副作用 - 你會覺得你的大腦始終處于編程中。當我外出散步、淋浴,或者任何其他非腦力活動時,解決問題的靈感時常顯現。這在以前從來沒發生過。那個時候,我的時間大量消耗在憂慮之中。多數情況下,憂慮并不能幫助我完成給更多的任務。
環境切換。通常情況下,從一個項目切換到另一個項目需要一定的轉換成本。不幸的是,當一個項目停頓一周之后,你很難恢復到原來的思考狀態。在一個項目上停頓時間越短,越有利于恢復記憶。
工作平衡。改變帶來的最重要一點是,學會如何更好地平衡工作、生活、以及個人項目。事先知道自己的安排,這能讓我更好地平衡時間。如果我打算晚上外出,而且很晚才回來,那我就會早點開始我的個人項目。另外,如果我還沒有完成我的工作,我就會晚點兒再出去,或者,盡早回家(盡量不錯過每天的工作)。我注意到,我花在業余愛好上的時間少了(如雕版印刷等),但這是一個合理妥協,我必須適應。
對外溝通。對外溝通這個新習慣給我增加額外的好處。我在個人項目上的合作伙伴很容易了解我的工作計劃與進程,他們的工作計劃更易于制定。外出、看電影等活動顯得更加自然,這種生活很舒服。
代碼量。我簡直不敢相信自己在過去幾個月的工作量。我創建了一個新網站,重構了一些框架,還構建了一大堆新模塊。我寫的太多了,以至于有時候,我會忘記曾經做過的事情。那怕是幾周前的工作,對我來說,就像一個遙遠的回憶。我對我所做的一切非常滿意。
我認為,這次改變對我來說是一次巨大的成功。可能的話,我希望繼續保持下去。在此期間,如果有誰希望像我一樣,我將盡我所能向你展示和推銷這一策略。如果你在應用這項策略的過程中,遭遇任何問題或疑惑,請一定和我聯系。我很樂意聽到一些逸聞趣事。
作者:John Resig,程序員,jQuery 之父,現生活在美國紐約。
感謝: Qingniu 幫助審閱并完成校對。