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