large capital lambda Plot of a quicksort algorithm
Utah teapot representing computer graphics Microsoft Tastenmaus mouse representing human-computer interaction
電腦科學會研究「運算」呢樣嘢嘅理論特性以及實際應用。

電腦科學粵拼din6 nou5 fo1 hok6英文computer science),又有叫運算科學computation science / computing science),係專門研究電腦嘅一門科學工程學領域[1][2][3]。「電腦」廣義上指運算機械(computation machine),即係曉用數據做運算,並且俾出一啲有用結果嘅機械,簡單例子:而家手上有一柞「每個學生喺呢次考試當中攞到嘅分數」嘅數據,要用呢柞數字計出邊個考第一。而電腦科學就係集中思考運算機械點樣表示同儲起數據、用各種嘅演算法嚟處理數據、以及彼此之間傳送數據等等[4]

電腦科學係一個理論同實踐兼備嘅領域。一方面,電腦科學-好似一般嘅科學領域噉-包含一啲好抽象同理論化嘅研究,例如係運算理論(theory of computation)上對運算機械嘅研究噉,呢啲研究會將運算機械想像成好似以下噉嘅數學物體[5]

DFAexample.svg

上圖呢部機械會攞一串符號做輸入,再話俾用家知,串符號入面 0 嘅數量係咪雙數:部機開始於 S1 狀態;當部機讀到一個 0 嗰陣,會進入 S2 狀態,而當佢再讀到個 0 嗰時,會返去 S1 狀態;如果佢讀到嘅係 1 或者第啲符號嗰時,部機唔會改變狀態;喺部機讀完嗮串符號之後,如果串符號入面 0 嘅數量係雙數,佢會處於 S1 狀態,否則佢就會處於 S2 狀態。呢部抽象機械可以用多種唔同嘅物理機制實現-運算理論上嘅思考係抽象性(abstract)嘅[5][6]

另一方面,電腦科學又屬工程學嘅一門,包含實踐性嘅研究,思考點樣用運算機械造出有經濟價值嘅產品。應用電腦科學嘅例子有電腦圖像學(computer graphics)同電子遊戲開發(video game development)呢兩個領域。電腦圖像學顧名思義研究電腦圖像,諗點樣運用電腦做嘅運算嚟製造圖像,而呢啲圖像可以用嚟將數據視覺化,或者整動畫電子遊戲等嘅產品[7];電子遊戲開發就係思考點整電子遊戲(電子遊戲係一種用嚟做娛樂用途嘅電腦軟件),會運用電腦圖像、電腦編程(諗點樣俾指令教一部電腦做運算)、同人工智能(諗點樣用電腦運算令電腦做出有智能嘅行為)等電腦科學上嘅技術,務求製作出好玩同好賣嘅電子遊戲[8]。總括嚟講,廿一世紀嘅電腦科學係一個蓬勃嘅領域。

定位

 
英格蘭數學家巴貝治(Charles Babbage;1791-1871)一般俾人認為係創始「運算機械」呢個諗頭嘅人[9]
內文: 電腦科學哲學

基本概念

內文: 運算

電腦科學研究嘅重點係運算(computation)。廣義上,運算指涉及跟從一個定義好嘅模型、通過一連串算術同非算術步驟做嘅計算,例子有演算法(algorithm):喺行一個演算法嗰陣,一部電腦會接收用家俾嘅一串演算法,一個演算法包含一串有先後之分嘅指示,每行指示教部電腦做某啲計算,呢啲計算可以係算術性嘅(等),又可以係做邏輯代數(Boolean algebra)等等,通過行呢段演算法,部電腦最後會俾出一個輸出,如果個演算法設計得好而且部電腦能夠無誤噉行段演算法嘅話,個輸出正正會係個用家想要嘅結果[10]

舉個簡單例子說明,好似係以下呢段用粵文寫嘅演算法噉[11]

