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