各式各樣的課程令人眼花撩亂

目前坊間針對兒童與青少年的程式課程,幾乎都以 Scratch 當作入門,而往下延伸則可分為單純的程式設計與機器互動兩個不同方向。

前者主要包含 JavaScript 與 Python 兩個門派,當然也有少數會教導 C/C++。

而後者則變化甚多,包含 S4A/S2A 及相關衍生性產品、mBot、樂高機器人等。而宏碁專為物聯網推出的雲教授,也有針對青少年的推廣計畫。而最新的後起之秀,當屬 Micro:bit 無疑。

這樣的分法可能會令各位爸爸媽媽感到相當困惑,難道後者就不需要寫程式了嗎?當然要。我這樣分類的原因是後者幾乎都還是 (盡量) 以類似 Scratch 的拖拉積木方式完成程式設計,所以學習機器互動與電子元件的成分高於學習程式設計本身。

在這些互動課程中,樂高機器人的費用一點也不親民,而 mBot 雖便宜許多但仍比不上 S4A/S2A 所支援的 Arduino,也因此包含學校在內的許多課程之前多以 Arduino 系列為主。Arduino 除了比 mBot 有更低的入門費用外,其實也有各種中高階的型號可供選擇,算是一整個系列的控制板。而如果要更便宜,甚至還有一堆相容性板子可以選擇。而豐富的周邊支援元件,更使得 Arduino 擁有一定的魅力。不過這個現象,似乎在去年底開始因為 Micro:bit 的加入而有了明顯的變化。Micro:bit 價格雖然較 Arduino 貴上一些,但是內建基本的感測器與輸入裝置,使得在學習上的入手 C/P 值超越了 Arduino。更別說是那討喜的外型,再加上一路從拖拉式、JavaScript、MicroPython 到 C++ 的開發環境,可說是玩法千變萬化。也難怪可以迅速成為 Scratch 的銜接課程,甚至跳過 Scratch 直接進入 Micro:bit 也不會有太多的學習障礙 (單就程式部分)。事實上,已經有人提出這樣的說法,認為用 Micro:bit 入門比 Scratch 更好。不過現實的差別在於 Scratch 幾乎是完全零成本,而 Micro:bit 至少還是要先花上幾百塊買張板子。如果再加上周邊的基本配件與電子零件,一兩千元是絕對跑不掉的,所以仍有一定的費用門檻。

在往更硬的硬體走去,還有像是機器人、自走車、飛行器等,也多是跟兒童程式設計有所連結。

除此之外,還有像是 App 創作、麥塊等分支。

最後,當然也可以選擇繼續研究 Scratch,畢竟要把一種技術玩到飛天的成就通常並不是幾天或幾個月就可以輕易取得。如果對此有所質疑,相信看完 Scratch 開發團隊的一系列影片後,你一定會贊同 Scratch 可以玩得更多。

面對這麼多不同的選擇,肯定令各位家長感到相當頭痛。

興趣優先

對此,我的建議是當然還是要先考慮小孩的興趣。身為家長我知道這點說起來很容易,實際上可是困難重重。所以一種可行的做法就是先參加半天或一天的體驗課程。如果費用不是主要的問題,當然就直接報名完整的課程。

甚麼?那剛剛說要考慮小孩的興趣是說好玩的嗎?程式設計決不是一種幾十個小時就能完成學習的技能,需要不斷的練習並越級打怪,包含學習新的相關知識或更加以深入特定主題。如果小孩沒興趣,其實對家長來說或許可以說是一種解脫。付學費、上課、打包回家、忘了有這回事。

我想不少爸爸媽媽都看過新版課綱已經加入 STEAM 內容的文章,此外,還有大量的文章及新聞報導鼓吹程式設計是未來工作的主流。如果只是因為這兩個原因才讓小孩學習程式,那奉勸各位爸爸媽媽當小孩沒興趣時就先別逼了。首先,課綱才剛公布,或許教師的教學能力才是家長需要優先擔心的問題 (在此先跟認真的教師說聲抱歉),而不是小孩的成績。此外,學生程度的差異可能會很大,所以教學內容不可能太難,所以不用先擔心自己的小孩會跟不上。如果未來在學校會跟不上,現在到外面上課也不一定跟的上,除非真的遇到很好的師資。

程式語言或學習工具真的沒那麼重要

對於程式語言或學習工具的選擇,目前有幾種常見的說法

  • JavaScript 是未來的需求。
  • 未來世界上最重要的語言不是英文,而是程式語言。
  • 專注在程式部分才能學好運算思維,而不會被那些複雜的機械與電子元件所阻礙學習。
  • 程式設計師的年薪輕輕鬆鬆就超過 10 萬美元。
  • 物聯網是未來趨勢,學了絕對不會後悔。
  • 人工智慧在未來會搶走大部分的工作,所以開發人工智慧是一個好選擇。

