當前位置:首頁 » 編程語言 » c語言和java編譯原理
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言和java編譯原理

發布時間: 2022-05-07 10:17:17

『壹』 c語言編譯原理是什麼

編譯共分為四個階段:預處理階段、編譯階段、匯編階段、鏈接階段。

1、預處理階段:

主要工作是將頭文件插入到所寫的代碼中,生成擴展名為「.i」的文件替換原來的擴展名為「.c」的文件,但是原來的文件仍然保留,只是執行過程中的實際文件發生了改變。(這里所說的替換並不是指原來的文件被刪除)

2、匯編階段:

插入匯編語言程序,將代碼翻譯成匯編語言。編譯器首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤後,編譯器把代碼翻譯成匯編語言,同時將擴展名為「.i」的文件翻譯成擴展名為「.s」的文件。

3、編譯階段:

將匯編語言翻譯成機器語言指令,並將指令打包封存成可重定位目標程序的格式,將擴展名為「.s」的文件翻譯成擴展名為「.o」的二進制文件。

4、鏈接階段:

在示例代碼中,改代碼文件調用了標准庫中printf函數。而printf函數的實際存儲位置是一個單獨編譯的目標文件(編譯的結果也是擴展名為「.o」的文件),所以此時主函數調用的時候,需要將該文件(即printf函數所在的編譯文件)與hello world文件整合到一起,此時鏈接器就可以大顯神通了,將兩個文件合並後生成一個可執行目標文件。

『貳』 C語言工作原理

作為一種編程語言,本身是談不上工作原理的,實際上C語言所有的語法,正是C語言編譯器的工作原理或者工作機制的具體實現。要細致的討論起來是不可能,但是作為C語言程序員,必須了解這個大致的流程。一個程序,從C語言源碼,到系統可執行的文件,一般經歷四個過程。
1、預處理階斷,這個階斷是文本處理階斷,有預處理器來完成,會將源碼中的帶"#"開頭的預處理命令進行相應的處理,在Linux上C語言的預處理器程序是cp命令。
2、編譯階斷,這個階斷是有C語言編譯階斷,在Linux上C語言的編譯器是cc命令,它將C語言源碼轉換成匯編指令。
3、匯編階斷,這個階斷是匯編編譯階斷,在Linux上C語言的匯編器是as命令,這個階斷會將匯編指令編譯成二進制機器碼。
4、鏈接階斷,這個階斷是會將匯編階斷生成的機器碼目標文件,裝載成一個系統可執行的文件,在Linux平台以ELF格式進行組裝,在Windows平台上以PE格式進行組裝。在Linux平台上的鏈接器命令為ld,在windows平台上的鏈接器命令為linker。

『叄』 電腦是如何識別C語言和JAVA語言的

電腦只懂二進制代碼,每個用於編程的軟體平台,都必須將高級語言轉換成二進制代碼,這個過程就是編譯,C也好JAVA也罷,都有自己的編譯器。

『肆』 學java 用c語言打基礎,有什麼優勢,區分什麼

