電腦科學

中國大陸 計算機科學
臺灣 電腦科學
港澳 計算機科學
日本 計算機科学
Utah teapot representing computer graphics Plot of a quicksort algorithm
large capital lambda Microsoft Tastenmaus mouse representing human-computer interaction
電腦科學用於解決資訊與計算的理論基礎,以及實現和應用它們的實用技術。

電腦科學英語:computer science,有時縮寫CS)是系統性研究資訊計算的理論基礎以及它們在電腦系統中如何實現英語implementation與應用的實用技術的學科。[1][2]它通常被形容為對那些創造、描述以及轉換資訊的演算法處理的系統研究。電腦科學包含很多分支領域;有些強調特定結果的計算,比如電腦圖形學;而有些是探討計算問題的性質,比如計算複雜性理論;還有一些領域專注於怎樣實現計算,比如程式語言理論是研究描述計算的方法,而程式設計是應用特定的程式語言解決特定的計算問題,人機互動則是專注於怎樣使電腦和計算變得有用、好用,以及隨時隨地為所用。

有時公眾會誤以為電腦科學就是解決電腦問題的事業(比如資訊科技),或者只是與使用電腦的經驗有關,如玩遊戲、上網或者文書處理。其實電腦科學所關注的,不僅僅是去理解實現類似遊戲、瀏覽器這些軟體的程式的性質,更要通過現有的知識創造新的程式或者改進已有的程式。[3]

歷史

早期電腦科學建立的基礎得追溯到最近電子電腦的發明。那些計算固定數值任務的機器,比如算盤,自古希臘時期即已存在。Wilhelm Schickard在1623年設計了世界上第一台機械計算機,但沒有完成它的建造。[4]布萊茲·帕斯卡在1642年設計並且建造了世界上第一台可以工作的機械計算機Pascaline。埃達·洛夫萊斯協助[5]查爾斯·巴貝奇維多利亞時代設計了差分機[6]1900年左右,打孔機[7]問世。然而以上這些機器都局限在只能完成單個任務,或者充其量是所有可能任務的子集。

到了20世紀40年代,隨著更新更強大的電腦器被發明,術語「電腦」開始用於指代那些機器而不是它們的祖先。[8]電腦的概念變得更加清晰,它不僅僅用於數學運算,總的來說電腦科學的領域也擴充功能到了對於計算的研究。20世紀50年代至20世紀60年代早期,電腦科學開始被確立為不同種類的學術學科。[9] 世界上第一個電腦科學學位點由普渡大學在1962年設立。[10]隨著實用電腦的出現,很多計算的應用都以它們自己的方式逐漸轉變成了研究的不同領域。

雖然最初很多人並不相信電腦可能成為科學研究的領域,但是隨後的50年里也逐漸被學術界認可。[11]IBM公司是那段時期電腦科學革命的參與者之一。在那段探索時期,IBM(International Business Machines的縮寫)發布的IBM 704以及之後的IBM 709電腦被廣泛使用。「不過,使用IBM電腦工作仍然是一件很沮喪的事情。如果你弄錯了一條指令中的一個字母,程式將會崩潰,而你也得從頭再來。」[11]20世紀50年代後期,電腦科學學科還在發展階段,這種問題在當時是一件很常見的事情。

隨著時間的推移,電腦科學技術在可用性和有效性上都有顯著提升。現代社會見證了電腦從僅僅由專業人士使用到被廣大用戶接受的重大轉變。最初,電腦非常昂貴,要有效利用它們,某種程度上必須得由專業的電腦操作員來完成。然而,隨著電腦變得普及和低廉,已經幾乎不需要專人的協助,雖然某些時候援助依舊存在。

主要成就

 
軍在二戰時用於加密通訊的恩尼格瑪密碼機。恩尼格瑪加密資訊在布萊切利園被大量破譯被認為是幫助盟軍在二戰中獲勝的重要因素。[12]

雖然電腦科學被認定為正式學術學科的歷史很短暫,但仍對科學社會作出了很多基礎貢獻。包括:

