通過實戰,講C語言,談編程,這是系列文章的兩個主要內容。
一、學前要思考
從今天開始,我會按照我的想法一步一步地談論如何編程。可能我的想法和你不太一樣,和其他人不太一樣,這不奇怪,每個人都有每個人做法和想法嘛。我從不是照書宣講,但也不隨便亂講,我還是有系統的、有針對性的、把自己對編程的看法呈現給你們與你們交流。不要拒絕新的嘗試、試試聽聽別人想法,說不定會有一些收獲。
我想問一下讀者,當你要學一門新的語言的時候,你應該首先考慮什麼?你應該怎麼學?你怎麼才算學好了?。你會考慮這些問題嗎?如果你從不考慮這些問題,不知道怎麼去考慮,那我第一課就要告訴你,要學會思考。一個程序員不善於思考就不會是一個好的程序員,記住要學會思考,不習慣也要習慣。
如何思考?思考什麼?學一門語言首先要把學習一門語言當做一個整體來思考。在學之前就要考慮好,為啥要學?怎麼學?學什麼?學多長時間?學到什麼程度?
很多過來的程序員在學習語言的時候,由於沒有很好考慮這些問題,急於編程序、急於看到程序運行出來的結果,或者一切順其自然,沒有急迫感,邊學邊做,若干年後也不知道自己到底學的怎麼樣。這些是我最不願意看到的。
1、 為啥要學?
我認為這個問題一定要從實用主義出發,一定要學了有用。比如,工作需要、找工作需要、做自己項目的需要。總之能夠在近期帶來經濟效益的,可以考慮去學。那些因好奇、因升級、因流行、因新品、因技術而去學則不要浪費時間去學,最多去了解就行了。而如果為了興趣,這個就要考慮了,可以考慮比較一兩個有用的程序語言去學習。人的時間本來不多,而程序員的時間更是不多而且珍貴,所以要珍惜使用。
2、 怎麼學?
我看到大部分人都是找本書,先看,再試,不懂網上去查,是向書學習,向網學習的個人學習。這種方法一定學出來的是一個平均水平的程序員。我提倡的是不要看書(這個方法我在《程序員成長路線圖:從入門到優秀》一書中專門說過),找人學。通過向別人學習,可以加快學習的進程、找到學習的重點、避免無謂的自己長時間查出錯原因,更重要的是培養程序員團隊意識,通過與其他人的交流,取長補短,共同進步。有些同學會說:“我找不會編程的人呀,向誰去學呀?”我只能說,現在會編程的人很多,只要你用心找,一定會找到的。至於人家肯不肯教你,那就要看你的了。
3、 學什麼?
一個語言就像一個大海,你都不知道這個海有多大,有多深,所以,我們如果像平常一樣,去喝幾口海水,是喝不光的。因此,我們更重要的是要掌握喝海水的方法,而不是喝了那幾口海水。學什麼一般人很難說的清,因為,他們面對的無邊的海水。我則更注重方法,我初步總結了一下要學會:
1) 語言環境的安裝
2) 編輯源程序
3) 編譯源程序
4) 運行程序
5) 語言的語法
6) 調試
7) 語言中的架構
8) 語言中重要的系統調用和引用
9) 打包安裝程序制作
我希望能在文章全部發表完成之後,能把這個列成一個表格,便於記憶和學習。其他細節的東西可以不要過多考慮。
4、 學多長時間
學多長時間的確是因人而異,有的人基礎好一些,經驗多一些,腦筋活一些,有人帶一些,學的就快一些。而有的人則相反,則要慢一些。一般情況下,一個月到二個月就能學的不錯了。
5、 學到什麼程度
語言學習無止境,學2年學10年都不能學透的。我還是提倡實用,只有學了以後,能滿足工作要求就行了,就可以告一個段落了。以後,在工作中,可以隨機地學,慢慢積累。
可能有些網友對上面要思考的問題,不太重視,感到學程序那需要考慮這些東西,學編程就是要學語法、學調用就行了。而根據多年的體會,我認為語言本身的語法、函數、調用反而不太重要,那是死的東西,跑不了。而學會思考,學會從流程上學習編程則是重中之重。
二、hello world編程
好吧,再說思考,大家可能會把我扁死不可。我把這次我的C語言的環境告訴大家:AIX操作系統、ORACLE數據庫。AIX可以看成是傳統的UNIX環境,是面向命令行編輯、編譯、運行(不是面向windows)。其實,各行C語言的環境大同小異,大家可以根據自己的環境做適當的調整。如果網友准備好了C語言環境後,我們就可以開始C語言實戰了。
我還是不能免俗,還是照顧到急於看到C語言程序的朋友們,開始我的helloworld編程。
我用vi 編輯了a.c 這個helloworld程序,編譯,並運行。
其流程如下:
1、 編輯a.c
1.在系統命令行鍵入
Vi a.c
2.編輯a.c
#include “stdio.h”
main()
{
fprintf(stdout,”hello world!\n”);
exit(0);
}
2、 編譯a.c
在系統命令行鍵入
cc a.c
3、 運行a.out
在系統命令行鍵入
./a.out
4、 顯示結果
hello world!
好了。第一C語言程序編出來了,運行出來了。你們也可以試試。也算是會編C語言了。
接下來我們要對這個程序進行思考了:
1、 這個程序功能比較簡單,但是,你的重點不要放在程序的功能上。而是放在一個語言的流程上。記住這個流程是:1、編輯 2、編譯、3、運行。
2、 大家注意了沒有我的源程序名是a.c,而不是取helloworld.c。這關系到源程序取名問題,下次抽空談。
3、 大家注意了沒有這個程序的可執行文件名為a.out,而不是a.exe或a
這個也值得談一談。這個和編譯有關,下面在談編譯的時候,會詳細談的。
4、 大家注意了沒有,運行這個程序的時候,a.out前加了./。這也是一個技巧。在有時候,明明看到目錄下有這個可執行文件就是執行了別的文件。這是保證就是執行當前目錄下的可執行文件的。因為,操作系統在接受命令行命令的時候,是會按照命令路徑的順序去找這個文件的,而當前目錄一般是放在bin目錄之後的。這個命令路徑是放在path環境變量。
5、 關於a.c中每一行程序放在下次再談吧。這次重點還是在流程,希望大家記住我們上學時候學到的東西:1、編輯 2、編譯、3、運行
總之,通過本文,如果你記住了程序員要思考,要思考為啥要學?怎麼學?學什麼?學多長時間?學到什麼程度?牢記編程流程:1、編輯 2、編譯、3、運行 就算及格了。我對編程十分強調基礎,強調原理,對編程要做到知其然,知其所以然。編程不要急,慢慢來,要克服自己自發的想當然的欲望,克服基於編程的那種沖動,多思考、多思考,這樣你的編程基礎才能打得牢,你今後的編程水平才能有很大的提高。
附:我在新浪微博開辟了名為“EOM與程序員之家”我的技術微博,記錄著我每天在技術上點點滴滴,有想法、有編程,希望大家關注和交流。http://weibo.com/2311619842
<script type=text/javascript> if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = false; var cb_blogId = 30363; var cb_entryId = 2214555; var cb_blogApp = "n216"; var cb_blogUserGuid = "a4823d0b-63cf-dd11-9e4d-001cf0cd104b"; var cb_entryCreatedDate = '2011/10/17 8:54:00'; </script>