計算機科學
計算機科學是計算,信息和自動化的研究。計算機科學跨越理論學科(例如算法,計算理論和信息理論),以應用學科(包括硬件和軟件的設計和實施)。儘管經常被認為是一門學科,但計算機科學與計算機編程密切相關。
算法和數據結構是計算機科學的核心。計算理論涉及可以使用它們來解決的計算和一般問題的摘要模型。密碼學和計算機安全的領域涉及研究用於安全通信和防止安全漏洞的手段。計算機圖形和計算幾何形狀解決圖像的產生。編程語言理論考慮了描述計算過程的不同方法,數據庫理論涉及數據存儲庫的管理。人與計算機的交互研究人類和計算機相互作用的界面,軟件工程專注於開發軟件的設計和原理。諸如操作系統,網絡和嵌入式系統等領域研究了複雜系統背後的原理和設計。計算機架構描述了計算機組件和計算機操作設備的構建。人工智能和機器學習旨在綜合目標的過程,例如解決問題,環境適應,計劃和學習,在人類和動物中發現。在人工智能中,計算機視覺旨在了解和處理圖像和視頻數據,而自然語言處理旨在了解和處理文本和語言數據。
計算機科學的基本關注點是確定什麼可以和不能自動化的。圖靈獎通常被認為是計算機科學中最高的區別。
歷史