哲學

Peter Wegner英語Peter Wegner提出電腦科學可以分成三個領域:數學、工程學、科學。Amnon H. Eden提議了三種範式應用於電腦科學的各個領域:[17]

  • 「理性主義範式」,將電腦科學看作是數學的分支,在理論電腦科學中很流行,主要利用演繹推理
  • 「技術專家範式」,這類範式有著很明顯的工程學傾向,尤其是在軟體工程領域。
  • 「科學範式」,人工智慧的某些分支可以作為這類範式的代表(比如說對於人工生命的研究)。

電腦科學的領域

作為一個學科,電腦科學涵蓋了從演算法的理論研究和計算的極限,到如何通過硬體和軟體實現計算系統。[18][19] CSAB(以前被叫做Computing Sciences Accreditation Board),由Association for Computing Machinery(ACM)和IEEE電腦協會英語IEEE Computer Society(IEEE-CS)的代表組成[20],確立了電腦科學學科的4個主要領域:計算理論演算法與資料結構編程方法與程式語言,以及電腦組成與架構。CSAB還確立了其它一些重要領域,如軟體工程,人工智慧,電腦網路與通訊,資料庫系統,平行計算,分散式計算,人機互動,電腦圖形學,作業系統,以及數值和符號計算。

理論電腦科學

廣義的理論電腦科學包括經典的計算理論和其它專注於更抽象、邏輯與數學方面的計算。

計算理論

按照Peter J. Denning的說法,電腦科學的最根本問題是「什麼能夠被有效地自動化?」[21]計算理論的研究就是專注於回答這個根本問題,關於什麼能夠被計算,去實施這些計算又需要用到多少資源。為了試圖回答第一個問題,遞迴論檢驗在多種理論計算模型中哪個計算問題是可解的。而計算複雜性理論則被用於回答第二個問題,研究解決一個不同目的的計算問題的時間與空間消耗。

著名的「P=NP?」問題,千禧年大獎難題之一,[22]是計算理論的一個開放問題英語open problem

DFAexample.svg  Wang tiles.png  P = NP ? GNITIRW-TERCES Blochsphere.svg 
自動機理論 遞迴論 計算複雜性理論 密碼學 量子計算論

資訊與編碼理論

資訊理論與資訊量化相關,由克勞德·香農建立,用於尋找訊號處理操作的根本極限,比如壓縮資料和可靠的資料儲存與通訊。編碼理論是對編碼以及它們適用的特定應用性質的研究。編碼(code)被用於資料壓縮,密碼學,前向錯誤更正,近期也被用於網路編碼。研究編碼的目的在於設計更高效、可靠的資料傳輸方法。

演算法

  Sorting quicksort anim.gif  Singly linked list.png  SimplexRangeSearching.png  6n-graf.svg 
演算法分析 演算法 資料結構 計算幾何 圖論

演算法指定義良好的計算過程,它取一個或一組值作為輸入,經過一系列定義好的計算過程,得到一個或一組輸出。[23]演算法是電腦科學研究的一個重要領域,也是許多其他電腦科學技術的基礎。演算法主要包括資料結構計算幾何圖論等。除此之外,演算法還包括許多雜項,如模式符合、部分數論等。

程式設計語言理論

程式設計語言理論是電腦科學的一個分支,主要處理程式設計語言的設計、實現、分析、描述和分類,以及它們的個體特性。它屬於電腦科學學科,既受影響於也影響著數學軟體工程語言學。它是公認的電腦科學分支,同時也是活躍的研究領域,研究成果被發表在眾多學術期刊,電腦科學以及工程出版物。

  Ideal compiler.png  Python add5 syntax.svg 
類型論 編譯器設計 程式設計語言

形式化方法