如果你是初中畢業,沒上高中,那要干這行是非常難的。嗯,我是說要干好的話,是很難的。 看在你前面兩個問題的份上,我就花點時間來回答你這個問題。 首先,譚浩強那個書是幾乎沒有任何意義的,其中的代碼質量極差,用來糊弄糊弄文科學生考個計算機二級還可以,但是你想學編程,就不用看那個了,計算機等級考試也沒有任何意義,任何一個公司招人都不會看那個的。 首先你要清楚明白一點,就是你還小,潛力很大,可以說你的前途是無限的,就看你自己怎麼走了。 如果你安心做個小程序員,寫寫代碼混混日子,每個月拿個3000來塊錢,那你現在可以隨便玩,以後年紀大了點去上個什麽java培訓班,或者如果你肯花點功夫上個計算機本科,三流大學隨便混,現在做程序員的基本都能拿這么多。但是前途嘛,嘿嘿,你自己想想吧。 所以,小弟弟,現在當務之急還是上好高中,考個好點的大學。 如果你學有餘力想自學計算機的。那我可以指點你一條路,但是切記,前提是要學有餘力,如果你成績很好,那可以花課余時間學這個,如果學校功課很吃力,那一定要確保上好大學。 畢竟很多計算機系牛人上大學之前連計算機都沒有碰過,這玩意不急在一時,你現在還小。 好,下面給你指條路,這讓我好好想想。 首先,程序員是個很不專業的說法,你這種年紀,志向要高,目標要遠大,你所謂的「編程」只是技術的末流,打個比方,真正的高手肯定是有一門高深的內功,然後才去練劍法,甚至做到五招勝有招的境界。所以,語言這東西不急的,先打好基礎。 數學和英語,這兩門都是重中之中,數學培養邏輯思維,英語嘛,以後好的專業文獻和書籍都是英文原版的。一千頁的厚度,一百多萬字的書都是要看英文版的的。而且數學本身也有非常多的實際應用,不只是培養邏輯思維這么簡單,當然,我這里說的是數學,不是算數。 言歸正傳(我之所以說這么多廢話就是想提醒你,學校功課一定要搞好。),你可以先買點經典教材的中文版來看。剛開始肯定是非常非常難的,天書一般,特別基礎的書我也太清楚了,因為那個對我來說很遙遠,你可以去找本計算機科學導論這樣的書來看。有個網站你一定要記住,要常去,就是豆瓣讀書,網址你自己搜,然後里在裡面可以搜索一本計算機科學概論這書,翻譯的,這書我沒看過,但是打基礎應該不錯的,當然,這種專業書籍都是非常枯燥的,而且可能你看了很久,看了很多本,也不會有什麽效果,他不會立馬讓你成為一個「牛人」或者「編程高手」的,但是正如我之前所說,你還小,路還長,所以要把目標定得高。想成為真正的高手還是學點三腳貓功夫就看你自己了。 看完這個導論或者概論式的書,你可以開始往細節探索了,計算機嘛,總的來說就是兩條線,硬體和軟體,即使你喜歡軟體,硬體也是要學的,這個沒有第二選擇,最好的就是CS:APP,國內翻做深入理解計算機系統,這書堪比計算機界的九陰真經,內容很全,涵蓋很多科目,軟硬都有,也很深,習題還有詳細講解,當然也很厚,這書是打基礎的最好選擇(當然,這個基礎是相對我來說的,對你可能很不基礎了。)這書不能直接看,你得先看看國內教材,推薦唐朔飛的計算機組成原理和湯子瀛的操作系統,還有王爽的匯編語言(這本書是國內教材里經典的經典啊,小學生都能看懂。),這三本書你肯定也看不太懂,但是一定要翻透,不求甚解,但求讀熟,以後你會明白的。 嗯,然後就是語言了,看完這三本書之後你還不能看「深入理解計算機系統」,因為你要學一門語言,打基礎當然是C語言了,C語言最經典的教材當然是C語言本身的發明者寫的那本,叫「C程序設計語言」但是這本書你肯有可能看不懂,但是一定要買,可以作為參考書,或者收藏。。。不過這書不太適合入門,那麼用什麽書入門呢,這我到確實說不太好,因為學習C語言對我也是很久遠的事情了,我當年就是看譚浩強那本書入門的,當然,這本書很不好,會給你養成很不好的習慣,但是勝在淺顯易懂,你自己掂量吧。 這里扯遠一點,C語言語法非常簡單,學起來非常快,但是我不知道好的入門教材,如果你不想從C語言入門,直接學C++也是可以的,C++入門不二經典,就是Essential C++,這書中文名我不知道,你自己找找去吧。Essential C++看完之後看C++ Primer,然後看The C++ Programming Language,當然,這都是後話了,後面兩本都很深,沒有一點基礎是看不下來的(而且非常厚),而且看完這三本C++只能說你算是掌握這門語言了,離精通還差得遠呢。 嗯,回歸正題,那麼看完組成原理,操作系統,匯編語言,和學完一門語言(C或者C++)(對了,匯編語言可能要在學完C或者C++之後再學)。之後,你就可以看「深入理解計算機系統」了,這是本大部頭,不要怕,前面基礎有了,看這本不會很難的。 看完「深入理解計算機系統」,恭喜你,入門了,你對整個計算機系統有了一個比較全面深入的理解了,當然,我給你假想的目標比較高,國內的那些垃圾教材就不用去翻了。 接下來可以學更「專」一點的東西了,首先,你要學好離散數學,不,不是學好,是「學」就可以,數學這東西,要學好是要花大力氣的,如果你進了一所好的大學,那當然要學好,如果你只是自學,那你應該找本國外的大部頭的離散數學教材翻一遍,不求甚解,但是起碼題目都看一遍,概念都過過目,這也是基礎。 然後你可以隨便找本數據結構的書看,隨便找,隨便翻,不求甚解,但求讀熟。 數據結構本身是比較細枝末節的東西,現在不用太糾結,看完數據結構,就要看計算機科學的核心了,就是演算法,推薦直接上演算法導論,這書現在國內只有第二版,不過等你看到這程度,估計第三版的中文版也出了。這書雖然非常著名,雖然很厚,但是它不難!講得非常細,作者生怕你看不懂。 演算法是核心,是轉折點,看完之後前面的路就廣了隨便你選一條。 建議你學編譯原理,教材沒得說,龍書,你自己搜搜就知道了。 網路,這個基礎教材也沒得說,computer networks(我這里說的所有書你都可以在豆瓣找到的) 然後是資料庫,這個要看資料庫系統基礎教程,當然,學資料庫之前最好要有匯編,演算法,和編譯的基礎。這書也是外國的。 然後,你就可以考慮具體實用了,如果你喜歡底層,做系統軟體,那可以繼續往C語言或者C++發展,如果想學JAVA,那也可以,當然,有一點就是,等你成人了,等你大學畢了業,C++或者Java還是不是業界主流都不一定的,這個行業發展非常快,但是唯有基礎原理是不變的,所以我根本沒有跟你說太多語言和編程的東西,你還小,學那些沒用的,也不需要。基礎打好,原理搞懂,前面就是一馬平川,而且是青藏高原上的平川,你層次就比一般程序員高了啊。 這時候如果你大學成績優秀,那沒得說的,出國,本科畢業申請美國博士有獎學金的,花不了太多錢,當然,前提是你非常優秀,而且非常重要的一點是你本科成績必須很好(我就是栽在了本科成績上)。 說了這么多,不是我2,咱也不認識,我只不過回答了你兩次問題,拿了點根本無所謂的網路知道積分罷了,我只是覺得,看見這樣一個對計算機感興趣的晚輩,如果能適時給你一點指導,也許就能改變你一生,如果真能這樣,也不枉我花這么多時間打這么多字了,但是,很大概率是你和普通的小孩一樣,混混日子,一無所成,路是你自己走的,具體能有多少成就,就看你自己了。 另外,真的,其實你現在什麼都不用關系,我說的那些你都可以當屁話,學校功課搞好就行,上好點的大學,咱理工科文憑學歷是非常非常重要的!尤其是計算機這樣最偏理科的工科。 學計算機是非常枯燥的,開始也是非常難的,但是入了門之後再繼續深入就會很順利了,怎麼能算入門了呢?我覺得,看完「深入理解計算機系統」就行。 記住,這是理工科,作為一個理工男,一定要熱愛自己的專業,把枯燥的東西學出興趣來,加油,小盆友。 還有一點,我說的那些書,可能的話,盡量看英文版,學計算機,英文不好是沒法混的。 再加一條,計算機的專業書初學者都是很難看懂的,很多時候一個概念作者根本不解釋,你也不明白,因為作者自己明白了,他也假設你明白了。所以有個訣竅就是,看一本書的時候,搞點同一科目的其他書來參考著看,看到不明白的地方翻翻其他書,也許就有了,當然,主要還是以我給你推薦的那幾本為准。

