我常遇到學生家長問我:「孩子已經跟愷哥老師學了Python,考過APCS初級了,接下來是不是該學C++?」。這樣的思維模式是,Python比較基礎,而C++更進階,要做更厲害的事情,就得學C++。
這個觀念是不對的。
首先要知道,目前最熱門的AI應用,大部分是透過Python來打造的。而且Google、Meta、Netflix等等大公司的平台,也大量用Python來打造。Python語法簡單易學,但同時也是功能強大、建構科技世界的重要語言。C++的語法比較複雜,雖然執行效率比較高,但是寫起來比較容易出錯。兩者沒有高下之分,採用哪種要視目標而定。
而對於高中生升大學來說,什麼是最重要的?
我在【為什麼是APCS實作三級,其他的不好嗎?】提到,「半年內考到APCS實作三級,把時間省下來拚學測」,對大部分有志電資相關科系的學生,是時間效益最好的作法。
高中生只有1%可以考過APCS實作三級,所以愷哥選擇教學生Python而非C++,目的是減少學習時間,增加學生考過的機率。大部分高中生能考到APCS實作三級就夠了,接下來就專心學測,或探索其他興趣。
如果確定對程式很有興趣,天份也適合,再考到APCS實作四級,已經是高中生前0.2%程式實力,可以特殊選才上中字輩資工。以上都做到了,這時候才有必要改學C++,以此去同時挑戰APCS實作五級、資訊學科能力競賽、及資訊奧林匹亞。
「先用Python考到APCS實作四級,再學C++」,這就是愷哥建議,高中生改學C++的最佳時機。
而有些學生會想,把「學過更多種程式語言」當作學習歷程。這其實是無效的,因為每個人都可以「學過」好幾種語言,學一天就算學過了,怎麼證明你比別人更厲害?以APCS的成績來申請大學,只看級分不看語言,因為教授都知道,程式語言之間是互通的,並沒有高下之分。用Python考過一次實作二級,再用C++考過一次實作二級,是毫無意義的,不如集中精力拿到實作三級。就如同考到全民英檢中級,再去考一個多益棕色證書,並沒有什麼意義,程度是看證書的等級,不是看同等級有幾張。
實務上很多學生來問我改學C++,是因為學校派他們去比資訊學科能力競賽。這種狀況很常見,因為我的學生們跟著我學到APCS實作三級,甚至還在二級,就能在校內程式競賽獲獎,會被勸說進校隊培訓。而資訊學科能力競賽採用C++,學生就會面臨要雙軌學Python跟C++,還是放掉其中一邊。
很殘忍的事實是,能夠晉級資訊學科競賽全國賽的,都是屈指可數的少數幾個明星高中,有戰績優異的程式社團,得過獎的畢業學長來帶。所以我都建議學生,如果被勸說進校隊培訓,先問清楚該校的歷史戰績,若沒有人進過全國賽,一律建議婉拒。
我在【想要特殊選才資訊科系,該走APCS、資訊學科競賽、資安競賽、科展?】有提到,要有APCS實作四級以上的實力,才有機會晉級資訊學科能力競賽全國賽。在此之前,先專心拚APCS會最有時間效益,如果拿到了四級,再改學C++拚全國賽,也完全不是問題。
「可是我去參加資訊學科競賽,即使晉級不了全國賽,不也是很好的學習歷程嗎?」,學生問。
不是的,每個人都時間都有限,很可能會得不嘗失。有些學生中級班跟我學到一半,就把我課程放著,跟著校隊培訓,然後APCS只停在實作二級,資訊學科能力競賽也沒有得名,兩頭空。但若是好好的把我的中級班上完,APCS實作三級幾乎都會拿到,這比「代表學校參加過資訊學科競賽」,在學習歷程上更為有利,因為APCS的成績,包括APCS組、資安組、特殊選才等等,在各種大學招生簡章上,都是明文採計的。如果學生真的捨不得放棄校隊的經歷,那就雙軌進行,至少APCS實作三級先拿到。
「如果照老師建議,先專注考到APCS實作四級再轉C++,學了好久的Python丟掉重學,不會很浪費嗎?」,學生再問。
不會,大部分人不理解程式語言,以為跟人類語言一樣,學英文花好幾年,學德文再花好幾年,分別背幾千個單字文法。但程式語法並不是這樣,大概記幾十個單字文法就夠了,真正困難的是運算邏輯,而運算邏輯是跨程式語言互通的。愷哥在初級班就幾乎把需要的語法都教完了,中級以上教的主要是運算邏輯。如果可以用Python考到APCS實作四級,多學C++語法也只要一周,真正困難的是前者,而不是後者。學生該擔心的是實作四級只有0.2%的高中生拿的到,完全不用擔心轉C++要學很久。
愷哥之前已經有幾個學生,後面轉到C++、考到APCS實作五級、全國賽獲獎、特殊選才上到頂大資工了。但他們花在程式上的時間,學期中每周要10hr以上,寒暑假加倍。有這樣天份,且願意犧牲時間的學生,都是少數中的少數。對於絕大多數的學生,不用一開始就想太遠,先拿到階段性成果,再看自己的天份、時間、跟課業統籌規劃,才是比較合理的策略。
歡迎加入高中生學程式FB社團、以及愷哥電腦科普頻道,跟我一起學程式、學人生。【愷哥APCS程式班】熱烈招生中喔!