形式化方法是一種特別的基於數學的技術,用於軟體硬體系統的形式規範、開發以及驗證。在軟體和硬體設計方面,形式化方法的使用動機,如同其它工程學科,是通過適當的數學分析便有助於設計的可靠性和健壯性的期望。但是,使用形式化方法會帶來很高的成本,意味著它們通常只用於高可靠性系統,這種系統中安全保安(security)是最重要的。對於形式化方法的最佳形容是各種理論電腦科學基礎種類的應用,特別是電腦邏輯演算,形式語言自動機理論和形式語意學,此外還有型別系統、代數資料類型,以及軟體和硬體規範和驗證中的一些問題。

應用電腦科學

儘管電腦科學(computer science)的名字里包含電腦這幾個字,但實際上電腦科學相當數量的領域都不涉及電腦本身的研究。因此,一些新的名字被提議出來。某些重點大學的院系傾向於術語計算科學(computing science),以精確強調兩者之間的不同。丹麥科學家Peter Naur建議使用術語"datalogy",以反映這一事實,即科學學科是圍繞著資料和資料處理,而不一定要涉及電腦。第一個使用這個術語的科學機構是哥本哈根大學Datalogy學院,該學院成立於1969年,Peter Naur便是第一任教授。這個術語主要被用於北歐國家。同時,在計算技術發展初期,《ACM通訊》建議了一些針對計算領域從業人員的術語:turingineer,turologist,flow-charts-man,applied meta-mathematician及applied epistemologist。[24] 三個月後在同樣的期刊上,comptologist被提出,第二年又變成了hypologist[25] 術語computics也曾經被提議過。在歐洲大陸,起源於資訊(information)和數學或者自動(automatic)的名字比起源於電腦或者計算(computation)更常見,如informatique(法語),Informatik(德語),informatika(斯拉夫語族)。

著名電腦科學家Edsger Dijkstra曾經指出:「電腦科學並不只是關於電腦,就像天文學並不只是關於望遠鏡一樣。」("Computer science is no more about computers than astronomy is about telescopes.")設計、部署電腦和電腦系統通常被認為是非電腦科學學科的領域。例如,研究電腦硬體被看作是電腦工程的一部分,而對於商業電腦系統的研究和部署被稱為資訊科技或者資訊系統。然而,現如今也越來越多地融合了各類電腦相關學科的思想。電腦科學研究也經常與其它學科交叉,比如心理學認知科學語言學數學物理學,統計學和經濟學

電腦科學被認為比其它科學學科與數學的聯繫更加密切,一些觀察者說計算就是一門數學科學。[21] 早期電腦科學受數學研究成果的影響很大,如Kurt GödelAlan Turing,這兩個領域在某些學科,例如數理邏輯範疇論域理論代數,也不斷有有益的思想交流。

電腦科學和軟體工程的關係是一個有爭議的話題,隨後關於什麼是「軟體工程」,電腦科學又該如何定義的爭論使得情況更加混亂。David Parnas從其它工程和科學學科之間的關係得到啟示,宣稱電腦科學的主要重點總的來說是研究計算的性質,而軟體工程的主要重點是具體的計算設計,以達到實用的目的,這樣便構成了兩個獨立但又互補的學科。[26]

人工智慧

這個電腦科學分支旨在創造可以解決計算問題,以及像動物和人類一樣思考與交流的人造系統。無論是在理論還是應用上,都要求研究者在多個學科領域具備細緻的、綜合的專長,比如應用數學邏輯符號學電機工程學精神哲學神經生理學社會智力,用於推動智慧研究領域,或者被應用到其它需要計算理解與建模的學科領域,如金融或是物理科學。人工智慧領域開始變得正式源於Alan Turing這位人工智慧先驅提出了圖靈試驗,以回答這樣一個終極問題:「電腦能夠思考嗎?」

Nicolas P. Rougier's rendering of the human brain.png  Eye.png  Corner.png  KnnClassification.svg 
機器學習 電腦視覺 圖像處理 模式識別
User-FastFission-brain.gif  Julia iteration data.png  Sky.png  Earth.png 
認知科學 資料探勘 進化計算 資訊檢索
Neuron.svg  English.png  HONDA ASIMO.jpg 
知識表示 自然語言處理 機器人

