吳安宇教授提到學校能教的分兩種,一種是content,一種是skill,到底我們具備的,哪些屬於content,哪些屬於skill呢?
很多念資工系學生的說,系上程式能力很強的同學,大都是自己摸出來的,上課很少上關於程式的東西,而實際上我們也看到很多程式能力很強的,根本不是資工系,也不是電機系,為什麼會這樣呢?
程式屬於skill,資工系/電機系大學一年級一定必修<<C語言>>,一下或二上必修<<資料結構>>,至於<<C++>>或<<物件導向>>,資工系屬選修,電機系則屬選修或根本沒開課,至於如MFC,Desgin Pattern,OOA/D,UML領域,屬大三大四或研究所課程選修課程,開在哪一個系不一定,很可能是工工所,土木所,機械所,資管所,資訊所,電機所都有可能。至於其他更實務的,如.NET,boost,ACE,loki,Linux,學校幾乎不會開課,這種都要自己摸了。
C/C++屬於skill層次,這種學校會開課,但也僅限於『師父帶入門』層次,基本的教給你,進階就靠自己摸了,四年大學訓練並不會造就一個程式高手。當你會寫C/C++後,要寫什麼程式呢?要寫影像處理?,還是要寫網路?還是寫作業系統?還是要寫Compiler?還是要寫類神經網路?這些都屬於content,當然資工/電機還學了很多數學,如離散數學,機率,統計,工業數學,線性代數,因為這些數學會用於以上那些content。
再舉個skill和content最易懂的例子,你今天學會了用word排版,這是skill,但卻發現自己不會寫文章,沒東西可以排版,這就是content。所以skill雖高,卻沒有content可以做。
所以我們可以發現,大學和研究所教育,主要是訓練學生content部分,而不是skill部分,主要是 skill無法教,屬於熟能生巧,要靠學生自己花時間去摸,學校能做的就是帶你入門,而content卻可以教,所以大學和研究所安排了這麼多content的部分。
這也是為什麼很多程式高手,並非本科系,因為那些skill可以自己摸,不過他們也有一個特點,雖然很會寫程式,但理論基礎卻沒科班出身的強,因為外系的沒有受過content的訓練,能寫的程式大都是企業軟體或Game,這種比較不需要content,就只要了解企業的business rule或Game的規格即可,但若要他們寫如以上的影像處理,網路,作業系統,編譯程式,類神經網路...等程式,因為他們沒有這些content,所以寫不出這類的程式。
Conclusion
content和skill都很重要,不可偏廢。假如你志在當工程師,skill對content比重約6:4,假如你志在當學者,則剛好反過來,skill對content比重約4:6。就算你志在當工程師,也不能content完全不懂,skill是熟能生巧,最後每個工程師功力都都差不多,你和其他工程師的差別就在content的多寡了。所以就算你是資訊/電機科班的學生,除了好好修課外(content),也必須時時注意實務能力的培養(skill),不能只是『講』了一口好程式,卻寫不出來。