身為開發者,在不斷自我精進的一段旅程之後,偶而會浮現停滯不前的感覺,剛開始這是好事,試著擺脫那種感覺後,換來的會是新的前進動力。

然而,也許你已經遇到了,或者還沒遇到,感覺終於面前出現了一道高牆,怎樣都無法翻越,漸漸地開始思考著,這是不是自己的極限了。

陷入泥淖了嗎?

身邊最近觀察到一個現象,不知道是不是大家年紀相仿的關係,朋友圈裏開始有些聲音,大致上,就是感嘆著似乎遇到了瓶頸,這跟單純的低潮有點不同,有種老狗玩不出新把戲的感覺。也許是以前總覺得有著源源不絕的創意,現在卻一點想法也沒有,也許覺得就算有了想法,想要實現,卻又有力不從心的感覺。

那是種滿糟糕的狀態,一整個江郎才盡的感覺,此時,也許你想到了《學徒模式》中的〈深水區〉講的:「你開始擔心目前的狀況不是一時的停滯,而是泥淖」。

只是停滯不前的話,重新整合、逐磨既有的能力,也許就能進入下一個層次,對致力於自我提升的開發者,應該有不少這類的經驗。然而,若是陷入泥淖,開始自覺平庸的感覺就會不斷地襲來;〈深水區〉中建議的是,可以找一個深水區,勇敢地跳進去,找尋機會突破與成長。

很苦行僧式的方式,不是嗎?身處這個階段的另一個大問題就是,在環視可能接觸的不同領域之後,你可能會有各種理由不踏入,像是年紀與時間,也許來玩玩最新的資料科學,或人工智慧?然而你心知肚明,現階段可以在這類議題上浮出檯面的,多半是已經蹲了多年馬步的,是的,現在確實有不少程式庫或框架,就算不是很懂理論基礎,也可以兜出個東西來,然而你知道這不踏實,真正遇到該解決的問題時,沒有蹲過那些馬步,你根本就創造不出新的演算法來解決問題。

現在開始蹲馬步?沒時間啊!年紀也是一個問題,等到馬步蹲夠時,又是幾歲了啊?如果是真正喜歡的東西,也許這麼做就無妨,當成實驗也好,再來特意練習個十年,看看成果如何,但問題就在於找到的主題,又沒能讓你有這樣的動機……就這樣,一開始只是停滯感,後來,開始有越來越深的沉陷感,最後帶來低潮,無論想什麼,最後都是負面的答案……

來找點樂子吧!

刻意練習、十萬個小時,一直以來,都是一個有自律的開發者會採取的方式,在進入下一階段、更高境界的成就感,會成為繼續前進的動力,只是,這類苦行僧的方式,後面必然會越來越艱辛,無論是誰,只要到達某個高度了,想再更上一層樓,就會越來越困難,久久無法獲得動力的情況下,就會感覺觸及了天花板。

既然已經站得夠高了,那麼,稍微把頭低一下,也許可以看到其他的風景,玩玩一些你覺得應該很簡單的東西,或者一些一直想玩的東西。

就像在Java Developer Day 2014時,我第一次看到Lego Mindstorms EV3,到最後終於有時間來玩玩它時,就真的只是在玩,整個玩耍的過程中,我根本就沒寫過一行Java,或者是用Python來控制EV3,單純就是想玩玩積木式的程式方塊。

畢竟你已經有多年的經驗了,就程式面來說,積木式相對來說就是很簡單,而且大致上你也能在玩的過程中,猜測到底程式怎麼控制的。如果玩到一半,某個想法突然吸引了你,而想換個口味,你也隨時可以停,就像後來我改玩Audino,也是用相對簡單的Scratch來控制,心裡想的就是「這玩意兒可以玩到什麼程度呢?」沒想到,玩著玩著,還玩出了一本書。

後來,又玩了一陣子Raspberry Pi,也算是把以前看Raspberry Pi新聞時的一些好奇點,給探索了一下,不過並沒有很久,3D建模程式設計吸引了我,因而馬上又換了口味,基於對繪圖方面本來就有興趣與經驗,這個玩了很久,每隔一兩星期發表一次作品,也讓自己有一點一滴在前進的感覺。

