計算機科學

計算機科學（Computer science，縮寫為CS）是系統性研究信息與計算的理論基礎以及它們在計算機系統中如何實現與應用的實用技術的學科。 它通常被形容為對那些創造、描述以及轉換信息的算法處理的系統研究。計算機科學包含很多分支領域；有些強調特定結果的計算，比如計算機圖形學；而有些是探討計算問題的性質，比如計算複雜性理論；還有一些領域專注於怎樣實現計算，比如程式語言理論是研究描述計算的方法，而程式設計是應用特定的程式語言解決特定的計算問題，人機交互則是專注於怎樣使計算機和計算變得有用、好用，以及隨時隨地為人所用。
有時公眾會誤以為計算機科學就是解決計算機問題的事業（比如信息技術），或者只是與使用計算機的經驗有關，如玩遊戲、上網或者文字處理。其實計算機科學所關注的，不僅僅是去理解實現類似遊戲、瀏覽器這些軟件的程序的性質，更要通過現有的知識創造新的程序或者改進已有的程序。
儘管計算機科學（computer science）的名字裡包含計-{}-算機這幾個字，但實際上計算機科學相當數量的領域都不涉及計算機本身的研究。因此，一些新的名字被提議出來。某些重點大學的院系傾向於術語計算科學（computing science），以精確強調兩者之間的不同。丹麥科學家彼得·諾爾建議使用術語"datalogy"，以反映這一事實，即科學學科是圍繞著數據和數據處理，而不一定要涉及計算機。第一個使用這個術語的科學機構是Q5260205，該學院成立於1969年，彼得·諾爾便是第一任教授。這個術語主要被用於北歐國家。同時，在計算技術發展初期，《ACM通訊》建議了一些針對計算領域從業人員的術語：圖靈工程師（turingineer），turologist，流程圖人（flow-charts-man），應用元數學家（applied meta-mathematician）及應用認識論者（applied epistemologist）。 三個月後在同樣的期刊上，comptologist被提出，第二年又變成了hypologist。 術語computics也曾經被提議過。在歐洲大陸，起源於信息（information）和數學或者自動（automatic）的名字比起源於計算機或者計算（computation）更常見，如informatique（法語），Informatik（德語），informatika（斯拉夫語族）。
著名計算機科學家艾茲赫爾·戴克斯特拉曾經指出：“計算機科學並不只是關於計算機，就像天文學並不只是關於望遠鏡一樣。”（"Computer science is no more about computers than astronomy is about telescopes."）設計、部署計算機和計算機系統通常被認為是非計算機科學學科的領域。例如，研究計算機硬件被看作是計算機工程的一部分，而對於商業計算機系統的研究和部署被稱為信息技術或者信息系統。然而，現如今也越來越多地融合了各類計算機相關學科的思想。計算機科學研究也經常與其它學科交叉，比如數學、工程學、認知科學和經濟學等。
計算機科學被認為比其它科學學科與數學的聯繫更加密切，一些觀察者說計算就是一門數學科學。 早期計算機科學受數學研究成果的影響很大，如庫爾特·哥德爾、艾倫·圖靈、Rózsa Péter，阿隆佐·邱奇等數學家的研究，這兩個領域在某些學科，例如數理邏輯、範疇論、域理論和代數，也不斷有有益的思想交流。

