官术网_书友最值得收藏!

1.1為何要學習程序設計

良好能力性的素質,往往表現在從問題的定義出發,明確問題的性質,發現問題的本質,找到解決問題的途徑,并確定一種最好的處理方法,使得問題最終得以解決。無論是社會活動還是日常問題,無論是科學實驗還是制定研究規則,這個過程總是類似的。

如果著眼于發現問題、解決問題的觀點,學習計算機語言并嘗試進行程序設計就是一種非常好的方法。這里首先需要理解“為什么要學習程序設計”,這非常重要:如果你不知道為什么要做某件事,很難想象你會把某件事做好。

1.1.1 什么是程序設計

大家知道,計算機依靠程序才能夠工作。一般認為,程序(Program)是產生一系列指令(或者叫做命令)讓計算機工作的過程,它們可以存儲在計算機中,而這些指令的集合就是計算機程序設計語言。因此在這個意義上,程序設計有兩個重要的思想:一是我們需要把復雜的設計過程翻譯為機器能夠理解的執行代碼,二是程序被存儲在計算機中可以反復地被執行。

現在有數以百計用于不同應用的計算機程序設計語言(Programming Language),這些語言大致可以分為三類:機器語言、匯編語言和高級語言。

機器語言(Machine Language)也叫做機器代碼語言,使用二進制代碼,計算機能夠直接識別并執行這些代碼,其中的代碼又稱為機器指令。匯編語言(Assemble Language)以英文助記符的形式表示,最后需要將其翻譯為二進制代碼才可運行。這兩種語言都是面向機器的,也就是說,不同CPU類型的計算機有不同的指令系統和匯編語言。使用機器語言、匯編語言的用戶需要對所編程機器的指令系統有非常深入的掌握,所以一般被認為這是專業人員所從事的事。

隨著計算機技術的發展,許多過去必須由計算機專業編程人員才能夠從事的程序設計工作被更多的非專業人員所掌握。打破專業人員對計算機編程的“壟斷”,應該歸功于“高級語言”。

編程人員編寫機器語言程序需要仔細地書寫一個個0和1組成的代碼,使用匯編語言則需要將每條指令用一個助記符代替,高級語言程序則可以簡單地使用類似于數學表達或者英語單詞組成其語句。高級語言可以讓編程人員在較短的工作時間內完成更多的編程工作,大大提高了編程的效率。

1.1.2 有哪幾種常用的高級語言

現在盡管有多種高級語言,但發展到今天能夠稱得上被廣泛使用的高級語言也只有少數幾種。

① C語言:功能強大,一直有“專業語言”的美譽。C語言由Bell實驗室于1972年開發,兼有高級程序設計語言的優點和匯編語言的高效率,能夠直接操縱計算機內存單元中的數據位,因此在設計系統軟件(如操作系統)或者實時應用領域用途很廣。使用C語言比使用其他高級語言寫出的程序運行速度快得多。

② C++語言:C語言的擴展版本。C++提供了若干特性,改善了C語言的功能,并增加了面向對象編程的功能。在今天的系統設計領域,C++已經成為主要設計語言之一。

③ FORTRAN語言:在數學、科學計算等領域,FORTRAN(FORmula TRANslator,公式翻譯)語言具有獨特的優勢。它也是最早的計算機高級編程語言,最初由IBM公司于1957年開發。

④ Java語言:被稱為網絡編程語言,是面向對象的程序設計語言,是基于C和C++的。Java特別適合于 Internet 環境,現已成為Internet中最受歡迎、最有影響的編程語言之一。Java 的Windows版本叫做Visual J++,很多人認為Visual J++是Visual Basic的最有力競爭者。Java是由美國SUN公司開發并于1995年發布的。

上面列舉的幾種,加上本書所介紹的VB.NET,被認為是目前最廣泛使用的幾種編程語言。機器語言、匯編語言都是面向機器的,它們必須針對特定的機器進行程序設計,而高級語言則靈活得多,一般情況下都是與機器無關的。

1.1.3 翻譯計算機語言程序

高級語言編寫的程序(稱為源程序)需要翻譯為機器語言程序才能被計算機所執行。語言翻譯程序也是一種軟件,人們稱之為“程序的程序”,根據其翻譯的方式,可分為解釋程序和編譯程序。

圖1.1 解釋程序

解釋程序對源程序中的代碼翻譯一句執行一句,如圖1.1所示,這個過程有點像同聲翻譯。解釋程序在執行過程中不生成可執行的文件,因此程序運行速度較慢,而且源程序必須在解釋程序環境下運行,如果源程序出錯,它將立即停止執行。計算機使用解釋程序可以在較小的內存中運行程序。早期的BASIC語言就是解釋型語言,Visual Basic保留了這個特點,同時使用編譯方式。

編譯程序的結構如圖1.2所示,圖中的虛線部分為語言處理程序。首先由編譯器(Compiler)將源程序整體翻譯為目標程序代碼,然后由連接程序(Linker)將目標程序和系統資源(如函數庫、系統過程等)連接在一起形成可執行程序文件,最終可以直接運行可執行程序文件,使得用戶編寫的程序脫離編譯系統而獨立運行。這個結果有點像外文文獻的書面翻譯。

圖1.2 編譯程序

在計算機文件中,可執行程序(Executable Program)文件大多以.exe為后綴(擴展名),因此很好辨認。現在,許多編譯系統已經直接將編譯和連接過程組合在一起“構造”(Builder)可執行程序。Windows系統將這類可執行程序文件統稱為“應用程序文件”。

1.1.4 程序設計是一種方法學

