技術圈不乏熱門技術,每隔一段時間,技術新聞版面、社群討論、相關書籍聚焦的對象,就會重新洗牌一次,對開發者來說,追求新知是一件好事,然而,單單只是將熱門技術,當成是追求新知的對象,容易因為重複的投資過程,而失去樂趣。這時,何妨反向思考,尋覓一門冷門技術,從中追求新知,享受建構知識框架過程的種種挑戰。

新知一定得是熱門的嗎?

身為開發者,當然要不斷追求新知,這是一種自我成長的方式。

曾經地,你或我也是這麼過來的,從略懂皮毛、能夠寫出心中的小程式開始,為了更隨意地揮灑腦中的想法,開始追逐更多的技術,然而市場導向使然,身邊圍繞著的資源,往往是熱門的技術,因為熱門,相關新聞多、討論者眾、文件書籍充沛、開放原始碼專案遍地開花、新奇工具不斷推出,因此我們追求的新知,幾乎就等於是熱門的技術。

就我個人而言,確實也是在這麼樣的環境成長過來的,這樣的環境會讓人急速成長,雖然過多的資訊也容易令人焦慮,然而整體來說,獲取新知的滿足感可以平撫這種焦慮,也能帶來樂趣,這個追求熱門技術的過程,無論是就時間的投資上(獲取新知要耗費的時間相對地少),或者是實質收入的回饋上(熱門代表著工作機會多),其實都是必要的,追求熱門技術沒什麼錯。

