精選文章

從Coder到Maker (林信良)

April 11, 2017 17:33


本文轉錄自 IThome,作者為林信良,因在網路上經營「良葛格學習筆記」(openhome.cc)而聞名,曾任昇陽教育訓練中心技術顧問、甲骨文教育訓練中心授權講師,目前為自由工作者,專長為技術寫作、翻譯與教育訓練。喜好研究程式語言、框架、社群,從中學習設計、典範及文化。閒暇之餘記錄所學,技術文件涵蓋C/C++、Java、Ruby/Rails、Python、JavaScript、Haskell等多個領域。


過去,從無到有動手做出東西的人,就可以是個Maker,隨著數位設備普及,開源硬體(Open source hardware)的興起,Maker有了新的意義,代表著一群能運用數位科技軟硬體,將自己的想法實現、分享,進而影響身邊世界的一群人。

對於已經有程式設計能力,並有著「自己的軟體自己寫」精神的Coder來說,要成為新時代Maker相對容易,面對的挑戰也更為巨大且有趣!

從軟體到軟硬體整合

基本上,只要願意親手打造東西,解決身邊問題的人,都可以說是Maker,跟單純的DIY不同的是,Maker往往包含了創造的成分,只是照著說明書完成一樣東西就只是單純的DIY,從無到有發想、設計、實作、修正……,最後打造出成品的人,才稱得上是個Maker。

Maker不分領域,從無到有打造家具的木工,可以是個Maker;用廢五金打造出變形金剛的人,可以是個Maker;依想法設計出海水魚缸的人,可以是個Maker;甚至,自己用回收物設計玩具的孩子,也是一名Maker。

因此,Maker這個名詞,可用來代表著一群具有熱情、創意,並願意實現想法的業餘發明家。

具有軟體設計能力的Coder,本身實際上已經具有Maker的基礎,也就是從無到有打造軟體的能力,不少Coder平時就常撰寫程式來解決自己身邊的問題,即使創造的成品依舊是個軟體,這個過程,本質上也是在從事Maker的行為,隨著一些數位設備的簡易化與普及化,讓Coder的Maker行為,得以從軟體延伸到軟硬體整合,能解決的問題,從虛擬世界進一步擴及至實體世界,或者是讓實體與虛擬兩個世界密不可分地相互支援。

以Arduino為例,單就電子電機領域來看這塊板子,不過就只是塊單晶片微電腦的控制板,專攻於電子電機領域的專家們,平時研究製造的電子電路都遠比它複雜許多,然而,就不懂電子電路的Coder來說,卻是能降低他銜接開關、馬達、超音波、紅外線、溫濕度感應器、Wi-Fi、藍牙等各種電子裝置,並透過軟體予以控制的一項利器,這就等同為Coder開啟了一條實現想法的新道路。

在Coder實作某樣東西時,察覺需要將光敏電阻、蜂嗚器、電晶體等兜在一起時,他就只要這麼做,然後,試著使用程式去控制這些裝置的行為就可以了,而不用先去瞭解光敏電阻、蜂嗚器、電晶體的物理特性與運作原理,這些一開始足以嚇退Coder的玩意兒。

Coder甚至可以在不接觸電子電路的情況下,達到軟硬體整合之目的,透過已設計好的LED顯示、馬達等擴充模組,簡單銜接幾條電線就能串聯出想要的東西,甚至有些擴充模組能夠像組裝積木般堆疊,連電線、麵包板都不必使用,活像是在玩弄樂高積木機械人一樣。

實際上,玩弄樂高這類的積木機械人,也可以是Maker的行為,只要願意,也能設計出實際可用的六軸機械手臂、極座標繪圖機、盲人點字印刷機、3D印表機等。

軟硬體界線後的挑戰

任何降低門檻的工具,基本上都在倡導著一個「從做中學」的觀念,入門者在很快地掌握低門檻的工具之後,接下來就是直接嘗試實現想法,從中明白哪些地方需要修正、哪些功能不會做而需要進一步的知識,還有哪些功能做不出來,而需要調整方向。