『伍』 請教下c語言學的好可以有哪些工作機會,麻煩說的具體些,謝謝,還有學linux內核java什麼的又怎麼樣呢

開發板用友善之臂的吧
mini2440 連3.5寸屏500塊錢的樣子
有好幾張DVD學習光碟

這款口碑比較高

嵌入式Linux操作系統學習規劃
ARM+LINUX路線,主攻嵌入式Linux操作系統及其上應用軟體開發目標:
(1) 掌握主流嵌入式微處理器的結構與原理(初步定為arm9)
(2) 必須掌握一個嵌入式操作系統 (初步定為uclinux或linux,版本待定)
(3) 必須熟悉嵌入式軟體開發流程並至少做一個嵌入式軟體項目。
從事嵌入式軟體開發的好處是:
(1)目前國內外這方面的人都很稀缺。這一領域入門門檻較高,所以非專業IT人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,大多數人無條件接觸。
(2)與企業計算等應用軟體不同,嵌入式領域人才的工作強度通常低一些(但收入不低)。
(3)哪天若想創業,搞自已的產品,嵌入式不像應用軟體那樣容易被盜版。硬體設計一般都是請其它公司給訂做(這叫「貼牌」:OEM),都是通用的硬體,我們只管設計軟體就變成自己的產品了。
(4)興趣所在,這是最主要的。
從事嵌入式軟體開發的缺點是:
(1)入門起點較高,所用到的技術往往都有一定難度,若軟硬體基礎不好,特別是操作系統級軟體功底不深,則可能不適於此行。
(2)這方面的企業數量要遠少於企業計算類企業。
(3)有少數公司經常要碩士以上的人搞嵌入式,主要是基於嵌入式的難度。但大多數公司也並無此要求,只要有經驗即可。
(4)平台依託強,換平台比較辛苦。
興趣的由來:
1、成功觀念不同,不虛度此生,就是我的成功。
2、喜歡思考,挑戰邏輯思維。
3、喜歡C
C是一種能發揮思維極限的語言。關於C的精神的一些方面可以被概述成短句如下:
相信程序員。
不要阻止程序員做那些需要去做的。
保持語言短小精幹。
一種方法做一個操作。
使得它運行的夠快,盡管它並不能保證將是可移植的。
4、喜歡底層開發,討厭vb類開發工具(並不是說vb不好)。
5、發展前景好,適合創業,不想自己要死了的時候還是一個工程師。
方法步驟:
1、基礎知識:
目的:能看懂硬體工作原理,但重點在嵌入式軟體,特別是操作系統級軟體,那將是我的優勢。
科目:數字電路、計算機組成原理、嵌入式微處理器結構。
匯編語言、C/C++、編譯原理、離散數學。
數據結構和演算法、操作系統、軟體工程、網路、資料庫。
方法:雖科目眾多,但都是較簡單的基礎,且大部分已掌握。不一定全學,可根據需要選修。
主攻書籍:the c++ programming language(一直沒時間讀)、數據結構-C2。