對於上面的各個說法,我大膽的說全部都是似是而非的片面說法。

首先,針對程式語言的部分,我們先來看一下幾個常見程式語言在 Google Trends 下的熱度趨勢。

歷年程式語言 Google Trends 搜尋熱度

歷年程式語言 Google Trends 搜尋熱度

看到了嗎?從 2004 年 Google 開始收集資料算起,唯一能夠一直保持熱度的程式語言是 C++。不僅如此,其熱度也遠遠超過其他程式語言。JavaScript 的搜尋熱度並沒有上升,反而有下降的趨勢。倒是 Python 受惠於人工智慧與金融投資的應用,其熱度近幾年有明顯上升的趨勢。雖然 Google Trends 只能比較五組關鍵字,但是我想趨勢已經很明顯了。

或許搜尋熱度不代表市場需求,畢竟很有可能大家只是因為遇到了超難解的 C++ Bug 所以才求助於 Google 大神。所以我們改從 Indeed.com 這個號稱美國最大的求職網站來找尋答案,列出各種程式語言的相關職缺數量。從表一中我們發現第一個令人吃驚的事實,那就是雖然 C++ 相關職缺在中國以及台灣擁有最大的數量,在美國卻是 C#/.Net 與 Python 的職缺數量遙遙領先其他程式語言。那我們來看看世界知名的跨國公司,又是需要甚麼職缺。從表二中,再次發現另一個令人吃驚的現象,即使像是 Facebook 或 Google 這類幾乎與網路畫上等號的公司,C++ 職缺數量反而都是最高的。所以實情就是,儘管 JavaScript 有相當的熱門程度,但絕不是最熱門的程式語言。教 JavaScript 或 Python,很重要的理由之一是因為比 C++ 易學,而且還可以用來做花俏的網站或應用。抱歉,我知道 JavaScript 現在在後端處理上也是很強的,但是兒童或青少年的課程通常是不會教到那個領域的。另外一個殘酷的現實是,儘管都叫 JavaScript,你知道 2004 年的 JavaScript 跟現在的 JavaScript 有多大的差異嗎?當然,這個問題不只存在於 JavaScript 中,幾乎所有的程式語言都會不斷演進。在運氣好的情況下,更新版本可能仍舊相容於之前老舊的版本,所以你可以繼續玩弄那些過時的老把戲。不過萬一運氣不好時,你可能就變成了一個超資深的菜鳥。就算相容好了,如果你只能一直重複使用老把戲,而無法發揮新版本的優點,最終也只會逐漸變為令人不耐的猴戲。

表一. Indeed.com 在不同區域內各個程式語言相關職缺數 (2018/05/12 製表)
美國中國台灣
C/C++34,62328,8901,757
JavaScript38,51427,3081,076
Java32,94026,668798
PHP14,58113,808885
Python55,89818,342840
Ruby22,6981,410255
C#/.Net 64,565 26,025 2,136
表二. Indeed.com 在不同跨國大企業內各個程式語言相關職缺數 (2018/05/12 製表)
 Amazon.comMicrosoftLockheed MartinAppleGoogleFacebook
C/C++ 2,9891,216824660567326
JavaScript946537215183422N/A
Java2,759382375298180N/A
PHP260 65746295216
Python2,572613 511795747349
Ruby1,188846815982 N/A
C#/.Net1,4651,667390N/AN/AN/A

而究竟程式語言是不是未來世界上最重要的語言?其實這個論述本身並沒有實際的意義,因為程式語言跟英文不一樣,程式語言從來都”不是特定一種語言”。雖然我在前面整理 Google Trends 與求才網薪資資料時僅列出了不到 10 種的程式語言,但是你知道全世界有多少種程式語言嗎?有興趣的人可以從維基百科上好好地數個清楚。在這些程式語言當中,有些彼此接近,但是有些卻也相距甚遠。所以用程式語言跟英文做對比,根本就是不倫不類。當然英文也有分好幾種,但是這些英文之間的相同之處絕對遠大於相異之處。到底哪一種才是真正未來的世界性語言?JavaScript ?還是 Python?當然都不是,另外一方面也可以說都是。

