如何完成自己的業(yè)余項目?
每名學(xué)習(xí)編程的人,在掌握了一定的知識和技巧之后,或多或少都會想要自己做一些東西出來。而最常見的形式,就是個人的業(yè)余項目(side projects),或許是自己的博客,又或是一個小APP,甚至是一個大型網(wǎng)站。編程派也可以算是譯者自己的業(yè)余項目。本文中,一名資深Python程 序員將與大家分享他在實施個人項目中的一些心得體會。
我曾經(jīng)問過《笨辦法學(xué)Python》的作者Zed Shaw:讀完哪5本書可以讓自己精通編程?他是這么回答我的。
“讀五本書就想精通編程了?根本沒有這樣的書單。不管你想精通什么技能,你都必須要常年累月地不斷練習(xí)("do a hell lot of it")。——Zed Shaw
剛聽到這個回答的時候,我有點不高興。但是我后來發(fā)現(xiàn),Zed并不是在跟我開玩笑,那是他的大實話。
對我而言,能夠讓自己“常年累月地不斷練習(xí)”的唯一方法,就是這件事要有趣。我們的大腦并不適合常年從事一些沒意思的工作。我們都渴望新奇和有趣的東西。要想常年堅持做一件事,我們就必須學(xué)會順從我們的天性。
Gmail的***Paul Buchheit在《The Two Paths to Success》一文中這樣說道:
我主要的策略可以總結(jié)為兩條:1. 想辦法讓一件事變得有趣;2. 如果事情沒成功,想辦法應(yīng)對。
為了讓“常年累月地不斷練習(xí)”這件事變得更有層次,我會做一些業(yè)余項目(side projects)。在包括編程在內(nèi)的任何創(chuàng)意領(lǐng)域中,業(yè)余項目都占據(jù)著獨特的位置。它們的地位之所以重要,就是在于給你提供了試驗自己的創(chuàng)意和從錯誤中學(xué)習(xí)的機會。
在實施業(yè)余項目時,我總是會時不時提醒自己要遵守一些準(zhǔn)則。如果我忘記了遵守它們,那這個項目就不再有趣了,這意味著我會暫時停止這個項目。建議你在做業(yè)余項目的時候,也牢記這些準(zhǔn)則。
從錯誤中學(xué)習(xí)
孩提時代的我們學(xué)習(xí)速度最快。出生時,你一個單詞都不會;到了6歲的時候,你就已經(jīng)學(xué)會了1萬個單詞。這就是說,你平均每天就學(xué)會了5個新單詞!孩 子和成人之間的一個關(guān)鍵區(qū)別,就是成人如果沒有立即取得***的成績,就會責(zé)怪自己。如果一個孩子失敗了,通常也只會是孩子的家長擔(dān)心。所有的孩子都知道, 失敗只會帶來暫時的疼痛。他們不會糾結(jié)于這件事。
“每一個錯誤都是一個***的啟示,因為每個錯誤都會指出你需要特別注意思考的地方。這可以將你的思維方式,從找到正確地解決方案(困難)轉(zhuǎn)變?yōu)榧m正 一個特定的問題(容易)。” —— Starbird & Burger,5 Elements of Effective Thinking。
要允許自己犯錯。業(yè)余項目有一個好處,就是你又可以成為一名初學(xué)者。你不會有預(yù)期。你可以犯錯誤,全心全意地去學(xué)習(xí)。只有當(dāng)你犯了錯誤之后,你才會深刻地知道下次不應(yīng)該做什么。
根據(jù)布魯姆(Bloom)學(xué)習(xí)分類法,通過閱讀和傾聽所學(xué)到的內(nèi)容中,你只會記住20%,而你真正實踐過的事情則會記住90%。更高的參與程度以及 錯誤-反饋循環(huán)可以讓你真正地發(fā)現(xiàn)一個問題的要害。再詳細(xì)的描述,都無法完整地向你說明業(yè)余項目中哪怕是最簡單的那一部分。只有安靜地坐下來,仔細(xì)地思考 每一個小決定,你才能真正地學(xué)會問題的真實解決方案。
譯者注:布魯姆學(xué)習(xí)分類法是對學(xué)習(xí)層次的分類,它反映了我們的思考和處理信息的路徑。學(xué)習(xí)的層次分為記憶(Remembering)、理解 (Understanding)、應(yīng)用(Applying)、分析(Analyzing)、評價(Evaluating)和創(chuàng)造(Creating)。層 次越低越基本、越關(guān)鍵,層次越高越復(fù)雜。
不要讓業(yè)余項目變得無聊
業(yè)余項目應(yīng)該盡量做到有趣。做業(yè)余項目工作的時候,什么事情會讓你惱怒?構(gòu)建環(huán)境(build environment)太差?編輯器高亮傷眼睛?部署起來麻煩痛苦?那就盡量讓這些過程自動化吧!
舉一些我自己碰到的例子:
上班路上或排隊的時候,我時不時會突然冒出一些想法。通常我會馬上記在貼紙上,想著盡快去實施。但是由于我沒有好好整理,這些貼紙總是不斷地消失, 或是莫名其妙地出現(xiàn)在洗衣機里。后來實在是受不了這種情況,我才開發(fā)了一個監(jiān)測自己電子郵件收件箱的程序。每當(dāng)我有了一個想法之后,我會記下來發(fā)郵件給自 己,這個程序就會每天晚上自動把郵件歸類到計劃事項當(dāng)中。這樣,不僅解決了讓我頭疼的問題,我還學(xué)了很多關(guān)于Emacs的知識。
如果碰到最壞的情況,那就放棄。除非絕對必要,否則別這么做。任何事情如果做起來讓自己咬牙切齒地不爽,那就說明你已經(jīng)沒有了動力。長期持續(xù)做一件事,你以后再也不會再想做業(yè)余項目了。所以你必須要讓業(yè)余項目有趣。
要么做大,要么就別保持小而美
Gmail是業(yè)余項目做大的典型代表。這也是Gmail項目團隊成員的決定。我在電腦里記錄了大量的想法,創(chuàng)建了很多空文件夾,這些都是我突發(fā)靈感 的時候創(chuàng)建的。要不要做某個項目,決定權(quán)在于你。如果你想把項目做大,那就去做。如果你想保持小而美,只提供給家人和朋友使用,那也沒問題。在這件事上, 你就是無所不能的神。
如果哪一天你開始感到驕躁,或是不想繼續(xù)做業(yè)余項目了,那就把它歸檔,寫一篇博文記錄下來,把相關(guān)文件放到Github上,或是揮拳宣告項目勝利,因為你已經(jīng)完成了學(xué)習(xí)的目標(biāo)。
你就是你自己命運的主宰。
當(dāng)你實施業(yè)余項目時,你有充足的時間選擇是否要學(xué)習(xí)新東西...你也可以對是否接受別人的反饋更加謹(jǐn)慎。不過,如果你真的接受了人家的意見,那肯定是因為你真的希望把這件事情做得更好。—— Tobias van Schneider,知名平面設(shè)計師
剛開始的時候,你可以從別人的教程、相關(guān)數(shù)據(jù)和講座中學(xué)到很多,它們可以給你提供一個初期的框架。之后,業(yè)余項目就會進行地越來越順暢。