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

前言

PREFACE

C/C++的數組是從0開始編號,我們也從第0章開始吧!

作為職業程序員,在生活和網絡中,學弟學妹們問得最多的兩個問題是:收入如何?你是如何成為專業程序員的?對于第一個問題,我一般回答,收入還可以,關鍵是有時的成就感非常讓人滿足。而第二個問題還真不好回答。我只能說讀書的時候,就有點兒喜歡編程,就業的時候,發現程序員職位的薪水比較高,工作了幾年,就逐漸成了職業程序員了。要詳細地說,基本上需要一本書的內容。這也是本書的緣起。

讀者:理工科大學生

有一個現象,在職業程序員中,大學是計算機專業的并不多。這說明,一方面,計算機應用的迅猛發展,使得計算機應用人才缺乏;另一方面,不少理工科專業和計算機專業天然接近,成為職業程序員也不是一件很難的事情。

事實上也是如此,大多數理工類專業開設了不少程序設計的相關課程,只需要有一定的興趣愛好,再加上一定的訓練,可以比較輕松地成為專業程序員。因為計算機在各行各業的應用,對于理工科專業的學生來說,編程能力也是一個非常重要的技能。

所以,本書將理工科大學在校生和剛剛進入職場的新人,作為讀者對象,希望會對這些人有所幫助。

定位:你的第二本程序設計圖書

幾乎所有理工類大學都會開設程序設計語言課程。每年也會有數百萬人報名參加計算機等級的程序設計類考試。這是成功的第一步。但是,會基本語法,不一定會編寫程序,不一定能運用到實際中去解決問題。

本書定位于理工科大學生的第二本程序設計圖書,在已有的程序設計語言的基礎上逐步提高,具備專業程序員的基礎?;ㄒ稽c時間閱讀本書,你就可以多擁有一項能力。從學生到職業程序員,在工作和生活等多方面都要有一定的轉型和適應期。本書出版的最重要目的是幫助讀者完成這個轉型,幫助讀者跨越幾個技術學習上的臺階。

熟練掌握C/C++的意義

掌握C/C++的好處如下:

(1)C語言和C++基本上是使用量第一的開發語言,C/C++是現代程序設計之母,C#和Java等都是在C++的基礎上演化而來的,因此掌握了C/C++,對學習Java和C#會很有幫助。

(2)在C/C++的提高學習中,會涉及計算機的數據結構、操作系統等知識,會提高自己解決問題的綜合能力。程序設計的學習領域很多,范圍非常廣,新概念、新知識層出不窮。但只要你掌握的知識結構合理,綜合能力高,學習這些新東西將非常容易。

(3)熟練掌握C/C++,是很多單位招聘的基本要求,大多數理工科專業的在校大學生已經學習了C語言的基本語法,或者已經有了一定的編程基礎,只需要再花一定的時間鞏固掌握即可。

成為專業程序員的臺階

我們都知道,從學生到職場人士,有幾個臺階需要跨越?;仡櫼幌乱粋€C/C++程序員的成長過程:

第一個臺階,C語言入門。簡單來說就是能通過大學的C語言考試,或者通過計算機等級考試的二級C。

第二個臺階,熟悉庫函數。C語言的不少功能是通過庫來實現的,學習庫函數實際上是熟悉C語言的重要階段。

第三個臺階,能編寫比較大一點兒的程序。通過編寫千行內的程序,可以積累函數劃分、調試經驗,慢慢對C/C++語言會用得非常熟練。

第四個臺階,能自己編寫一些小的工具。這種訓練能積累解決問題的方法。

第五個臺階,建立Project的概念,能把程序分解成幾個代碼文件。

第六個臺階,洞悉程序開發的真相。理解算法、數據結構、解決問題的方法,領域類知識等,這些比語法更重要。

第七個臺階,掌握宏、指針、內存管理、static和const等專業C/C++程序經常需要的關鍵用法。

第八個臺階,掌握C++的精髓。C++雖然內容豐富,Core和C語言也不大。這些內容,也是程序設計語言的精髓。

在跨越了這八個臺階之后,只需要再經歷一些項目開發的強化訓練,即可成為一個合格的C/C++程序員。