電腦體系結構與工程

電腦系統結構,或者數字電腦組織,是一個電腦系統的概念設計和根本運作結構。它主要側重於CPU的內部執行和記憶體存取位址。這個領域經常涉及電腦工程和電子工程學科,選擇和互連硬體元件以創造滿足功能、效能和成本目標的電腦。

NOR ANSI.svg  Fivestagespipeline.png  SIMD.svg 
數字電路 微架構 多處理機
Operating system placement.svg  NETWORK-Library-LAN.png  Emp Tables (Database).PNG  Padlock.svg 
作業系統 電腦網路 資料庫 電腦保安
Roomba original.jpg  Flowchart.png  Ideal compiler.png  Python add5 syntax.svg 
普適計算 系統架構 編譯器設計 程式語言

電腦效能分析

電腦效能分析是一門研究電腦中工作流的學科,通常目的是為了提高吞吐量、控制回應時間、消除瓶頸以及預測可預見的峰值負載下的效能。[27]

電腦圖形與視覺

電腦圖形學是對於數字視覺內容的研究,涉及圖像資料的合成和操作。它跟電腦科學的許多其它領域密切相關,包括電腦視覺、圖像處理、計算幾何視覺化,同時也被大量運用在特效和電子遊戲

電腦保安和密碼學

電腦保安是電腦技術的一個分支,其目標包括保護資訊免受未經授權的存取、中斷和修改,同時為系統的預期用戶保持系統的可存取性和可用性。密碼學是對於隱藏(加密)和破譯(解密)資訊的實踐與研究。現代密碼學主要跟電腦科學相關,很多加密和解密演算法都是基於它們的計算複雜性。

計算科學

計算科學(或者科學計算)是關注構建數學模型和量化分析技術的研究領域,同時通過電腦分析和解決科學問題。在實際使用中,它通常是電腦模擬計算等形式在各個科學學科問題中的應用。

Lorenz attractor yb.svg  Quark wiki.jpg  Naphthalene-3D-balls.png  1u04-argonaute.png 
數值分析 計算物理學 計算化學 生物資訊學

電腦網路

電腦網路是管理遍及全球的電腦連線成的網路的電腦科學分支。

並行、並列和分散式系統

並行性(concurrency)是系統的一種性質,這類系統可以同時執行多個可能互相互動的計算。一些數學模型,如Petri網、行程演算和PRAM模型,被建立以用於通用並行計算。分散式系統將並行性的思想擴充功能到了多台由網路連線的電腦。同一分散式系統中的電腦擁有自己的私有記憶體,它們之間經常交換資訊以達到一個共同的目的。

資料庫

資料庫是為了更容易地組織、儲存和檢索大量資料。資料庫由資料庫管理系統管理,通過資料模型查詢語言來儲存、建立、維護和搜尋資料。

資訊科學

Earth.png  Neuron.png  English.png  Wacom graphics tablet and pen.png 
資訊檢索 知識表示 自然語言處理 人機互動

另外還包括醫學資訊學。

軟體工程

軟體工程是對於設計、實現和修改軟體的研究,以確保軟體的高品質、適中的價格、可維護性,以及能夠快速構建。它是一個系統的軟體設計方法,涉及工程實踐到軟體的應用。

學術界

會議

期刊

作為高等教育的二級專業

 
印度一個二手電腦書攤

一些教授電腦科學的大學[哪個/哪些?]主要進行計算和演算法推理的研究。其中包括計算理論、演算法分析、形式化方法、並列理論、資料庫、電腦圖形學以及系統分析等。通常也教授程式設計,但僅僅將它看作是支援電腦科學其它領域的媒介,而不是高階研究的重心。

其它一些學院、大學、中學以及職業培訓[哪個/哪些?]的電腦科學課程則主要側重於訓練高階編程,而不是演算法和計算理論。這些課程著重教授那些對於軟體工業很重要的技能。像這樣的電腦編程過程通常被叫做軟體工程

