2018年3月31日,西湖西邊的山
上大學之前,我沒有接觸過程式設計,用電腦就是玩玩遊戲,上個網啥的。對電腦有這麼點興趣,就報了電腦科學與技術專業(也叫 CS),從此走上了敲程式碼的不歸路…
大一的課程就有 C 語言,操作性非常強,要上機考試,題目是寫個函式做數學運算。我覺得用 C 語言作為程式設計入門並不合適,因為它不如 Java、Python 等語言高階(這裡的高階是指對開發者友好),光是指標就把人搞得暈暈乎乎。C 是非常接近底層的語言,開發作業系統、硬體驅動還行,沒有人拿它來做應用層。做不出簡單的小應用,比如小遊戲或者網頁,就缺少及時的正向反饋,所以大家都沒有學習的興趣。
之後學習了 web 開發,俗稱前端,做過幾個小網站,慢慢體會了程式設計的樂趣,這期間用的是 HTML、CSS、JavaScript、PHP。網頁其實就是一種經過排版的文件,瀏覽器就是直譯器,HTML 和 CSS 就是排版工具,它們的屬性超級多,組合的樣式也十分豐富。
JavaScript 能讓這些靜態的頁面動起來,網頁的互動也變得更加炫酷。作為 GitHub 上最受歡迎的語言,JavaScript 十分傲嬌,各種框架層出不窮。PHP 是後端的指令碼語言,這裡不討論它是不是最好的語言,給我的感覺就是不慍不火,比起 JavaScript 低調不少。
下面 Java 登場了,這門課叫「物件導向程式設計」,至今我面向的只有螢幕,請問哪來的物件 (-。-;。言歸正傳,到目前,我認為 Java 是綜合能力最強的程式語言,虛擬機器的存在保證了安全性和跨平臺,活躍的社群和龐大的開源庫讓開發者無後顧之憂。長盛不衰的 Java 後端主要用來構建企業級應用,近些年流行的 Android 也採用 Java 開發,這才是工業級的程式語言。
那時候對 Java 沒上心,外面的世界接觸也少,沒想到 Java 這麼強大,糾結中就浪費了不少時間。這是大學遺憾的事情之一,沒有用心鑽研 Java,只能後面慢慢補唄。
期間有兩門資料庫的課程,主要學的是基本的 SQL 語句和設計資料表(基於 MySQL),還算比較簡單。計算機網路也是認真學過的一門課程,網路模型是程式設計的基礎,這個不用解釋。編譯原理非常難,直接面向機器,什麼 CPU 指令、暫存器啊,總之就是難以理解。作業系統也是,涉及許多排程演算法,已經忘得差不多了。總之就是越往底層越難學,越往上越容易。
資料結構是門非常重要的課,副院長親自授課,她這個人教學很認真,大家都不敢怠慢,在所有課程裡面這門課的質量還是很高的。常用的資料結構有這麼幾個:陣列、連結串列、雜湊表等,是每個程式設計師必須熟知的。對於程式設計,有個公式是這樣的:
程式 = 邏輯 + 控制 + 資料結構
你看,不懂資料結構談何程式設計,邏輯和控制就是演算法,這個也是逃不掉的。
畢業設計是自己動手做的,就是一個簡單的記賬 app。那時候感覺自己是全能啊,原型自己想,介面自己畫,程式碼自己寫。整個 app 設計參考了隨手記和挖財,連圖示素材都是從人家安裝包裡「借」來的。每隔一段時間就向老師彙報,當時確實非常用心,最後答辯的時候老師們都很滿意。
寫了這麼多,其實我想說的是,技術洞察力真的非常重要,直接決定了你的選擇,你以後的發展,現在看有多少在用 .net 開發的,再看看有多少用 Java 開發的。往後看,我覺得 Python 和 Go 會有不錯的發展,Python 在 AI 領域大有作為,Go 介於 C 和 Java 之間,各自都有適用的場景,以後的事讓時間來驗證吧。
另外一點就是基本功,比如上面說的演算法和資料結構、網路模型、計算機原理等。萬丈高樓平地起,勿在浮沙築高臺。只有掌握本質原理,才能在瞬息萬變的技術世界遊刃有餘。
這是我程式設計這麼多年來的經歷和感受,程式設計是門手藝活兒,既然選擇了,那就做下去吧。