2、學習linux:
目的:深入掌握linux系統。
方法:使用linux—〉linxu系統編程開發—〉驅動開發和分析linux內核。先看深,那主講原理。看幾遍後,看情景分析,對照深看,兩本交叉,深是綱,情是目。剖析則是0.11版,適合學習。最後深入代碼。
主攻書籍:linux內核完全剖析、unix環境高級編程、深入理解linux內核、情景分析和源代。
3、學習嵌入式linux:
目的:掌握嵌入式處理器其及系統。
方法:(1)嵌入式微處理器結構與應用:直接arm原理及匯編即可,不要重復x86。
(2)嵌入式操作系統類:ucOS/II簡單,開源,可供入門。而後深入研究uClinux。
(3)必須有塊開發板(arm9以上),有條件可參加培訓(進步快,能認識些朋友)。
主攻書籍:毛德操的《嵌入式系統》及其他arm9手冊與arm匯編指令等。

4、深入學習:
A、數字圖像壓縮技術:主要是應掌握MPEG、mp3等編解碼演算法和技術。
B、通信協議及編程技術:TCP/IP協議、802.11,Bluetooth,GPRS、GSM、CDMA等。

2010-8-21 16:46 回復
122.90.173.* 2樓

C、網路與信息安全技術:如加密技術,數字證書CA等。
D、DSP技術:Digital Signal Process,DSP處理器通過硬體實現數字信號處理演算法。
說明:太多細節未說明,可根據實際情況調整。重點在於1、3,不必完全按照順序作。對於學習c++,理由是c++不只是一種語言,一種工具,她還是一種藝術,一種文化,一種哲學理念、但不是拿來炫耀得東西。對於linux內核,學習編程,讀一些優秀代碼也是有必要的。
注意: 要學會舉一反多,有強大的基礎,很多東西簡單看看就能會。想成為合格的程序員,前提是必須熟練至少一種編程語言,並具有良好的邏輯思維。一定要理論結合實踐。
不要一味鑽研技術,雖然擠出時間是很難做到的,但還是要留點餘地去完善其他的愛好,比如宇宙,素描、機械、管理,心理學、游戲、科幻電影。還有一些不願意做但必須要做的!
技術是通過編程編程在編程編出來的。永遠不要夢想一步登天,不要做浮躁的人,不要覺得路途漫上。而是要編程編程在編程,完了在編程,在編程!等機會來了在創業(不要相信有奇跡發生,盲目創業很難成功,即便成功了發展空間也不一定很大)。