要解決嘅問題:家吓俾一柞正數你,假設呢個列唔係一個空列,同我搵嗰柞數入面最大嗰個出嚟。
用嘅演算法嘅步驟:
 設一個變數,叫佢做「max」,並且將佢個數值設做「0」;
 將收到嗰柞正數逐個逐個攞嚟同 max 比較吓;
 如果撞到一個大過 max 嘅數(叫呢個數做「x」)嘅話,將 max 嘅數值設做 x,並且繼續將 max 同下個正數比較吓;
 將最後得出嗰個 max 嘅數值俾出嚟。max 嘅數值會係成柞數入面最大嗰個。

做咗呢柞步驟之後,得出個輸出(max)會係用家想要嘅結果(柞數入面最大嗰個)[11]

除咗吸引到好多人做嘅理論性研究之外,運算呢家嘢仲有相當嘅實用價值,可以用嚟造電腦圖像(computer graphics)等有用嘅產品。好似係以下呢段簡單嘅 Processing 噉(Processing 係一種專門用嚟整電腦圖像嘅程式語言[12]

float y = 100; // 設 y 呢個變數值做 100。
 
void setup() { // 喺 processing 當中,setup(){} 包括嘅碼淨係會喺個程式開始嗰陣運行一次。呢個係步驟 1。
  size(640, 360);  // 設定幅圖嘅大細做 640 x 360 粒像素。
  stroke(255);     // 設筆觸做白色(255 代表白色)。
  
  y = height * 0.5; // 設 y 做幅圖嘅高度嘅一半。
}

void draw() { // 喺 processing 當中,draw(){} 包括嘅碼會係噉重複運行直到個程式結束為止。呢個係步驟 2。
  background(0);   // 將背景設做黑色(0 代表黑色),呢個黑色背景會遮嗮一切之前畫落嘅嘢。
  line(0, y, width, y);  // 喺 (0,y) 同 (width,y) 呢兩點之間畫一條線,線嘅色水同筆觸嘅一樣。
  
  y = y - 1; // 將 y 嘅數值下降 1。
  if (y < 0) { 
    y = height; 
  } // 如果 y 跌到變咗做負數,將佢設做等如幅圖嘅高度。
  // 步驟 3 同 4 喺 processing 當中被省略咗。
} 
// 以上嘅運算過程會造出一幅背景係黑色嘅圖,背景上有一條白色嘅橫線,而且條橫線仲會一路向上郁,去到最上之後返去最落嘅地方。

對運算嘅理論性質嘅研究以至對運算嘅應用價值嘅研究都屬電腦科學嘅範疇[13]

三大範式

廿一世紀初一般主流學界都認同,電腦科學包含咗多種唔同嘅研究範式(paradigm)[13][14],當中蘇聯出世嘅電腦科學家彼得·惠拿(Peter Wegner)就主張,電腦科學包含三大範式,由唔同角度研究同「運算」相關嘅課題[15]

  • 數學:電腦科學,尤其係運算理論(theory of computation)等比較理論性嘅子領域,會運用好似數學噉嘅演繹推理方法(例如係數學證明),即係齋靠已有嘅知識去嘗試推理出新嘅知識;例子有停機問題(halting problem)嘅思考,喺解決呢個問題嘅過程入面,亞倫圖靈(Alan Turing)用咗反證法(proof by contradiction)證明呢個世界上冇可能有電腦能夠攞一個程式嘅做輸入,再俾出正確嘅「呢段碼會唔會停機」輸出-成個過程都係齋靠邏輯推理,就好似一般數學家嘅思考過程噉[16][17]
  • 科學:另一方面,電腦科學嘅某啲子領域又會運用科學方法做研究,即係唔係齋靠諗,而係去攞一啲描述現實世界嘅數據,再用數據驗證佢哋嘅假說;例子有人工智能(AI)上嘅研究,人工智能其中一個目的係要令電腦做出有智能嘅行為,所以人工智能領域嘅科學家好多時會做實驗-好似物理學自然科學領域噉-嘗試了解智能嘅本質,例如搵柞馬騮實驗室嗰度,觀察佢哋係點運用工具嚟解難嘅(一般認為,曉用工具係智能嘅表現),得到數據之後,嘗試編寫出能夠教電腦做出同樣行為嘅程式[18]
  • 科技:除此之外,電腦科學嘅研究好多時會似科技同工程學領域嘅噉,以「創造出最優質嘅技術或者產品」為目標;例子可以睇電子遊戲開發(video game development)呢個領域,電子遊戲開發嘅過程會用到好多涉及電腦嘅技術-電子遊戲本質上就係電腦軟件嘅一種,所以要製作一隻電子遊戲實要做大量嘅程式編寫,而且電子遊戲仲會用到電腦圖像(CG,用電腦造嘅圖像)同人工智能等嘅技術[19];所以遊戲製作研究會思考「一個遊戲程式用乜演算法行先會順暢」等嘅問題,而憑藉呢啲知識,遊戲製作師會以「製作出好玩(吸引到玩家俾錢)嘅遊戲」做目標工作-好似以「設計出最佳產品」為目標嘅工程師[20]

理論電腦科學

內文: 理論電腦科學

"Computer science is no more about computers than astronomy is about telescopes." (「天文學唔係研究望遠鏡,電腦科學同理唔係研究電腦。」)

Michael Fellows (美國出世嘅電腦科學家米高·菲路

理論電腦科學(theoretical computer science)係電腦科學當中最似數學嘅一柞子領域。理論電腦科學嘗試了解「運算」呢樣嘢嘅本質,會用數學上用嘅方法-數學證明等-嚟搵出描述運算嘅定理。理論電腦科學純粹以增進人類對運算嘅了解為目的,所以係一個好理論化嘅領域,但理論電腦科學上嘅進步往往會引致按呢啲知識嚟設計嘅電腦能夠做更有效率嘅運算[17]

數據結構同演算法

內文: 數據結構演算法

運算理論

內文: 運算理論

訊息論

內文: 訊息論

程式語言理論

內文: 程式語言理論

形式化方法

內文: 形式化方法

電腦系統

應用電腦科學

人工智能

內文: 人工智能

軟件工程

內文: 軟件工程

歷史

電腦科學可以追返上去未有現代電腦嘅時代。人類諗咗好多架生來計數,就好似古代已經發明咗算盤輔助我哋做加減乘除。古時人類已經搵到無數嘅演算法,時間仲早過發明各色各樣嘅計數架生。

威廉嶭卡(Wilhelm Schickard)1623年起咗第一部可用嘅機械計數機。1673年Gottfried Leibniz展示咗一部叫Stepped Reckoner嘅機械計數機。Gottfried Leibniz被視為第一個電腦科學家同資訊學家,原因之一係因為佢完善咗二進制系統。1820年Thomas de Colmar發表Arithmometer之後就開始量產機械計數機,佢係世界上第一部足夠可靠同實淨到可以喺日常辦工室之類嘅環境用嘅計數機。1822年Charles Babbage開始設計第一部自動機械計數機差分機(Difference engine),過程中令佢有咗第一部可編程機械計數機Analytical Engine嘅構想。1843年佢開始研究Analytical Engine,兩年之間佢就諗到好多被視為配代電腦特徵嘅功能。好重要嘅一步就係用咗Jacquard loom嘅打孔卡系統,令到部嘢基本上可編程。1843年,喺翻譯一篇關於Analytical Engine嘅法文文章時,Ada Lovelace喺佢加入嘅譯者筆記入面記錄咗一個計白努利數嘅演算法,被視為世上第一個電腦程式。1885年Herman Hollerith發明咗tabulator,一部用打孔卡來處理統計數據嘅野,佢間公司之後成為IBM嘅一部份。1937年,Howard Aiken說服IBM整佢部超大型可編程計數機ASCC/Harvard Mark I。

1940年代間,有人整咗一部又新又勁嘅計數機,大家叫電腦(computer),嗰時開始只係指佢而唔係之前嗰啲計數機。大家開始明白到電腦唔只可以計數,仲可計各種唔同嘢,電腦科學呢門學問開始變成研究所有同運算有關嘅嘢。1945年,IBM畀錢成立咗紐約市哥倫比亞大學嘅華生科學運算實驗室。紐約市哥倫比亞大學同埋IBM千絲萬縷嘅研究關係催生咗一門新嘅學科,而紐約市哥倫比亞大學就喺1946年推出咗第一個有學分嘅電腦科學課程。五十年代至六十年代早期電腦科學開始獨立,1953年劍橋大學推出咗電腦科學第一個文憑課程。

雖然一開始大家都唔認為電腦科學可以獨立成為一門科學學問,但係五十年代後期開始學術界都接受咗電腦科學係一門獨立嘅科學學問。

睇埋

  1. "Computer science is the study of information" Department of Computer and Information Science 互聯網檔案館歸檔,歸檔日期2009年5月29號,., Guttenberg Information Technologies
  2. "Computer science is the study of computation." Computer Science Department, College of Saint Benedict 互聯網檔案館歸檔,歸檔日期2007年2月3號,., Saint John's University
  3. "Computer Science is the study of all aspects of computer systems, from the theoretical foundations to the very practical aspects of managing large software projects." Massey University 互聯網檔案館歸檔,歸檔日期2006年6月19號,.
  4. Definition - What does Computer Science mean?. Technopedia.
  5. 5.0 5.1 John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman (2000). Introduction to Automata Theory, Languages, and Computation (2nd Edition). Pearson Education.
  6. Anderson, James A. (2006). Automata theory with modern applications. With contributions by Tom Head. Cambridge: Cambridge University Press.
  7. James D. Foley, Andries Van Dam, Steven K. Feiner and John F. Hughes (1995). Computer Graphics: Principles and Practice. Addison-Wesley.
  8. Bethke, Erik (2003). Game development and production. Texas: Wordware Publishing, Inc.
  9. "Charles Babbage Institute: Who Was Charles Babbage?". cbi.umn.edu.
  10. Computation in Physical Systems. Stanford Encyclopedia of Philosophy.
  11. 11.0 11.1 Background: Algorithms 互聯網檔案館歸檔,歸檔日期2018年7月3號,..
  12. Loop. Processing.org.
  13. 13.0 13.1 Denning, P.J.; Comer, D.E.; Gries, D.; Mulder, M.C.; Tucker, A.; Turner, A.J.; Young, P.R. (January 1989). "Computing as a discipline". Communications of the ACM. 32: 9–23.
  14. Turner, Raymond, Angius, Nicola , Primiero, Giuseppe. (Spring 2019). "The Philosophy of Computer Science", The Stanford Encyclopedia of Philosophy, Edward N. Zalta (ed.),
  15. Wegner, P. (October 13–15, 1976). Research paradigms in computer science. Proceedings of the 2nd international Conference on Software Engineering. San Francisco, California, United States: IEEE Computer Society Press, Los Alamitos, CA.
  16. Church, Alonzo (1936). "An Unsolvable Problem of Elementary Number Theory". American Journal of Mathematics. 58 (58): 345–363.
  17. 17.0 17.1 Committee on the Fundamentals of Computer Science: Challenges and Opportunities, National Research Council (2004). Computer Science: Reflections on the Field, Reflections from the Field. National Academies Press.
  18. Eden, A.H. (2007). "Three Paradigms of Computer Science" (PDF). Minds and Machines. 17 (2): 135–167.
  19. McShaffry, M. (2014). Game coding complete. Nelson Education.
  20. Jenkins, H. (2004). Game design as narrative. Computer, 44(53), 118-130.