跳到主要內容

發表文章

贏在起跑點,或者選對跑道?

最近女兒拿了一張補習班的傳單回來,是所謂的"國一先修班",也就是小學升國中的那個暑假,先去補習班學國一的課程。不免俗的,這類的傳單都會寫著"贏在起跑點"。 經常關心教育的家長們都會聯想到這句話: "贏在起跑點,輸在終點線" 簡單舉個例,如果普通人跟馬拉松選手比賽,要從台北到高雄,就算普通人先偷跑100公尺,贏的那個還是贏,輸的那個還是輸,對結果沒有影響。 有些人會辯駁:「不先偷跑也沒辦法啊,至少提早努力,還是可以少輸一點啊」。但是,如果無法扭轉勝負,少輸一點的意義在哪?努力當然要努力,但只有事先起跑這一個選項嗎? 如果是我,一定先做個短期打工,賺個一千多塊,然後買高鐵票坐去高雄。 或者,我根本不跟馬拉松選手比,而是去參加游泳比賽。 譬喻歸譬喻,我們用真實的人生來看這件事。我在念碩士班跟博士班的時候,雖然是不同的指導教授,不約而同的都跟我講了類似的話:「我以前的同學, 成績最好的當了教授,成績最差的當了老闆 」。 當教授那樣的人格特質,就是踏踏實實的馬拉松選手,就著清晰的道路,持續不懈的往前跑。 當老闆那樣的人格特質,靈活不設限,能夠跳脫框架思考,跑步贏不了就去打工買票,陸上的贏不了就去玩水上的。 兩種都是人生的贏家,都很不錯,重點在於選對適合自己的跑道。 "贏在起跑點不一定會贏,但是選錯跑道一定會輸" 我自己是不會讓我女兒去補先修班的,先修班也就是把課本提前兩個月學過,到學校再重複一遍而已,以漫長的人生來說,一點點的課本範圍重複學兩遍,這好處實在微乎其微,不如讓孩子拓展學習領域,嘗試不同的跑道。 比較好的安排,是對他們未來升學跟人生都有幫助,但不是重複學習。 我給孩子的安排,是在暑假時,固定運動,並參加英文營、作文營、學程式。學英文是沒有範圍的,與其相同的課本內容背兩遍,不如參加營隊做一些生活應用。作文也同樣是沒有範圍的,多閱讀、多撰寫,練習思考跟表達,對升學跟人生都有幫助。 學程式跟升學的關係有三個面向,一是訓練數理邏輯上的精確性;二是 APCS檢定 在申請大學時列入評分採計;三是做一個好的Project,在甄試時相當占優勢。這方面的好處,我在 APCS程式檢定的本質是什麼 這篇文章裡面有比較詳細的說明。 學程式就是學習運算邏輯,首先...

APCS程式檢定的本質是什麼?