然而,儘管電腦科學專業日益推動著美國經濟,但是電腦科學教育依然不存在大多數美國K-12課程中。2010年10月由ACM電腦科學教師協會(CSTA)共同發表了一篇名為「Running on Empty: The Failure to Teach K-12 Computer Science in the Digital Age」的報告,文中揭示了僅有14個州通過了有意義的高中電腦科學教育標準。同時,僅有9個州將高中電腦科學課程算作畢業要求的核心學科。配合「Running on Empty」這篇文章,一個新的無黨派宣傳聯盟:Computing in the Core(CinC)被建立,以影響聯邦和政府政策,比如Computer Science Education Act要求政府撥款以制定計劃完善電腦科學教育及支援電腦科學教師。

在中國,「電腦科學」或「電腦科學與技術」是工科(一級門類)下的二級專業。一般可細分為三級專業:

工業界

參考文獻

  1. ^ Denning, P. J.; Comer, D. E.; Gries, D.; Mulder, M. C.; Tucker, A.; Turner, A. J.; Young, P. R. Computing as a discipline. Communications of the ACM. Jan 1989, 32: 9–23. doi:10.1145/63238.63239.  volume = 64 "Computer science and engineering is the systematic study of algorithmic processes-their theory, analysis, design, efficiency, implementation, and application-that describe and transform information."
  2. ^ Wegner, P. 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. October 13–15, 1976. Computer science is the study of information structures 
  3. ^ "Common myths and preconceptions about Cambridge Computer Science" Computer Science Department, University of Cambridge
  4. ^ Nigel Tout. Calculator Timeline. Vintage Calculator Web Museum. 2006 [2006-09-18]. 
  5. ^ A Selection and Adaptation From Ada's Notes found in "Ada, The Enchantress of Numbers," by Betty Alexandra Toole Ed.D. Strawberry Press, Mill Valley, CA. [2006-05-04]. 
  6. ^ Science Museum - Introduction to Babbage. [2006-09-24]. (原始內容存檔於2006-09-08). 
  7. ^ IBM Punch Cards in the U.S. Army. [2006-09-24]. 
  8. ^ The Association for Computing Machinery (ACM) was founded in 1947.
  9. ^ CAM.ac.uk
  10. ^ Computer science pioneer Samuel D. Conte dies at 85 July 1, 2002
  11. ^ 11.0 11.1 Levy, Steven. Hackers: Heroes of the Computer Revolution. Doubleday. 1984. ISBN 0-385-19195-2. 
  12. ^ 12.0 12.1 David Kahn, The Codebreakers, 1967, ISBN 978-0-684-83130-5.
  13. ^ 13.0 13.1 Cornell.edu
  14. ^ Constable, R.L. Computer Science: Achievements and Challenges circa 2000 (PDF). March 2000. 
  15. ^ Abelson, H.; G.J. Sussman with J. Sussman. Structure and Interpretation of Computer Programs 2nd. MIT Press. 1996. ISBN 0-262-01153-0. The computer revolution is a revolution in the way we think and in the way we express what we think. The essence of this change is the emergence of what might best be called procedural epistemology — the study of the structure of knowledge from an imperative point of view, as opposed to the more declarative point of view taken by classical mathematical subjects. 
  16. ^ Black box traders are on the march The Telegraph, August 26, 2006
  17. ^ Eden, A. H. Three Paradigms of Computer Science (PDF). Minds and Machines. 2007, 17 (2): 135–167. doi:10.1007/s11023-007-9060-8. 
  18. ^ Computing Sciences Accreditation Board. Computer Science as a Profession. 28 May 1997 [2010-05-23]. (原始內容存檔於2008-06-17). 
  19. ^ Committee on the Fundamentals of Computer Science: Challenges and Opportunities, National Research Council. Computer Science: Reflections on the Field, Reflections from the Field. National Academies Press. 2004. ISBN 978-0-309-09301-9. 
  20. ^ CSAB, Inc.
  21. ^ 21.0 21.1 Denning, P.J. Computer Science: The Discipline (PDF). Encyclopedia of Computer Science. 2000. (原始內容 (PDF)存檔於2006-05-25). 
  22. ^ Clay Mathematics Institute P=NP
  23. ^ 《演算法導論》1.1[美]Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein著, 潘金貴、顧鐵成、李成法、葉懋譯,機械工業出版社 2011年7月第1版
  24. ^ Communications of the ACM 1(4):p.6
  25. ^ Communications of the ACM 2(1):p.4
  26. ^ Parnas, D. L. Annals of Software Engineering. 1998, 6: 19–37. doi:10.1023/A:1018949113292.  , p. 19: "Rather than treat software engineering as a subfield of computer science, I treat it as an element of the set, Civil Engineering, Mechanical Engineering, Chemical Engineering, Electrical Engineering, [...]"
  27. ^ Wescott, Bob. The Every Computer Performance Book, Chapter 3: Useful laws. CreateSpace. 2013. ISBN 1482657759. 

