寫程式要不要天份?這問題其實很難回答。因為光是什麼叫「寫程式」本身就是個
很模糊的概念了。把一個一個已經定義好的函式用程式語言寫出來是寫程式,從設
計整個系統的架構到完成也是寫程式。如果指得是前者的話,well,我想一般人只
要花點點時間都能夠勝任,頂多是寫得好看寫得不好看的差別而已。但如果是後者
的話,需要的不只是天份,還需要很多專業知識。

<背景>
我本身在一家軟體公司當軟體工程師,面試過數十個同樣是來應徵我們公司軟體工
程師的人,在這些人中,不要說是台清交成,拿美國學位的和有十多年工作經驗的
都大有人在。但最後有被錄取的,大概只有 10% 或更低。為什麼?公司用人的標
準高當然是原因之一,但另一個更重要的原因是,我發現大部份的台灣軟體工程師
,連自己在幹麼,或是以後要幹麼,都不曉得。


Computer Science 這門學問,其實從各大學的課程安排就可以看的出端倪。程式
語言的使用只不過是最基礎入門的東西,所以擺在大一,甚至連其他的科系也會開
這些課。再來是一些比基礎稍微再難一點的演算法,資料結構,系統程式。最後是
作業系統,計算機結構,程式語言(PL),編譯器,等等。還有讓大家自行發揮的網
路,多媒體,PR,AI,NLP,等等等。

很多人都以為,只要會使用程式語言,就算是會寫程式。最常聽到的是「哇!這個
程式有三萬行,好厲害!」比較進階的版本是「哇!他可以把人家寫三千行的程式

用一百行寫出來,了不起!」這些算是會寫程式嗎?或許算吧!但是要當個「稱職
」的軟體工程師可是還差的遠了。怎麼說?首先,一個程式的價值,不是在它有多
少程式碼,而是在它的效能,和資源使用的多寡,而程式本身的可讀性和可維護性
也是重點,程式絕對不是越大就越厲害。那把三千行寫成一千行算厲害嗎?也不盡
然。同樣還是要注意效能上的問題。或許別人三千行做的是手動的 loop unrolling
,或許人家硬是可以把時間複雜度從 O(n^3) 降到 O(n^2.7),付出的代價是多了
好幾倍的程式碼,但得到的是程式寫再精簡,也得不到的效能改善。這些東西,都
不是只有一門簡單的 C 語言教學就可以學會的。

為什麼我之前說大部份的台灣軟體工程師連自己在幹麼都不曉得。因為在我面試過
的這些人中,相談不甚歡的人(i.e., 被我用那些「基礎知識」狂電的),十個有
九個會跟我說「我以為你們會問比較實作方面的問題,所以沒準備到」「真不好意
思,這些東西我離開學校太久,已經忘記了」這些人共同的特色,就是認為演算法
資料節構這些東西,只是學校裡的玩意兒,工作派不上用場。錯!這些東西不僅很
重要,而且還是基本中的基本。在軟體業,資源就是金錢,你浪費掉的 CPU 和記
憶體越多,你就等於是在燒公司的鈔票。我承認的確是有不少公司的軟體,不用太
在乎程式效能,只要有良好的市場策略就能成功(我絕對不是在暗指 M$ ),但是
要當個稱職的軟體工程師,這些專業知識絕對是不可缺乏的。

附代一提一個讓我印象深刻的應徵者,這位老兄和他相談也不甚歡,問了很多課本
中教過的演算法都不會,甚至連名字都沒聽過,最後他跟我說「其實我有問題都自
己想,但是我都可以想得出來」沒錯,建構式數學很棒!但是時間就是金錢,九九乘法表還是請你背一下。
arrow
arrow
    全站熱搜

    Assyla 發表在 痞客邦 留言(0) 人氣()