掌握C/C++的學習地圖

結合十多年的C/C++學習和成長經驗,結合當前就業的需要,我們勾勒出一個在校大學生或職場新人的程序設計學習地圖。

如何學習才能快速掌握C/C++呢?程序員積累了豐富的經驗并總結出了下面的學習經驗。只要你跟隨學習方案,每周抽出3個獨立時間段進行上機實踐,每次至少2個小時。一共大約需要240個小時的上機訓練,即大約40周的自我訓練。最多2個學期,你就能獲得一個質的飛躍。再輔以其他適當的訓練,即可成為一名合格的程序員。

根據學習地圖和學習經驗,我們設計了本書的內容。全書共分為5篇,下面分別介紹這五篇的內容安排。

第1篇 夯實C語言核心基礎

本書定位的是讀者的第二本程序設計類圖書。所以,讀者可能有以下三種情況:

(1)已經學習了一門《C程序設計》之類的課程。第1篇,可被視作為一個C程序設計的濃縮,幫助你回顧了解C語言最核心的內容。

(2)正在學習《C程序設計》的課程。第1篇可以作為教學輔導圖書,一邊學習教材,一邊閱讀本書,時刻提醒讀者注意入門之初別糾纏于語法細節,起到幫助讀者糾正學習方向的作用。

(3)學習了一門程序設計語言,是VB之類的非C程序設計語言。第1篇可以作為快速學習C語言的教材。當然,這些內容還遠遠不夠,我們在網上提供了一個免費的C語言學習教材。

總的來說,第1篇主要是配合讀者正在學習的C語言教材,幫助讀者掌握C語言核心的語法。同時,幫助讀者建立重要的程序設計概念。

第2篇 提升你的編程功力

按照學習地圖,提供全書重要的學習概念和學習內容。

首先安排庫函數的學習,通過學習庫函數的應用,一方面熟悉語法,另一方面,建立起接口的觀念,進一步通過自己編寫個別庫函數的訓練,可以較快的提升編程能力。

其次是逐步編寫大軟件的項目和辦法。教會讀者如何編寫自己的小工具軟件,讓讀者在趣味中學習。

最后是讓讀者自己掌握軟件運行時的數據結構、硬盤上的文件數據和用戶看到的界面之間的奧秘。

當讀者明白了這些奧秘后,就會知道自己需要掌握的知識、算法和數據結構,解決問題的方法。接下來,本書通過其他章節,將讀者引入這些領域中,讓讀者得到初步的修煉。

可以說,這部分內容是本書的及格線。即使讀者沒有掌握本書的其他內容,只要能理解這部分內容,對讀者提升對計算機的認識將會有非常大的幫助。

有了上面的基礎,可以進入熟練掌握一些關鍵語法的階段,這就是static、const、指針、內存管理等。我們對這些內容會進行比較詳細的講解。要知道,這些內容一般都是存在于多本圖書之中,而這些內容,又是C/C++程序員必須掌握的語法內容,面試??迹斫馄饋碛钟幸恍╇y度。所以,編寫時將其放在了熟悉語法,編寫了幾個小工具之后,作為提高訓練之用。

第3篇 積累專業程序員的開發經驗

掌握了C/C++之后,也許會成為一個嵌入式開發程序員。畢竟,在信息時代,這樣的工作崗位會越來越多。

為此,我們也花了一定的篇幅來介紹在跨越第一到第七個臺階之后的程序員。掌握哪些知識,可以成為一個合格的嵌入式程序員。要知道,嵌入式開發專業方面的人才需求極大,數學、物理、機電、儀器、計算機、電子等相關專業的學生,成為這個行業的主要人才來源,這就相當于給這部分同學,提供了一個就業出口。

第4篇 C++和類——面向對象的世界觀

C++領域有很多經典名著,但這些圖書都有一個統一的缺點:太厚。給初學者以恐懼感,不太容易看得完。

C++確實博大精深,編程模式多,涉及面廣。比如,引入類和對象的概念之后,和前面的知識一交叉,可以有類和指針交叉:對象的指針,對象的內存分配等;類和數組交叉:對象數組;類和函數的交叉:方法和函數的區別,對象作為函數的參數等。引入任何一個新的概念,會引發連鎖反應。更何況C++引入的內容越來越多。因此很少有人敢稱他掌握了C++的全貌。

