代碼天天寫,快樂天天有!


原文標題:Write Code Every Day
原文作者:John Resig
原文出處:http://ejohn.org/blog/write-code-every-day/

文中名詞解釋:
副業項目:英文為Side Project,這里指的是作者工作之外寫 的代碼項目,並上傳到 Github 上,感興趣請訪問:https://github.com/jeresig
可汗學院:英文為Khan Academy,孟加拉裔美國人薩爾曼·可汗創立的一家教育性非營利組織,主旨在於利用網絡影片進行免費授課,感興趣請訪問:https://www.khanacademy.org/。
Github:一個面向開源及私有軟件項目的托管平台,程序員的大愛。

  去年秋天,在我從事於編寫副業項目的時候,一個想法出現在我的腦子里,如果沒有盡己所能在可汗學院付出大量卓有成效的工作,我是不會有足夠的進步,不會找到一種方法去完成那么多的事情。
  在我從事如何編寫副業項目的時候,遇到了一些主要的問題。我主要是在周末,有時候每周的晚上在做這些事情。結果證實,這個策略對我來說不並不起效。我忍受和承擔這難以估量的壓力,在周末期間盡量以優質高效的態度去完成我的工作(這樣看起來就感覺自己不會是失敗)。但這樣不能保證我每個周末都是空閑的,也不能保證周末這兩天我都能在編程(可能會找個機會去放松,或是做一些有趣的事情)。
  這里面還有一個問題,就是在工作和寫代碼期間有一段很長的時間,這樣就很容易忘記你過去正在做什么了,或者你做到了什么地方(即使你可能做了筆記),更不用說如果你錯過了一個周末,結果會有二周的差距。大量的多周的上下文切換可能是致命的(我有許多副業項目就像那樣都餓死了)。
  Jennifer Dewalt 去年完成了難以置信的工作,他自學編程並在180天構建了一個網站。受此鼓勵,我覺得應該強迫自己去嘗試類似的戰術:每一天都要忙於我的副業項目。

  我決定給自己制定以下規則:
  1.我必須每天都要寫代碼。我可以寫文檔,寫博客,或者做其他的事情,但只有我寫完代碼以后,才能去做那些事情。
  2.寫的這些代碼必須是有用的。沒有扭曲的痕跡,沒有代碼的再組織,最好的可能,沒有重構(這些事情都是允許的,但不作為一天中唯一的工作)。
  3.所有的代碼必須在午夜前寫完。
  4.所有的代碼必須開源並且上傳到 Github 上。
  其中的一些規則,主觀上是武斷和隨意的,有些代碼在技術上並不需要在午夜之前寫,但是我想避免因熬夜寫出草率的代碼,也不會把它開源和上傳到 Github 上。這樣就會迫使自己更加用心的寫代碼(考慮代碼重用性並決定在其過程中更早地創建模塊)。
  迄今為止,我做的很成功,我已經在將近20周的時間里持續不斷的工作。我想寫下,因為它完全改變了我的代碼,並對我的生活和精神產生了重大的影響。

  考慮到這一點,一些有趣的事情發生在這種習慣的變化的結果:
  最小可行的代碼。我每天堅持寫代碼不少於30分鍾。(真的很難在更短的時間內寫出有意義的代碼,尤其是在記住你在前一天離開的地方)。有時候,我會工作多一點(通常不超過一個小時),在周末我有時可以工作一整天。
  把寫代碼當做一種習慣。需要注意的是,我並不特別關心上述GitHub上的代碼貢獻數量的分布圖。我認為從這個實驗獲取最重要經驗:這是一個變化,你正在為你自己的生活,而不為了作出滿足別人對你工作的看法而改變。同樣的道理,也適用於任何形式的節食或鍛煉:如果你不關心自我提升,那么你就永遠不會成功。
  對抗焦慮。在開始我的項目之前,我會經常處在較高水平的焦慮,覺得不能完成“足夠”或進行“足夠”的工作進度(這兩者都是比較難以量化的,其實我的項目沒有具體的期限)。我意識到取得進步的感覺和實際已經取到的進步一樣重要。這令我大開眼界。一旦我開始每天都在持續不斷地進步,焦慮變開始消失。面對項目上的工作量我會更加心平氣和,我不再有過度承擔的渴望,以及瘋狂地把事情都搞定。
  周末。在周末完成工作對於推動前進勢頭絕對是至關重要的(因為周末通常是我完成重要的副業項目的唯一時間)。現在情況並非如此--這是件好事。建立一個星期的期望值讓我在周末完成所有的事情,這樣只會在周末結束后,只會留給我失望。我很少能夠完成所有我想要的工作,它迫使我拒絕其他我喜歡的周末活動(吃點心,參觀博物館,去公園,與我的合作伙伴共處等)。為了有利於完成更多的工作。我強烈地覺得,副業項目是非常重要的,它不應該被排除在日常的生活之外。
后台處理。一件非常有趣的影響是,在每天編寫副業項目的代碼時,你當前的任務正在頻繁地在大腦后面運行。因此,當我去散步,或淋浴,或參加任何其他非腦力活動時,我會思考稍后如何寫代碼,找到一個很好的方法來解決這個問題。這並不是發生在我每周工作一次,或者每隔一周的時候。相反,消耗了思考其他一些任務的時間,通常,取代了怕副業項目不能按時完成的焦慮。
  上下文切換。當從一個副業項目恢復工作時,總是會有一個上下文切換成本。不幸的是,在完成了一周的另一項工作后,很難重新想起這個項目。把工作之間的時間間隔設置盡量短,會使更容易記住我所從事的工作,日常工作中,在這方面是非常有幫助的。
工作的平衡。這種變化的一個最重要的方面是如何簡單地學習如何更好地平衡工作/生活/副業項目。知道了這一點,我每一天都要在項目上工作,我必須更好地平衡時間。在開始我在可汗學院的主要工作前,如果我計划晚上出去,並且很晚才能回來,這時我就需要在當天早些時間完成我的副業項目。此外,除此以外,如果我還沒有完成我的工作,還滯后了,那么我會趕緊回家完成它(而不是錯過一天)。我應該注意到,我已經發現我花在業余愛好的時間很少了(如版畫),但是這是一個合理的權衡,因為我需要生活。
  外在的感知。這個新習慣在外部有一個溝通交流的額外好處。我的搭檔明白我每天必須完成這項工作,因此有時活動必須圍繞這些項目來安排。能夠相當舒適地說“是的,我們可以出去/看電影等,但我必須在稍后得到我的編碼”時,能夠讓他們可以理解,並為你考慮。
  寫了多少代碼?我很難相信過去幾個月我寫了多少代碼。我創建了幾個新的網站,重寫了一些框架,並創建了大量的新節點模塊。我寫了這么多,我有時忘記了我做的工作,甚至幾個星期前就覺得是遙遠的記憶。我非常滿意我完成的工作量。
  我認為這種習慣的改變是一個巨大的成功,希望繼續堅持下去。在此期間,我會盡我所能向其他希望得到實質性的副業項目工作的人推薦這一策略。在為你自己工作時,如果這種技術好用或不起作用,我都很有興趣聽到額外的軼事!讓我知道,請訪問http://ejohn.org/about/。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM