一 引子:
接下來一段時間,我們的目標的是:學會使用python這門編程語言來編寫ATM+購物車程序,那么問題來了:
1.1 什么是語言?什么是編程語言?為何要有編程語言?
語言其實就是人與人之間溝通的介質,如英語,漢語,俄語等。
而編程語言則是人與計算機之間溝通的介質。
那么為何要有編程語言,或者說人為何要與計算機溝通呢?這是因為在編程的世界里,計算機就好比是人的奴隸,人與計算機溝通的目的就是為了奴役計算機,讓計算機按照人類的思維邏輯自發地去工作從而把人力解放出來。
此處我們可以提煉出如下兩個重要的概念
1.2 什么是編程?為什么要編程?
編程就是人把自己想命令計算機干的事用編程語言翻譯出來並寫到文件里(這一系列的文件就是程序),那么為什么要編程?
小人類編程的目的就是為了讓計算機按照人類的思維邏輯(程序)自發地去工作從而把人力解放出來。
綜上,我們接下來的學習應該分為兩個層面
1、為了更好地控制人類的奴隸(即計算機),我們需要學習計算機是由什么組成的、它能做什么事、它是怎樣工作的(詳見計算機組成原理、操作系統概述)
2、我們需要學習編程語言,從而把原來需要人力來完成的業務(比如ATM和購物)交給計算機去做
二 計算機組成原理
2.1、什么是計算機?
俗稱電腦,即通電的大腦,電腦二字蘊含了人類對計算機的終極期望,希望它能真的像人腦一樣去工作,從而解放人力。
2.2、為什么要用計算機?
世界是由聰明的懶人統治的,任何時期,總有一群聰明的懶人想要奴隸別人。在奴隸制社會,聰明的懶人奴役的是真正的人,而人是無法不吃、不喝、不睡覺一直工作的,但是計算機作為一台機器是可以做到的,所以把計算機當奴隸是上上之選。
2.3、計算機的五大組成部分
計算機有五大組成部分,既然計算機是人的奴隸,那么計算機設計核心肯定也是在模仿真正的人,所以我們完全可以把計算機的五大組件比喻成人類的各種器官
2.3.1、控制器
控制器是計算機的指揮系統,用來控制計算機其他組件的運行,相當於人類的大腦
2.3.2、運算器
運算器是計算機的運算功能,用來做算術運算和邏輯運算,相當於人腦。
ps:控制器+運算器=CPU,cpu相當於人的大腦
cpu詳解見附錄1
2.3.3、存儲器
存儲器是計算機的記憶功能,用來存取數據。
存儲器主要分為內存與外存:
內存相當於人的短期記憶。斷電數據丟失
外存(如磁盤),相當於記事的本子,斷電數據不會丟失,是用來永久保存數據的
ps:內存的存取速度要遠遠高於外存
2.3.4、輸入設備input
輸入設備是計算接收外界輸入數據的工具,如鍵盤、鼠標,相當於人的眼睛或耳朵。
2.3.5、輸出設備output
輸出設備是計算機向外輸出數據的工具,如顯示器、打印機,相當於人說的話,寫出的文章。
ps:存儲器如內存、磁盤等既是輸入設備又是輸出設備,統稱為IO設備
一個非常重要的基礎知識:與運行程序相關的三大核心硬件
我們編寫的程序一定是要運行於計算機硬件之上,而站在硬件的角度,與運行程序有關的三大核心硬件為CPU、內存、硬盤。
程序最先是存放於硬盤中的,程序的運行是先從硬盤把代碼加載到內存中,然后cpu是從內存中讀取指令運行。
三 操作系統概述
3.1、操作系統的由來
大前提:我們編程目的就是為了奴役計算機,讓計算機硬件自發地運行起來,然而硬件畢竟是”死的“,硬件的運行都是由軟件支配。
倘若我們要開發一個應用程序,比如暴風音影,該軟件的一個核心業務就是播放視頻,開發者若要編寫程序完成播放視頻這個業務邏輯,必先涉及到底層硬件硬盤的基本運作(視頻文件都是先存放於硬盤中),這意味着開發者在編寫業務邏輯代碼之前,必須先編寫一個控制硬盤基本運行的控制程序,然而這僅僅只是一個開始,事實上,在編寫應用程序的業務邏輯前,需要開發者編寫出一套完整的控制程序用來控制所有硬件的基本運行(這要求開發者需要詳細了解計算機硬件的各種控制細節,例如我們必須把CPU里面所有指令集都掌握一遍),如此,所有的開發者在開發程序時都必須依次開發兩種:
#1、編寫一套完整的的控制程序,用來控制硬件的基本運行,以及把復雜的硬件的操作封裝成簡單的接口
#2、基於控制程序的接口開發包含一系列業務邏輯的程序,為了與控制程序區分,可以稱為應用程序,以ATM這款應用程序為例,業務邏輯有提款、轉賬、查詢余額等
綜上,對於不同公司的開發者來說,應用程序的業務邏輯各不相同,但硬件的控制程序都大致相同,為了避免所有程序員做重復勞動,以及不用再耗費精力去了解所有硬件的運行細節,有公司專門跳出來承擔起控制程序的開發任務,這里所說的控制程序指的就是操作系統。
操作系統的功能就是幫我們把復雜的硬件的控制封裝成簡單的接口,對於開發應用程序來說只需要調用操作系統提供給我們的接口即可
3.2、系統軟件與應用軟件
硬件以上運行的都是軟件,而軟件分為兩類:
#一、應用軟件(例如qq、word、暴風影音,我們學習python就是為了開發應用軟件的)
#二、操作系統,操作系統應用軟件與硬件之間的一個橋梁,是協調、管理、控制計算機硬件與應用軟件資源的控制程序。
3.3、計算機系統三層結構
綜上,我們開發應用程序本質是在控制硬件,但是我們直接打交道的是操作系統,應用程序都是通過操作系統來間接地操作硬件的,所以一套完整的計算機系統分為三層,如下
一個非常重要的基礎概念:平台
應用程序都是運行於操作系統之上,而操作系統則是運行於硬件之上的,所以承載應用程序的是一台運行有操作系統的計算機,稱之為應用程序的運行平台,即:硬件 + 操作系統 == 平台
常見的平台有:windows系統+某款硬件、linux系統+某款硬件、ubuntu+某款硬件等,我們在開發應用程序時就需要考慮到應用程序的跨平台性,如果能開發出一款可以在任意平台運行的應用程序,那對於開發者來說真是極大的福音。而決定應用軟件的跨平台性的關鍵因素往往是編程語言的選擇,python恰好是一款跨平台性語言,這也是我們學習它的原因之一。