什麼是編程

What is CS?

Computer Science 就是一門專門研究 Problems 與 Problem-solving 的學科.

面對一個 問題, 一個 Computer Sciencist 的目標就是找出一個 算法 (即解決方案), 明確指示出如何一步步地解決該問題.

當然, 這里還會涉及到 可計算性 的問題(P與NP), 面對不可計算的問題, 設計什麼 樣的算法來滿足解決問題的目標, 也是一個CS的研究內容.

一個計算機科學家在解決問題的過程中, 要多次進行抽象:

首先是對 待解決的問題 進行一次抽象 現實世界里的問題一般都會包含比較多的條件, 把現實世界里的問題明確表示的過程中, 不可避免地要進行一次抽象, 去掉無關的邊緣條件, 保留該問題最核心的內容.

其實是對 解決方案 的抽象 我們開車的時候, 踩一腳油門車就動了, 我們不需要去瞭解車是怎麼打火的, 發動機是 怎麼運作的. 這種對解決方案的包裝, 展示給最終用戶的介面, CS里叫Interface, 現 在網際網路圈叫用戶體驗.

What is Programming?

編程 就是把 算法 (問題的解決方案) 用某一種程式語言給表述出來的過程.

也就是說, 編程的第一步是 你已有某一問題的解決方案在手 , 沒有 算法 就沒有 程序.

CS不是研究如何編程的學科, 但編程, 卻是一個Computer Scientist工作中的一個重要 組成. 畢竟, CS目標是 解決問題 , 編程是把這個 問題的解決方案 給最終實現的 基礎操作, 重要性可想而知.

綜合以上兩部分, 總結一下計算機科學家的工作主要是:

把一個現實問題抽象, 用 Data 來表示 針對該問題, 設計出相應的解決方案 算法 把該 算法 用程式語言給表述出來 程序 計算機運行該 程序 , 從而解決現實問題

Programming Languages

程式語言提供了 Data Structure 和 Control Structure.

Data Structure

計算機只認識 0 和 1.

相信每個CS都聽過上面這句, 所有Data對應到計算機執行指令的時候都是0和1, 但各個 程式語言會對這些01串進行「包裝」, 這樣我們在使用這些語言的時候, 就可以從包裝 後的「磚塊」層級來考慮如何把算法用該語言表述出來, 而不需要以01串的角度來思考.

各程式語言本身自帶的這些對01串的「包裝」叫做 Primitive Data Types. 可以理 解為天賦屬性. 語言好壞, 很多時候從這里就可以做一個區分了.

對於複雜的現實世界問題, 所有程式語言都不可能出廠時都「包裝」好「磚塊」讓你砌 牆. 所以後來才會有了 Abstract Data Type 的概念. 通過支持自定義類, 你可以自 己去「包裝」現實世界, 抽象數據類型出來, 想怎麼玩就怎麼玩.

Control Structure

有了數據結構, 我們可以表示現實世界中的問題了. 但仍需要更重要的一個東西來把我 們的 算法 表述出來. 表述算法的語句就是 Control Structure.

語句控制可以大概分為三類:

  1. Sequential Processing (順序執行)
  2. Selection (選擇分支執行)
  3. Iteration (重複執行)

只要有了這三類語句控制, 我們就可以表述算法了. 剩下的工作就是把 算法 給翻譯 成 這些語句的工作了, 也就是 編程.

來源:kknews什麼是編程