那麼該以純軟體還是硬體為主呢?我認為並沒有標準答案。有些人喜歡看到電腦上的小人物跑來跑去,有些人卻喜歡實際動手的接觸,當然也有人兩種都不喜歡。這兩者之間有太大的差異,所以並不是由誰取代誰的問題,而是何者更能引起學習者的興趣。當然軟體與硬體並不是獨立存在,兩者必須互相搭配才能發揮效果,但是不可否認兩者是屬於高度相關但卻完全不同的技能樹。也有人說程式或硬體都只是手段,最重要的是學習背後的運算思維以及解決問題的能力。如果真是如此,其實目前已經有訓練運算思維的桌遊,甚至是不插電的運算思維課程,那又何必拘泥在軟體、硬體的分野上?都不要也是可以的,甚至更不會受到程式語言或硬體的干擾,而能專注於問題與演算法本身。

至於年薪呢?要取得正確且完整的薪資資料不是一件簡單的事情,所以我從幾個點來進行推敲。首先,同樣從 Indeed.com 網站的資料來看,JavaScript 職缺的薪資範圍如表三,超過年薪 10 萬的職缺比例接近一半。而 C++ 職缺薪資範圍如表四,同樣有接近一半比例的年薪超過 10 萬美金。所以提出這個數字還算合理。

表三. Indeed.com JavaScript 職缺薪資範圍 (2018/05/12 製表)
薪資職缺數量
$75,00031,629
$95,00024,498
$105,00018,546
$115,00012,585
$125,0007,612
表四. Indeed.com C++ 職缺薪資範圍 (2018/05/12 製表)
薪資職缺數量
$85,00026,083
$95,00022,519
$105,00017,551
$115,00012,598
$130,0006,424

但是高薪與否,不只要看絕對值,更要看相對值,也就是跟其他職業的比較。然而職業類型實在太多了,所以我鎖定在 IT 相關職缺。根據 Global Knowledge 今年釋出一份針對 IT 證照的薪資問卷結果顯示,第一名為 CGEIT,平均薪資為 $121,363。這份問卷並沒有出現程式設計類型的職缺,因為無法拿到原始的數據,所以無法確定是因為一開始就被排除在外還是無法進入排名。但是就已經發表的數據,可以看到年薪 10 萬美元在 IT 相關職缺中其實並不是那麼獨特。更何況這份問卷顯示的實際平均薪資,而非中位數或可能的期望薪資。

不可否認,除了少數幾個有特定廠商支撐的程式語言外,大多數程式語言本身就沒有相關證照或擁有不甚興盛的證照制度,所以確實不容易列入比較。然而從另外一份資料來看,即使在同樣隸屬 Microsoft 原廠的證照中,程式開發相關的證照 (MCSD) 跟系統管理 (MCSE) 之間並沒有明顯的差距。

所以,程式設計師確實很有機會擁有不錯的薪資,但是並不見得領先其他類型的工作,即使只考慮同樣屬於 IT 的相關職缺也是一樣。而且別忘了,上述是美國的資料,而美國 IT 產業的平均薪資本來就高於其他國家。中國呢?雖然中國近年進步神速,但是公開的數據不容易取得,再加上可信度的考量,我就先暫不討論了。

至於物聯網跟人工智慧,我相信將來一定是人類社會中重要的一部分。然而我自認不是趨勢大師,所以無法預知 10 年後它們對職場生態、甚至全體人類會有甚麼影響,而影響的程度又會有多深。我只知道科技的演變速度並不是線性成長,我們要預測 10 年後的事情,可能比要求 100 年前的人們來預測我們今日的生活更加困難。所以呢?有興趣的人就多多接觸,甚至潛心研究。至於沒興趣、沒想法的,倒不如先持續觀望,免得因為太多的錯誤假設反而忽視掉了其他更重要的事情。

別誤會我了。我不是說上述論點都是惡意欺騙,反而在某些方面都是確實無誤。只是故事只說了一半,然後又補腦了另外一半。其實這也沒甚麼好奇怪的。不管是披著教育外皮的商人還是純正的教育家,其實都是帶著自己的理想、目的、偏見在推廣自己的想法,所以當然要好好構思一些打動人心的故事。與其說是惡意欺騙,倒不如說是善意的誘騙。不過再好的想法與目標,最後還是看實際執行教育計畫的人。好的老師帶你上天堂,不好的老師帶你住套房。不只在股票市場如此,在教育現場更是如此。

程式設計不是唯一

