AppWorks School 之前世今生
加入 AppWorks 後,我直接參與了 AppWorks School 的創辦過程。在這個過程中,我們對於 “程式設計” 這項技能以及 “訓練程式設計人才” 這個題目的範圍,有諸多辯論。基於可行性,我們已經將執行的範圍收斂至一定的程度,但截至我寫這篇文章之時,許多討論仍在進行中。這裡,我想要聊聊參與這個過程中的一些想法。
緣起
AppWorks 之所以想要創辦 AppWorks School,主要是因為我們體認到 Internet 這個行業需要大量的程式設計人才,而目前人才市場上的供給遠遠無法滿足團隊的需求。當然這肇因於一些長久的結構性問題: 多年以來我們的理工教育向製造業傾斜,而三十多年來電子業的輝煌成積,讓現在 Internet 這個軟軟的行業遍尋不著適用的人力。
計劃開始之初,我們訪談了許多 Internet startup 的 CTO,也就是用人的單位。我們想具體的知道,Internet startup 需要怎麼樣的人力 ? 如果需要會寫程式的人,是 app、網站、還是其它 ? 網站的前端後端需要的比例如何 ? 如果只能開發第一個 app,要先做 iOS 還是 先做 Android ? 有沒有複雜演算法設計的需求 ? 協同工作能力的需求如何 ? 得到的結果相當發散: 有人需要 iOS 的人力,有人需要 Android 的人力,web 的市場需求雖然已經略為降低,但不管前端後端都還是有一定程度的需求,甚至還有寫 ERP 的人力需求。以上這些需求只有一個共同點: 就是他們都需要程式設計的人力。看起來這是一個大坑。
接下來,我們開始思考,要如何在短期之內生出這樣的人力,去填這個坑。
AppWorks School 一開始的設定是以一期三個月、每週超過 70 小時的全時投入為命題 ,再加上我們必需在這個框架下思考: 如何用最有效的方式訓練出可用的人力。而可用,究竟能做到好用還是堪用,我們也還不是很有把握。
於是,我們從 AppWorks 的校友中找出 “非資訊相關科系畢業但自學成功” 的人加以訪談,想要了解他們如何在沒有相關經驗或背景的狀況下,自學程式設計並達到一定的程度。
程式設計的環境不斷地在演化, 而且它的樣貌多變到像我這樣的老兵都快不認得了。
複雜的環境
我開始學寫程式的那個年代,還沒有視窗,程式也不是 event-driven 的:BASIC 從第一行開始跑,C 語言從 main() 開始跑。程式寫好只要按下 run,馬上就看到結果。
但是現在的程式設計環境非常的多變: 要學寫 PHP 網站程式你至少得會把 Apache 跟 PHP 在一台 server 上架起來;要學 Ruby on Rails 你大概會跟環境設定搞上三天三夜;要學寫網站後台你還得要有資料庫可以用;跟以上比起來,下載 Xcode 並裝起來大概是最簡單的了。
這些惱人的障礙說大不大,卻往往是初學者過不了而導致放棄的原因之一。
而系統環境的愈趨複雜,也是現在踏入程式設計的一個門檻。第一代的 Windows 程式設計環境,要寫大概兩百行程式碼才能開出第一個視窗。
這是大家學寫 C 語言都會看到的第一支程式:
這是 Windows 下用 Win32 API 寫的第一支程式 (的一部分,我沒有全部貼出來):
當年不知道多少人被這個幾百行的 “第一支程式” 嚇到,只不過為了開個視窗、顯示一行 “Hello, world!”。
所以後來開始有了程式設計用的 framework,它幫你決定好整個程式的結構,你只要在裡面對應的位置填上你想做的事情就可以了。
Framework 是兩面刃
Framework 把程式設計從問答題變成填充題,讓程式設計師不用從輪子開始造車,而讓你用各式各樣的零件去拼出你想要的車子。某些類型的 framework 甚至只是讓你做做車身彩繪,你就能擁有一台自己造的車。
這樣的開發環境除了大幅提高程式設計師的生產力外,也降低了入門者的進入門檻。但代價就是,很多人用了一輩子的 framework,卻始終不知道車子是怎麼跑的,引擎是怎麼發動的。如果要他從頭打造一台車,他甚至不知道輪胎要跟誰買。
當然我們不期望這個世界人人都會從輪胎開始造車,或是精修各式引擎,但大量藉由這樣的路徑所培育出來的程式設計師卻普遍缺乏這能力。
一個優秀的程式設計師仍然可以藉著 framework 站在巨人的肩膀上入門,但到了某個程度時,他應該會發現自己的不足,而開始想要拆解引擎,一窺 framework 背後的奧秘。
動機是關鍵
如果檢視我自己的學習歷程來找出一些脈絡的話,我想,動機是學習最重要的關鍵。
而我的動機,大部份是來自於想要做出某個東西,這和我們跟 AppWorks Accelerator 校友們訪談的結果不謀而合。很多校友們自學 PHP 或 Ruby on Rails 時,都是因為心中已經有一個想法,想要打造某個網站,才開始努力朝夢想前進的。我也是為了寫一支精美的燒錄程式,才決定跳入 VB.Net 的。
不過,像這樣的學習路徑雖然可以做出 “會動” 的東西,但它背後還是有一些潛在的問題。如果寫程式的人沒有受過完整的基礎計算機科學訓練,如資料結構或資料庫理論這些科目,等到系統複雜到一定程度時,架構可能就會出問題。如果寫程式的人沒有受過演算法的訓練,他就不可能設計高階一點的題材。如果寫 firmware 的人不懂訊號處理,你是要他怎麼寫 DSP 的程式呢 ?
畢竟資工系的學生有著紮實又完整的四年訓練,我們不可能在短短的十二週裡就讓初學者變成碼農,還要保證可以種出金黃飽滿的稻穗。
我們能做的,就是幫助這群想踏進這個領域的人,跨過入口處的障礙,並且指引一條明路。至於在這條路上能走多快、走多遠,並不是 AppWorks School 的責任,而是對他們的期許。
你準備好要學 coding 了嗎 ?
近期留言