只要我們站在技術的時間軸上夠久,然後往歷史回顧時,總是會看到所謂技術上的毒藥,就像〈Java學校帶來的危害〉一文說到的,這類技術毒藥「不夠困難,無法區分偉大的程式員跟平庸的程式員」,這時差不多就表示我們老了,然而,如果再站久一點就會發現,有人用這毒藥,建立了當初想都沒想過的應用,這時就不太能分清楚,這是不是毒藥了。

Arduino有毒?

最近我重讀了《約耳續談軟體》中〈Java學校帶來的危害〉,原因卻是接觸了Arduino的這段期間內,發現這個生態圈中,偶而會有人圍繞著「Arduino有毒」與否這類主題做討論,無論支持Arduino有毒或沒毒,大多數人都認為,不應該局限在Arduino的框架中,這類討論在軟體界似曾相似,感覺好像軟體業界裏也有人感嘆,一堆新人只會用XXX框架,脫離了XXX框架就什麼也不會。

對這類討論,我其實百感交集,我是一個離開學校後,就決定離開電子電機領域的人,十幾年來,以為我這輩子不會再去碰麵包板這鬼東西,近來卻因為接觸Arduino、Raspberry Pi的關係,我有機會開始去重新撿拾一些基本的電子電路知識,並改造一些東西,像是女兒的聲光玩具,這是個很神奇的體驗。近來我也試著去瞭解,怎麼自己用Atmega328拉出個基本的Arduino Uno,也試著去翻一些8051的書,以及瞭解除了Arduino上使用的之外,還有其他哪些單晶片,以及如何使用。

我有沒有被Arduino框住呢?天曉得,只知道我現在的想法是,把電子電路當作我業餘的興趣,玩個十幾年再說,這個時間單位是因為我離開電子電機進入軟體領域,也差不多是十幾年,也許Arduino真的是毒藥!因為吃了它,我神智不清地,開始重學電阻、電容、電感、電晶體、積體電路、開始重讀微積分、想要重看工程數學……這陣子以來,我一直覺得,會重拾曾經令我厭惡的東西,是很神奇的一件事。

Arduino一開始是教育工具,不過,近來確實也有些大公司瞄準了它,像是Facebook日前發表的Parse for IoT,第一個支援的板子就是Arduino Yún,我知道Arduino Yún、Arduino Dun等,是另一個層次的東西,不能與Arduino Uno等相提並論,不過我想講的是,從程式人的角度來看,Arduino 是「軟體」,我之前專欄中〈程式人與微控制器開發板〉,就曾經談過這類觀點。

Java學校帶來的危害

看過幾個Arduino有毒與否的討論,我腦海中浮現了〈Java學校帶來的危害〉這篇文章,因而重新翻開了《約耳續談軟體》,文中第一段就寫著‥「一直在抱怨『現在的小孩』不願意或無法面對困難,顯然表示我已經老了」,約耳是在2005年寫下這篇文章,在近十年後的現在看來,又是如何呢?Java本身已經有點古老了,不過這段期間,基於Java也有著不少出色的應用產生。

