本文作者 Nick 是加州州立大學電腦碩士,畢業後在矽谷工作,至今軟體經驗超過三十年。Nick 在十四歲時自學程式設計,當中遇到很多問題與困難點,因此非常了解初學者的痛點,在此與大家分享學習程式語言的訣竅與方法。
Q:你好,可以簡短的自我介紹一下嗎?
A:你好,我叫做 Nick,已經在軟體這個產業超過 30 年,早期是軟體工程師,後來變資深軟體工程師,然後變超資深軟體工程師(笑)。無論是矽谷科技公司、大公司、小公司、還是外商我都待過,後來自行創業到現在。
Q:什麼是 side project?這到底是什麼意思?
一般來說,每個人都會有一個正職,例如是一份工作,還是學生要去上學,或者家庭主婦要忙家務等等。在這個正職之外,你還想要做一些事情,就可以叫做 side project。
Side project 有很多種形式,不光是寫程式而已,尤其在美國很多人喜歡在工作之餘做一些自己有興趣的事情,例如有人把一台 20 年老車改裝得很漂亮,還有一個小女孩跟爸爸一起打造了一架飛機等等,這些都是 side projects。我之前做的一個新聞閱讀的 App(愛瘋誌), 那就是很棒的一個 side project。
Q:為何 side project 很重要?
因為光看書或上課學到的東西有限,很多時候要自己動手做才會真的懂。而且當你還沒找到理想工作時,side project 就是讓你累積經驗、展現能力的最好方式。
有時 side project 也可能演變成為一個賺錢的生意。例如之前做的新聞閱讀 App 讓我一個月多出五萬多的收入,還有 Instagram (IG) 的前身也是 side project ,IG 的創辦人凱文本來是做行銷的工作,但他想學寫程式,於是在週末時間就用 side project 練習寫程式,其中分享照片的功能很受到喜愛,最後的成品就是 Instagram,後來臉書以 10 億美金買下 IG,所以千萬別小看 side project 的意義與可能性。
Q:請問你是本科生嗎?你覺得非本科生可以學程式設計嗎?
A:念軟體的本科生應該指的是資工系吧?但我不是念資工,會進入軟體產業單純只是覺得好玩,因為很多男生都愛打電動,打久了會去想電動怎麼做出來的,然後也會想要自己寫個遊戲出來,當初就是這樣而開始接觸程式。一開始當然覺得很難,買了電腦書看半天看不懂,也有去補習班,也是聽不太懂,但因為我有興趣,我就一直學下去,很奇妙,後來就忽然融會貫通。我覺得個人要有興趣,有興趣什麼都學得會,沒有人一生下來就會寫程式,還不都是要去學。本科生的優勢就是學校逼你學,非本科生就是要有興趣才學得會。
Q:所以唸資工系沒什麼用囉?
A:(笑)也不能這樣說啦,學校還是有一套系統在教,也有比較多理論。你念這些理論一開始會覺得很虛幻,要等到真正在工作上與實務結合你才會真正理解。不過學校教的東西自己都可以找到資料,可以買書自己來看,例如軟體工程、資料結構、TCP/IP網路,反正工作時會遇到,一面工作一面學,自然而然到最後還是會了。而且你知道嗎?我也遇過資工系畢業卻不會寫程式的啊!
Q:軟體工程師好找工作嗎?
A:我個人覺得非常好找工作,而且隨著時間薪資也一直往上。軟體工程師的薪資 range 很廣,三、四萬有,十幾萬也有,就看你的能力到哪。你如果只值五萬,卻要找十萬的工作當然不好找。面試時一定要拿出自己平常做的 project,可以把一些程式碼放在 GitHub,一方面可以讓對方知道你對寫程式很有興趣,這是一個 big plus(編註:大加分),另一方面可以讓對方看你寫的程式碼,寫得好比你說破嘴還有用。
Q:軟體工程師是常常加班、容易爆肝的工作嗎?
A:我很少加班,如果加班都是因為忽然要趕一個案子,偶而才會出現,或者有時是因為我很想把一個問題解決,所以過了下班時間我也不知道,沈浸在其中。而且軟體工程師厲不厲害差很大,可以差十倍以上,不厲害的常常加班爆肝不代表厲害的也要加班爆肝。如果是公司文化或者主管問題,換工作吧,現在科技業薪資福利、上班條件都越來越好了,但是進不進得去好公司就是自己要對自己負責的。
Q:你對軟體工程師的薪水滿意嗎?
A:如果我說我覺得很滿意,會被打嗎(笑)?軟體工程師的薪水一開始沒有很高,三、四萬而已,但是就像我剛說的,range 很廣,往上到十幾萬都有,不像很多行業薪水天花板很低,例如小七店員做得再久,不上大夜班的情況可以到五萬以上嗎?軟體就沒有這個問題,而且更棒的是,軟體直接看到是寫程式的能力,有時年資很輕也可以有很不錯的薪水,我在29歲時,月薪就達到9萬5,這還不包含股票和紅利,週休二日,彈性上下班,你說我能不滿意嗎?最近看到一些新創軟體徵人的公司(例如 DCard),對於 iOS 工程師開出的年薪都在百萬以上,所以機會是有的,就看自己是否 ready。
Q:寫程式從完全不懂到學會,需要多長時間?
A:什麼叫做學會?軟體這條路很長很廣,會一直處在學習的狀態,沒有學完的一天,也沒有全部學會的一天。對於初學者來說,先把程式語言的基礎學會,我就認為是學會了,再來就是不斷學習電腦軟體相關知識,例如網路、資料庫、UI等等,一直堆疊上去。只要基礎學好,學其他東西就是做中學,學中做,自然而然的事情。那什麼叫做學會程式語言的基礎?其實很簡單,例如寫出一個猜數字幾A幾B的遊戲,能夠充分了解變數、Array、控制迴圈、函數這些基本東西,這大概需要半年到一年的時間。想要完全自學可以,但是軟體東西很多,很多人會不知道從哪開始,有種被大量資訊淹沒的感覺,所以有個老師引導是很重要的,有問題就問到會,不要不好意思。我以前學習就是會不好意思問問題,哎~沒辦法,這是台灣教育的通病,不敢在課堂上問問題,變成繞了許多路。
Q:寫程式需要會演算法嗎?會用到很多數學嗎?
A:我也常常看到網路有人說想學程式先把演算法學好吧,我覺得這有誤解。軟體領域很多,並不是所有都需要用到演算法或者數學,有些的確需要用到,例如搜尋引擎、AI 或者某些模組需要用到。我個人是不懂任何演算法,還不是做了十幾年的軟體工程師,因為軟體的領域太多了,至少有一半甚至更多跟演算法沒什麼關係。
Q: 你覺得成為好的軟體工程師需要些什麼?
A:我覺得就是要有興趣,沒別的。有興趣,什麼事情都做得成。
Q:對於想要進入軟體這條路的讀者,你有什麼建議?
A:我常聽到什麼軟體是條不歸路,進入要深思之類的話。哪一行不是一條不歸路?如果什麼都做很淺,會有發展嗎?在那裡一直 complain 只有兩三萬一個月,那就是因為沒找到你的不歸路。我這二十幾年來從來沒有覺得這是什麼不歸路、後悔之類的想法。我還覺得當時學程式是我人生中做得最對的一件事情,因為只要你做得好,軟體這條路還算滿好走的,薪資好又輕鬆,這是我個人的實際經歷與感受。而且現在很多東西都數位化,都需要用到電腦,就算之後轉行或者自行創業,懂軟體真的可以幫到很多東西,甚至還有新的商機。學電腦的資質重要嗎?我覺得還好,我也看過滿普普的同事,慢慢做,慢慢做,過了幾年也變成上市公司的經理,我是有點 surprised,但這就證明了一些事情。
看清未來趨勢,成為科技搶手人才
從種種的跡象顯示,軟體的確已經成為下個世代的產業主流,例如 AI 人工智慧、App、大數據、物聯網等等的重要趨勢都是建立在軟體設計上面的應用。由於台灣這幾年面臨轉型危機,無論是傳產還是新創公司,對於軟體能力的需求越來越大,薪資福利也都開得很不錯,目前呈現粥多僧少的現象可以好好利用。最後這裡附上三小時線上課程(四選一),可以透過我們合作夥伴聯成電腦的獨家優點來提升自己的軟體能力:
- 深耕教育超過 25 餘年,推動國人的電腦專業不遺餘力,培育上萬人進入電腦軟體產業。
- 首創 168 安心學習服務,透過符合政府評核的一貫式教學,讓學習與就業緊密結合。
- 超過十個就業機會、全國徵才見面會、大型廠商聯合徵才讓結訓學員挑選。