**歷史**
早期計算機科學建立的基礎得追溯到最近電子計算機的發明。那些計算固定數值任務的機器，比如算盤，自古希臘時期即已存在，而用於加快計算的算法更是在算盤等古老的計算儀器發明之前就已被廣泛使用。
Wilhelm Schickard在1623年設計了世界上第一臺機械計算器，但沒有完成它的建造。布萊茲·帕斯卡在1642年設計並且建造了世界上第一臺可以工作的機械計算器Pascaline。1673年，萊布尼茲開始了步進計算器的建造工作並於1694年竣工，他也因為記錄了二進制系統而被認為是第一個計算機科學家和信息理論家。埃達·洛夫萊斯協助查爾斯·巴貝奇在維多利亞時代設計了差分機。1900年左右，打孔機問世。然而以上這些機器都侷限在只能完成單個任務，或者充其量是所有可能任務的子集。
到了20世紀40年代，隨著更新更強大的計算機器(如ABC計算機、電子數值積分計算機)被髮明，術語“計算機”開始用於指代那些機器而不是它們的祖先。計算機的概念變得更加清晰，它不僅僅用於數學運算，總的來說計算機科學的領域也擴展到了對於計算的研究。20世紀50年代至20世紀60年代早期，計算機科學開始被確立為不同種類的學術學科。 世界上第一個計算機科學學位點由普渡大學在1962年設立。隨著實用計算機的出現，很多計算的應用都以它們自己的方式逐漸轉變成了研究的不同領域。
雖然最初很多人並不相信計算機可能成為科學研究的領域，但是隨後的50年裡也逐漸被學術界認可。IBM公司是那段時期計算機科學革命的參與者之一。在那段探索時期，IBM（International Business Machines的縮寫）發佈的IBM 704以及之後的IBM 709計算機被廣泛使用。“不過，使用IBM電腦工作仍然是一件很沮喪的事情。如果你弄錯了一條指令中的一個字母，程序將會崩潰，而你也得從頭再來。”20世紀50年代後期，計算機科學學科還在發展階段，這種問題在當時是一件很常見的事情。
隨著時間的推移，計算機科學技術在可用性和有效性上都有顯著提升。現代社會見證了計算機從僅僅由專業人士使用到被廣大用戶接受的重大轉變。最初，計算機非常昂貴，要有效利用它們，某種程度上必須得由專業的計算機操作員來完成。然而，隨著計算機變得普及和低廉，已經幾乎不需要專人的協助，雖然某些時候援助依舊存在。

**主要成就**
德軍在二戰時用於加密通信的恩尼格瑪密碼機。恩尼格瑪加密信息在布萊切利園被大量破譯被認為是幫助盟軍在二戰中獲勝的重要因素。
雖然計算機科學被認定為一門正規學科的歷史很短暫，但它對科學和社會做出了許多根本性的貢獻ー事實上，計算機科學與電子學一樣，是信息時代的奠基科學，也是資訊革命的驅動力，被視為繼工業革命（公元1750-1850年）和新石器革命（公元前8000-5000年）之後人類技術進步的第三次重大飛躍。
這些貢獻包括：- 開啟“數字化革命”，包括當今的信息時代和互聯網。- 對計算和可計算性的形式定義，證明了存在計算上不可解及難解型問題。- 提出程式語言的概念，作為一種使用不同的抽象層次來精確表達處理程序的工具。- 在密碼學領域，恩尼格瑪密碼機的破譯被視為盟軍在二戰取得勝利的重要因素。- 科學計算讓分析實際中非常複雜的過程和場景成為可能，可以完全藉助軟件來進行一些實驗。同時也實現了對人類思想的深入研究，使得人類基因組計劃繪製人類基因成為可能。 還有探索蛋白質摺疊的分佈式計算項目Folding@home。- 算法交易通過使用人工智能、機器學習和其他大規模的統計和數值方法，提高了金融市場的效率和流通性。 高頻率的算法交易也會加快波動性。- 計算機圖形和電腦成像（CGI）在現代娛樂中無處不在，尤其是在電視、電影、廣告、動畫和視頻遊戲中。即便是沒有用到CGI技術的電影，通常也是用數碼相機拍攝，或者使用數字視頻編輯器剪輯或後期處理過的。- 仿真各種過程，包括計算流體動力學、物理、電氣和電子系統和電路，以及同人類居住地聯繫在一起的社會和社會形態（尤其是戰爭遊戲，war games）。現代計算機能夠對這些設計進行優化，如飛機設計。尤其在電氣與電子電路設計中，SPICE軟件對新的物理實現（或修改）設計具有很大幫助。 它包含了針對集成電路的基本設計軟件。date=2010-10- 人工智能變得越來越重要，因為它變得更加高效和複雜。人工智能的應用有很多，其中一些可以在家裡看到，比如機器人吸塵器。它也出現在視頻遊戲和現代戰場上的無人機、反導彈系統和小隊支援機器人中。- 人機交互將新穎的算法與設計策略相結合，可實現快速的人類績效，低錯誤率，易於學習和高度滿意度。研究人員利用人種學觀察和自動化數據收集來了解用戶需求，然後進行可用性測試來完善設計。關鍵的創新包括direct manipulation、可選擇的網頁鏈接、觸摸屏設計、移動應用程序和虛擬現實。