在更早的2001年,Dijkstra也有著類似的呼籲,他寫信(http://goo.gl/92tqTT)力勸德州大學,不要將計算機入門使用的語言,從Haskell改為Java,在程式語言的歷史上,大概就數Java最常被拿來當作毒藥來看待吧!約耳在他的文章中也談到了Haskell,而且,兩個人也都談到了Functional Programming。

然而,在Java正式導入Lambda前的好幾年,就基於自己的興趣,開始研究起Functional Programming,也試著學習使用Haskell,時至今日,儘管並不完全,Java確實也有了Functional Programming的部份風格,儘管我不是在學校裏開始學習Java,然而一開始幾乎是靠Java為生的我,似乎也沒有受到Java的毒害。

我也知道約耳在說的固定點理論(Fixed-point theorem)是什麼東西,也許我知道得不夠深,不過,真有必要,我會去深入瞭解的,我身邊也看得到許多優秀的程式人,他們不見得在學校都學過那些困難的課程,不過,卻也都曉得Functional Programming是什麼!

框架有毒嗎?

在軟體的領域中,只要某個語言興盛,就會開始產生各種程式庫與框架,一開始會呈現熱烈擁護、愛用的情況,接下來就會有人開始從擁抱框架到唾棄框架,幾乎都是這樣的,你可以在Java、Ruby/Rails、JavaScript等生態圈的發展過程中,重複看到這類劇情重演,仔細想想,這真的是框架的問題嗎?還是人的問題?

Arduino框住我嗎?我在研究Arduino 時,除了將那些電路模組是如何組成,當成業餘興趣之外,我最常作的就是,閱讀那些程式庫的原始碼,這是我很擅長的事,瞭解這些程式庫原始碼,我就能知道原理,也能修改它,不是直接修改電路(這目前的我還作不來,十年之後再看看),我想講的是,想認真玩Arduino,可以是基於它往上建立更好的應用,也可以是從它作更深入的電子電路鑽研,前者我比較擅長,後者是我的業餘興趣……想玩就不要停在Arduino本身。

Java當初是毒藥,也有人說它是教育工具,過了不久,又有人開始說,那些框架是毒藥,但其實有人用得很爽,也不會被框住。Rails是徹頭徹尾的框架,連我都不是很愛用它,不過,我不愛用它,不表示我反對它,很多人基於Rails建立了很多極為有用的東西。

我不會覺得框架是毒藥,那是產能工具、只是一個產能工具,要怎麼發揮它的產能,在上頭建立更好的應用,那決定權是在使用者的身上,你瞭解它,你就能操控它,你就能改造它。

對我來說,學一件事向來就有不同方向,一個由上而下,一個由下而上,不同人適用不同方向,我是屬於前者,喜歡從如何應用開始著手,接著,再逐步深入瞭解這是怎麼作到的。

我在軟體界從事教學時,是兩個方式都會用,有時間的話,我會自下而上,從基礎好好教導學員們,沒時間的話,我會自上而下,在行有餘力之時,告訴學員,那些表面的魔術是什麼。如果面對實戰式的課程,我還會從中間開始,比方說,我會教學員從無到有,從需求開始,逐步將既有程式重構,逐漸使得一個框架成形……,我會教學員一個IoC框架是怎麼出現的、一個測試框架怎麼出現的、一個 Web 框架怎麼出現的,近來,我也分享了既有程式要怎麼做,才能改為使用Java 8 Lambda的過程。

是毒藥還是另一個可能性?

我雖然會從事教學,不過多是在業界,但知道,學校的教學其實有許多難處,我不便置喙,不過,有機會到學校接觸學生,這會是我想傳達的事,讓學生們知道,他們現在的所學,仍是有不同方向的可能性,像是基於OO往上建立更好的應用,或是從它開始作更深入的XX鑽研。

學習或教育一件事物,從來就不是只有一個方向,如果一定得從基礎學習或教育,那麼,現在一堆倡導人人學程式,從小學程式的論調是怎麼一回事?帶一堆人用一些簡單的工具吃毒藥,然後,然後再來像約耳說的,用困難的課程來淘汰他們嗎?

最近一篇談傅里葉轉換的文章(http://goo.gl/xmsNhe),我目前沒辦法分辨裡頭談傅里葉轉換的部份,是不是完全對,不過,裡頭有句話我很認同,「缺少了目標的教育是徹底失敗」。

你想學習什麼?你的目標是什麼,如果是從事教學,學生的目標在你的教導下又是什麼?你想往上,或是往下,還是停留在xxx本身?無論xxx本身是Arduino、Java、C#,或者是任何其他的東西。

這些決定了框架是不是毒藥,決定了Java是不是毒藥,決定了Arduino是不是毒藥……決定了xxx是不是毒藥,或者是另一個發展的可能性!

專欄作者

熱門新聞

Advertisement