嵌入式書籍推薦
Linux基礎
1、《Linux與Unix Shell 編程指南》
C語言基礎
1、《C Primer Plus,5th Edition》Stephen Prata著
2、《The C Programming Language, 2nd Edition》Brian W. Kernighan David M. Rithie(K & R)著
3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)
4、《嵌入式Linux應用程序開發詳解》
Linux內核
1、《深入理解Linux內核》(第三版)
2、《Linux內核源代碼情景分析》毛德操 胡希明著
研發方向
1、《UNIX Network Programming》(UNP)
2、《TCP/IP詳解》
3、《Linux內核編程》
4、《Linux設備驅動開發》(LDD)
5、《Linux高級程序設計》 楊宗德著
硬體基礎
1、《ARM體系結構與編程》杜春雷著
2、S3C2410 Datasheet
英語基礎
1、《計算機與通信專業英語》
系統教程
1、《嵌入式系統――體系結構、編程與設計》
2、《嵌入式系統――採用公開源代碼和StrongARM/Xscale處理器》毛德操 胡希明著
3、《Building Embedded Linux Systems》
4、《嵌入式ARM系統原理與實例開發》 楊宗德著
理論基礎
1、《演算法導論》
2、《數據結構(C語言版)》
3、《計算機組織與體系結構?性能分析》
4、《深入理解計算機系統》Randal E. Bryant David O''Hallaron著
5、《操作系統:精髓與設計原理》
6、《編譯原理》
7、《數據通信與計算機網路》
8、《數據壓縮原理與應用》

C語言書籍推薦
1. The C programming language 《C程序設計語言》
2. Pointers on C 《C和指針》
3. C traps and pitfalls 《C陷阱與缺陷》
4. Expert C Lanuage 《專家C編程》
5. Writing Clean Code -----Microsoft Techiniques for Developing Bug-free C Programs
《編程精粹--Microsoft 編寫優質無錯C程序秘訣》
6. Programming Embedded Systems in C and C++ 《嵌入式系統編程》
7.《C語言嵌入式系統編程修煉》
8.《高質量C++/C編程指南》林銳
盡可能多的編碼,要學好C,不能只注重C本身。演算法,架構方式等都很重要。

這里很多書其實是推薦而已,不必太在意,關鍵還是基礎,才是重中之重!!!
另外,虛機團上產品團購,超級便宜

『陸』 java、c語言,編譯原理,高手來下

程序編譯??

你的最終目的是開發編譯器還是做文法解釋器?還是你就是像學編程?

如果你像做編譯方面的研究,初中還太早了。有很多基礎知識你不懂沒有辦法學的。要學編譯原理只要要先學離散數學。

如果你僅僅是要學編程(基本的軟體開發),我建議你學標准C開始,唐浩強的那本C語言教程非常經典,而且也好懂。

如果你喲問題的話,給我郵件:danndy◎21cn.com,我盡力回答。不好意思,公司將QQ封了,我不能上QQ。

『柒』 想知道C語言和java的功能是有什麼實現的怎麼實現的

他們是針對底層的機器語言,匯編預言進行了整理封裝行成的。至於語法都是自己設計的時候規定的,具體什麼作用,主要看當初設計時對底層語言的哪個功能進行了封裝。

『捌』 編譯原理 我怎麼看不懂啊

建議先學習或先了解一些高級語言如:java、c語言後,對其的工作過程和運行方式有一點的了解後,再看編譯原理 ,因為編譯原理的工作就是把高級語言編譯成匯編語言或機器語言,讓機器來執行。如果你對高級語言一點也不了解的話會加大你學習負擔和壓力的。

『玖』 學完了C語言,是否有必要學Java