只不過,一味地將追求新知等同於追求熱門技術,容易陷入知識的漩渦,正如〈技術的執念〉(https://goo.gl/61HQ7j)中談到的,如果你學習了Rails/ActiveRecord/RSpec/MySQL,下一個專案還是Ruby的話,馬上會覺得是一種重複,然而,換成是Python技術堆疊Django/nose/PostgreSQL,可能會覺得技術有所提升,因為學到了不同的技術、框架、工具等,只是若仔細觀察,這本質上仍是一種重複,只是「這些內容可能讓我產生我學到了好多東西的錯覺」。

在〈技術的執念〉中提到了「知識框架」的概念,身為開發者,一開始大多是為了涵蓋知識框架上大部份的點,而不斷地從熱門技術中追求新知,「一旦完成了棵樹上的所有節點,就不用再去做第二次了」。在這之後,若再依著熱門技術去追逐,那就不是追求新知,而是持有著既有知識沾沾自喜罷了。

Haskell的啟發

對我來說,急速成長的那段時期,就是Java相關技術堆疊百花齊放的時期,這些從我的網站早期留下的Java文件可見一斑。

Java的成長,也帶來了許多java.next的語言挑戰者,其中之一就是Scala,這門在那個年代也是個熱門技術,在眾多語言挑戰者中,算是極為成功的一個,在2011年Java TWO中的開場論壇中,我曾經談到「從Scala中,你可以看到許多Java原本應有的樣貌」。

然而,這句話是一個誘餌,是為了吸引大家去接觸Scala中真正能獲得啟發的部份,也就是過去被視為冷門的函數式程式設計,從我初接觸Scala中的函數式概念之後,就斷斷續續地吸收過相關的知識,然而因為資訊破碎,總看不清楚原貌,於是,引發了我去學習一門冷門的語言Haskell,此時,出現一本有著系統性整理的書是很有用的,像是《Haskell趣學指南》(https://goo.gl/Fyp9F6)、《Real World Haskell》都是不錯的選擇,我後來對Haskell的一點心得,也整理成了《Haskell Tutorial》(https://goo.gl/fMa1K5)。

學習Haskell能做些什麼?當時我並不知道,最初的動機應該是覺得好奇,好奇於這個過去沒接觸過的典範,何以能成為Scala語言設計時的考量之一。實際上Haskell並不是什麼新語言,然而,學習它,對我來說是一種新知,這帶來了過去急速成長的那段時期,曾經獲得的啟發與滿足感。

偶而是會發生這樣的事情,一個冷門的概念或者是技術,後來漸漸躍於熱門,函數式設計的概念,確實在過去幾年來也躍為顯學之一,並且兼具實用性地融入到一些語言之中,甚至於我後來接觸Maker領域,使用OpenSCAD進行程式建模時,也因為先前熟悉了函數式設計的方式而獲益。

冷門技術的挑戰

儘管Maker是近幾年來的熱門話題,也有一些耳熟能詳的熱門技術名詞,像是Arduino、Raspberry PI、Scratch、3D列印等,然而在玩過一輪Maker領域中的熱門技術,掌握了大致上的知識框架之後,我選擇了熱門的3D列印領域中,相當冷門的3D程式建模來做為挑戰。

會說這是一種挑戰,是因為相對於熱門技術來說,冷門的技術相關新聞少、討論者寡、文件書籍匱乏,而且,開放原始碼專案屈指可數,更別說是方便易用的工具了。

以OpenSCAD為例,從學習的一開始,幾乎就只能從官方文件開始,然而,官方文件記錄的,多半只是API的使用方式,而我想要知道的是,一個有趣的模型,是怎樣透過這些基本API來構成,為此,我在Thingiverse上蒐集、觀察許多模型檔案,思考著它可否透過程式建模來組成,偶而發現一些不錯的模型使用OpenSCAD建立,程式碼就必定會下載回來研究一番。

有時想建立的模型沒有人做過,自己就得想出解法,這類模型在心中有許多個,像是最初的迷宮、音樂手環、繞球的文字、蓮花、盤繞的魚骨等,對於這些曾經百思不得其解的問題,若在某天想出解法並成功實現的瞬間,那份從無到有的創造感,總是令我樂此不疲。

設計的模型多了之後,漸漸地會有許多的想法,使用文字記錄總是最好的方式,在撰寫文件的同時,我總是避免淪於官方文件的翻譯,著力於記錄自己的想法,而不單只是API的使用方式,有時甚至會在文件中,批評自己過去設計時的缺點,我總是會想,還有沒有其他的考量,還有沒有更好的設計,讓記錄不僅是記錄。

而這也讓我感覺,自己是在創造第一手的知識,而不只是在吸收新知。

漸漸地,自己也建立起程式建模這塊的知識框架趨型了,而隨著文件的分享,儘管仍算寥寥可數,然而(中文的)使用者也漸漸有增加了,近來我也開始逐步抽取出過去的設計中,一些可共用的部份,並且,開始探討如何能建立一些可共用的基礎模組,像是2D、3D線段、扇形與弧形等,或許將來成熟一點之後,可做為日後自己或他人建模時的基礎程式庫。

冷門技術遇上好奇心

相關新聞少、討論者寡、文件書籍匱乏、開放原始碼專案屈指可數、工具也不多,這些都是冷門的技術的挑戰,然而,也是研究冷門技術的樂趣所在,可以享受一種從無到有的建構過程,實際上,若你有機會接觸Maker領域,就會發現其中有著各式各樣、千奇百怪的冷門技術,而且都存在著專精到神乎其技之人(有時他們也因這樣的獨門技術,而有著不錯的收入)。

從一門冷門的技術,試著從無到有,建立起自己的知識體系,甚至將成果分享出來,成為其他人接觸這門領域的一份資源,確實可以獲得不少的樂趣與成就,然而,這些都只是附加的,研究一門冷門知識的樂趣,實際上是不斷地滿足好奇心,以及不斷地產生好奇心的這個過程。

就連一開始該選擇哪門冷門技術也是基於好奇心,當然,這並不是說,追求熱門技術不好,如一開始說的,在某些階段,追求熱門技術是必要的過程,然而,如果厭倦了一次又一次的重複,思考與尋找一個能滿足與不斷產生好奇心的冷門技術,也會是一個不錯的選擇。

專欄作者

熱門新聞

Advertisement