APCS(Advanced Placement Computer Science)是由教育部舉辦的一項程式能力檢定,主要用來檢定高中生的程式能力,作為申請大學入學的重要參考,官方資訊可以參考 這裡 。 若高中生有志申請大學資工、資管科系,APCS成績相當重要,大多數資工、資管科系有獨立的APCS組。以109年度的臺北大學資工系為例,APCS組相較於一般組,在學測上的要求少了九級分! 而即使是其他科系,APCS的成績能用來證明學生的程式能力,不管在任何科系的甄試方面,都是很大的加分,簡單的來說,可以把APCS視為「程式界的全民英檢」。關於APCS的評分及入學規定, 這篇 寫得相當清楚了,我在此不贅述。我要探討的是,APCS的本質到底是什麼? 我有個做教育的朋友說:「我不喜歡APCS,它的題目太刁鑽了,只是逼高中生去補習而已,又是一個填鴨式教育。」 我本身是交大資工博士候選人,並在資訊業界打滾了十幾年。APCS實作滿分是五級分,我敢斷言若是全台灣資工系的畢業生來考,差不多平均落在三級分左右。但高中生如果要錄取台清交資工APCS組,至少要考到四級分。 所以高中生要考的比大學生還高,才有辦法入學?是不是什麼地方搞錯了 是有一個地方搞錯了,許多資工系畢業的學生,根本不會寫程式就混畢業了。 他們一開始就不應該去念資工系 。 108課綱的精神是適性發展,猴子就應該去爬樹、魚就應該在水裡游,逼著魚去爬樹本來就徒勞無功。APCS不應該人人去考,應該要對程式有興趣,未來希望寫程式改變世界的人去考。APCS的考題安排很有鑑別度。如果一般有邏輯的高中生,認真學的話要實作三級分不是太難,有天分的可以到四級分。五級分(滿分)真的很難,過往紀錄只有約1%的人考到,很可能裡面多半是老師、或者資訊奧林匹亞的國手。 我並不會鼓勵學生把時間拿來拚滿級分,我認為三級分的程度,就足以寫一些有用的程式了。當學到APCS三級分的程度,就應該用心觀察生活周遭有什麼問題,自己做一個project來解決,”學”的目的是為了”用”,不是為了測驗。而我讚揚108課綱的地方在於,如果你能用的好,就能拿它來入學。 當其他同學的自傳寫著:"疫情期間當志工發放口罩",你寫的是:"開發口罩地圖app,並獲萬人使用",誰會被大學教授錄取?! 開發口罩地...

學APCS程式檢定對未來有用嗎?

有些朋友問我,學APCS除了升學以外,對未來就業之類的有用嗎? 我的觀點是 學APCS有用,只學APCS沒用 會發出這種疑問的,多半對APCS的題型有相當了解了,因為APCS要考滿級分真的很難,對於演算法要有相當深刻的理解,而這樣的熟練度,大多數的電腦工程師在他的職業生涯都用不到。 大部分的工程師不需要把Dynamic Programming、Greedy Algorithm玩得很熟練,能夠在30min之內解一題;只需要在程式效能不足時,知道有這個概念,然後去翻翻書,花個幾天去解它都沒關係。甚至大部分工程師,只要有能力寫一些”膠水”,把幾個現成的元件”黏”起來就好了,高深的演算法很多都有現成函式庫了,不太需要自己寫。 別誤會,我不是說這樣的工程師很遜。相反的,有能力用現成的元件,有效率的組成一個有用的系統,不要重複發明輪子,才是正確解決問題的方式。 所以學APCS對未來有用嗎?學到實作三級一定是用的到的,如果你有天分隨手考到實作五級當然很棒,但不是人人都有必要硬上五級,時間是世界上最貴的東西,應該花在更有意義的目的上面。 找到真實世界的問題,寫程式來解決,才是真正有用的能力 我 前面一篇文章 有提到,寫一個”口罩地圖App”就是很好的例子。若我要帶一組中學生來做這件事,大概有以下步驟 發掘問題 用戶訪談,確認需求 詳列規格書,把功能定義明確 小組分工,開發以下元件  使用政府開放的口罩資訊API  使用Google Map API  設計使用者介面  使用Web技術(JavaScript、CSS、HTML5),將以上黏成一個系統  利用一些工具,把Web系統包成App  宣傳這個App,讓更多人知道來使用它  收集用戶回饋,持續改善  只學APCS的學生,辦不到這件事,不學APCS的學生,也辦不到這件事。 開發”口罩地圖App”是一個簡單的例子,但真實世界裡面,光是”發掘問題”都不簡單。舉例來說,譬如參加棒球社的同學,能不能開發一個系統,把球員的數據輸入進去,幫助教練排出最有效的棒次?譬如說家裡開餐廳的同學,能不能開發一個系統,安排桌椅跟行動路線,發揮最高的坪效?社區偶爾有陌生人闖入,能不能開發一個AI系統,辨識陌生人並發出...