成為計算機科學的最早基礎早於現代數字計算機的發明。用於計算固定數值任務(例如算盤)的機器自上古以來就已經存在,有助於計算(例如乘法和劃分)。自上古以來,即使在開發複雜的計算設備之前,也存在用於執行計算的算法。
Wilhelm Schickard在1623年設計並構建了第一個工作機械計算器。 1673年, Gottfried Leibniz展示了一個數字機械計算器,稱為階梯型Reckoner 。萊布尼茲(Leibniz)可能被視為第一個計算機科學家和信息理論家,這是由於各種原因,包括他記錄了二進制編號系統的事實。 1820年,托馬斯·德·科爾瑪(Thomas de Colmar)發明了簡化的算術計,這是第一台計算機,這是第一台計算機的強度足以每天在辦公室環境中使用。查爾斯·巴巴奇(Charles Babbage)於1822年開始設計了第一個自動機械計算器,他的差異引擎,最終使他成為了第一個可編程機械計算器,即他的分析引擎的想法。他於1834年開始開發這台機器,“在不到兩年的時間裡,他勾勒出了現代計算機的許多顯著特徵”。 “至關重要的步驟是採用了源自jacquard織機的打孔卡系統”,使其無限地編程。 1843年,在翻譯有關分析引擎的法國文章時,艾達·洛夫萊斯(Ada Lovelace)在她包括的眾多音符之一中寫道,一種計算伯努利號碼的算法,該算法被認為是專門針對實施的第一個發布的算法在計算機上。 1885年左右,赫爾曼·霍勒里斯(Herman Hollerith)發明了製表師,該製表器使用打孔卡來處理統計信息。最終,他的公司成為IBM的一部分。在巴巴奇(Babbage)之後,儘管沒有意識到他的早期作品,但珀西·盧德蓋特(Percy Ludgate)在1909年發表了歷史上僅有的兩種機械分析引擎設計的兩個設計。 1914年,西班牙工程師Leonardo Torres Quevedo發表了他的關於自動化的文章,並受Babbage的啟發,這是一種理論上的機電計算機,該計算機將由僅閱讀程序控制。該論文還介紹了浮點算術的想法。 1920年,為了慶祝算術計發明的100週年,托雷斯在巴黎呈現了機電算術計,該原型表明了機電分析引擎的可行性,可以在該機電上鍵入命令,並自動打印結果。 1937年,即Babbage不可能做夢的一百年,霍華德·艾肯(Howard Aiken)說服了IBM,該公司正在製造各種打孔器的紙牌設備,並且還從事計算器業務,以開發其巨大的可編程計算器,基於Babbage的Ascc/Harvard Mark I ,基於Babbage的分析。發動機本身使用了卡和中央計算單元。當機器完成後,有些人稱其為“ Babbage的夢想成真”。
在1940年代,隨著新型和更強大的計算機的開發,例如Atanasoff – Berry計算機和ENIAC ,計算機一詞來指代機器,而不是其人類的前輩。很明顯,計算機不僅可以用於數學計算,還可以將計算機科學領域擴展到總體上研究計算。 1945年, IBM在紐約市的哥倫比亞大學創立了沃森科學計算實驗室。曼哈頓西側的翻新兄弟會房屋是IBM的第一個專門研究純科學的實驗室。該實驗室是IBM研究部門的先驅,該部門今天在世界各地運營研究設施。最終,IBM和哥倫比亞大學之間的密切關係在出現新科學學科方面發揮了重要作用,哥倫比亞在1946年提供了計算機科學的首批學術學學課程之一。 1950年代和1960年代初。世界上第一個計算機科學學位課程,劍橋計算機科學文憑,於1953年始於劍橋大學計算機實驗室。美國第一個計算機科學係於1962年在普渡大學成立。計算的應用已成為其自身權利的不同研究領域。
詞源和範圍
儘管“計算機科學”一詞首次提議,但在1959年的ACM通訊中出現了一詞,其中路易斯·費恩(Louis Fein通過爭辯說,像管理科學一樣,本質上應用和跨學科的主題是合理的,同時具有學術學科的典型特徵。他的努力以及其他其他分析師喬治·福賽斯(George Forsythe)等其他人的努力得到了回報:大學繼續創建了這樣的部門,從1962年開始從普渡大學開始。儘管有大量計算機科學,但大量的計算機科學並不涉及對計算機本身的研究。因此,已經提出了幾個替代名稱。主要大學的某些系更喜歡計算科學一詞,可以準確強調這種差異。丹麥科學家彼得·諾爾(Peter Naur)建議使用數據法,以反映以下事實:科學紀律圍繞數據和數據處理,同時不一定涉及計算機。第一個使用該術語的科學機構是哥本哈根大學的數據學系,成立於1969年,彼得·諾爾(Peter Naur)是數據學的第一任教授。該術語主要用於斯堪的納維亞國家。諾爾(Naur)也提出的另一種術語是數據科學。現在,它用於數據分析的多學科領域,包括統計和數據庫。
在計算初期,在ACM的通信中建議了計算領域的實踐者的許多術語 - Turingineer , Turmostics , Flow-Charts-Man , Applied Meta-Meadermaticians和Applied Cepistemsosic 。三個月後,在同一篇期刊上,建議伴侶,緊隨其後的是擬師。還提出了一詞計算。在歐洲,經常使用源自“自動信息”(例如“ Informazione automatica”)或“信息與數學”一詞的合同翻譯的術語), Informática (西班牙語,葡萄牙語), Informatika (斯拉夫語言和匈牙利語)或pliroforiki ( πληροφmotbictionborem- ,意思是Informatics )。英國也採用了類似的話(如愛丁堡大學信息學院一樣)。 “但是,在美國,信息學與應用計算或在另一個領域的上下文中的計算有關。”
Edsger Dijkstra通常歸因於(肯定不是首先提出的)的民俗引文,他指出:“計算機科學不再是計算機,而是天文學與望遠鏡有關。”計算機和計算機系統的設計和部署通常被認為是計算機科學以外的其他學科省。例如,計算機硬件的研究通常被認為是計算機工程的一部分,而商用計算機系統及其部署的研究通常稱為信息技術或信息系統。但是,各種與計算機相關的學科之間已經交流了想法。計算機科學研究也經常與其他學科相交,例如認知科學,語言學,數學,物理學,生物學,地球科學,統計,哲學和邏輯。
與許多科學學科相比,某些人認為計算機科學與數學有更緊密的關係,一些觀察者說計算是一門數學科學。早期的計算機科學受到數學家的工作的強烈影響理論,領域理論和代數。
計算機科學與軟件工程之間的關係是一個有爭議的問題,這一問題因“軟件工程”一詞的含義以及計算機科學的定義方式進一步彌補。戴維·帕納斯(David Parnas)從其他工程和科學學科之間的關係中得到了提示,他聲稱,計算機科學的主要重點是研究計算的屬性,而軟件工程的主要重點是設計特定計算的設計,以實現實用性目標,使這兩個分開但互補的學科。
計算機科學的學術,政治和資金方面傾向於取決於一個部門是否以數學重點或工程重點形成。具有數學重點和數值取向的計算機科學部門考慮與計算科學的一致性。兩種類型的部門傾向於在所有研究中都在教育上彌合現場。
哲學
計算機科學認識論
儘管以“科學”為名,但關於計算機科學是否是科學,數學還是工程學的學科仍存在爭議。艾倫·紐厄爾(Allen Newell)和赫伯特·A·西蒙(Herbert A. Simon)於1975年辯稱
計算機科學是一門經驗學科。我們會稱其為實驗科學,但是像天文學,經濟學和地質一樣,其獨特的觀察和經驗形式並不適合實驗方法的狹窄刻板印象。但是,它們是實驗。構建的每台新機器都是一個實驗。實際構建機器對自然提出了一個問題。然後,我們通過觀察操作中的機器並通過所有分析和測量方法來聆聽答案。
此後,人們認為計算機科學可以被歸類為一種經驗科學,因為它利用經驗測試來評估程序的正確性,但是在定義計算機科學的法律和定理(如果存在的話)上仍然存在問題並定義計算機科學實驗的性質。支持計算機科學為工程學科的支持者認為,計算系統的可靠性的研究方式與航空航天工程中的土木工程和飛機中的橋樑相同。他們還認為,儘管經驗科學觀察了目前的存在,但計算機科學觀察到了可能存在的東西,儘管科學家從觀察中發現法律,但在計算機科學中卻沒有找到適當的法律,而是關注創造現象。
將計算機科學分類為數學紀律的支持者認為,計算機程序是數學實體和程序的物理實現,可以通過數學形式方法來推論。計算機科學家Edsger W. Dijkstra和Tony Hoare將計算機程序的說明視為數學句子,並將編程語言的正式語義解釋為數學公理系統。
計算機科學範式
許多計算機科學家爭論了計算機科學中三個獨立範式的區別。彼得·韋格納(Peter Wegner)認為,這些範式是科學,技術和數學。彼得·丹寧(Peter Denning)的工作組認為,它們是理論,抽象(建模)和設計。 Amnon H. Eden將它們描述為“理性主義者範式”(將計算機科學視為數學的分支,在理論計算機科學中很普遍,主要採用演繹推理),“技術官僚範式”(在工程中可能發現在軟件工程中最突出的方法和“科學範式”(從自然科學的經驗角度來看,它可以在人工智能的某些分支中識別出與計算機相關的偽影)。計算機科學專注於人工製造的計算系統的設計,規範,編程,驗證,實施和測試的方法。
字段
作為一門學科,計算機科學涵蓋了一系列主題,從算法的理論研究以及計算限製到在硬件和軟件中實施計算系統的實際問題。 CSAB ,以前稱為計算科學認證委員會(由計算機機械協會(ACM)的代表組成, IEEE計算機協會(IEEE CS)組成,它確定了這對計算機科學學科至關重要的四個領域:理論:理論:理論:理論:計算,算法和數據結構,編程方法和語言以及計算機元素和體系結構。除這四個領域外,CSAB還將軟件工程,人工智能,計算機網絡和通信,數據庫系統,並行計算,分佈式計算,人與計算機交互,計算機圖形,操作系統以及數值和符號計算等領域確定字段是計算機科學的重要領域。
理論計算機科學
理論上的計算機科學在精神上是數學和抽象的,但它從實際和日常的計算中得出了動力。其目的是了解計算的性質,並因此提供了更有效的方法。
計算理論
根據彼得·丹寧(Peter Denning)的說法,計算機科學的基本問題是:“什麼可以自動化?”計算理論的重點是回答有關可以計算的內容以及執行這些計算需要多少資源的基本問題。為了回答第一個問題,計算理論研究了在各種計算理論模型中可以解決哪些計算問題。第二個問題是由計算複雜性理論解決的,該理論研究了與解決多種計算問題的不同方法相關的時間和空間成本。
著名的p = np?問題是千年獎的問題之一,是計算理論中的一個空缺問題。
![]() |
![]() |
![]() |
|
自動機理論 | 正式語言 | 計算理論 | 計算複雜性理論 |
![]() |
![]() |
![]() |
![]() |
計算模型 | 量子計算理論 | 邏輯電路理論 | 蜂窩自動機 |
信息和編碼理論
信息理論與概率和統計密切相關,與信息的量化有關。這是由克勞德·香農(Claude Shannon)開發的,目的是在信號處理操作(例如壓縮數據以及可靠地存儲和通信數據)上找到基本限制。編碼理論是對代碼的屬性(將信息從一種形式轉換為另一種形式的系統及其適合特定應用程序的屬性的研究。代碼用於數據壓縮,密碼學,錯誤檢測和校正,以及最近也用於網絡編碼。研究代碼是為了設計高效且可靠的數據傳輸方法。
![]() |
![]() |
![]() |
![]() |
![]() |
編碼理論 | 通道容量 | 算法信息理論 | 信號檢測理論 | Kolmogorov的複雜性 |
數據結構和算法
數據結構和算法是對常用計算方法及其計算效率的研究。
O ( n 2 ) | ![]() |
![]() |
![]() |
![]() |
![]() |
算法分析 | 算法設計 | 數據結構 | 組合優化 | 計算幾何形狀 | 隨機算法 |
編程語言理論和形式方法
編程語言理論是計算機科學的一個分支,涉及編程語言及其個人特徵的設計,實現,分析,表徵和分類。它取決於數學,軟件工程和語言學,都屬於計算機科學的學科。這是一個活躍的研究領域,擁有許多專門的學術期刊。
正式方法是一種針對軟件和硬件系統的規範,開發和驗證的特定類型的基於數學的技術。將正式方法用於軟件和硬件設計的動機是由於在其他工程學科中,進行適當的數學分析可以有助於設計的可靠性和魯棒性。它們構成了軟件工程的重要理論基礎,尤其是在涉及安全或保障的情況下。正式方法是軟件測試的有用輔助手段,因為它們有助於避免錯誤,並且還可以為測試提供框架。為了工業用途,需要工具支持。但是,使用正式方法的高成本意味著它們通常僅用於開發高融合性和至關重要的系統,而安全或安全至關重要。正式方法最好被描述為相當廣泛的理論計算機科學基礎知識的應用,尤其是邏輯計算,形式語言,自動機理論和程序語義,但也將系統和代數數據類型鍵入軟件和硬件規範中的問題和代數數據類型確認。
![]() |
![]() |
![]() |
![]() |
![]() |
|
正式語義 | 類型理論 | 編譯器設計 | 程式設計語言 | 正式驗證 | 自動定理證明 |
應用計算機科學
計算機圖形和可視化
計算機圖形是對數字視覺內容的研究,涉及圖像數據的綜合和操縱。該研究與計算機科學中的許多其他領域有關,包括計算機視覺,圖像處理和計算幾何形狀,並在特殊效果和視頻遊戲的領域中大量應用。
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
2D計算機圖形 | 計算機動畫 | 渲染 | 混合現實 | 虛擬現實 | 固體建模 |
圖像和聲音處理
信息可以採用圖像,聲音,視頻或其他多媒體的形式。一些信息可以通過信號流傳輸。它的處理是信息學的核心概念,即歐洲計算的觀點,它獨立於信息載體的類型研究信息處理算法 - 無論是電氣,機械還是生物學。該領域在信息理論,電信,信息工程中起著重要作用,並且在醫學圖像計算和語音綜合等中都有應用。快速傅立葉變換算法的複雜性的下限是什麼?是理論計算機科學中未解決的問題之一。
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
FFT算法 | 圖像處理 | 語音識別 | 數據壓縮 | 醫療圖像計算 | 語音綜合 |
計算科學,金融和工程
科學計算(或計算科學)是與構建數學模型和定量分析技術並使用計算機分析和解決科學問題的研究領域。科學計算的主要用法是對各種過程的模擬,包括計算流體動力學,物理,電氣,電子系統和電路,以及社會和社交狀況(尤其是戰爭遊戲)以及他們的棲息地等。現代計算機可以優化完整飛機等設計。電氣和電子電路設計中值得注意的是香料,以及用於實現新(或修改)設計的物理實現的軟件。後者包括用於集成電路的基本設計軟件。
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
數值分析 | 計算物理 | 計算化學 | 生物信息學 | 神經信息學 | 心理信息學 | 醫學信息學 | 計算工程 | 計算音樂學 |
社交計算和人類計算機互動
社交計算是與社會行為與計算系統相交的領域。人與計算機交互研究開發了用戶界面設計師的理論,原理和指南。
軟件工程
軟件工程是設計,實施和修改軟件的研究,以確保其具有高質量,負擔得起,可維護和快速構建。這是一種系統的軟件設計方法,涉及將工程實踐應用於軟件。軟件工程涉及軟件的組織和分析 - 它不僅涉及新軟件的創建或製造,而且還涉及其內部安排和維護。例如,軟件測試,系統工程,技術債務和軟件開發過程。
人工智慧
人工智能(AI)旨在或需要綜合目標的過程,例如解決問題,決策,環境適應,學習以及人類和動物中的溝通。從其起源於控制論和達特茅斯會議(1956年)中,人工智能研究必然是跨學科的,借鑒了諸如應用數學,符號邏輯,符號邏輯,電氣工程,思想哲學,神經物理學和社會生理學和社會生理學和社會生理學和社會生理學和社會生理學和社會生理學,社會生理學和社會哲學,符號邏輯,符號邏輯,符合專業知識領域智力。 AI與機器人開發相關聯,但實際應用的主要領域是軟件開發領域的嵌入式組件,這些組件需要計算理解。 1940年代後期的起點是艾倫·圖靈(Alan Turing)的問題“計算機能想到嗎? ”,儘管圖靈測試仍用於根據人類智能的規模評估計算機輸出,但問題仍然有效地沒有得到答案。但是,評估和預測任務的自動化越來越成功,可以代替人類監測和乾預涉及復雜現實數據的計算機應用領域。
![]() |
![]() |
![]() |
![]() |
計算學習理論 | 計算機視覺 | 神經網絡 | 計劃和計劃 |
![]() |
![]() |
![]() |
![]() |
自然語言處理 | 計算遊戲理論 | 進化計算 | 自主計算 |
![]() |
![]() |
![]() |
![]() |
表示和推理 | 模式識別 | 機器人技術 | 群體智能 |
計算機系統
計算機架構和組織
計算機架構或數字計算機組織是計算機系統的概念設計和基本操作結構。它主要集中在中央處理單元內部執行並訪問內存中的地址的方式。計算機工程師研究計算機硬件的計算邏輯和設計,從單個處理器組件,微控制器,個人計算機到超級計算機和嵌入式系統。計算機文獻中的“體系結構”一詞可以追溯到1959年IBM主要研究中心機器組織部門的Lyle R. Johnson和Jr. Lyle R. Johnson和Jr.的工作。
![]() |
![]() |
![]() |
![]() |
處理單元 | 微結構 | 多處理 | 處理器設計 |
![]() |
![]() |
![]() |
![]() |
普適計算 | 系統體系結構 | 作業系統 | 輸入輸出 |
![]() |
![]() |
![]() |
![]() |
嵌入式系統 | 實時計算 | 可靠性 | 口譯員 |
並發,並行和分佈式計算
並發是系統的屬性,其中幾個計算同時執行,並可能相互交互。已經開發了許多數學模型,用於一般並發計算,包括Petri網,過程骨化和並行隨機訪問機模型。當使用並發時,在網絡中連接多台計算機時,這被稱為分佈式系統。該分佈式系統中的計算機具有自己的私人記憶,可以交換信息以實現共同的目標。
計算機網絡
計算機科學的這個分支旨在管理全球計算機之間的網絡。
計算機安全和密碼學
計算機安全性是計算機技術的一個分支,目的是保護信息免受未經授權的訪問,中斷或修改,同時維護系統對其預期用戶的可訪問性和可用性。
歷史密碼學是寫作和解密秘密信息的藝術。現代密碼學是對可能受到攻擊的分佈式計算問題的科學研究。現代密碼學研究的技術包括對稱和不對稱加密,數字簽名,加密哈希功能,鍵合協議,區塊鏈,零知識證明和亂碼電路。
數據庫和數據挖掘
數據庫旨在輕鬆組織,存儲和檢索大量數據。使用數據庫模型和查詢語言使用數據庫管理系統來管理數字數據庫。數據挖掘是在大數據集中發現模式的過程。
發現
計算Bill Rapaport的哲學家指出了計算機科學的三個重要見解:
- 戈特弗里德·威廉·萊布尼茲(Gottfried Wilhelm Leibniz ),喬治·布爾(George Boole ),艾倫·圖靈( Alan Turing ),克勞德·香農(Claude Shannon )和塞繆爾·莫爾斯(Samuel Morse )的見解:為了代表“任何東西”,計算機只需要處理兩個對象。
- 關於任何可計算問題的所有信息都可以使用0和1表示(或任何其他可以在兩個易於區分的狀態之間觸發的Bissable對,例如“ ON/OFF”,“磁化/去磁化”,“高” - 電壓/低壓”等)。
- 艾倫·圖靈(Alan Turing)的洞察力:為了做“任何事情”,計算機只有五個動作必須執行。
- 每種算法都可以用一種語言來表示僅包含五個基本說明的計算機:
- 向左移動一個位置;
- 向右移動一個位置;
- 在當前位置讀取符號;
- 在當前位置打印0;
- 在當前位置打印1。
- 每種算法都可以用一種語言來表示僅包含五個基本說明的計算機:
- CorradoBöhm和Giuseppe Jacopini的洞察力:將這些動作(成更複雜的操作)組合為三種方法,以使計算機可以做“任何事情”。
編程範例
編程語言可用於以不同的方式完成不同的任務。常見的編程範例包括:
- 功能編程,一種構建計算機程序的結構和元素的風格,將計算視為評估數學功能並避免狀態和可變數據。這是一個聲明的編程範式,這意味著編程是用表達式或聲明而不是語句進行的。
- 命令編程,一種使用改變程序狀態的語句的編程範式。與自然語言中的命令式情緒相同的方式幾乎相同,一個命令程序由計算機執行的命令組成。當務之急的編程重點是描述程序的運作方式。
- 以對象為導向的編程,一種基於“對象”概念的編程範例,該概念可能包含數據,以字段的形式,通常稱為屬性;和代碼,以程序的形式,通常稱為方法。對象的一個功能是,對象的過程可以訪問並經常修改與其關聯對象的數據字段。因此,面向對象的計算機程序是由相互交互的對象製成的。
- 以服務為導向的編程是一種使用“服務”作為計算機工作單位的編程範式,用於設計和實施集成的業務應用程序和任務關鍵軟件程序
許多語言為多種範式提供了支持,這使得與技術功能的區別更具風格。
研究
會議是計算機科學研究的重要事件。在這些會議期間,公共和私營部門的研究人員介紹了他們最近的工作和開會。與大多數其他學術領域不同,在計算機科學中,會議論文的聲望大於期刊出版物的聲望。為此,提出的解釋是,對這個相對較新的領域的快速發展需要快速審查和分配結果,這是會議比期刊更好地處理的任務。
教育
自從批處理處理,標記敏感卡和紙帶標記敏感的卡和紙帶以來,以其近乎同義詞,計算,計算機研究而聞名的計算機科學,但通常是針對少數學生的。 1981年,英國廣播公司(BBC)生產了一個微型計算機和課堂網絡,計算機研究變得很常見於GCE O水平的學生(11-16歲),計算機科學成為水平的學生。它的重要性得到了認可,並成為國家課程的強制性部分,對於第3階段和第4階段。2014年9月,它成為4歲以上所有學生的權利。
在美國,有14,000個學區決定課程,規定被破裂。根據2010年計算機機械協會(ACM)和計算機科學教師協會(CSTA)的一份報告,在50個州中,只有14個已經採用了高中計算機科學的重要教育標準。根據2021年的報告,美國祇有51%的高中提供計算機科學。
以色列,新西蘭和韓國將計算機科學包括在其國家中等教育課程中,其他幾個人都在關注。