**哲學**
提出計算機科學可以分成三個領域：數學、工程學、科學。Amnon H. Eden提議了三種範式應用於計算機科學的各個領域：- “理性主義範式”，將計算機科學看作是數學的分支，在理論計算機科學中很流行，主要利用演繹推理。- “技術專家範式”，這類範式有著很明顯的工程學傾向，尤其是在軟件工程領域。- “科學範式”，人工智能的某些分支可以作為這類範式的代表（比如說對於人工生命的研究）。

**領域**
作為一個學科，計算機科學涵蓋了從算法的理論研究和計算的極限，到如何通過硬件和軟件實現計算系統。 CSAB（以前被叫做Computing Sciences Accreditation Board），由Association for Computing Machinery（ACM）和IEEE Computer Society（IEEE-CS）的代表組成，確立了計算機科學學科的4個主要領域：計算理論，算法與數據結構，編程方法與編程語言，以及計算機組成與架構。CSAB還確立了其它一些重要領域，如軟件工程，人工智能，計算機網絡與通信，數據庫系統，並行計算，分佈式計算，人機交互，計算機圖形學，操作系統，以及數值和符號計算。

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

**數據結構和算法**
算法指定義良好的計算過程，它取一個或一組值作為輸入，經過一系列定義好的計算過程，得到一個或一組輸出。算法是計算機科學研究的一個重要領域，也是許多其他計算機科學技術的基礎。算法主要包括數據結構、計算幾何、圖論等。除此之外，算法還包括許多雜項，如模式匹配、部分數論等。

**計算理論**
按照Peter J. Denning的說法，計算機科學的最根本問題是“什麼能夠被有效地自動化？”計算理論的研究就是專注於回答這個根本問題，關於什麼能夠被計算，去實施這些計算又需要用到多少資源。為了試圖回答第一個問題，遞歸論檢驗在多種理論計算模型中哪個計算問題是可解的。而計算複雜性理論則被用於回答第二個問題，研究解決一個不同目的的計算問題的時間與空間消耗。
著名的“P=NP?”問題，千禧年大獎難題之一，是計算理論的一個開放問題。

**信息論與編碼理論**
信息論與信息量化相關，由克勞德·香農創建，用於尋找信號處理操作的根本極限，比如壓縮數據和可靠的數據存儲與通訊。編碼理論是對編碼以及它們適用的特定應用性質的研究。編碼（code）被用於數據壓縮，密碼學，前向糾錯，近期也被用於網絡編碼。研究編碼的目的在於設計更高效、可靠的數據傳輸方法。

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

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

**計算機系統**

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

**操作系統**
操作系統是管理電腦硬件與軟件資源的電腦程式，同時也是電腦系統的核心與基石。作業系統需要處理如管理與配置記憶體、決定系統資源供需的優先次序、控制輸入與輸出裝置、操作網路與管理檔案系統等基本事務。作業系統也提供一個讓使用者與各電腦設備互動的操作介面。

**併發、並行與分佈式系統**
併發性（concurrency）是系統的一種性質，這類系統可以同時執行多個可能互相交互的計算。一些數學模型，如Petri網、進程演算和PRAM模型，被建立以用於通用併發計算。分佈式系統將併發性的思想擴展到了多臺由網絡連接的計算機。同一分佈式系統中的計算機擁有自己的私有內存，它們之間經常交換信息以達到一個共同的目的。

**計算機網絡**
計算機網絡是管理遍及全球的計算機連接成的網絡的計算機科學分支。

**計算機安全和密碼學**
計算機安全是計算機技術的一個分支，其目標包括保護信息免受未經授權的訪問、中斷和修改，同時為系統的預期用戶保持系統的可訪問性和可用性。密碼學是對於隱藏（加密）和破譯（解密）信息的實踐與研究。現代密碼學主要跟計算機科學相關，很多加密和解密算法都是基於它們的計算複雜性。

**數據庫**
數據庫是為了更容易地組織、存儲和檢索大量數據。數據庫由數據庫管理系統管理，通過數據模型和查詢語言來存儲、創建、維護和搜索數據。

**計算機應用技術**

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

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

**多媒體技術**
多媒體技術是指通過計算機對文字、數據、圖形、圖像、動畫、聲音等多種媒體信息進行綜合處理和管理，使用戶可以通過多種感官與計算機進行即時信息交互的技術，又稱為計算機多媒體技術。

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

