1.1 計算機語言
程序是用計算機語言寫成的。編程的實質(zhì)就是用計算機語言來表達要解決的問題的邏輯。
那么,什么叫計算機語言呢?
先不必去解釋。因為,計算機是機器,機器不是生物,它怎么能有語言呢?小貓小狗有語言我尚可相信。機器也有語言,還要我們?nèi)W習,這似乎有瀆人類之尊嚴。
如果不把這個結(jié)解開,可能部分特別在意人類尊嚴的學生對學習編程從此產(chǎn)生心理障礙,無法繼續(xù)學習……
狹義上說,人們講的語言包括漢語、英語、廣東話,它是語言,有聲音。小鳥之間的唧唧喳喳,大抵也是語言。但其實“語”“言”二字雖都帶口,卻不是說非得有聲才稱為語言;啞語無聲,但它也是語言。廣義上講,語言是溝通、交流的一種手段。基于此,人們認為所有的機器或工具,也包括計算機,都有它們自己的語言。比如錘子,它的語言是敲打;比如螺絲刀,它的語言是擰。如果你非要擰錘子,非要敲打螺絲刀,那么就像你用法語和廣東人交談,用粵語和法國人說話一樣莫名其妙。
一般來說,越復雜的機器,人類與其溝通的語言也越復雜。比如汽車,你想駕馭它,你就必須去駕校參加學習。想一想,開車的時候,人們的確是在和車進行溝通。如果你倆之間的溝通出現(xiàn)差錯——你心里右轉(zhuǎn),手卻一個勁向左轉(zhuǎn)方向盤,向機器發(fā)出了錯誤的命令——這將多么可怕呀!
至此,人們的心理障礙可以消除了。小貓小狗有語言是因為它們聰明,而機器有語言卻是因為它們的笨。它們笨,沒辦法像動物一樣可以通過培訓來理解人類的意愿,所以,讓人類反過來為它們制定一套溝通的規(guī)則,然后去學會這些語言,從而方便控制機器。
可以說,凡是機器語言都是笨笨的語言。機器語言可以分低級語言和高級語言,但無論何者,都笨得可愛——學得越多你就會越發(fā)現(xiàn)它的笨和可愛。另外,當我說越復雜的機器其語言也越復雜時,我用“一般來說”加以修飾。這是因為,發(fā)明和發(fā)展機器的智者們會為機器制造出越來越高級的語言,這些高級語言,最終越來越接近人類的自然語言。就像計算機,我們有信心相信,終有一天,它能聽懂人們的語言——這就是流傳在程序員中的一個夢。當程序員熬紅眼敲打出數(shù)萬行代碼時,他們便會想起這個夢。閉上雙眼,伸腰,對計算機說:“BEGIN……”,深呼吸一次,然后說:“END”,睜眼時發(fā)現(xiàn)計算機已完成了所有工作……
下面回到計算機,它是機器,也是人類有史以來,繼發(fā)明使用火、電、電子這些改善人類生活的工具后,最為重要、最為先進、最為廣泛使用的工具。它的機器語言的復雜程度可想而知,已經(jīng)復雜到必須成為大學的一門專業(yè)課程。然而別忘了前面的結(jié)論,語言只是溝通的手段。在這個意義上,當你用鼠標或鍵盤在計算機上進行輸入時,只要你輸入的是正確操作,人們都認為你在使用計算機語言,因為你確實是在用一種特定的方式或動作進行著和計算機的交流。
當然,這里的課程并不特意教你任何有關(guān)計算機的基本操作。計算機的基本操作主要是指如何使用計算機內(nèi)已有的軟件產(chǎn)品,比如Windows(操作系統(tǒng)是軟件,稱為系統(tǒng)軟件)、辦公系統(tǒng)MS Office或WPS Offic(e 這些實現(xiàn)工作和生活中具體應用需求的軟件稱為應用軟件)、游戲(一種特定的,只拿來玩的應用軟件,稱為游戲軟件)。但我們不同,人們學的是如何編寫軟件。也就是說,人們將是發(fā)明人、設計師、創(chuàng)造者;而他們(到今天仍拒不學習編程的家伙)都只是使用者。
程序(或軟件)是用計算機語言寫出來的。
寫一個程序,大致是這么一個過程:
(1)人有一個問題或需求想用計算機解決。
(2)人想出解決問題或?qū)崿F(xiàn)需求的思路。
(3)人將思路抽象成數(shù)學方法和邏輯表達或某種流程的模式。
(4)程序員將數(shù)學方法、邏輯表達中的數(shù)據(jù)和流程用計算機語言表達,稱為編碼。
用計算機高級語言寫成的代碼被語言的實現(xiàn)工具(VC、VB或C++Builder等)轉(zhuǎn)換成計算機的最低級機器語言,這就完成了人與機器在程序制定上的最后溝通。
可見,人的思路是先用人類自己的語言思考,然后用一門計算機語言寫成代碼,最終需要一個語言工具來將它轉(zhuǎn)換成機器可以理解的機器語言。這里要學的就是一門承上啟下的計算機語言。這樣語言有很多:BASIC, Pascal, C、C++, Java, C#,等等,本書的C語言是使用最多的語言。有關(guān)C語言的更多特點,將在以后的章節(jié)談到。
盡管人們完全可以直接用最低級的計算機語言——機器語言來寫代碼,那樣就不需要語言工具了,但在這里要弄清楚,本書是教機器語言。下一節(jié)里,你會明白用機器直接能懂的語言——不妨稱之為原始的機器語言寫軟件,在今天是多么的不現(xiàn)實。
- MySQL數(shù)據(jù)庫管理與開發(fā)(慕課版)
- Unity Shader入門精要
- GeoServer Beginner's Guide(Second Edition)
- Mastering KnockoutJS
- Java編程技術(shù)與項目實戰(zhàn)(第2版)
- Web Development with MongoDB and Node(Third Edition)
- 移動界面(Web/App)Photoshop UI設計十全大補
- Oracle 18c 必須掌握的新特性:管理與實戰(zhàn)
- AutoCAD 2009實訓指導
- Managing Microsoft Hybrid Clouds
- 工業(yè)機器人離線編程
- HTML5+CSS3+JavaScript 從入門到項目實踐(超值版)
- 深入實踐DDD:以DSL驅(qū)動復雜軟件開發(fā)
- 計算機應用基礎(第二版)
- Python Deep Learning