多少程序員看到這個(gè)標(biāo)題會(huì)有一種:“哦干顽染!說(shuō)得對(duì)漾岳!”的感覺。
一個(gè)程序員不一定會(huì)修電腦粉寞、修路由尼荆、選電腦配置、破解密碼唧垦、修圖耀找、使用大智慧∫笛拢……嗯野芒,最后一個(gè)例子是真實(shí)故事:有個(gè)同學(xué)搭一個(gè)大叔的便車,車上大叔問:“你是學(xué)軟件的双炕?那能不能教我怎么用大智慧炒股狞悲?” 超級(jí)汗顏啦。
這一章的目的就是讓你知道什么是編程妇斤,以及為什么程摇锋!序!員站超!不荸恕!是!修死相!電融求!腦!的K愦椤生宛!
一、硬件與操作系統(tǒng)
操作系統(tǒng)負(fù)責(zé)指揮電腦硬件肮柜,并提供接口給編程人員使用陷舅。這句話可能有點(diǎn)艱澀難懂,但是先不要急审洞,先記著莱睁。
計(jì)算機(jī)在安裝操作系統(tǒng)之前只是一堆硬件,它們有些可以提供高速的計(jì)算能力,比如說(shuō)CUP仰剿, 有些可以提供高速的數(shù)據(jù)傳輸能力耙箍,比如說(shuō)內(nèi)存。我們可以稱它們?yōu)橛布百Y源”酥馍”缋ィ“資源”這個(gè)詞是第一個(gè)在這系列文章中出現(xiàn)的高頻詞,我用來(lái)泛指一切可以被另外一個(gè)東西使用的東西旨袒。不要在意這拗口的句子了汁针。嗯,一臺(tái)電腦就是一堆的硬件資源砚尽,它們并不知道怎么相互配合來(lái)創(chuàng)造這么一個(gè)五彩繽紛的計(jì)算機(jī)世界施无,它們需要一個(gè)統(tǒng)一的控制者,這個(gè)控制者就是操作系統(tǒng)必孤。
操作系統(tǒng)怎么控制這些冷冰冰的硬件呢猾骡?基本原理我也不清楚- -, 大學(xué)老師沒教哇…… 不過(guò)大概是這樣的:實(shí)際上不是操作系統(tǒng)控制硬件敷搪,是硬件告訴操作系統(tǒng)怎么控制它們兴想。每個(gè)硬件研發(fā)完成之后都必須由它們的研發(fā)者編寫一套驅(qū)動(dòng)程序,這套驅(qū)動(dòng)程序就是負(fù)責(zé)告訴操作系統(tǒng)怎么“驅(qū)動(dòng)”這個(gè)硬件的赡勘∩┍悖“操作系統(tǒng)大人,電一電我這里我就會(huì)亮哦闸与!”大概是這樣毙替,嗯。(才怪啦<!)
總之呢厂画,有了操作系統(tǒng),一堆硬件就相互配合地跑起來(lái)了拷邢,計(jì)算機(jī)有了生命的氣息袱院。
二、操作系統(tǒng)與軟件
我剛開始接觸編程的時(shí)候解孙,就想過(guò)為什么有人會(huì)說(shuō)不同的操作系統(tǒng)有所不同——因?yàn)樵谖耶?dāng)時(shí)看來(lái)坑填,它們可以做的事情完全一樣啊抛人,因?yàn)槲耶?dāng)時(shí)所能做的就是用c++打出一句:hello world....(確實(shí)是每個(gè)操作系統(tǒng)都可以做到俺诮!)
隨著接觸的東西多了起來(lái)之后妖枚,我終于搞明白了廷臼,編程就是使用操作系統(tǒng)提供的接口完成一系列的操作。這個(gè)說(shuō)法并不嚴(yán)謹(jǐn),僅在當(dāng)前階段這么記住就好荠商〖盘瘢“接口”也是一個(gè)高頻詞,我用來(lái)泛指一切將具體實(shí)現(xiàn)隱藏在背后而僅提供簡(jiǎn)單的方式供使用者使用的東西莱没。比如說(shuō)初肉,耳機(jī)插孔,只需要將插頭插進(jìn)去就可以聽到音樂了饰躲,使用者完全不需要知道這個(gè)插孔后面是怎樣復(fù)雜的一個(gè)所在牙咏。操作系統(tǒng)也是這樣,提供了很多簡(jiǎn)單的方法讓開發(fā)者完成不同的任務(wù)而開發(fā)者不用另外去了解這個(gè)任務(wù)具體是怎么實(shí)現(xiàn)的嘹裂,作為開發(fā)者妄壶,只需要使用程序語(yǔ)言告訴操作系統(tǒng):
“喂,去給我讀取這個(gè)文件寄狼《〖模”
操作系統(tǒng)就會(huì)聽話地將這個(gè)文件找出來(lái)并讀取呈現(xiàn)給你。具體操作系統(tǒng)是怎么找到這個(gè)文件怎么讀取的泊愧,由不同因素決定伊磺。比如說(shuō),如果這個(gè)文件放在硬盤上删咱,那么操作系統(tǒng)可能就會(huì)在硬盤上面地毯式搜索這個(gè)文件奢浑,具體怎么在硬盤上面找呢,硬盤驅(qū)動(dòng)程序早就告訴給操作系統(tǒng)了腋腮。
那么不同操作系統(tǒng)的不同之處在哪呢雀彼?這個(gè)答案在我第一次學(xué)帶界面的軟件編程的時(shí)候頓悟出來(lái)了。要調(diào)出一個(gè)窗口即寡,往往只需要幾句簡(jiǎn)單的代碼徊哑,其他工作都由操作系統(tǒng)包辦了。所以你才會(huì)看到windows的窗口都是一個(gè)樣聪富,蘋果電腦OS X的窗口是另外一個(gè)樣莺丑。如果你覺得windows的窗口太丑要改得跟OS X的窗口一樣的話,很抱歉墩蔓,你可能很難做到(我也沒試過(guò))梢莽。為什么?因?yàn)椴僮飨到y(tǒng)只提供接口奸披,具體實(shí)現(xiàn)是封閉起來(lái)的昏名,窗口就是長(zhǎng)那個(gè)樣,你沒辦法修改阵面。
所以編程就是這樣的一個(gè)流程:使用提供的接口(不一定來(lái)自操作系統(tǒng))轻局,完成一系列的操作洪鸭。真所謂在有限的舞臺(tái)上創(chuàng)造無(wú)限的可能啊……
三、分層
我們來(lái)重溫一下用程序讀取文件的例子仑扑,大概是下面這樣子(從左往右從上往下看):
稍微抽象一下览爵,可以將這個(gè)操作分為三層:應(yīng)用程序最上面,中間是操作系統(tǒng)镇饮,最底層是硬件蜓竹。分層結(jié)構(gòu)是一個(gè)非常常用的概念。通過(guò)分層储藐,可以將不相關(guān)的細(xì)節(jié)隱藏起來(lái)梅肤,使用者完全不需要知道這些細(xì)節(jié),只需要知道要做什么邑茄,能做什么就行了姨蝴。
所以到這里你們能夠了解為什么程序員不會(huì)修電腦了吧了吧了吧了吧!操作系統(tǒng)把硬件相關(guān)的事情都包攬了肺缕,大部分硬件相關(guān)的知識(shí)點(diǎn)程序員不需要理解啊左医。
使用分層結(jié)構(gòu)可以將事情簡(jiǎn)化。想象你是一個(gè)公司的老總同木,你肯定不會(huì)所有事情都親歷親為浮梢,很多時(shí)候你只需要好好思考然后吩咐下屬去幫你完成任務(wù)就行了。就別管下屬怎么忙得焦頭爛額了彤路。不僅是軟件跟操作系統(tǒng)之間存在分層結(jié)構(gòu)秕硝,軟件內(nèi)部也經(jīng)常存在分層,一層疊一層洲尊,從簡(jiǎn)單原始的操作進(jìn)化到高級(jí)的操作远豺。分層結(jié)構(gòu)可以使軟件變得更加容易管理,同時(shí)也防止了重復(fù)勞動(dòng):怎么讓硬盤轉(zhuǎn)起來(lái)這種事在一個(gè)地方寫好就行了坞嘀,以后就能重復(fù)拿來(lái)用了躯护。軟件開發(fā)中會(huì)有很多的類似或者重復(fù)操作,如何最大化地減少重復(fù)勞動(dòng)丽涩,是在編寫程序的時(shí)候每時(shí)每刻都要注意的一個(gè)點(diǎn)棺滞。程序員都是在很勤勞地想著偷懶的事情的人。
本章完矢渊,下一章講什么是編程語(yǔ)言继准,也就是如何跟操作系統(tǒng)溝通交流談人生。
重點(diǎn)詞匯:
資源
接口
分層結(jié)構(gòu)