在實踐中,我們會發現,經常用到的只是類、封裝、繼承、虛函數和多態等幾個有限的C++精華,這基本上是所有面向對象開發語言的最小核心子集。

接下來,我們以抽絲剝繭的方式,把這些C++ Core內容抽取出來,重點講解,作為讀者學習其他C++程序設計教材的補充。

本篇內容和C++教材結合起來學習是比較好的選擇。一個全面,一個重點;一個重在語法細節的闡述,一個重在關鍵要點的把握;一個重在從語言學習的角度編寫,一個從實踐需要角度側面敘述。一厚一薄,互相配合,學習起來更容易。

第5篇 以C++為母語

并不是每一個讀者,將來都會成為一個C/C++程序員。

大多數現代的程序設計語言都和C++有一定的親緣關系,Delphi,Java,C#這些先后出現的面向對象的開發語言,在C++的基礎上,都有一些自己的獨有的特點。對學習者來說,在C/C++上的學習投資,完全可以用到這些語言的學習上。你的C++功力越深厚,學習這些新的開發語言的時間就越短。

本篇簡單講述如何在已經掌握的知識基礎上,快速學習這些帶有面向對象開發特性的程序設計語言。強化每個現代人都必須掌握的學習能力。

后續學習與提高

有了前面的學習基礎,還有兩個學習與提高方向,一個是走Java或者C#的通用程序員之路,另外一個是成為一名嵌入式程序開發人員。當然,建議你繼續閱讀更多的C/C++著作,不斷提升自己的“內功”,這對讀者學習任何新的工具或者開發語言,都將會帶來很大的幫助。

對于通用程序員之路,一般有三種選擇,一個是以Visual C++作為主要的開發工具,這在開發Windows相關系統類應用中比較多見,有了前面的基礎,需要適當的Visual C++項目開發訓練。推薦訓練之前學習《深入淺出MFC》這本書。其次,是走Java或者C#的開發之路,這方面的好書很多,有了本書的基礎,讀者可以先選擇一本語法類,快速強化訓練掌握語法,然后根據自己的情況選擇合適的圖書項目和技巧開發類圖書。

對于嵌入式程序員就業分支,在學習本書的基礎上,可以再開發一個實踐項目,封閉開發1~2個月。每天至少4小時,總共需要至少100個小時。經過一個比較大的項目的操作過程,應該即可成為一個合格的嵌入式開發程序員了。

輔助學習材料

在圖書封底左上方的二維碼下載包中,我們精心放置了以下資料:

● 《C語言百問百例》和《C++語言百問百例》兩套電子書。

● 包含14講視頻的C語言高級教程。

● 包含19講視頻的嵌入式LINUX培訓計劃教程。

● 本書源代碼。

局限性和副作用

雖然竭力回憶我們成長之初的一些代碼編寫經驗,但非常遺憾,現在只記得剛開始的時候,編寫一個程序,會有滿屏的錯誤需要糾正。至于如何度過這一階段,在這一階段積累了哪些經驗,現在幾乎都不記得了。也就是說,早期時候的代碼調試經驗,本書基本不具備,因為現在編寫代碼一般都是一次性通過,很少有語法問題,有問題也是隱藏得比較深的運行漏洞。另外,每個人的學習過程差異也很大。我們的作者中,有的英語很好,一看錯誤提示,很輕松就能解決問題。有的則靠詞典,一個一個地解決,C語言編寫了一學期,英語水平卻提高了不少,這是一種積極的副作用。

其次,每一個專業的程序員,到一定的時候,都只專注于自己的問題領域。雖然我們也邀請了高校教師、其他領域程序員參與到本書的創作中來,但C/C++應用面極廣,難免有些見解有所偏頗,盡信書則不如無書,當你通過本書完成階段性過渡后,需要放下本書,尋找新的幫助。