看完這個,你可能會有自己的一點想法了
應屆生學C好還是學JAVA好,做什麼更掙錢
老師:
你好。
我是一名09界剛畢業工作不久的java菜鳥級程序員。本人對java水平可以混口飯了,現在可以在工作中開發一般的小項目,都是B/S的。 本人基礎很爛,基本上:演算法 、數據結構、計算機組成原理、操作系統、編譯原理可以說從來沒有學過。目前我工作的環境是:開發b/s 架構的項目,不考慮性能,實際上實現需求就可以了。我可以跟客戶打交道,可以自己分析需求,可以自己跟其他人合作一些10萬以下的小項目。基本上都是對資料庫的增刪改查。來來去去都是那些表非常無聊。
雖然工作不久,但是目前已經感覺到在這樣下去,頂多隻是熟悉一下業務而言。就本身編程水平基本上沒多少提高。因為公司追求效益,只要寫出來的東西能用就完事,沒時間考慮代碼,而且java沒有指針,也不用的演算法,工作中的設計模式也就常用的幾個。剩下的幾乎沒什麼可以提高的了( 項目管理學了一些,已經其他 )。
目前非常希望轉C方面發展,我C語言可以認為0水平。但是由於有了java功底。雖然已經體會到語言只不過是解決方案的工具而已。但是就算我在java裡面花再多時間感覺自己只是在浪費青春,我絕不是小看java,因為我也是用這門語言的,java沒有內存管理,用java或者類似的語言,我永遠只看到上層的東西。我希望自己成為一名技術非常強悍的程序員。可以寫出一些經典的開源工具。因為以前大學都是逃課,睡覺,打游戲。所以基礎很差,實際上我相當於一個0基礎的高中生學了半年java的人。目前自己每天在學數據結構。但是不知道路在哪裡。我想換一份 C 的工作,不知道從哪裡開始學。我選C有幾個原因的:C的工作環境可以迫使你使用演算法,然後進一步的慢慢深入,可以接觸操作系統,然後慢慢使自己進入高層次的開發。因為C涉及面廣,所以迫使自己學得到很多東西。進而提升自己水平而已。與其說選C語言,不如所選C語言所涉及的范圍而已!因為在java環境,不可能到達我理想高度!
大環境很浮躁,這是我切身的體會。但是我有耐心和毅力。我第一步的想法是 先轉到涉及演算法的環境。實在不行,只要開發上用到C就行了。 因為我對C的工作環境不了解,可能理解上有誤,希望你指點一下。如果像我這種水平的人,想要找到C的工作,大概怎麼起步。 我說一下自己的java起步 當初我是這樣的: 1、學習java 語法(j2se)。
2、用java 做一個 俄羅斯游戲。 3、學習 jsp 做一個MVC的留言板, 學習 流行框架(SSH), 做一個 管理系統。
就這樣 我就找到 JAVA EE 應用開發的工作了。當時進公司不用適應期就直接上項目了。

我當初是在沒有老師( 老師重來不把一個年年補考,每次都墊底的學生當人看),同學鄙視(最後一個學期每個人都找工作,打游戲。而我每天都在瘋狂的學習 一直到畢業前夕 ),沒有人管的情況下過來的。靠google, , 買經典教材,網路視頻,Q群 的情況下,終於用一張合同在畢業前證明了自己的能力! 這段辛酸的經歷給了我很多東西,特別是自製力、自學能力、毅力。

現在我已經打算辭職回家,再次進入瘋狂的學習狀態,雖然現在每天下班回來也在學習。但是每天4個小時遠遠比不上 原先每天12個小時的自學效率。而且自學可以連續學半年,現在每天還要工作,非常不合適。
我希望用半年 至少補上 大學的 數據結構,基本演算法,計算機組成原理,操作系統、 同時復習數學知識( 主要是 離散數學、線性代數 )這些基礎。 如果半年內時間緊的 Linux、匯編和編譯原理可否先暫時緩緩。

工作意向:優先 游戲編程, 然後其他的用C的也可以( 曾經非常想考慮 C的嵌入式,但是發現涉及知識有點廣,而且工具也不便宜 )其實我非常希望向網路發展,只是不知道代價多大( TCP/IP 和其它網路知識不懂,這個要多久,1個月內可以達到工作要求可以接受 )。

然而C的路子怎麼走呢?
原先這樣思考的 : 1 C語法 2、用一個小游戲( 俄羅斯方塊、或者是 五指棋 )來鞏固前面C語言基本知識。 掌握這些後我不知道幹嘛了。
第三步:????( MFC? 不學它行不行,如果工作普遍需要我非常樂意學 )

目前本人的水平基本(資質普通)就這樣了。你看通過半年 每天12個小時的高強度的學習,怎麼才可以到達目前 找到 使用 C語言 開發 的工作。 希望您指點一下。最好可以列出來幾條路子 , 比如 游戲編程的、網路的、然後其它的。
非常感謝你看完我的郵件, 靜候佳音。
2009-10-12

專家回答:

這位同學你好,從這封信看得出來你的心情還是很急迫的,你這種心情我完全能夠理解。我把問題分幾點說,盡量說細一點,希望能對你有所幫助。

首先,你說你是09年畢業的大學生,那麼算下來,你應該上班才幾個月而已,就這一點,你能在新的單位幾個月時間就把工作拿上手,首先恭喜你,這說明你是真的很有實力,當年我轉行游戲編程,用了差不多兩年才真正想清楚程序設計的真意,我覺得你比我強。呵呵。