延伸閱讀

概述
  • Tucker, Allen B. Computer Science Handbook 2nd. Chapman and Hall/CRC. 2004. ISBN 158488360X. 
    • "Within more than 70 chapters, every one new or significantly revised, one can find any kind of information and references about computer science one can imagine. [...] all in all, there is absolute nothing about Computer Science that can not be found in the 2.5 kilogram-encyclopaedia with its 110 survey articles [...]." (Christoph Meinel, Zentralblatt MATH)
  • van Leeuwen, Jan. Handbook of Theoretical Computer Science. The MIT Press. 1994. ISBN 0262720205. 
    • "[...] this set is the most unique and possibly the most useful to the [theoretical computer science] community, in support both of teaching and research [...]. The books can be used by anyone wanting simply to gain an understanding of one of these areas, or by someone desiring to be in research in a topic, or by instructors wishing to find timely information on a subject they are teaching outside their major areas of expertise." (Rocky Ross, SIGACT News)
  • Ralston, Anthony; Reilly, Edwin D.; Hemmendinger, David. Encyclopedia of Computer Science 4th. Grove's Dictionaries. 2000. ISBN 156159248X. 
    • "Since 1976, this has been the definitive reference work on computer, computing, and computer science. [...] Alphabetically arranged and classified into broad subject areas, the entries cover hardware, computer systems, information and data, software, the mathematics of computing, theory of computation, methodologies, applications, and computing milieu. The editors have done a commendable job of blending historical perspective and practical reference information. The encyclopedia remains essential for most public and academic library reference collections." (Joe Accardin, Northeastern Illinois Univ., Chicago)
論文選集
  • Knuth, Donald E. Selected Papers on Computer Science. CSLI Publications, Cambridge University Press. 1996. 
    • "Covering a period from 1966 to 1993, its interest lies not only in the content of each of these papers — still timely today — but also in their being put together so that ideas expressed at different times complement each other nicely." (N. Bernard, Zentralblatt MATH)
文章
  • Peter J. Denning. Is computer science science?, Communications of the ACM, April 2005.
  • Peter J. Denning, Great principles in computing curricula, Technical Symposium on Computer Science Education, 2004.
  • Research evaluation for computer science, Informatics Europe report. Shorter journal version: Bertrand Meyer, Christine Choppy, Jan van Leeuwen and Jorgen Staunstrup, Research evaluation for computer science, in Communications of the ACM, vol. 52, no. 4, pp. 31-34, April 2009.
課程與分類
  • Association for Computing Machinery. 1998 ACM Computing Classification System. 1998.
  • Joint Task Force of Association for Computing Machinery (ACM), Association for Information Systems (AIS) and IEEE Computer Society (IEEE-CS). Computing Curricula 2005: The Overview Report. September 30, 2005.
  • Norman Gibbs, Allen Tucker. "A model curriculum for a liberal arts degree in computer science". Communications of the ACM, Volume 29 Issue 3, March 1986.

外部連結

參考文獻和學術搜尋引擎
Webcast

參見