回應業界部份人士對 Coding Bootcamp 常見之質疑
筆者由開始在Coding Bootcamp一行創業以來,固然在教學上得到不少滿足感,始終這一行是為了幫助同學轉行而存在的,因此當同學成功找到一份軟件工程師的工作,滿足感的確是無與倫比。 然而,在這趟旅程之上,常常都收到不少質疑,絕大多數更是來自於業界同行。 因此,本文就集中回應一下,解答一下大家的疑惑。
質疑一:「十五星期四個月時間太短!學Design Pattern 、Algorithm、 Data Structure都唔夠啦!點學得到寫程式!」
筆者認為要解答這個疑問,首先我們要將上面提到的Design Pattern
、Algorithm
、Data Structure
分別準確定義一下。
如果Design Pattern
是指Erich Gamma等作者著作中的所有內容的話,那筆者認同你的看法,四個月不足以學
習所有Design Pattern
,但反過來想,又有多少電腦科學系畢業的軟件工程師在剛畢業時候就可以靈活運用Decorator
、Facade
、Observer
呢?將對高級工程師的要求,放到初級工程師身上,不是很滑稽嗎?
Data Structure
與Algorithm
難有一本經典作為定義,姑且使用維基百科的條目List of Data Structures及相對應的List of Algorithms: Array
、Map
、Set
、Tree
等當然很重要。但問心吧,有多少在職軟件工程師,能夠在不查參考下寫出Priority Queue
呢?Heapsort
的Big O
又是甚麼呢?
A* Search Algorithm
又應該怎樣寫呢?這些都是Data Structure
與Algorithm
的一部份,但大家記得住嗎?記不住的話,還是要重新Google重讀參考,那與一個Coding Bootcamp
畢業生又有何分別呢?
強如Homebrew
的作者,都不記得怎樣Invert
一條Binary Tree
了,難道他也是一個壞Software Engineer
嗎?
質疑二:「不是正規CS畢業,在Bootcamp讀幾個月,點做到Programmer?」
其實Tecky Academy三位創辦人,本身已有兩位不是傳統電腦科學系畢業的,但亦無礙我們本身成為軟件工程師及創辦自己的初創企業。究其原因,正是因為軟件工程師根本沒有牌照制度。比起傳統專業行業如土木工程師、律師、醫生等有牌照考試之行業非常不同。其中原因在於資訊科技發展過於迅速,新舊技術來來去去,根本難以為軟件開發一行定下有意義的考核。因此,在軟件開發世界,從來都是Portfolio為王
,能夠完成project
的軟件工程師,就達至行業最低入行標準。正因如此,僱主才會聘請我們Tecky的畢業生,正因有實際專案作為佐證。
有趣的是,往往口出批評的業界人士,自己也從來沒有經歷過任何牌照考試的洗禮,最接近的考核,也大概只有求職面試時的Code Test
。自己在業界中打滾多年,卻要求後來者要符合正規CS畢業的要求,才算是一個「正統」的軟件工程師,而眾所周知的是,完成一個CS學位起碼須時四年(兼讀制需要八年),這難道不是強人所難嗎?
請注意,筆者並不反對資訊科技界需要發牌制度,只是筆者很懷疑,如果資訊科技界真的有發牌制度的話,不是為難了在職的Expert Beginner
嗎?
質疑三:「現家乜都可以上網學到!洗乜畀幾萬蚊去畀人學啊!呃錢!」
網上教程確有琳瑯滿目之課程,要學的知識也是應有盡有,筆者也認同這個看法。但在網絡世界千萬個課程之中,那個是優秀的課程呢?又有無以廣東話為主的課程呢?
隨便在Youtube 打上Node.js
,就已找到數千數萬條影片。
那一條是最好的呢?學好Node.js
之後又應該如何繼續?這些問題通通都沒有解答。
如何正確做好Automated Test
呢?Integration Test
與Unit Test
又有何分別?這些問題通通都是學習時的攔路虎。
要求一個初學者能夠從中披荊斬棘,最終學會成為軟件工程師所必須的技能嗎? 筆者以自己的教學經驗而言,很是懷疑。
其實在現今資訊世界,古往今來人類之所有知識,通通都在網上可以找到,如果這個質疑成立的話,那所有人應該回家自習,所有學校應該關門大吉,因為網上早已有所有必須之知識了。
質疑四:「工程需要系統式訓練,也要工程道德,不是短短幾個月可以學得到」
這個質疑很有趣,因為據筆者上過的電腦科學課堂來說,其實沒有着墨太多工程道德之類的主題。就以一個軟件工程師常常會遇到的問題為例:Software License
的問題。
基本上筆者所有關於Software License
的知識都是自學得來,GPL License
與MIT License
有何分別?GPL License
的MySQL
可以在客戶那裏使用嗎?諸如此類的問題,
從來書本中都沒有解答,是筆者在工作時自學得來的。筆者在Coding Bootcamp
,可以與學生分享這些真正業界之經驗,也是教授Ethics
的一種。
再舉一例,軟件工程師必須要用到版本控制系統,其中最受歡迎的就是Git
,據筆者所知,大部份電腦科學系畢業生都不理解如何使用Git
,如果連如此基礎的知識都未能掌握,我們真的可以相信所謂工程道德之教育嗎? 況且如果數年的學習都未能學好如何使用Git
,似乎就不是時間問題,而是方法學
(Methodology)的問題了。
請注意,筆者並不認為電腦科學系之教學方法一無是處,筆者認為兩者教學方法各有長處,絕非如批評者所言。
矛盾大對決: CS原教旨派 vs 自學派
在以上回答幾個質疑的時候,不知大家有沒有發覺有兩個反覆出現之論點(Recurring theme),一個筆者歸類為CS原教旨派
(Computer Science Fundamentalists),另一歸類為自學派
(Self-learners)。
CS原教旨派
相信像在Coding Bootcamp畢業或是像筆者一樣半途出家的都是旁門左道,只有從大學電腦科學畢業的才是王道,因此想成為軟件工程師應該去讀電腦科學。自學派
則相信所有所需知識都在網上可以自學,找真人教學是浪費金錢,因此想成為軟件工程師應該自學。
大家發覺了嗎?兩個論點其實是自相矛盾的:
如果只有大學電腦科學系畢業的才是正統軟件工程師,那自學將毫無用處; 反之,如果自學就可以學到所有知識,那電腦科學系又有何存在意義呢?
邏輯學上,自相矛盾的論點不能同真,但可能同假。但很有趣的是,很多批評者卻兩種論點混用,似乎不理解其矛盾所在。
既然如此,筆者也來趁機謾駡一番:連自相矛盾如此基礎的邏輯謬誤都會犯下,這樣的邏輯水平,難道配做一個Programmer
嗎?
更甚者,批評者往往無視以上兩種方法實行之困難所在,要放下工作,重讀四年大學,談何容易?兼讀制八年,更是難以想像。自學的話,要學多久?勤奮而有系統之自學者,大概可以在兩至三 年間達至初級工程師之水平,這只是最佳之結果,相對不夠勤奮或學習無系統的,就往往半途而廢了。
筆者認為,Coding Bootcamp 的存在,其實正是在兩者之間,你首先需要真人教學,打好編程之心智模型(Mental Model),爾後再去自學,才能夠事半功倍,真正達至終身學習之目標。這正是筆者以至Tecky一直以來強調的教育理念。
感言
其實在筆者在科技教育一行中的數年,每當與非業界人士講起筆者的工作時,得到的回應大多是正面的,因為非業界人士大多對科技有興趣,覺得有像我們Tecky一樣的渠道,供初學者入行,是對行業以至社會都有益之事。而最尖刻之批評,卻大多來自業界同儕,筆者本著學海無涯之心,希望藉此改善我們Tecky之課程,不幸的是卻往往遭受人身攻擊、謾駡,因此特此作文一篇,抒發己見。