電腦科學介紹

發布日期

這篇文章可以當成你在追求電腦科學路上的小小調劑,或者是一只隨身攜帶的瑞士刀, 任君取閱、咀嚼其中之義。文章惟有不周之處之虞,請多多寬恕包容。

1. 電腦科學在學什麼?

許多人一想到資訊工程/電腦科學時,第一個念頭便是 Coding、Programming,實際上, 電腦科學最注重的不是寫程式,而是數學、邏輯與範示,程式相對之下只佔了一部分, 主要是實作方面會需要用到。

1.1 數學常識

由於電腦科學是在應用數學部門的一門科系,所以不難想到電腦科學需要學習數學, 一開始,我們會學習到離散數學,一門探討可以量子化(Quantize)的數學理論。 其中,會先接觸到數論,顧名思義就是研究數字相關的理論,不過只探討 Z\mathbb{Z} 相關的理論,因為數論中的理論許多能讓你高喊「Voila!」, 連高斯先生都曾將數論比喻成數學的皇后呢!

數論結束後,你將會接觸到更多特別的理論,不過主題大同小異——都是由狹至廣,例如, 大家忘不了的群論上完後,圖論就緊接在後,圖論上完後,範疇論跟著! 都不知是不是在上拓墣了呢。其中,組論是研究團和團之間的關係的,圖論則是具現化這件事, 群論則是更大的抽象化,可以描述幾乎所有宇宙萬物的關係 ⋯⋯ 我自己超愛範疇論。

當然,該上的都會上,演算法也算是數學,像是圖的搜尋、模擬環境,例如旅行銷售員、喬瑟夫斯問題, 非常精彩。在上演算法的同時,資料結構也上完了,詳情請見 1.3。不只離散數學,電腦科學也會學到連續數學, 像是 DSP(Digital Signal Processing)中的傅立葉轉換。

1.2 電腦運作

雖然和常理相衝,電腦科學確實會學到電腦的低階運作(低階在此無貶義, 僅是表現抽象程度的高低),從認識 von Neumann 架構一路到學習硬體描述語言 Verilog, 都是超級無敵重要的喔!一個好的電腦科學家可以結合理論與實物,從電路的角度思考。 這件事對後續學習組合語言影響無遠弗屆。

1.3 程式設計

當你看到一位書法家用毛筆豪邁地在紙上寫下充滿感情與藝術的字體,你不只看到紙、筆、人類, 你看到的是精神與知識,所有的集合體。程式設計也是一樣的, 經過歷練的程式是可拉伸的(Scalable)、可維修的與簡單明瞭的,實際上, 將複雜的系統簡化成非耦合狀態的開發者也被譽為是 10X 開發者。 一開始,我們會先學習 C 程式語言,它可以幫助我們學習思考,C 也是一個偏向低階的高階語言, 所以本身也有很高的教育價值,然後,我們會學習組合語言,一個確確實實的低階語言, 大學通常是教 Intel x86_64,不過現在 RISC 崛起,看也有一些在教 ARM、RISC-V 了。最後, 如果是數學狂熱份子的話,一定會愛死λ\lambda運算學(Lambda Calculus), 它也是函數程式設計範示的基礎,其實,λ\lambda運算學也是元祖程式語言之一喔!

2. 電腦科學的出路是什麼?

當然不要說碼農喔,部分節錄公職王

綜上所述,程式設計師的出路非常多樣,現在隨著許多不同的科技如雨後春筍般冒出, 想必未來有更多職缺!

3. 如何學好電腦科學?

乖乖聽課,自己要自學,預習很重要,要懂的無時無刻都思考。 資源有很多,像是影音媒體、良師資源、紙本文獻等,只看你較偏嗜哪種。 初學者建議去讀《電腦程式的構造和解釋》,這本書簡單明瞭,有函數程式設計的觀念, 而對於數學建議去讀《數學分析原理》與 Richard Johnsonbaugh 的《離散數學》。 演算法則是多解題,不過請注意,解題不會讓你寫出較容易維修拉伸的程式碼, 而這件事需要長時間與開源專案團體合作、交流才能得到。

Happy Hacking!

(」・ω・)」うー!(/・ω・)/

4. 實用的工具

以下是我自己喜愛使用的工具,包含軟硬體,內容不限。

4.1 Neovim

雖然很多人會戰我,說「Neovim 上的功能對於高階使用者沒差,」 或是「我只用 Vi,Vim 使我專注力下降,更何況是 Neovim,」我還是喜歡用 Neovim, 你可以到我的 NixOS 設定檔 看我都用什麼, 我自己不喜歡自動完成和靜態除錯,因為過於分心。Neovim 的好處是手都不需要離開鍵盤,所以用起來

4.2 Tmux

我自己用 Tiling Manager Hyprland,但是有 Tmux 倒也不錯,可以在終端機做類似的模擬, 在沒有 TM 的電腦或在 remote 工作時特別親切,還可以解插拔和重插拔。

4.3 GNU 軟體

GNU 做的軟體非常穩定,因為都較為瑣碎,我把它們一一列舉出來。

4.4 週邊硬體

鍵盤、螢幕偏好。

5. 傳奇人物

以下都是作者自己的主觀觀點,請斟酌閱讀感恩!

5.1 Richard Matthew Stallman (RMS)

自由軟體運動(Free Software Movement)的創始者,Stallman 十幾年前就在爭取 FOSS(自由且免費開源軟體)的曝光度, 他最著名的一項偉業便是發起 GNU 計畫——FOSS 的集合體,包含作業系統、套件庫,後來 Linus Torvald 所開發的 Linux 殼層便被套用在其中, 成為 GNU/Linux。

雖然他的為人我是沒有這麼崇拜,但他的所作所為是值得我們所敬佩的。

5.2 Linus Tarvold

Linux 殼層的開發者,當年是為了做出 FOSS 版的 UNIX 便意外做出了有史以來最受歡迎的開源殼層,到目前為止 Linux 還是許多程式設計師首要的選擇, 不過我認為他最讓人佩服的地方不在做出 Linux,而是在一個存在二十多年的程式庫中持續地檢查 Pull Request,證明他驚人的毅力與熱誠。

想看 Linus 電人的話請去Linux Kernel Lore,慎入! 能在 Linux Kernel 中發 PR 而不被 Linus 嗆是一種榮耀 ξ( ✿ > ◡❛)