這有別於過去的傳統教育方式,以我自己身為電子電機領域逃兵的經驗來說,儘管學校的相關實驗課程中,只用得上部分知識,我還是得學習各種電子電路、二極體、電晶體的材質與物理性、工程數學、通訊原理等全套理論,不可否認地,這些理論確實都有其應用場合,然而就當時的我來說,卻因此迷失在一堆複雜的理論之中,最後選擇離開了電子電機領域。

萬萬沒想到的是,十幾年之後因為接觸Arduino,由於在把玩時有了既定的目標,面對那些過去令我恐懼的麵包板、電阻、二極體等,卻開始覺得有趣而想要重新接觸。

我不禁思考著,同樣的這些東西,令我從恐懼到覺得有趣的理由是什麼?因為有個既定的目標!為了完成這個目標,發覺自身有許多需要補足的能力,而這些能力一旦補足,就能馬上加以應用。像是最近想要使用積木機械人,實現類似PlotClock的繪圖機,為了讓馬達能準確控制機械手臂頂端的座標,於是,我在一張紙上,寫滿了如何將座標回推至馬達角度的數學推導過程,因而重捨那些許久未用的三角函式,這時想到的,不是過去沒學好三角函式,而是當初準備聯考的那個年代,根本不知道三角函式實際上會有這類運用。

這其實也說明了,既有的程式設計能力,結合低門檻數位設備,雖可令Coder要成為現今的Maker時,能馬上跨前一大步,然而,在軟硬體界線之後的挑戰卻是更多元。例如,使用Arduino這類板子,你有可能找不到適用的擴充模組,而必須親自學習相關的電子電路知識,以便實現想要的功能,在實作機械人相關的動作功能時,等待你的就會是機械原理,而你的程式碼中,就會有著許多的數學運算實現。

修正、修正、再修正

與程式設計有點不同的是,在從事Maker行為時,並沒有什麼標準作法,當有了想做的東西時,就是在過程中不斷修正、修正、再修正,而這個過程,往往才是Maker行為執行過程中,最有價值的部份。

就拿看似簡單的積木機器人來說,按照積木組裝圖拼裝出一隻機器人,並按照手冊寫好程式,這個過程充其量就只是機械性的模仿,並不會知道各積木間要如此銜接之目的是什麼。

類似地,按照書籍接好電路並下載程式,最多就像是在DIY,而不會是Maker,在拿著成品略為把玩之後,收穫也只會是輕鬆又廉價的虛榮感。在真正捨棄手冊、開始實際從事自行創作之前,並不會歷經不斷修正的這個過程。

以使用積木機械人實現繪圖機的過程來說,實際上,我想了好幾種將座標回推至馬達角度的數學推導方式,因為一開始想的推導太複雜,因而設下的目標是能採用更簡單的數學,在數天的修正,並達成階段目標之後,又面臨了可繪製面積的問題,為了解決這個問題又思索了數日,昨天又想到的新修正方式就是,將機器人的兩隻手臂改為一隻手臂,以得到更大與較好計算的可繪製面積。

之所以會修正、修正、再修正,代表著不斷地遇到新的問題,解決問題的過程中,有時甚至不見得完全知道自己在做什麼,而這個過程,就是不斷挑戰著自己「一定做得到」的決心,每個修正的達成都是種自我Maker能力的肯定,儘管離最後目標尚有很長一段距離,然而,得到的卻是紮紮實實的成就感,與滿滿的樂趣。

無懼來自各領域的未知挑戰

視想實現的東西而定,遇到的挑戰可能是未知的、來自各個領域,可能是電子電路,可能是數學、物理、水利、機械動力,甚至可能是音樂、美感、造型的問題,每個挑戰都可能是開啟新領域的一扇門,而樂趣就在於,能接觸各領域的知識,從中發現新的應用方式!

正因從Coder到Maker的過程中,挑戰可能是來自於各個領域,不會有任何一個領域的知識預設應該知道或精通的,所需要的就是從做中學,不用先想著自己電路基礎薄弱,不用設限自己數學基礎不好,需要什麼就去瞭解什麼,然後就能進一步發現到,自己確實能夠做到些什麼!