你可以稱它為寵物專案(Pet project),或者是業餘專案(Side project),總之,就是與目前工作不一定相關,可以是為了興趣、好奇、挑戰或實現腦袋中的想法,在工作之餘自主實現的專案。
著手進行這些小專案,不用受限於公司的工作計畫,可以盡情地探索並享受實作的過程,對於程式人在工作、專業與樂趣之間的平衡,也會有很大的幫助。
你想做個什麼呢?
使一個專案能完全依照自己的想法與規畫來實現!距離上一次這麼做有多久了呢?
在工作上,總是因為環境與時間等因素,不得不摒棄自己的各種想法,以符合公司專案的種種要求,你總是為公司寫程式、為客戶寫程式、為老闆寫程式,那麼有沒有為自己寫程式、為家人寫過程式呢?如果能有個機會,不局限一定要解決什麼問題,就是讓你從頭到尾規畫,享受遇到問題並解決問題的樂趣,你想做個什麼呢?別管工作上是做什麼了,如果有這樣的想法,就開啟個寵物專案吧!
建立寵物專案的一個常見理由是,用來熟悉新接觸到的技術,這會比虛無飄渺地死啃一大堆技術文件與書籍來得務實,不少程式老手也都會建議新人以這個方式,實際遇上一些問題並加以解決,最極端的案例是藝術家Jennifer Dewalt,她決定要在180天裡透過180個網站的建立來學習寫程式,最後她在jenniferdewalt.com展示了這180個網站。
儘管從「網站」角度來看,這180個網站比較像是透過瀏覽器展示的小程式,那又如何呢?Jennifer Dewalt實現了自己的想法,在她的部落格中談到:「想學寫程式就會犯很多錯,別因為程式碼看起來有點蠢就不寫了」,與其一直想著要怎麼學習才是最好的方式,Jennifer Dewalt的決定就是JFDI(Just Fucking Do It)。
只要想要做個什麼,沒有足夠的能力,並不會是阻止你開啟寵物專案的理由,事實上,沒有能力反而是動機,過程中遇上的問題,會指引你應當獲得的技能路徑。
常見的藉口之二是:「下班還要搞寵物專案?那就要看對程式設計有沒有愛了!」其實想要對程式設計有愛,更要透過寵物專案,就如我在〈消失的程式熱情?〉中談到:「有時熱情並不是消失或用盡,而是被工作壓抑或掩蓋」,在工作之外寫些自己的東西,放任想法,重新掌控、實現與創造東西,感受逐步釋放與遠離的壓力,就能享受隨之而來的樂趣,重拾熱情。
這對工作沒有用?
在工作之餘自主實現的專案,對自我實現很有幫助,那麼現實一點吧!工作呢?程式人在職場求職的過程,想必多少都有被要求作品的經驗,寵物專案有時就能派上用場。有時寵物專案內容是什麼,不見得重要,Ayende Rahien在〈If you don’t have pet projects, I don’t think I want you〉(http://goo.gl/cAkDCD)中提到,寵物專案也可以是個人網站、給朋友用的專案,或者只是為了熟悉些技術的簡單程式碼都可以。
Rails Girls創辦人Linda Liukas發起的《Hello Ruby》(www.helloruby.com)可以做為案例,即便只是個以繪本來介紹基本程式編寫概念的書籍,其在Kickstarter募得38萬美元,充分展現了這專案對孩子或女性投入程式設計產業的重要性。
Gmail、Google AdSense等產品是寵物專案的指標,它們是Google允許員工可以將工作上20%的時間,自由運用在非核心計畫而誕生出來的產品,是「20%自由時間」政策下的著名案例。Uber叫車服務一開始也是個寵物專案,Travis Kalanick與Garrett Camp兩個創辦人,因為在大雪的夜裡叫不到車,而有了做個按下智慧型手機就能來輛車的想法。現今許多著名服務,也許一開始就只是寵物專案。
回到個人身上,Ayende Rahien在他的文章中提到,沒有寵物專案並不代表開發者不好,不過他們求才的過程中,會藉由寵物專案來看出求職者,對於本身感興趣的東西會怎麼做,以及展現出來的熱情為何,他們認為經驗、語法、框架等都可以透過學習得來,熱情卻無法傳授。
Ayende Rahien談到,若一間公司重視求職者有無寵物專案,表示該公司的文化也關心做事的方法是否正確;他也提到了個發人省思的案例,有些求職者沒有寵物專案,卻表示可將目前或之前公司中做過的舊專案寄給他參考,這種只為了能獲得面試機會而未經擁有者明確授權的動作,反而表現出差勁的工作態度。
沒時間!我沒時間?
沒有時間或許是最常見的藉口,實際上,寵物專案最困難的部份並不是時間,而是開始動手做,如果時間真的是藉口,或許可以參考一下John Resig的做法,他在〈Write Code Every Day〉(http://goo.gl/hGnyiB)談到,面對自己的寵物專案沒有進展,又不能犧牲他在Khan Academy的工作效率,而且,只採用週末進行寵物專案,並沒有太大幫助,因此,他必須採取一些更有用的措施。
Jennifer Dewalt為了達成180天完成180個網站的目標,訂下了三個原則:每天建立一個網站、每個網站發一篇部落格。John Resig談到,他受到Jennifer Dewalt啟發,決定採用類似策略而訂下了四個原則:每天都要寫程式、寫的程式必須有用(不單只是重新排版或者重構)、程式都要在午夜前撰寫、程式必須在GitHub上開放原始碼。
在連續20週嚴格遵守這些原則,John Resig的寵物專案有了極大進展,並分享了自身體會,在時間上他每天花半小時以上寫程式,這反而讓他更能有效率地安排每日的時間,甚至不用特別利用週末時間來做寵物專案,而可以去從事些其他的娛樂活動,在工作、生活與寵物專案之間反而取得了平衡。
John Resig的原則雖然看似嚴格,然而如果時間是藉口,不妨試試看,其實他與Jennifer Dewalt訂下的原則具有共同點,也就是「每天做一點並持之以恆」。或許一開始要花個半小時比較難,那麼,至少也撥個十五分鐘、十分鐘,就算只是在散步、洗澡或做其他非腦力活動時,思考一下專案接下來要怎麼做也好,零零碎碎的時間累積久了,寵物專案也會有所進展。
工作、專業與樂趣的平衡
就許多公司來說,會質疑員工進行寵物專案,認為會分散注意力,畢竟將做寵物專案的時間直接拿來用在工作上,生產力不是更高?實際上,程式人的生產力與時間並不是正比關係,如果程式人可以透過一些休閒活動而提高生產力,那麼就不該死盯著他們黏在電腦前的時間,若程式人可藉由一些寵物專案而不斷保持程式設計或工作熱情,那麼允許員工從事寵物專案就是個可做的考量。
寵物專案若能與目前工作有關,那就是最直接的回饋,例如,對工作上某些手動設定不滿意,就寫個小工具來進行自動化,對於常用的功能或流程,抽取出通用的程式庫或框架,這類寵物專案對產能就有著最實質幫助,對程式人本身的專業形象,也是肯定。
當然,寵物專案之所以有「寵物」字眼,表示豢養過程的樂趣是最重要的,我最近一次的寵物專案是〈廢材四足機器人〉(https://goo.gl/wvDjAu),憑著這段時間在MCU領域的涉獵,而自行設計製作,初步想法獲得實現後,在《機器人製作聖經》中〈組裝足型機器人〉章節,赫然發現許多想法與書中作法相近,對我來說,這代表著在這領域的專業,已經建立了初步的基礎,就因為寵物專案總是能帶來這類工作、專業與樂趣的平衡,往往能讓苦思問題解決之道的過程,頓時化為滿滿的喜悅!