在第一個程式語言的"Hello, World"寫下之時,對程式人來說,就是一種投資的開始了,之後則是個不斷點開技能樹的過程,各行各業會有其獨特的技能樹,只不過就程式人這領域來說,被點開的枝葉或者甚至是主幹,都有可能在短期內凋零,這就使得所選的投資組合更為重要了。

學習技能是種投資

在程式設計這領域要懂的太多,為此許多書籍、文件也不斷地呼籲強調,程式人得不斷地學習,以求自我充實、自我提升(以及任何你看過的漂亮理由)。然而,在《The Pragmatic Programmer》中〈Your Knowledge Portfolio〉,談到了:「知識與經驗是你最重要的專業資產,遺憾的是它們卻是會過時的資源」,最近SlideShare上的一個〈那些年、我們還沒學會就已經過時的那些技術〉(http://goo.gl/0SGq8r)投影片分享,更激起了程式設計這領域中許多人的共鳴,紛紛感嘆習得的技術,往往就是那麼容易過時。

技術的過時代表著什麼呢?就現實面來說,不斷自我學習的目的之一,就是為了能派得上用場,對於一門職業來說,就是在於獲得的技術能力是否被需要,當一門技術逐漸過時,也就代表著市場上需求逐漸減少,能用這門技術賺到錢的機會也就越來越少,有時甚至得被迫拋棄一門耕耘已久的技術,因為它再也無法提供你金錢的收入。

就跟金錢遊戲方面的各種投資一樣,實際上在決定學習新的技術時,也就像是在選擇下一個投資標的物,投入的成本可能是金錢,也許是用來購買書籍、相關設備,也許是參與付費課程,然而,往往真正最在意的成本是付出的時間,如果這些投資,不單只是為了心理層面上的自我滿足,那麼程式人們就必然會考量,這一次在這門技術上的投資,能否有回收的機會?

而且,別說其他技術了,單就「如何選擇程式語言」這點,能讓新人與老手糾結許多來看,就突顯出一門技術的選擇,確實就是一種投資了。

在〈Which Programming Language Should I Learn First?〉(http://goo.gl/5iF012)中,就提供了一個如何選擇程式語言的地圖指引,這地圖有趣的地方在於,除了將程式語言與電影《魔戒》中各角色做對照之外,在選擇過程中也加入了許多現實面的考量,像是「有四個孩子要養」、「想去夢幻般的科技公司上班」、「有錢賺就行」等,都是其中選擇的停留點,最後還將平均薪資列出來給你看,很好笑卻也很實際。

技能投資組合

〈Your Knowledge Portfolio〉就列出了金錢投資與技能投資上相似的類比,像是好的投資者(程式人)會將定期投資當成是一種習慣,多樣性(Diversification)是長期成功的關鍵,會在保守與高風險、高報酬間選擇適當的平衡,逢低買進、迎高賣出,定期檢視與重新平衡投資組合。

程式人對於定期投資這樣的類比應該是比較認同,不斷地學習就像是定期投資,問題在於該投入哪些標的物?

身為自由工作者、自己得找飯吃的我,三不五時就會得想想這個問題,由於工作性質的關係,我玩的東西很廣,我曾在〈對Y Combinator的好奇與挑戰〉提過,選擇的依據之一是秉持著「技術謎團的DRY原則」,在多元資訊來源中引發好奇心,如果好奇心帶來了重複出現的名詞,就實行DRY原則去重構該名詞周圍的謎團。

投資不能盲目,程式人總得對自己的投資標的物有所認識,而越是多元的管道資訊就越豐富,也才越能降低風險,認真投資的程式人,對於其他程式人會到哪吸收資訊都極有興趣,因此最近有篇〈你都去哪裡看技術文章?〉(https://goo.gl/lvlfAU)四處可見轉載分享,一點都不令人驚訝,不過最終,程式人得建立自己專屬的資訊收集管道,懂得辨別資訊的真偽,才不會被賣菜刀式的江湖郎中術語給矇騙,誤買了個賠錢貨。

當然,若是投資一定有賺有賠,我們不會總是幸運地逢低買進、迎高賣出,能在一門技術冷門時投入學習,在熱門時隨便對雇主或客戶開價碼都行的機會,並不多見,而且高報酬就帶著高風險,投入冷門技術的結果,有可能是除了自High之外,完全沒有其他形式的回收﹔然而,分散風險是必要的,每年學習一門程式語言的建議,就我看來就像種增加多樣性以分散風險的概念,而且獲取收益的形式是多元的,像是將這門語言的一些設計,套用在另一門語言上頭。

有時投入的標的物很快就有了回收,有時很久之後才發現有用,有時則是完全沒有回收,而且就如金融市場上瞬息萬變,技術的市場也是一樣,現在熱門賺錢的技術,一、兩年之後可能就在收益上表現普普,甚至有可能失去市場,還沒學會就已經過時的技術是常態,定期檢視與重新平衡投資組合,對程式人來說,本來就是必要的動作!

技能樹與多樣性

不過,雖說技術方面的投入與金錢投資組合有其相似性,然而多樣性這點比較有問題,畢竟樣樣精樣樣不通的道理大家都懂,〈那些年、我們還沒學會就已經過時的那些技術〉最後鼓勵的,也是專精,而非雜亂。

點開技能樹是個很好的比喻,一開始你得選定一塊技術領域播種,持續在此領域專精地投入,這就像是樹的主幹不斷茁壯,而為了讓樹有成長的能量,必須開枝散葉,繁多的枝葉就是多樣性,然而,無論如何多樣性的發展,總是與主幹相連,主幹越大、根紮得越深、枝葉也才能越廣,這就是有人說的:「廣度往往是深度的副產品」。

在進行技能的多樣性投入時,WHAT、HOW、WHY是個不錯的思考過程,當考慮投入某個技能時,搞清楚這個技能是什麼?它要怎麼用?為什麼會出現這個技術?對目前的我來說,它是什麼?我要怎麼學習它?我為什麼會需要這個技術?當本身技能樹中包括這門技術之後,這個技術對技能樹本身又會是什麼?要怎麼回饋養份至主幹本身?為什麼當初要學習這門技術?

在擴充技能樹的多樣性時,WHAT、HOW、WHY的思考過程是個不斷迭代的過程,順序也不見得要是WHAT、HOW、WHY,重點在於不斷地思考。最近我從微控制板玩到Raspberry Pi,就經常在思考著這些問題,想著各式各樣的應用中,哪些可以是與既有的技能樹結合而成為枝葉的一部份,而不是四處散落卻發育不全的孱弱枝柳,例如,前一陣子,我將Docker、Raspberry Pi做了個小結合,建立了個〈Java 輕量開發環境〉(http://goo.gl/zgHhcv),就是這類思考下產生的應用。

從幼苗變大樹更為重要

若以技能樹做比喻,那麼一開始選定播種的技術領域不就很重要嗎?實際上,與其精挑細選一門未來可能發達的技術領域播揰,不如好好思考對哪個領域有興趣,以及播種之後要如何成長茁壯,因為當廣度隨著深度而增加時,自然就能觸及更多的領域,甚至能像榕樹的氣根一樣,垂降至地後成長為新的支幹,這也就是發展跨領域能力的一種方式。

投資市場有句常見的推銷話術:「你不理財,財不理你」,在技術領域的話,如果程式人在意投入的時間、成本是否可獲得回收,那麼將學習技術看做是種投資絕對是必要的,程式人得依據自己的興趣與個性,選擇投資標的,並在保守與高風險間做出平衡,建立自己的投資組合並時時審視、檢討,在平衡風險與多樣性之時,迭代地以WHAT、HOW、WHY思考,該如何讓自己的技能樹持續茁壯成長。

專欄作者

熱門新聞

Advertisement