一個很有意思的問題經常會被提及,那就是“為什么要學程序設計”。至少有一點是很明確的——幾乎每個不同職業的人都要用到計算機軟件:學生使用字處理軟件撰寫論文,會計師使用軟件記賬,攝影師使用圖片編輯軟件處理照片,電視臺使用軟件編輯節目,作家使用軟件寫作……事實上計算機是職業人員應該使用的工具,而理解計算機,學習編程是最好的途徑。

學習程序設計和學習數學一樣,能夠培養一個人發現問題、處理問題的能力,而且這種訓練更符合信息時代的發展要求。與傳統課程不同的是,程序設計是一個主動的、積極的過程,因為在編程過程中計算機能夠立即、直接地反饋信息,這需要編程者與之互動,達到探索、實驗和評價的效果。若把編程與做數學習題的過程進行比較,就會發現程序設計更有趣、更生動:編程者與計算機直接交互,如計算機會告訴你某個語句出現了錯誤,你就必須檢查并糾正這個錯誤,這是一個探索過程;同時,編程者有一種成就感,如果你的程序能被正確執行的話。

學過程序設計的人未必就一定要從事程序設計工作。事實上,目前編程的人越來越少,用程序的人越來越多,這就使得有人懷疑是否有學習程序設計的必要。其實回答這個疑問并不難,就像我們在大學里人人都學習微積分,但并沒有幾個人使用微積分。那么是不是不用的人就不需要學呢?如果你不以程序設計本身為目的進行學習,那么我們看看下面的事實。

在我們使用各種不同的軟件幫助處理問題時,我們需要與計算機進行交互,如編輯文檔、使用電子表格、制作演示文稿等。一個簡單的例子是,如果你現在通過網絡的搜索引擎去查找需要的資料,一個更符合檢索要求的表達式是重要的,因此你理解計算機如何用程序來運行你的檢索表達式,對你進行檢索操作肯定會有幫助。如果你知道了計算機是如何用程序進行工作的,則你在電子表格中對符合條件的數據進行統計計數時,絕對不會一個個地把它數出來。今天我們使用的是這些軟件,我們不能知道幾年后將會有哪些軟件,會幫我們解決哪些問題。因此,理解編程比直接理解使用軟件有更長遠的意義。

讓計算機幫助人們做事,采用了人在與計算機交互過程中使用的特定科學符號,有些是自然語言表達,有些是具體的特定記號,這些都是某種形式的“編程”過程。即使使用某些功能很強大的軟件包,如進行科學計算和工程計算的 MATLAB 之類的軟件,仍然需要在某種程度上按照一定的表達形式進行“編程”,這些軟件才能夠幫助用戶完成工作。

1.1.5 如何學習程序設計

一個程序員的工作與作家、設計師沒有什么不同,都是從構思框架開始,然后進入細節,最終把其設計思想表現為特定的文字或者圖紙。其中將根據故事的發展或設計要求的變化,反復修改。

事實上,沒有任何一個程序員設計程序能夠一氣呵成,都需要經過多次的反復修改,最后達到程序功能的要求。進一步,即使程序看上去正確,其中仍然會隱藏著未知的錯誤。因此,測試程序需要使用不同的輸入,在盡可能多的環境下運行,以使得這些錯誤發生在程序正式投入運行之前,然后及時糾正。

幾乎所有的程序設計都會涉及輸入數據、處理數據,進一步地說,設計針對某個特定問題求解的程序,必須知道需要哪些數據、這些數據的性質(正式的說法是數據的屬性),以及這些數據之間的相互關系。因此,要學習程序設計就必須學習表達這些數據以及相互關系的語言的描述,一般認為,需要:

① 分析問題,使用特定的方法進行描述,如使用流程圖描述。

② 在表達抽象問題時,用明確的實例加以說明。

③ 使用編程語言精確描述所定義的語句和數據之間的關系。

④ 通過檢查,包括機器編譯過程的檢查,測試上述設計。

⑤ 注重細節問題。

第一步的分析過程是至關重要的。如果說其后的步驟和計算機語言關系密切的話,那么分析問題則與“算法”相關。大多數處理過程還與數學表達有關,即選擇一個合適的算法是程序設計的第一步。討論“算法”不是本書的范圍,但本書給出的例子都含有算法的影子,這需要讀者從中領會。

以上這些表現在計算機程序設計中的行為,與任何一項有意義的事務(如一個商業活動)的過程都是類似的。程序設計過程與一般處理問題的過程有一個重要的差別,即衡量程序的設計結果不是靠設計者或使用者的評價,更重要的是機器的評價,即程序必須被正確地運行,至少在預見的范圍內,程序的運行結果能夠與預期結果相同。

因此,強調實踐環節有時比設計過程的學習更要緊。傳統的閱讀理解是需要的,但有時把設計的代碼輸入到計算機,讓計算機執行一次再來查看程序的執行結果,比僅靠閱讀來理解程序更有效,也就是說,實驗能夠幫助我們進一步理解程序設計的過程。

主站蜘蛛池模板: 搜索| 苏州市| 太湖县| 宝鸡市| 类乌齐县| 思南县| 平果县| 沭阳县| 多伦县| 山阴县| 延庆县| 都匀市| 高州市| 凤阳县| 库尔勒市| 封丘县| 桃园县| 五指山市| 含山县| 青冈县| 轮台县| 如皋市| 荔浦县| 泗洪县| 乌恰县| 白山市| 台北市| 四子王旗| 仙游县| 安福县| 荥经县| 都兰县| 平泉县| 中牟县| 若尔盖县| 平武县| 晴隆县| 汕尾市| 乡城县| 诏安县| 巨野县|