在所有的說法中,我個人認為所謂程式設計是未來工作主流是最為弔詭的一點。是的,現在業界很缺程式設計師,而這樣的缺口只會越來越大,一直到人工智慧把程式設計的工作機會都搶走。最後這句話可不是開玩笑,事實上已經有廠商在進行相關的研究,不過最後是否會成真我個人則先持保留態度。但是如果認真想一下,程式設計是未來工作的主流,不就表示滿街都是程式設計師,屆時程式設計師的價值還會跟現在一樣嗎?當然,程式設計師絕對有好有壞,薪資也絕對相差甚鉅,但是哪個行業不是如此?在未來當一個初階的程式設計師,真的會比高級廚師來的更有成就,甚至賺更多的錢嗎?知名的 Wired 雜誌去年底發表了一篇名為 “The Next Big Blue-Collar Job is Coding” 的評論,認為程式設計就是未來的藍領工作。想當然爾,這個評論當然也引起相反的意見。不過不管是什麼領,我認為物以稀為貴才是真不變的道理。與其當個不入流的程式設計師,或許換個職業會有更好的成就,生活肯定也會更快樂。

程式設計師還有一個比較特別的屬性,那就是資深不等於高階,尤其是工作年資越多這個情況就會越明顯。所以,想單純用年資來洗階級、甚至薪資,是幾乎不可行的。也就是有可能一直維持在低階的程式設計工作,而這類低階工作的薪資甚至有可能不漲反跌。如果再認真來看,在大部分的組織裡,程式設計師幾乎都不是薪水最高的那個職務。如果對業界有一定的經驗,應該會知道到最後還是需要靠 Domain Knowledge 跟各式管理能力才能發揮軟體的價值,而具備這些能力的人才往往具有更高的價值,而不管職稱是甚麼。不過,未來畢竟還沒發生。所以與其把程式設計當作未來職場上最有價值的技能,倒不如先當作一個對生活很有幫助的技能。而這樣的技能不只在於程式設計本身,更在於背後所代表的運算思維以及解決問題的能力。

良好的環境才是學習的最佳途徑

身為家長,真正該煩惱的是萬一小孩有興趣,該怎麼延續這樣的興趣並持續成長。如果你的小孩運氣好,或許學校就可以提供所需的資源與環境。如果沒有,那還有甚麼辦法嗎?

找更高階的課程,或許可行,但是前提是要剛好有合適的課程。不過實際經驗告訴我們,隨著學習的內容越來越深入,這個方法的可行性會越來越低。因為需求少,開課的可行性就低。如果費用不是問題,當然一對一的課程倒是可以考慮的方式。

另外一個辦法就是自學。現在網路這麼發達,自學的難度確實變低了。以前是怕找不到可以學習的資料,現在則是必須慎選可以學習的資料,以免浪費時間在學習重複或低品質的知識。不過對於台灣的小孩來說,語言絕對是自學時最需要克服的問題。

此外,即使已經透過實體或線上自學相關內容,其實還有一個最大的困難需要克服,那就是環境的提供。既然我們常把程式設計當作未來最重要的第二外語,當知學習外語的最佳方式就是找到一個可以實際對話的環境,而程式設計也是如此。多年來帶領程式設計師的工作經驗告訴我,如果他們學習到的知識無法馬上應用在工作上,即使當時學的再好,之後也很難主動加以應用。必須透過即時且不斷的練習,才能把學習到的知識真正轉化成腦袋裡的”肌肉記憶”。而另一方面,打怪過程中總會遇到棘手的怪物,此時如果能夠有高手可以稍加提點,絕對是事半功倍。再不然跟夥伴一起解決怪物,也是可以學習到團隊合作的重要性。我知道獨立解決問題的能力很重要,所以當然不能老是靠別人的力量打怪。但是除非是永遠只想靠別人力量來打怪的小孩,否則常常交換角色、互相幫助,我認為這些事情對程式設計來說反而才是更重要的。

所以,如何找到一個可以持續應用與提供支援的環境,可能才是對學習程式設計最有效且最重要的考量。

前幾天剛好看到 Scratch 開發團隊分享了學習的 4P,其中有關 Peers 的部分,正好完整說出了我的心聲。

是的,因此我想要建立一個專屬於青少年的程式設計部落。線上的,甚至是實體的。在這個網路的時代,線上部落或許更容易實行。但是對青少年來說,網路的使用並不如成人般方便與無所限制,所以我認為或許更加適合實體環境的形式。如果你對此有任何想法或興趣,歡迎與我聯絡。

Facebook 留言
Print Friendly, PDF & Email
Summary
學完 Scratch 後的下一步?
Article Name
學完 Scratch 後的下一步?
Description
坊間或學校一堆 Scratch 的課程,練習幾個遊戲並做出自己的專題遊戲後,該怎麼繼續學習程式的下一步?又或者真的有必要一直追著這股熱潮?甚麼才是能夠持續走下去的最重要因素?
Author
Publisher Name
Everlearn Studio
Publisher Logo