**軟件工程**
軟件工程是對於設計、實現和修改軟件的研究，以確保軟件的高質量、適中的價格、可維護性，以及能夠快速構建。它是一個系統的軟件設計方法，涉及工程實踐到軟件的應用。
計算機科學和軟件工程的關係是一個有爭議的話題，隨後關於什麼是“軟件工程”，計算機科學又該如何定義的爭論使得情況更加混亂。David Parnas從其它工程和科學學科之間的關係得到啟示，宣稱計算機科學的主要重點總的來說是研究計算的性質，而軟件工程的主要重點是具體的計算設計，以達到實用的目的，這樣便構成了兩個獨立但又互補的學科。

**學術界**

**會議**
SIGIR(Special Interest Group on Information Retrieval)
KDD(Knowledge Discovery and Data Mining)
AAAI(the Association for the Advance of Artificial Intelligence)
ACL(Annual Meeting of the Association for Computational Linguistics)
NAACL(The North American Chapter of the Association for Computational Linguistics) 其為ACL的北美分會
EMNLP(Conference on Empirical Methods in Natural Language Processing)
IJCAI( International Joint Conference on Artificial Intelligence)

**期刊**

**作為高等教育的二級專業**
印度一個二手電腦書攤
主要進行計算和算法推理的研究。其中包括計算理論、算法分析、形式化方法、並行理論、數據庫、計算機圖形學以及系統分析等。通常也教授程序設計，但僅僅將它看作是支持計算機科學其它領域的媒介，而不是高級研究的重心。
的計算機科學課程則主要側重於訓練高級編程，而不是算法和計算理論。這些課程著重教授那些對於軟件工業很重要的技能。像這樣的計算機編程過程通常被叫做軟件工程。
然而，儘管計算機科學專業日益推動著美國經濟，但是計算機科學教育依然不存在大多數美國K-12課程中。2010年10月由 ACMdate=20140622192204 和 計算機科學教師協會（CSTA）date=20110608205049 共同發表了一篇名為 “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 Actdate=20110501103020 要求政府撥款以制定計劃完善計算機科學教育及支持計算機科學教師。
在中國，“計算機科學”或“計算機科學與技術”是工科（一級門類）下的二級專業。一般可細分為三級專業：
*計算機軟件：圍繞著軟件開發、軟件工程、編程語言等
*計算機應用：計算機的各種應用算法、技術。如：模式識別、計算視覺、計算機圖形學等等。
*計算機體系結構：關於計算機或計算機信息系統的“硬件”。

**工業界**

**參見**
 未解決的計算機科學問題- 計算機科學家的學術家譜- 計算機科學家- 計算- 計算機科學的歷史- 中國計算機科學大事年表- 信息學- 學術計算機科學系列表- 計算機科學會議列表- 計算機科學家列表- 計算機科學開放問題列表- 計算機科學出版物列表- 計算機科學先驅列表- 軟件工程主題列表- 計算機科學的哲學- 計算機領域中的女性- 計算機- 計算尺- 算盤- 語言- 科學- 科學家- 算籌- 科學會議- 計算機遊戲- 按揭計算機- 計算機程式- CASIO 計算機- 計算機工程- 桌上型計算機

**參考文獻**

**延伸閱讀**
 概述- edition=2nd
** "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)- 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)- dead-url=no 
** "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)
 論文選集- Cite book |title=Selected Papers on Computer Science |last=Knuth |first=Donald E. |authorlink=Donald Knuth |publisher=CSLI Publications, Cambridge University Press |year=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.

**外部鏈接**
 Computers/Computer_Science/-  Scholarly Societies in Computer Sciencedate=20110623002546 -  Best Papers Awards in Computer Science since 1996date=20110713100135 -  Photographs of computer scientistsdate=20170701061126  by Bertrand Meyer
 參考文獻和學術搜索引擎-  CiteSeerxdate=20110305120205 : search engine, digital library and repository for scientific and academic papers with a focus on computer and information science.-  DBLP Computer Science Bibliographydate=20110612131755 : computer science bibliography website hosted at Universität Trier, in Germany.-  The Collection of Computer Science Bibliographiesdate=20110607123538 
 Webcast-  Directory of free university lectures in Computer Science-  Collection of computer science lecturesdate=20110428010325 -  UCLA Computer Science 1 Freshman Computer Science Seminar Section 1-  Berkeley Introduction to Computersdate=20100614150800