還有一種C++程序設計學習觀點,在面向對象時代,應該先建立面向對象的開發思想,直接學習C++。假如工作需要進入嵌入式開發領域,再學習C語言。這種先建立面向對象,然后學習面向過程的思路,我們有一定程度的認同。一方面,我們都是先學習了C語言,然后再學習C++,這方面經驗比較豐富。另一方面,我們調研發現,絕大多數高校,依然是保持先學習面向過程的C語言,然后學習面向對象開發語言的教學過程,所以,本書按照大多數讀者的學習模式設計。如果您恰好是先學習的C++,我們建議您先從本書第4篇開始學起。

另外,本書的大多數作者沒有在大學課堂教學的經驗,有些講解方法,可能沒有考慮到讀者當前的客觀情況,如果你學習本書時有一些困惑,還請讀者和我們聯系。

多人智慧勝一人

對于C/C++的學習,除圖書之外,我們認為,不斷的上機實踐是尤為重要的。沒有笨學生,只有懶學生。長期的堅持是非常重要的,這就看個人的毅力了。

一個比較好的建議是:如果你是在校的學生,建議你同時再找一個同學,和你一起學習C語言。根據經驗,如果有兩三個同樣愛好的同學一起學習??梢曰ハ喔偁?、互相促進。而且,有了問題大家互相交流,學起來特別快。

當然,更主要的是靠自己,只是有些時候,旁觀者清,同學可能可以輕松地發現代碼中的問題所在,而我們卻要調試半天。

如果沒有同學或學長一起學習,在網上找一兩個牛人請教也特別重要。為了促進本書讀者的學習,我們特地在網上提供了一個讀者之間交流的QQ群:16900070。同時,在QQ群的共享文件中也提供一些免費的學習材料,作為本書的補充。歡迎讀者在學習過程中下載使用。

不積跬步,難行千里

在十多年的程序設計學習與實踐過程中,有一個同學的經歷讓我特別感慨:“

大學時候有個同學,愛好編程。大四做畢業設計的時候,發現他水平比我們高一截。因為很多大程序編譯和調試的經驗,你不去干,是明顯不會知道的。

有問題我一般都去問他,和他探討,當然,水平太低的問題他也不感興趣。

有一次我無聊說到這個開發提升過程,夸獎了他一下。他說,哪里,我只是把你們打游戲的時間,用來寫代碼了。

你想想啊,其實我平均一周去三次機房。一學期只有20周比較有空,兩年也就80周,240次上機。再說,我家條件也不好,也不能保證我有更多的上機費用。

兩年前我發現學校機房的開放策略后,開始我只能去上機練習一下DOS命令,還有就是C語言書上的小案例。后來想開發一個壓縮小工具,不斷“折磨”自己,想代碼,練習,上機去測試,查資料,代碼越寫越長,水平才慢慢提高的。

你以為我天生就明白exe文件的原理啊,我也是看了多少書,做了很多次試驗才明白的。”

之所以感慨,因為他的水平提高經歷沒有什么特別的,就是堅持每周上機3次罷了。但萬事貴在堅持,開始可能只能編寫一些小程序,只能驗證一下語法,但量變會產生質變,當你逐漸能快速地寫出數千行代碼的一個小項目,開發一個小工具。你就已經具備了專業程序員的潛質,你可以很輕松成為一個專業程序員了。

而這些不過是要求你按照一定的學習路線,一步一個臺階,堅持就是勝利。大多數時候,完美的學習計劃和一時的熱情,敵不過長期的堅持。

好了,現在方法有了,工具有了,學習材料有了。我們開始逐步來完成學習目標吧!

祝你成功!

編者

2018年3月

主站蜘蛛池模板: 武义县| 孟津县| 文安县| 增城市| 揭西县| 瑞昌市| 宁武县| 富裕县| 安塞县| 中方县| 迭部县| 顺昌县| 桓仁| 武安市| 宜黄县| 安达市| 恩施市| 铜鼓县| 邵东县| 仙居县| 桃园市| 芮城县| 海门市| 曲阜市| 平南县| 铅山县| 新源县| 汕头市| 分宜县| 泽州县| 河池市| 阿克陶县| 江门市| 辽阳县| 库尔勒市| 准格尔旗| 南宁市| 玛多县| 平山县| 香河县| 察哈|