從大學到碩士一路都是機械系讀上來,畢業後經歷了幾年輾轉到了現在的工作崗位: Linux 檔案系統相關開發維護,我覺得我已經幾乎脫離原本機械系的領域。雖然我不能稱上是很厲害的軟體工程師,心裡多少也還是有點機械魂,會走到這裡也是一種機運,但我想應該不少人也會有半路想跨領域的想法,而這裡分享一些我個人的經驗以及學習歷程給一些也想跨到軟體開發的人參考。

跨領域該具備什麼條件?

  要能成功跨領域最重要的前題我想還是要真正有"興趣"以及"熱忱"。網路上可以找到很多想入門的請益文,但我想相較於給予歡迎的人,勸退的應該比較多,為什麼?很多人都認為自己對軟體開發有興趣,也許是喜歡設計大型軟體結構,又也許是享受用演算法解決困難題目等等,我覺得這些都很 OK,但真正的關鍵是,當一次又一次遇到高牆或阻礙的時候,興趣是否能產生足夠的動力來跨過

  我的觀念一向是會把投入工作和業餘興趣分開,如果最終是想把"興趣"推到"職場"領域,那首先會遇到的問題會是,職場中總是會遇到沒什麼興趣的專案,要如何跨過沒什麼興趣的高牆?我舉的例子不見得很好,因為每個人會遇到的困難不同,但可以回想一下,是否有哪些困難技術是覺得該具備,但到目前為止一直都不能突破的?例如我認識很多人在編譯器都會卡關,然後就會用反正這個之後大概也用不到來說服自己逃避問題。成長過程遇到障礙是很正常的,現階段學不會,或許學了一些其他的知識再來挑戰說不定就能理解,能夠一次又一次的挑戰讓自己突破,我認為就是真的興趣。

該從哪裡入門程式語言?

  雖然我是一般機械系畢業,但我的學習歷程其實算是比較接近一般資工系的。我是大三才開始學寫程式,第一次接觸的程式語言是 C,很多人對新手可能會推薦寫 Python 或是一些較容易上手的程式語言,我覺得以興趣或業餘來說 OK,但對認真想投入這個領域的人,我還是建議從 C 開始學,C 之所以難學是因為馬上就會遇到指標這個不得不跨過的牆,剛好可以檢驗自己是否真的有興趣。

  至於要如何學程式語言?因為我是直接修課學習的,所以我會建議去找完整課程來上,主要理由是,初學階段對陌生領域不熟,通常很難整理出一套有效的學習地圖,上課仍然是比較系統性的學習方法。

我已經會寫程式了,接下來呢?

  接下來我傾向是開始去尋找應用及方向去深入,我覺得跨領域人很大的弱勢是沒有資訊相關的領域知識,不過可以嘗試的方向是,既然都是"跨領域"了,肯定有"原領域"吧,從原領域去下手是不錯的辦法,成功率也大得多,我是在碩士開始做加工機電腦數值控制 (CNC) 相關的研究而開始大量寫程式,重點是接觸足夠大規模的軟體專案,並且親自維護開發,此時就會發現不足而去深入。

  資料結構、計算方法設計(演算法)是我在碩士期間再去資工系選修過,而且我認為很基礎通用的,其他我建議的有: 作業系統、編譯器設計、物件導向程式設計,這些都是相當基礎的課程,我沒修過但我覺得有殘念的有: 計算機網路概論、資料庫系統,現在很夯的機器學習 (Machine Learning) 也推薦學一下,我在學校期間還不是很流行,現在只好撥時間自學。

  有一點經歷以後應該就能夠規劃學習地圖及目標,像亞歷山大東征一般逐一征服。