原文恕刪
其實這個問題還滿有趣的,最近的確是一堆文組首選都是學寫Code
我想最大的根源還是Programmer的需求缺口太大 + 程式入門的門檻降低
/*
這篇有點長,有點講古的感覺,最後會提一下學程式的兩三事,不想看講古的推薦跳最
後一Part看就好。很多是個人的經驗和感受,如有不對的地方也歡迎各位前輩多多指教。
*/
// 正文開始
首先來說說Programmer的需求,主要還是隨著時代的演進,幾乎近代的產業大變革都與
程式相關,像是工業4.0 / IoT / AI / ML / 大數據等等... 這幾項帶動了科技業的大幅
發展,自然也需要大量的Programmer來進行開發,但問題Programmer的產出科系CS其實是
近10多年才熱門起來的,這也導致供給嚴重不足,在美國最缺人力的時期,甚至是只要有
一點名氣的學校,CS還沒畢業的就一堆公司在搶。但人力還是不夠,怎麼辦呢? 既然國內
填不滿,那就搶國外的吧~ 於是美國就開始狂搶海外的軟工菁英,後來中國發展起來了,
自己也是狂搶人。
到後來外商又覺得把人抓到自己國內太麻煩又量少又貴,反正軟體開發的特性就是不用實
體,乾脆把研發也設在台灣方便招人,此外對於很多新創來說,台灣的工程師更是配合度
高又便宜好用,於是這幾年可以看到外商/新創瘋狂在台灣設點與擴編,但台灣自己產業
一樣在經歷變革的浪潮(只是比較晚),自己也有很大的人力缺口,大家也知道依照台灣企
業的尿性,薪水上要尬贏外商很難,就算開出差不多的薪水,也因為傳統的加班凹人得過
且過的文化導致很難搶贏外商,這就導致人才外流嚴重,但缺口還是要想辦法補,怎麼辦
? 於是就只能降低標準來招募,對於一些中小企業來說甚至只能找一些非本科但好歹有點
經驗的慢慢去養成,這就是大家目前看到的景象。
再來程式入門門檻的降低是怎麼回事呢?
其實一開始程式語言的入門並沒有那麼簡單,像是早期一開始學C或JAVA,可能變數型態
就可以讓一堆初學者像是在看天書一樣,光是一個字串切Token就可以搞爆一堆初學者,
更不用說後面的控制邏輯、指標、作業系統特性再到物件導向特性等等...
但程式語言畢竟是人虛擬出來的東西,背後並沒有像是傳統電子學電路學是需要遵守許多
定律或物理性質的,加上程式的人力需求大增後,為了讓程式能開發得更為迅速+擴增企
業影響力,越來越多的公司投入開發Open Source的Libary、Module,同時也鼓動開發人
員加入Open Source的行列,後來就演變成Framework的形式,讓程式開發人員省去大量從
基礎做起的時間,同時也幫忙Handle好許多在以前需要很小心的地方(例如Thread的排程
、記憶體的Locate或是Http CRUD的底層處理等等),快速就能產出對應的程式。
再加上新式程式語言的興起,像是Python,簡化了大量的複雜語法與Script式的語言特性
更是讓程式入門變得更為容易,而這種類型的語言最被為詬病的效能問題也隨著同等價位
的硬體效能快速提升後也慢慢變成沒那麼嚴重。
除此之外,程式碼具有非常高的可攜性與延伸性,伴隨著程式人力的擴增,網路上的教學
資源豐富程度也隨之急遽提升,學習程式變得看似十分簡單。
簡而言之,程式的門檻降低就真的是因為站在巨人的肩膀上,前人種樹後人乘涼。
// 跳過上面講古的,歡迎從這邊開始看
Q. 所以學程式真的相對簡單又好找工作嗎?
我的答案是Yes,就像上面說的,程式入門已被前人簡化許多,加上大量的人力缺口,
所以學程式後轉職相較其他專業來說沒那麼難,待遇相較起來也不會太差。
Q. 那這樣學程式轉行後會有什麼問題嗎?
問題其實是中長期的職涯問題,雖然程式入門簡單,但要寫得好卻是需要大量的知識與經
驗累積,這部分其實比很多專業的提升還難不少,一個經驗豐富的Programmer跟新入門的
Programmer差距是誇張的大,舉例來說Programmer新人De一個bug要2周還不見得搞得定,
但強者可能一小時就解決... 而在程式開發與品質更是難以估計強者與新人的差距。
再來,程式的技術日新月異,改朝換代的速度快得嚇人,你必須要一直不斷地學習新的東
西,適應新的理論甚至是新的語言,這對很多人來說其實很累。
最後則是最麻煩的,程式並非你學了就能勝任任何跟程式有關的行業,更為接近現實的是
程式就只是一個工具,猶如畫畫時用的畫筆,你可以用畫筆畫出任何畫,但問題是如果你
想畫出能賣的畫,就不是只有拿畫筆起來畫那麼簡單,你需要有很多的知識、理論甚至是
靈感才有辦法畫出好看能賣的畫,程式也是一樣的道理,程式可以人人都會寫,但要把
程式應用在各個領域上是需要很多知識觀念與思考邏輯的結合才有辦法做得出好的成品。
一旦你沒辦法在某個領域成長或是跟上技術的腳步,那就意味著未來職涯的成長空間將會
十分有限,可以預期的是也許未來有一天相關的人力需求會飽和,這時候會被淘汰的會是
誰呢?
Q. 常常聽到寫程式是需要天分的,是真的嗎?
答案是Yes也是No
其實寫程式的思考邏輯和學數學不太一樣,在我看來學數學是講究因果邏輯,也就是從A
導到B從而證明C,而程式的思考邏輯更偏向所謂的抽象化思考,像是資料輸入A經過流程B
中的格式轉換最終產出C資料結果,這整個過程能在腦袋中構思組合出來這類的抽象化思
考能力才是所謂的程式天分。
那麼寫程式到底需不需要天分呢? 一般來說程式入門時,天分只是反映在學習的速度快慢
,有天分的人總是學得超快,沒天分的人就注定要花更多時間學習,但最終不論有無天分
都還是能學會寫程式,時間長短而已。若是以學程式的角度來看,天分是加分但非必要,
所以答案是No,當然學習時的痛苦程度也會有差XD 很多人中途放棄就是學太久太累太煩。
但若是以要把程式寫得更好,更漂亮,邁向我們口中的強者之路,那天分就非常重要,具
強悍的抽象化思考能力註定天花板會更高,沒有天分的人在學到某個程度後想要再有大幅
度的進步會十分的困難,所以以這角度來看答案是Yes,這同時也會反映在專業職涯發展
上,當然職涯發展的因素很多,只是若是以專業為主要發展基礎,那麼有沒有天分影響程
度就會很大。
// 學習雜談
最後談談常常有人在討論學習是否倚靠CSDN會快很多,我認為畢竟CSDN大多是中文,對於
閱讀和學習來說會簡單很多,但CSDN有很大的問題是太過速成,裡面很多就單純是快速
翻譯原文的片段,或是東湊西湊的縫合怪,甚至是單純搬運工抄別人的加上自己一點無關
緊要的註解,很多東西的原理連作者都一知半解而已。
所以如果是要追求快速做出東西,能動就好,多看點CSDN應該可以滿快就弄出來的,但如
果真的認真想要學習真正的原理和完整的技術我還是建議英文學好一點,多看一下
Stack Overflow 之類的問答網站和官方的API說明文件與論壇會比較有用。
// 大概是這樣,希望以上能給對於想入門程式或是剛入門程式的人有一點幫助。