你說Java基本上都是做B/S資料庫,覺得沒有意思,其實這個我也很理解,不過,我覺得你可能不是很了解實際情況。這里我需要給你講清楚,其實不僅僅是Java程序員,只要到企業中做應用開發,或多或少都和資料庫沾點邊。當年我用VC還寫報表系統呢,你能說這不是資料庫?

其實有個問題可能大家都沒有關注到,至少,我到學生大本營半年,發現大家都沒有討論過。那就是,做什麼最賺錢?無可否認,軟體可以實現各方面應用,不過,就我的觀察,在現實生活中,有兩種軟體最賺錢,一種是資料庫,一種就是嵌入式底層的東東,嗯,隨著互聯網的發展,目前做網路程序也很賺錢。

其實原因很簡單,就是因為軟體的盜版問題。我想看到我這篇文章的每個人,或多或少都用過盜版軟體,包括我自己,呵呵,咱們中國人窮啊,動輒幾百上千的軟體費用,咱們買不起的,所以電腦城的光碟市場才這么火爆。

但是,這帶來了另外一個問題,就是當有一天,我們自己成為軟體開發者的時候,才發現,盜版導致我們自己的收入降低,無法維系生活。這時候,恐怕再來大聲疾呼,杜絕盜版,已經晚了,你說是不?

其實我們可能對市場不敏感,反正每個月發薪水,收入基本上旱澇保收,但是公司的老總們對這個很敏感,軟體賣不出錢,公司就虧本,虧多了,就垮掉了,最終程序員還是沒有收入。

因此,公司裡面做軟體,一般都做上面的軟體,即資料庫應用,嵌入式應用,控制類應用,網路服務應用較多。因為這幾種應用,不容易被盜版,能賣到錢。通用性的應用,比如操作系統,比如很多工具軟體,比如PC游戲,其實很難賣錢的。

資料庫應用,一般資料庫本身是使用成熟的商用系統,如MySQL,SQL Server,Oracle等,我們小公司拿來,再根據具體應用需求,做二次定製開發,這是一大類市場,其實這個市場的真正名字叫做「企業數據應用定製市場」。由於是定製的,自然沒有通用性,也就不會有盜版了。

控制類,嵌入式類,很多都和具體硬體設備相關,換個硬體平台就不通用了,大家知道,中國的東東,要防盜版,最好和硬體相關,只要綁定硬體,軟體一般不好到,以前出的防病毒卡,漢卡什麼的,其實利用的就是這個市場規律。

服務應用呢,就更好說了,由於主要程序邏輯都在伺服器端,基於B/S的模型,客戶端連個軟體都沒有,伺服器的管理自然比賣出去的軟體好管理,不容易盜版。因此,這類企業也活得長,比如各個網站,各種網游什麼的。所以我一直覺得,以後雲計算發展起來後,很多軟體可能會把零售制改為租用制,比如photoshop,大家買套軟體幾千,但一般人就是處理一下自家照片,自然不劃算,因此盜版很多,但以後假如軟體公司把它做成伺服器版,大家把照片上傳,處理,最後再存回來,這個過程每次租金1毛錢,每個人都花得起的話,我看以後就沒那麼多盜版了。另外,伺服器應用其實大多數也是資料庫應用。

所以,我首先要說,不管你是不是換工作,以後你恐怕會一直遇到資料庫類的應用,不管你喜歡不喜歡,但這是社會的現實,你必須承認。你說對吧?

在這個共識下,我們再來看,其實我們會發現,三大主流應用中,只有嵌入式不適合Java,其他的資料庫和伺服器應用,其實Java比C和C++方便得多,因此,我建議你就在Java這條路上走下去,不一定非要轉C和C++。本來你的強項就是Java,而且這也是主流的可以賣錢的市場,為啥不堅持呢?

從另外一個角度說,我也認為你應該堅持,你畢竟畢業不到半年,對社會,對公司,對本職工作其實了解並不深入,你認為Java就那麼幾個設計模式,沒有挑戰性,這個我能理解,但是,我覺得你說的不全面。起碼我做程序做了這么多年,到底有多少種設計模式,我也說不清楚,我相信很多人都說不清楚。需要具體應用具體分析。

我不是Java程序員,不過我覺得,如果要做一個合格的程序員,首先不應該是程序設計的大師,而應該是理解客戶需求,並迅速拿出解決方案的專家,這個,不管用什麼語言,不管在哪裡工作,都是必須的,同時,這也需要很長時間的積累。