不用刻意成長,單純享用自己多年累積下來的能力,找樂子吧!不用逼自己專注,不用特意長時間經營,像個孩子似地,隨時想換主題就換主題,玩這些對你來說相對簡單,只要依著想法去玩就好,這比繼續抬頭、想要往上突破,簡單多了。

在遊戲找樂子

我用這樣的方式讓自己有動力,又前進了幾年,之前也有了將3D作品中一些共用基礎抽取為程式庫的想法,在一陣瘋狂實現程式庫的過程之後,卻好像洩了氣的皮球一樣,突然之間什麼想法都沒了,然後,剛好又看到朋友圈裏一些遇到瓶頸的聲音,於是,那種糟糕的感覺又來了。

在我試著用以前的方式重新振作的期間,有天發現女兒在玩Minecraft,「喔!我雖然聽過,但還沒玩過耶!她怎麼知道這個?竟然知道怎麼下載來玩?」後來我買了個帳號來玩,也跟著瘋了好一陣子。不過,這樣一格一格地蓋,真的是很麻煩,可以用程式蓋嗎?我一邊玩,一邊不自覺地開始揣摩背後程式運作的機制,然後,有天就找了Minecraft程式設計的書來看了。

事實上,Minecraft是Java開發的,官方並沒有開放API,然而,愛好者反組譯了原始碼,並且改寫了其中的程式,使之有了非官方的公開介面,後來,還有Minecraft Coder Pack(MCP)這類工具,可用來反編譯、更改和重新編譯Minecraft,目前最常見用來開發模組(稱為Mod)的API是Forge,對於熟悉Java的人來說,開發Mod非常簡單,基本上就是個事件迴圈,註冊Minecraft的相關事件,來自訂、改變Minecraft的各種行為,也可以自訂方塊、合成或釀造物品等。

因為熟悉Java,翻閱Minecraft模組開發的書不到一小時之後,我就寫了幾個惡搞的功能,像是每打一個方塊,就狂升經驗值,在女兒面前示範如何一擊炸掉整座島,或者一路轟炸、穿透基岩到掉出世界之外,兩個人笑得樂不可支。這時突然想到,上次寫程式寫到笑得如此開心,是多久之前了呢?

也因為先前玩了一陣子3D程式設計,在Minecraft建造世界方面,我想應該也能用上這些經驗吧!像是在其中自動產生迷宮之類的,結果確實沒錯!我試了Bukkit,這會建立一個Minecraft伺服器,並且可以加上一個Raspberry Pi Juice的plugin,然後,透過Python(目前支援Python 3了)使用Minecraft Pi API來寫腳本,在Minecraft自由地建造方塊。

陷入泥淖?那就打滾吧!

這陣子工作之餘,有時間就打開Minecraft玩一陣子,當當魔物獵人,或做個農夫、礦工,一次當旅行家迷了路,後來就當商人,跟村民拼命交易換到地圖,就不擔心迷路了,有時玩著玩著,就寫個小程式來自動化一些建設,套句現在的流行語,感覺滿紓壓的。

在紓壓之餘,又開始會在程式面上胡思亂想了,今兒個就想到,Minecraft的Mod與plugin差別在哪呢?像Forge這類API,極度依賴著Minecraft的原始碼,未來Minecraft改版,開發出來的模組可能也得跟著改程式;plugin的話是透過公用介面,Minecraft改版的話,背後的模組變更由Bukkit這類伺服器實作來傷腦筋,plugin的開發者基本上不用變更程式……在瞭解的過程中,不知不覺地,就又打開了Raspberry Pi Juice的mcpi原始碼,開始在程式面上打轉了。

也許,有時就應該是這樣,陷入泥淖時,就不要特地想爬出來,又找個什麼深水區跳進去了,不如好好利用自己已經擁有的能力,找個簡單容易應付的玩意兒,好好玩個泥巴戰吧!

專欄作者

熱門新聞

Advertisement