電腦科學

電腦科學（英文：computer science），又有叫運算科學（computation science/computing science），粵文又有叫計算機科學，係專門研究運算嘅一個科學工程領域。「電腦」廣義上指運算機械，即係曉用數據做運算，並且俾出一啲有用結果嘅機械，簡單例子：而家手上有一柞「每個學生喺呢次考試當中攞到嘅分數」嘅數據，要用呢柞數字計出邊個考第一。電腦科學就係集中思考曉做呢啲嘢嘅機械點樣表示同儲起數據、用各種嘅演算法嚟處理數據以及彼此之間傳送數據等嘅問題。
電腦科學係一個理論同實踐兼備嘅領域。一方面，電腦科學－好似一般嘅科學領域噉－包含一啲好抽象同理論化嘅研究，例如係運算理論上對運算機械嘅研究噉，呢啲研究會將運算機械想像成好似以下噉嘅數學物體：
上圖呢部機械（稱為決定性有限狀態機）會攞一串符號做輸入，再話俾用家知，串符號入面 0 嘅數量係咪雙數：部機開始於S1{\displaystyle {\text{S}}_{1}}狀態；當部機讀到一個 0 嗰陣，會進入S2{\displaystyle {\text{S}}_{2}}狀態，而當佢再讀到個 0 嗰時，會返去S1{\displaystyle {\text{S}}_{1}}狀態；如果佢讀到嘅係 1 或者第啲符號嗰時，部機唔會改變狀態；喺部機讀完嗮串符號之後，如果串符號入面 0 嘅數量係雙數，佢會處於S1{\displaystyle {\text{S}}_{1}}狀態，否則佢就會處於S2{\displaystyle {\text{S}}_{2}}狀態。呢部抽象機械可以用多種唔同嘅物理機制實現，運算理論上屬於抽象性思考。
另一方面，電腦科學又屬工程學嘅一門，包含實踐性嘅研究，思考點樣用運算機械造出有經濟價值嘅產品。應用電腦科學嘅例子有電腦圖像學同電子遊戲開發呢兩個領域。電腦圖像學顧名思義研究電腦圖像，諗點樣運用電腦做嘅運算嚟製造圖像，而呢啲圖像可以用嚟將數據視覺化，或者整動畫同電子遊戲等嘅產品；電子遊戲開發就係思考點整電子遊戲（電子遊戲係一種用嚟做娛樂用途嘅電腦軟件），會運用電腦圖像、電腦編程（諗點樣俾指令教一部電腦做運算）、同人工智能（諗點樣用電腦運算令電腦做出有智能嘅行為）等電腦科學上嘅技術，務求製作出好玩同好賣嘅電子遊戲。總括嚟講，廿一世紀嘅電腦科學係一個蓬勃又多樣化嘅領域。
"Computer science is no more about computers than astronomy is about telescopes."（「天文學唔係研究望遠鏡，電腦科學同理唔係研究電腦。」）
電腦科學研究嘅重點係運算。廣義上，運算指涉及跟從一個定義好嘅模型，通過一連串算術同非算術步驟，做出嚟嘅計算。例如，演算法（algorithm）可以理解做用家俾一部電腦包含一串有先後之分嘅指示，每行指示教部電腦做某啲計算⸺可以係算術性嘅（加減乘除等），又可以係做邏輯代數（Boolean algebra）等等⸺通過呢啲指示，部電腦最後會俾出一個輸出，如果個演算法設計得好而且部電腦能夠無誤噉行段演算法嘅話，個輸出正正會係個用家想要嘅結果。
舉個簡單例子說明，好似係以下呢段用粵文寫嘅演算法噉：
做咗呢柞運算步驟之後，得出個輸出（max）會係用家想要嘅結果（列數入面最大嗰個）。
廿一世紀初一般主流學界都認同，電腦科學包含咗多種唔同嘅研究範式（paradigm），當中蘇聯出世嘅電腦科學家彼得·惠拿（Peter Wegner）就主張，電腦科學包含三大範式，由唔同角度研究同「運算」相關嘅課題：
理論電腦科學（theoretical computer science）係電腦科學當中最抽象化嘅子領域。理論電腦科學嘗試了解「運算」呢樣嘢嘅數學性質，會用數學上用嘅方法－數學證明等－嚟搵出描述運算嘅定理。理論電腦科學純粹以增進人類對運算嘅了解為目的，所以係一個好理論化嘅領域，但理論電腦科學上嘅進步往往會引致按呢啲知識嚟設計嘅電腦能夠做更有效率嘅運算。
運算理論（theory of computation）專門研究運算嘅本質，思考機械點樣用演算法解難，嘗試了解運算機械嘅能力同極限係乜。運算理論上嘅研究會用數學證明等嘅數學方法，思考
... 等等嘅問題。
舉個例說明，停機問題（halting problem）就係可運算性理論上嘅一個經典問題：
呢個證明對運算本質嘅了解作出咗貢獻，而且由頭到尾淨係用數學證明嘅做法。
數據結構（data structure）係指一部電腦組織內部數據嘅方法：要做運算，部電腦就實要用某啲方法儲住要用嘅數據，例：要做到將兩個數值加埋一齊，部電腦首先要能夠記住嗰兩個數值；好似陣列（array）噉，就係一種常用嘅數據結構，所有主流程式語言都有陳述式俾用家製造陣列，一個陣列有一個整數表示佢嘅大細，個整數表示個陣列有幾多個元素（element），每個元素都有個順序（通常由 0 起始）嘅數字表示佢係個陣列嘅第幾個元素，例：有個陣列叫thearray，噉thearray[0]就係指thearray嘅第一個元素。數據結構上嘅研究思考部電腦以乜嘢方法儲住啲數據，以及唔同嘅儲數據方法有乜嘢優缺點，分別喺乜嘢時候啱用。
資訊理論（information theory）係一個研究資訊要點樣量化、儲起同傳達嘅數學理論。資訊理論嘅核心概念係熵（entropy）；資訊理論當中嘅「熵」係一個指標，用嚟量度一個有隨機性喺入面嘅變數或者過程當中帶有幾多不確定性（uncertainty）喺入面。舉個例說明，想像家吓掟一個銀仔同擲一粒六面嘅骰仔，假設個銀仔同粒骰仔係冇出千嘅：掟一個銀仔有 2 個可能結果，而擲一粒六面骰有 6 個可能結果。擲骰仔當中有更多可能性喺度，所以不確定性亦都更加大－有更多嘅資訊熵；當一個人知道咗一次掟銀仔或者擲骰仔嘅結果嗰陣，佢會清楚知道結果－資訊熵變成 0。對比兩個情況，「話俾人知掟銀仔嘅結果」所俾到嘅資訊－消除嘅資訊熵－少過「話俾人知擲骰仔嘅結果」所俾嘅。由呢個例子可見，資訊理論做到將「資訊」呢個本來相當含糊嘅概念量化，令資訊成為一個喺科學上可以被研究嘅對象。
形式化方法（formal methods）泛指一啲用嚟描述、開發同驗證軟件同硬件系統嘅數學方法。呢啲方法會用數學模型描述軟件同硬件系統，幫分析者手分析個系統，例：個電腦系統嘅運算速度（sp{\displaystyle {\text{sp}}}）有條公式表示個速度受邊啲因素（xi{\displaystyle x_{i}}）影響，sp=β1x1+...{\displaystyle {\text{sp}}=\beta _{1}x_{1}+...}；分析者只要知道嗰啲因素嘅數值，佢就可以用條公式計出個電腦系統嘅運算速度；所以有咗條公式，佢就有得計出啲因素要喺乜嘢數值，先可以令速度最大化；喺呢點上，電腦科學同第啲工程學領域一樣－用數學模型模擬一個系統，並且靠呢啲模型對系統嘅設計作出思考，最後設計出更加能夠幫設計者達到佢目的嘅系統。形式化方法好多時會用到運算理論、資訊理論同程式語言理論上嘅知識，而且可以話係軟件工程嘅理論基礎。
電腦系統係指一個能夠做有用運算嘅系統。一個電腦系統能夠用某啲方式接收輸入（input），進行某啲型式嘅運算，再俾出輸出（output）；如果一個電腦系統設計得妥當，噉個輸出正正會係個用家想要嘅。電腦科學領域會對電腦系統嘅設計作出比較抽象性嘅思考，集中諗「個系統應該要進行點樣嘅運算」，然後再同電腦工程等領域嘅專家合作，等後者用物理方法實現佢哋嘅設計。
電腦架構（computer architecture / digital computer organization）係指對電腦系統結構嘅思考－設計電腦系統嘅「結構」包括咗指明部電腦有邊啲子系統、每個子系統會做乜嘢運算、以及每個子系統會同邊啲子系統互相收發數據。例如馮紐曼架構（Von Neumann architecture）就係廿世紀常用嘅一種電腦架構，一部用馮紐曼架構砌出嚟嘅電腦大致上會有以下呢啲組成部份：
電腦架構上嘅研究會對「CPU應該要點樣攞記憶入面嘅數據」、「一粒 CPU 要有乜嘢部份」以及「一部電腦唔同子系統之間要有乜嘢資訊傳遞」等嘅課題進行概念性嘅思考，而電腦工程以及電子工程等硬件方面嘅領域跟住就會負責諗呢啲架構概念要點樣用物理方法實現，兩者合作嘗試設計出性能更好－行得更快、製作成本更低－嘅電腦。
並行運算、平行運算同分散運算係三個唔同（但相關）嘅重要運算系統概念：
要說明平行運算同分散運算之間嘅差異，想像以下呢幾個過程嘅日誌（Ty代表件事喺時間點y發生）：
P1反映咗一個平行運算，function_01同function_02呢兩個運算過程可以直接噉使用同一柞記憶；而P2反映咗一個分散運算，Node 2呢個節點唔可以直接用Node 1呢個節點嘅記憶，而係要Node 1將個output用訊號傳俾佢先可以用。喺某啲情況下，平行運算可以搞到個系統出一啲齋用非平行分散式運算唔會出嘅錯。
電腦性能（performance）係電腦系統相關研究常考慮嘅一柞指標，指一個電腦系統能夠做幾多有用嘅運算同埋做起呢啲運算上嚟嘅效率係點。電腦科學家會用準確度、運算時間同速度等嚟量度一部電腦嘅性能。而一般嚟講，一部性能良好嘅電腦具有以下嘅特徵：
運算機械之間會為咗達到各種目的而互相傳遞資訊，例如廿一世紀無所不在嘅互聯網科技噉，就涉及電腦之間係噉收發大量嘅資訊用嚟達到各種嘅用途。電腦科學上有對電腦通訊嘅問題作出思考，務求令電腦之間嘅通訊更加安全同有效率。
一個電腦網絡（network）係指若干部電腦（每部電腦為止一個節點），會共同使用一個網絡傳輸協議（communication protocol）彼此之間分享資源。喺物理上，電腦網絡會包含若干部電腦，彼此之間以某啲方式－最簡單嘅係駁電線傳電子訊號－互相傳達訊號。電腦網絡有好多用途，例如受一個組織（一間學校或者一間公司）使用、外人用唔到嘅內聯網（intranet）可以用嚟俾一個組織內部嘅成員之間交流工作要用嘅資訊，而互聯網（internet）連接世界各地嘅電腦，令世界各地嘅人有得彼此交流圖像、文字、錄音同影片等嘅多種資訊。
電腦科學上嘅研究會將電腦網絡按各種特性分類，了解唔同類型嘅網絡喺性能上有乜差異，並且嘗試靠噉思考要點設計出更高效率嘅網絡：網絡拓樸（network topology）係指一個網絡嘅節點之間以乜嘢方式連埋一齊；網絡拓樸係抽象化嘅，唔重視電腦嘅物理位置，而只係集中思考啲電腦之間嘅連繫規律；數據傳輸就係指一個網絡嘅節點之間以乜嘢物理方式傳遞數據，當中最簡單嘅做法係駁線（可以睇埋光纖），不過廿一世紀開始嘅電腦網絡亦有大把無線技術可以用。
喺將電腦網絡分好類之後，電腦科學上就可以用好多方法衡量唔同類型網絡嘅網絡性能，即係唔同類型嘅網絡有幾能夠有效率噉幫用家達成目的。常用嘅網絡性能指標有：
... 等等。
電腦保安（cybersecurity）泛指對電腦系統同網絡作出保護，等軟硬件同數據免受偷竊同損壞：隨住電腦網絡嘅普及，數據嘅流通變得容易，同時數據亦有更加有可能會落入犯罪份子嘅手，例如銀行系統所做嘅網絡通訊會包含用戶嘅信用咭號碼同戶口有幾多錢等嘅資訊，而呢啲資訊一旦落入犯罪份子嘅手，可以搞到銀行同用戶損失慘重。除此之外，大企業喺開發新產品嗰陣會想將個項目嘅內容保密，航空交通控制會想為咗確保航空安全而想保護自己用嘅電腦系統... 等等，所以電腦保安喺廿一世紀嘅電腦科學上係一個大課題。
電腦保安嘅核心概念係漏洞。漏洞泛指一個電腦系統或者網絡喺設計同執行上一啲可以俾人利用嘅弱點，例如軟件後門就係一種常見嘅漏洞，指一個系統或者網絡有方法俾人避開一般鑑別－即係入密碼等鑑別身份嘅過程－同保安控制就進入到，搞到黑客等嘅人物能夠攞到啲佢哋唔應該攞得到嘅數據。公共漏洞同暴露（Common Vulnerabilities and Exposures，CVE）等嘅資料庫會列出同討論電腦保安上常見嘅漏洞，而電腦科學上嘅學術研究亦會探討「電腦系統要點樣設計先可以冇漏洞」等嘅課題。
密碼學（cryptography）係研究密文碼要點樣設計嘅一個領域。密碼學成個領域嘅目標係要確保傳訊人同收訊人以外嘅人冇能力知道所傳嘅資訊嘅內容，最基本嘅概念係加密（encryption）－「加密」定義係指將一段資訊入碼，轉化成第種表示方式，收訊人部電腦會知段資訊係點加密嘅，所以會有能力解讀段資訊，但收訊人以外嘅人正路就因為唔知個加密方案係點，就算攞到段資訊都解讀唔到段資訊嘅內容，而只係會得到一段望落完全雜亂無章嘅符號。一段加密演算法大致上可以想像成好似以下噉嘅虛擬碼：
密碼學上嘅研究會運用資訊理論（睇返上面）等理論嘅知識，思考「加密方案可以按乜嘢特性分類」以及「邊啲類型嘅加密方案比較安全」等等嘅議題，係廿一世紀電腦保安上不可或缺嘅一環。
電腦程式編寫（computer programming）係整同設計行得到嘅電腦程式嘅過程。一個電腦程式有段源碼（source code），段源碼會有若干行用程式語言寫成嘅句子，教部電腦要進行乜嘢運算，而如果個程式編寫得好，最後個程式俾嘅output正正就係個編程者想要嘅。喺編寫電腦程式嘅過程當中，編程者要做嘅嘢包括咗分析要解嘅問題、諗用邊啲演算法好、以及計同量度吓用緊嗰啲演算法嘅準確性同效率，而個編程者跟手就會揀返種程式語言，並且用隻語言寫好段源碼，打後個編程員仲要做多項工作，包括測試、除錯、保存住個程式嘅源碼同埋管理程式編寫過程整出嚟嘅產物等。
例如上面提到，用嚟搵出最大冧巴嘅演算法用Python呢隻程式語言寫出嚟嘅話如下：
一隻程式語言（programming language）係一種電腦能夠明白嘅語言，可以用嚟編寫程式教電腦做運算。一隻程式語言會有好多陳述式，每款陳述式都可以用嚟教電腦做某個特定嘅動作，編程員會按佢對用緊嗰隻程式語言嘅認識，編寫一段有若干行陳述式嘅源碼，而段碼經過編譯器（compiler）等嘅架生之後就可以由部電腦執行。舉個簡單例子說明，常用嘅程式語言冚唪唥都會有陳述式做簡單嘅算術，亦會有陳述式教電腦俾一啲字串做output，以下嘅陳述式都係教部電腦俾「Hello World!」呢串字做output，不過用咗唔同程式語言寫：
Python（1991 年始創嘅嘅一隻程式語言，常用於機械學習）：
C＃（2000 年發行嘅一隻程式語言，常用於遊戲編程）：
廿一世紀嘅編程界有好多唔同嘅程式語言通用，比較常用嘅有Python、C同相關嘅語言以及JavaScript等等。唔同程式語言對同一個指令嘅陳述式會有唔同，有陣時甚至會有程式語言有一啲第啲程式語言冇嘅陳述式，所以唔同程式語言會擅長做唔同嘅工作。有經驗嘅編程者會曉按手上嘅工作嘅性質揀要用邊隻程式語言。
程式語言理論（programming language theory，PLT）係研究程式語言應該點樣設計、執行、分析同分類嘅一套理論。廿一世紀初嘅電腦界有好多唔同嘅程式語言，每款程式語言都有獨特嘅功能，程式語言理論上嘅研究會嘗試比較唔同嘅程式語言，會用邏輯等形式化（formalized）－即係每個符號都有清晰定義，唔似得自然語言咁多歧義－嘅語言表達唔同嘅程式語言，剖析唔同程式語言彼此之間喺解難能力上有乜差異，例如係某隻程式語言會唔會比起第啲程式語言更加擅長解決（需要冇咁多行碼）某啲類型嘅問題等嘅課題。程式語言理論呢個領域會同數學、軟件工程、語言學同認知科學等嘅領域互相影響，而且對應用電腦科學－例如係新程式語言嘅設計等－嚟講相當緊要。
電腦能夠做到好多人手做唔到嘅運算，而呢啲運算有好多種用途。
電腦圖像學係研究電腦圖像（computer graphics，簡稱 CG）嘅一個領域。電腦圖像泛指用運算技術造出嚟嘅圖像。呢啲圖像有好多各式各樣嘅用途，例如用嚟整電影同電子遊戲等嘅娛樂作品、用嚟處理由現實世界探測到嘅影像、又或者喺科研上將一啲理論模擬嘅現象呈現出嚟呀噉。整電腦圖像涉及以下嘅工作：
... 等等。
顯示電腦圖像嘅過程大致上可以想像成噉嘅演算法：
科學運算（scientific computing）係指喺科學上建構數學模型嚟模擬同分析所研究嘅現象嘅做法，往往會用到電腦科學上嘅技術。喺實證科學上，科學家會創建數學模型模擬想研究嘅現象，然後再去搵證據睇吓個模型係咪真係能夠準確噉描述所研究嘅現象；喺廿一世紀嘅科學界，隨住科學家愈嚟愈走去研究複雜嘅現象，要用嘅數學模型變得愈嚟愈複雜，愈嚟愈難以用人手計。因為噉，自然科學家同社會科學家都變到想同電腦科學合作，整出用嚟模擬複雜現象嘅程式。
舉個簡單例子說明，現代生物學其中一個基礎係進化嘅概念：想像一個生物物種族群，個族群嘅基因庫（gene pool；指個族群身上嘅基因嘅總和）係x0{\displaystyle x_{0}}噉嘅樣，家吓佢哋做繁殖生下一代，而下一代嘅基因庫係x1{\displaystyle x_{1}}噉嘅樣，因為某啲基因比較有利於生存同繁殖（例如係令隻動物生殖能力勁嘅基因，即係所謂嘅物競天擇；natural selection），x1{\displaystyle x_{1}}同x0{\displaystyle x_{0}}會有少少差異，而過咗i{\displaystyle i}代後嘅基因庫xi{\displaystyle x_{i}}可以同x0{\displaystyle x_{0}}有巨大差異，令第i{\displaystyle i}嘅個體同初代個體唔再算係同一物種－進化就係指一個族群嘅基因庫隨時間嘅變化，以及呢啲變化產生新物種嘅過程。
進化同物競天擇嘅過程可以大致上噉用以下嘅JavaScript碼嚟模擬：
軟件工程（software engineering）係指用工程學方法開發電腦軟件嘅過程。軟件工程師會了解佢哋開發嘅軟件要滿足乜嘢需要，然後按照佢哋對呢啲需要嘅分析以及電腦程式編寫等嘅電腦技術，決定要使用嘅軟件架構，並且設計同建構出一隻行得嘅軟件，然後會做測試，而喺隻軟件出咗街之後，佢哋仲會攞用家嘅評價同更新嘅軟件。
軟件工程領域仲會對「做軟件工程應該要做乜嘢工序」等嘅課題作出思考。例如螺旋模型（spiral model）就係一種喺 1980 年代尾興起嘅軟件開發方法；用螺旋模型開發一隻軟件嘅過程包括若干次迴轉（loop），每次迴轉都係
螺旋模型喺遊戲製作等嘅軟件開發過程上好使好用－要整出一個可以做測試嘅遊戲程式好多時要花好耐時間，一旦有其中一個部份後嚟先發覺有問題（例：一個創新嘅遊戲機制，做完試玩先至知冇想像中咁好玩）會嘥好多時間，於是遊戲製作師就要用螺旋模型，喺郁手整之前就諗好嗮有乜可能會出錯嘅地方同點應對（例：喺整 beta 途中，特登將隻遊戲設計成冇咗嗰隻新機制都仲行得到）；軟件工程師會思考好似噉嘅模型，嘗試提高軟件工程界開發軟件嘅效率。
電子遊戲製作（video game development）係指製作一隻電子遊戲嘅過程，屬軟件工程嘅一個子領域。電子遊戲係以電腦軟件型式存在嘅遊戲，遊戲設計師同製作師會負責設定隻遊戲嘅規則同美學，務求令玩家開心過癮，而一個覺得開心過癮嘅玩家會願意使錢，買嗰隻遊戲同隻遊戲嘅相關產品－呢樣係所有媒體嘅遊戲設計同製作嘅共同目標。廿一世紀嘅電子遊戲設計以及製作係一個高度專業化嘅領域，要製作一隻電子遊戲，製作者需要做多個工序：佢哋要諗好隻遊戲點玩，再做好程式編寫（仲可能會用到人工智能技術）、電腦圖像製作以及為隻遊戲作故仔等嘅工作，途中用到唔少電腦科學以外嘅知識同技術；跟手佢哋仲要試行試玩吓隻初型，發覺到有問題就要返轉頭執；搞掂出得街之後，佢哋仲要度「點樣為隻遊戲做宣傳」等嘅問題，而且喺出咗街之後，製作組往往仲要喺社交媒體等嘅地方留意玩家俾嘅意見，睇吓隻遊戲有冇乜嘢需要再執。
人工智能（artificial intelligence，簡稱「AI」）係電腦科學同心靈科學嘅交界領域，專門研究點樣用各種嘅演算法教一部電腦展示好似人類噉嘅智能：一嚿物體如果有能力感知佢四圍嘅環境並且按照所得嘅資訊嚟提升自己達到目的嘅機會率嘅話，噉佢就算係一個智能體（intelligent agent），包括人類在內嘅動物都符合呢個定義，而人工智能領域嘅目標就係研究點樣人工噉整一啲智能體出嚟－自自然然，正如機械工程師喺設計飛機嘅翼嗰陣會參考雀仔嘅翼，研究人工智能嘅科學家就要參考現實世界嘅認知系統，並且嘗試整出模仿呢啲認知系統嘅人工智能。
有認知科學家提出，心靈可以分做多個子系統，而當中每一個子系統都負責某啲認知功能，而且每個都可以用一啲演算法嚟模擬，並且創造出能夠展現認知能力嘅機械。用高度抽象化嘅虛擬碼表達嘅話，一個可能嘅心靈模型如下：
... 等等。
電腦科學當中嘅某啲諗頭可以追溯去未有現代電腦嘅時代。遠古嘅人類發明咗好多架生嚟計數，好似算盤噉，而且中世紀（5 至 15 世紀）經已有數學家喺度諗有關演算法嘅概念。不過當時嘅世界未有任何可以算得上係「電腦」嘅機械，所以電腦科學頂櫳都淨係存在喺理論性嘅思考當中。
現代電腦最早可以追溯至 17 世紀：當時有德國學者威廉嶭卡（Wilhelm Schickard）同德國數學家萊布尼茲（Gottfried Leibniz）分別喺 1623 年同 1673 年發明咗機械性（用力同物件嘅移動做運算）嘅計數機，可以算係為「曉計數嘅機械」呢個諗頭創咗先河，當中萊布尼茲完善咗－對現代電腦嚟講好重要嘅－二進制系統，俾人視為史上第一個算得上係「電腦科學家」嘅人。
19 世紀係現代泛用電腦嘅開端：1820 年，開始有咗量產計數機呢家嘢，而喺 1822 年，英格蘭數學家巴貝治（Charles Babbage）諗出咗「可以做編程嘅計數機」嘅諗頭，即係所謂嘅分析機（Analytical Engine）；喺 1834 年，巴貝治開始著手研究分析機嘅諗法，兩年間就諗出好多同現代電腦相近嘅概念，所以巴貝治俾好多人覺得係現代電腦之父。打後英格蘭數學家勒芙蕾絲（Ada Lovelace）喺 1843 年嘗試翻譯一篇關於分析機嘅法文文章嗰陣，喺佢加入嘅譯者筆記入面記錄咗一個計白努利數嘅演算法，可以話係世界上第一個電腦程式。
廿世紀上半橛係電腦科學萌芽嘅時代：喺 1930 年代，亞倫圖靈（Alan Turing）開創咗運算理論同人工智能嘅思考，諗出咗圖靈機（Turing machine）等現代電腦科學都仲會用嘅諗頭；喺 1937 年，候活·艾肯（Howard Aiken）成功說服IBM建造佢（基於巴貝治嘅分析機）構想出嚟嘅超大型可編程計數機；打後喺 1940 年代，又有人開始整更新更勁嘅計數機，仲開始咗嗌呢啲機械做computer，而紐約市嘅哥倫比亞大學喺 1946 年推出人類史上第一個有學分嘅電腦科學課程－即係話電腦科學正式成為咗一門獨立嘅科學工程學問。
電腦科學上常用嘅數學理論有以下呢啲：