准確的講,我認為,一個人不在一門語言,一種業務領域努力3年、5年乃至10年,是很難成為專家的。因此,我建議你完全沒有必要這山望著那山高,輕易就決定跳槽,建議你就這個環境,先鍛煉自己,我這里放句話,你可以試著驗證一下,兩三年以後,你再看Java語言和資料庫開發,都還是會找到自己不會,值得學習和鑽研的東西的。因為最起碼,客戶的需求是千變萬化,永無止境的。

當然,話分兩說,如果你真的喜歡C,很想做嵌入式應用,就是不想做Java,那也無可厚非,因為畢竟每個人都有選擇的權利。

不過,我仍然不建議你辭職回家學習。我以前有句話,大學畢業,才是學習的開始,不過,這個大學畢業後的學習,和學校中的學習,有很大差別,突出的幾點:沒有老師,沒有教材,都是自己主動學,針對自己的需求來學習,學技巧多,學原理少,並且一般都是干中學,而不是學完了再干,我總結就是「用以致學」,而不是「學以致用」,這是我總結的學習經驗。

同時,畢業了,總不好意思再向家裡面父母要錢,總得自己賺錢養活自己。你說是吧?你說辭職半年,專心學習,那你沒有收入吃啥?還不是吃父母的?這樣不是很好。

C語言沒有那麼神聖的,也沒有太高的門檻的,不要想太復雜了。另外,指針,內存什麼的,學習C語言確實能接觸到,但是,我還是要說,C語言並不是因為有了指針和內存的直接訪問,才牛叉,C語言是因為大量的程序員用它解決了很多具體應用,才牛叉的。請你注意不要學偏了,不要為學指針而學指針。指針就是指針,僅僅是個訪問工具而已,不是用來顯得很酷的,需要了才用它。

Java語言用個數組,其實也能模擬指針的大部分功能的。其實我作為C程序員,我們平時工作時對指針是很謹慎的,能不用都不用,盡量用引用來代替,為啥,因為危險,容易出錯。

數據結構,計算機組成原理,演算法語言,編譯原理,嗯,還有個圖論,這幾門應該算最經典的計算機理論了,但是,也沒那麼神秘的,書店裡面有,自己沒事買幾本回來看看就好了,生活是沒有考試的,不需要你必須考夠100分才能找到工作,了解,理解就好了,背書是背不出好程序員的。你說對吧?

其實這幾門,不用C和C++語言,用Java語言一樣可以學習的。嗯,編譯原理可能夠嗆,需要理解一點C。

另外,我再給你透露一點點,其實真正實際應用中,我們對於上述基礎知識用得很少,用得最多的,其實就是數據結構裡面的隊列了,其他,包括棧都很少用,C程序員也不是每天都從底層,從0做起的,還是有很多工具套用的。這和Java語言從框架開發是一個道理。

反而有一門課程建議你好好學,就是概率和統計學,這門知識是我現在應用最多的,很多時候,我們評估軟體系統性能,瓶頸優化,都是在用這個學問。程序員做久了,可能大多數時候都是和這個在打交道,建議買本好好看。

總結一下吧,建議你目前暫時不要辭職,既然選擇了Java和資料庫應用開發,選擇了B/S模型,你耐心做3年再看,也許3年後,你自己的想法就變了。

C可以學,你說的課程都可以學,不過,不要辭職專門學,先賺錢養活自己,再利用時間學習,你這么大的決心,每天晚上就不要看電視了,那你每天晚上,19:00~24:00,至少有5個小時來學習,利用好了,我敢說比你在大學裡面效率高。

看書學習不是什麼神秘,神聖的事情的,也不需要什麼齋戒沐浴,念幾天經才能學習,我覺得就和我們吃飯喝水一樣,隨時都可以學的,找幾本書,就在床頭放著,每天晚上看看,幾個月也就看完了,又有多難嘛?

關鍵是,養成習慣。

你說對不?呵呵,先說到這里,有問題再問哈。

最後補充一點,如果學習C,並且有一定基礎的話,等我書出來看看吧,裡面的跨平台開發工程庫,可以幫助你迅速掌握嵌入式底層的一些技巧。不過,要有基礎哈,一點不會C看不明白的。

『拾』 想學JAVA,有必要先學C++嗎只有C語言基礎。

只有c語言基礎可以學習JAVA,但是要付出更多的努力,我就是這樣的,只有C基礎學的,只要一步一步來沒有不能做到的,當然學了C++有面向對象思想的會更好上手,java和c語言還是有很多像是的地方的,你也可以學習java數據結構,和c語言數據結構差不多,就是一個面向對象思想!努力好好學吧!