在很多人眼中,電腦是一個(gè)很厲害的存在:它可以幫你統(tǒng)計(jì)大量的數(shù)字耕肩,可以給你提供大量的信息因妇,可以把遙遠(yuǎn)距離的信息展現(xiàn)在你的面前,可以做各種人類無法做到的事情猿诸。
很聰明很神奇對不對婚被!~才怪啦!
在你面前的這個(gè)電腦梳虽,在擁有軟件之前址芯,就只是一堆電路板混合物。但是它有個(gè)很重要的特點(diǎn):它擁有記錄信息以及操控信息的能力窜觉。想象一下谷炸,電腦就像一個(gè)富豪家出生的孩子,身邊是各種跑車游艇直升機(jī)禀挫。但是它什么都不懂旬陡,這些東西對它來說就一點(diǎn)用都沒有。人類中的程序員语婴,便是教會它知識的人描孟,教會這個(gè)富二代怎么一步一步啟動它的跑車:插鑰匙驶睦,開引擎,掛檔踩油門匿醒,呼啥繁!~
電腦是個(gè)聽話的學(xué)生,它可以把學(xué)到的知識記得很牢青抛,所作所為都是所學(xué)到的知識的反映。所以說酬核,你面對的不是一臺單純的電腦蜜另,里面保存著數(shù)不盡的人類的思想,你所遇到的嫡意,都是人類思想的映射举瑰。信息保存在硬盤里,嗯蔬螟,你可以拆開硬盤看看人類的思想長什么樣此迅。(騙你的。)
在現(xiàn)實(shí)生活中旧巾,人類用語言表達(dá)自己的思想耸序,不同國家地區(qū)的人使用不同的語言。為了方便不同語言的人的交流鲁猩,我們使用一些國際通用的語言坎怪,比如說英語。一個(gè)意大利人可以用英語跟日本人交談廓握,當(dāng)他們這么做的時(shí)候搅窿,實(shí)際上是
1. 意大利人把自己的想法翻譯成英語,
2. 日本人聽到英語隙券,把這段信息翻譯成日語并加以理解男应。
人類跟電腦的交談也是差不多一樣的方式娱仔,可能比較復(fù)雜點(diǎn)沐飘。
初中或者高中的計(jì)算機(jī)課,希望你們在聯(lián)機(jī)打游戲刷網(wǎng)站發(fā)呆之余拟枚,還能記得老師講過薪铜,電腦的信息是二進(jìn)制存儲的。也就是說恩溅,電腦只認(rèn)得“10101001010101001”這樣的語言隔箍。所以程序員與電腦的對話類似于下圖:
注:這幅圖中間的“云朵”,其實(shí)包括了很多“層次”在里面脚乡。
在最開始的時(shí)候蜒滩,那時(shí)候的程序員還被叫做計(jì)算機(jī)科學(xué)家(大概吧)滨达,他們是“直接”跟計(jì)算機(jī)進(jìn)行對話的。嗯俯艰,你沒有看錯(cuò)捡遍,就是直接寫101100100110這樣子,這便是機(jī)器語言竹握。那時(shí)候的編程是通過在紙條上戳洞來完成的画株,大概是遇到0就戳一個(gè)洞吧,最終的程序的樣子就是:
可想而知啦辐,寫出來的東西不僅別人看不懂谓传,他們自己其實(shí)也看不懂啦。之前說過的芹关,程序員就是千方百計(jì)想著偷懶的人续挟,這么難懂的機(jī)器語言當(dāng)然沒人想繼續(xù)用。而一般來說侥衬,抓到規(guī)律的東西就可以用自動化的機(jī)制來代替人工诗祸。機(jī)器語言便是非常有規(guī)律的東西,于是科學(xué)家們在那之上轴总,又創(chuàng)造了一門語言:匯編語言直颅。有了匯編語言,科學(xué)家們就可以用比較易懂的方式來控制電腦了怀樟。比如說要電腦計(jì)算1+1际乘,那么步驟大概是這樣的(二進(jìn)制數(shù)是亂寫的,各位看官別當(dāng)真):
在存儲器上寫個(gè)1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1000110010010110
在存儲器上再寫個(gè) 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1101001001001010
放到加法器上加起來 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1101010101101111
由于每個(gè)步驟都對應(yīng)著一串固定的二進(jìn)制指令漂佩,所以可以很方便地進(jìn)行映射脖含。負(fù)責(zé)這項(xiàng)工作的程序就叫做匯編程序。好了投蝉,有了匯編語言养葵,科學(xué)家們就可以告訴電腦把大象放進(jìn)冰箱要怎么做了,只要把步驟想好告訴電腦就行了瘩缆。
但是懶惰的科學(xué)家還是覺得這不夠:為什么我只是想算一算1+1等于幾关拒,但是我卻需要控制電腦一步一步去完成,而且庸娱,計(jì)算1+1這個(gè)過程是固定的着绊,為什么不繼續(xù)用自動化的東西來完成?于是在匯編語言之后熟尉,科學(xué)家們有創(chuàng)造了一種更高級的語言归露,而且懶得取名了,直接稱為高級語言斤儿。從此以后剧包,科學(xué)家們只需要寫“1+1” 就可以自動轉(zhuǎn)變成0和1的長串恐锦,傳輸給電腦讓它去計(jì)算了。完成這個(gè)轉(zhuǎn)變過程的程序疆液,叫做編譯器一铅。編程,也變成了難度少了很多的工作堕油,隨著計(jì)算機(jī)進(jìn)入尋常百姓家潘飘,寫程序的人再也不只是科學(xué)家了,專業(yè)寫程序玩家掉缺,被稱之為程序員福也。
有一個(gè)重點(diǎn)需要注意。機(jī)器語言是跟計(jì)算機(jī)本身相關(guān)的攀圈,匯編語言也是跟計(jì)算機(jī)的工作原理相關(guān)的,當(dāng)前我們使用的電腦的基本原理跟設(shè)計(jì)都是差不多的峦甩,所以機(jī)器語言赘来、匯編語言也是固定那樣子。但是高級語言因?yàn)椴挥迷诤蹙唧w硬件細(xì)節(jié)凯傲,可以更關(guān)注于表達(dá)思想犬辰,而人類思想百花齊放,所以高級語言也有很多種冰单。
我在大學(xué)的時(shí)候一開始學(xué)的是一種叫C++的語言幌缝,后來轉(zhuǎn)向Java。然后很多人都會說C或者C++是“面向過程”的語言诫欠,Java是“面向?qū)ο蟆钡恼Z言涵卵。直到畢業(yè)之后還有人問我,到底什么是“面向?qū)ο蟆本幊袒牡稹D菚r(shí)候我想了一下轿偎,說,其實(shí)這是一種思維方式被廓,一種編程里面的世界觀坏晦。
很高深對不對~~~
由于高級語言可以直接表達(dá)編程人員的思想,人類的思維方式千差萬別嫁乘,人類的世界觀更是不盡相同昆婿,于是便有了各種各樣形式各異的編程語言了。其目的蜓斧,就是為了貼合思維方式仓蛆,從而可以方便地把想法轉(zhuǎn)換為代碼。如果你認(rèn)真學(xué)過不同的人類語言挎春,你就會發(fā)現(xiàn)不同人類語言中也包含著不同文化不同國家的人的不同的思想多律。作為一個(gè)例子痴突,所謂的“面向?qū)ο蟆本幊蹋渌季S方式就是認(rèn)為問題里出現(xiàn)的“東西”狼荞,都可以抽象成一個(gè)一個(gè)的“對象”辽装,通過這樣的抽象,把問題簡單化相味,模型化拾积。相對的,另一種編程模型丰涉,“面向過程”編程拓巧,則是認(rèn)為問題都可以分解為一個(gè)一個(gè)的步驟,所謂的解決問題一死,就是想好每個(gè)步驟按部就班地完成肛度。
以上是我個(gè)人的理解,偏頗之處投慈,我才不管啦承耿!
下一節(jié)課,我們開始拿起槍伪煤,扛起炮加袋,正式寫代碼!