1. 程式人生 > >C/C++學習筆記第一天:MAC OS下搭建GCC和Sublime Text環境

C/C++學習筆記第一天:MAC OS下搭建GCC和Sublime Text環境

本科的時候倒是學習了C/C++/Java 這一路搞研究,基本上就是網路模擬,也不太需要太多的程式設計,多半是演算法模擬,所以程式設計感覺越來越差。

人生總是那麼陰差陽錯,本科畢業的時候本來是計算機/金融雙學位,打算不再搞什麼計算機了,投身銀行算了。不料未及大四校園招聘,便被通知“保研”,還是外校,於是每天在圖書館看小說度過了腐敗的大四生活。研究生階段呢,基本上在前人的基礎上繼續自己的課題,老師這邊又沒有賺錢的專案,於是乎又荒廢了三年。因為懼怕找工作要問專案經驗,於是乎找了個學校的專案,拿著外國的政府獎學金投敵賣國了。博士又是混啊混,反正理論研究,也不做專案,於是就疏忽大意了。直到幾個月前去找實習,一個JPMorgan的Quants的職位引起了我極大的興趣,然而因為計算機畢業竟然程式設計沒有別人牛,被慘遭淘汰。痛定思痛,程式設計這件事,我以前從來沒有認認真真的態度下好好學習。博士畢業當然不會去搞開發,但是又想自己研究網路安全作為人生愛好,想來想去,C和C++的核心思想是重中之重,所以還是集中力量好好學習一下。在人生前30年最後一次重要的轉折中一定要打一個漂亮的翻身仗。

我總是反應很慢,“花開堪折直須折,莫待無花空折枝”這樣的話我原是懂得的,然而問題在於我總是對花什麼時候開的反應遲鈍,以至於經常錯過做事情的最好時機。希望給大學本科的迷茫中的孩子們留下點東東,所以打算把學習中的心得都寫出來,有緣人看到,希望有拋磚引玉之功效。至於大牛們,也不要嗤之以鼻,但凡有謬誤之處,還望指教一二。也想跟本科的孩子們語重心長的說一句:C/C++重要(也許你會發現開發不經常用,可是你要深刻理解核心思想),高數重要,線性代數重要,概率論重要(隨機過程啊,布朗隨機啊等等),這些真的很重要(當然如果以後搞研究的話資料探勘,機器學習,數值分析都是很有必要的)。

既然上課學了,就一定要學好,不要未來用到的時候才追悔莫及。

“當時不懂珍惜,過後追悔莫及”,世界上最痛苦的事情莫過於此。人生很多事情都是這樣的。

一 、環境配置:

有人花錢吃喝,有人花錢點歌,有人花錢買蘋果,有人花錢亂作。反正經濟條件允許,就用蘋果吧,顯示屏看著舒服,鍵盤打字也爽。我覺得在我這個年齡,應該要注意一下生活品質了。原先老孃總說男人東西不要多但要上檔次,我也不在意,現在想想還是年齡的原因吧。如果博士順利畢業,找到個差不多的工作,一定要去學學馬術神馬的最愛了。至於筆記本,我11年買的Air,現在仍然愛不釋手。另外一個原因就是學語言還是選擇UNIX或者Linux為好,恰好Mac OS就是UNIX的加強版,所以絕對是上上選。

Laptop:Mac air 13-inch, Mid 2011

OS:Mac OS X 10.9.3

IDE:Sublime Text 3 

如果是學語言,就不要用Xcode,Eclipse,Aptana什麼的了,生成工程一大堆,轉移了學習注意力。當然喜歡原始人的人可以用Vim,或者進化一點的用MacVim,不過我安裝了好幾個,還是覺得Sublime Text設計的美輪美奐,是我的愛!如果看不上圖示,還可以換,網上很多,隨意就可以找到。

Compiler:GCC

據說安裝了Xcode以後,自動安裝三個編譯器GCC4.2,LLVM-GCC 4.2,Clang。

這裡選擇GCCGNU Compiler CollectionGNU編譯器套裝)。

Debug:GDB

二 、小試牛刀:

廢話少說,先寫個main吧,沒寫返回型別,也沒寫return,是一個喪心病狂的危險。不過可以看看warning也是好的。

檔案儲存為hello.c的名稱,之後用命令cc hello.c來編譯。當然也可以用gcc hello.c等命令,之後輸入./a.out就可以運行了!

還有一種方法是使用 gcc -o hello hello.c 命令列。


三 、學習計劃設計:

大學的時候C/C++都是譚浩強老師的書,稀裡糊塗就過去了,現在想想這兩本書雖然依然是國內的經典了,但是還是跟外文經典教材沒法比。計算機語言這種東西,還非得看英文原版不可,這個對大部分學生來說有點艱難。但是還是那句話,若干年後,希望終於醒悟的時候,不要後悔是最好的。

大概看了一下,有三個月的時間是最好的,應該看的三本經典:

1. 《The C Programming Language》用來學習C語言的經典書籍,200多頁,三兩天就可以結束 (當然如果沒有基礎,就慢慢看吧)。看了這本書,估計才會深刻體會到被譚老坑慘了吧,呵呵。。。如果一開始就用這本多好,對吧!這本書看完,如果想提高,就看看《The Practice of Programming》然後就是《大話資料結構》(C語言版),畢竟資料和演算法才是靈魂。這樣對非計算機專業的要做點畢業設計神馬的足夠了吧。當然有人說直接上C++就行了,不用學C。我覺得C還是蠻重要的,尤其是思想的變化會讓你更加理解事物的真相。永遠不要以為做一件事情的意義只有一個,學而不思則怠。當然如果可能,有機會學彙編才是王道啊。。。

2. 《C++ Primer》第四版或者第五版都行,反正這本書依然是C++界的聖經了,裡面每道題都要細細的做,好好的思考,這樣基礎好了,以後在專案中磨練就是了。當然還有一本要推薦的,就是《C++ Primer Plus》,這兩本都是不錯的。其間,如果有興趣,可以看看《21天精通Visual C++》,做點小專案,絕對可以提高成就感。學完了直接可以上《Introduction to Algorithms》(Third Edition) 或者《Data Structures and Algorithm Analysis in C++》(Third Edition)。還有一本叫做《Algorithms Design Techniques and Analysis》,一個沙特的哥們寫的,據說很好,我也買了,但是很慚愧沒有看過。。。

3. 關於《Effective C++》,套用一句大家常愛說的話:C++程式猿分兩種,一種是讀過《Effective C++》的,一種是沒讀過《Effective C++》的。

四 、學習方法:

學習最重要的兩件事:興趣和堅持,方法就是維繫興趣和堅持的手段。

首先,理論聯絡實踐是很重要的:學習一段時間,到網上找點小專案做做,自信感爆棚,興趣也會增加的吧。

另外,有一個環境,一是自然環境要好不要有人干擾,另一個時間環境要好,相對的一段時間內,只做一個事情,不要分心很重要。學校圖書館是一個很好的場所;自習室也不錯;研究室如果沒人,暑假寒假也是好的。總之儘量為自己創造一個好的環境。

然後,就是最好有“需求”的學習,比如想從計算機博士轉到投行,最現實最可靠的就是quants;如果是碩士,就考慮開發吧。。。有了類似這樣的需求,才能更好的計劃,和鞭策自己的學習。

最後,條件巨足,機緣成熟才能做好一件事情,如果沒有條件,創造條件也不得的時候,努力也是白搭。人生最難做的就是識時務,更難做的是盡人事聽天命,最難做的是明知不可為而為之,這個自己去悟吧。

最後,希望所有人學習順利,希望大家一切都好。