回應業界部份人士對 Coding Bootcamp 常見之質疑
2020-11-06
筆者由開始在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之課程,不幸的是卻往往遭受人身攻擊、謾駡,因此特此作文一篇,抒發己見。
留言
閱讀更多
如何成為 Programmer (一):業界景況
2018-10-23
問如何成為 Programmer 之前,首先要問,到底為何要成為 Programmer 呢?IT 狗有前途嗎?真的是 HONGKONGNOIT 嗎?
如何成為 Programmer (二):其實入行不難
2018-11-02
續上一篇講及 Programmer 前景不錯之後,可能你也心思思想投身這個行業,但倘若你本來不是 CS Degree 畢業,也不是理科生,你還以為 Programmer 或 Coding 都與你無緣了。不過,根據很多的調查發現,原來這種種背景都絕對不是問題!
專家級新手
2019-03-19
今次要介紹的,是一個非常常見之現象,不論你是學寫程式、學做甜品、學寫文章,又或是練習球技、體能訓練等,都會經常窺見其身影。 想像一下:你的朋友問你:「你的駕駛技巧好嗎?比較起其他司機來說如何?」如果你本身有駕駛執照,但是不常常駕車,大概你會回答:「中規中矩吧,平均水平」;經常駕駛的人,因為經驗豐富,會覺得自己是中上甚至良好之水平。然而,這個想法人人都有,卻與現實完全相悖:因為任何羣體之中,必然有一半個體在中位數(Median)以下,而一項經典的調查發現,八成的司機都認為自己的駕駛水平在平均之上,這明顯代表在駕駛技術的世界上,大部份人都有自視過高的問題,也代表其實大多數司機,無法準確判斷駕駛技術之高下。
軟件工程師成長手冊
2019-04-29
筆者經常都强調軟件工程師有高下之分,不論技術或是解難能力都可以隨時日改善,亦曾大力鞭撻專家級初學者的無知,對軟件開發造成破壞。 初出茅蘆的軟件工程師及編程初學者想要改善自己技術,在茁壯成長的話,對自己技術層面有一個準確評價是至關重要,以免墮入「識少少,扮代表」的認知偏差。
學寫程式為何甚艱難?
2019-06-13
如果你想學寫程式,在網上搜尋一下,不難找到不少「輕鬆學習XXX」、「YY天輕鬆學會Python」的教材及影片;去電腦書店逛一圈,很容易就可以找到「七天學會Java」等的書籍,這些教材其實都在推廣一個信念,也就是: 學寫程式很簡單,人人都可以學會。 筆者對此信念後半部深表認同,但是對前半部所謂「學寫程式很簡單」,卻真是不敢苟同。
學寫Code失敗之四大原因
2020-03-21
不知不覺間,筆者從事編程教育已踏入第三個半的年頭:在這段時間之中,見證了二百多位同學由編程初哥開始,經過十多星期的努力、挫折、合作,最終成為專業的程式設計師。當然,在這段時間之中,筆者亦見證了一些學寫Code失敗的情況,固然每個人的天份才能有所不同,有些同學的思考方式天生就與編程較為契合,有些同學則要花九牛二虎之力,才能成為一個專業的程式設計師。 因此,筆者由數年的觀察所得,發現學寫Code失敗的同學皆有一些共通點,因此希望在此分享,如果你有意踏入資訊科技一行,或是想報讀我們Tecky的課程,不妨留意一下自己編程有否這些自己不察覺的問題啊!
要數學好,寫Code先會好?
2020-07-17
有一個非常常見的問題,筆者不論在日常教學工作,或是宣傳活動之中,都經常被問到。這個問題就是:「我的數學不好,可以學習寫程式嗎?」一開始筆者都不以為然,以為只是大眾對程式設計師眾多誤解中的其中一個,後來被多問幾次後,發覺為數不少的行外人,都認為寫程式的人,數學必然非常優異:反之,數學不濟的人,則絕無可能成為軟件工程師。 這個印象乍看之下,好像有點道理,平常遇見的軟件工程師之中,很多都是中學時理科班出身,大學學位即使不是電腦科學(Computer Science),也會是其他工程系(Engineering),或是其他純科學系(Pure Science),甚少會遇見出身文學(Art)相關學系的工程師。這不是正正就是證明了這個數學好,寫程式才會好的現象嗎? 筆者我本身也是一個類似例子,我本身在大學是主修物理、副修電腦科學,物理系本身是數學系以外*最多數學計算*的學系,這看來也與這個現象完全符合啊!