作者:I_myours
文章源自:
http://blog.csdn.net/wwh578867817/article/details/48299449
這篇文章是自己編程語言學習之路的總結(還在進行中),因為也踩過不少“坑”,希望能對后面的一些初學編程語言的朋友或者希望學習其他編程語言的朋友有一些幫助,避過一些不必要的坑。
我先簡單的介紹下自己學習的路線:
c -> c++ -> python -> java
我比較熟悉c和c++,python和java只能說能拿來用吧,說出這個是想讓看的朋友帶著審視的眼光,畢竟水平有限,比如你不熟悉c++你可以參考下我的學習過程,比如你很熟悉java,那么可以不參考我的,或者將你的好的方法或不同意見貼到評論區,一起學習,一起進步_。
- 開頭隨便聊聊
- 聊聊這些語言的特點
- 聊聊這些語言看什么書
- 聊聊用什么工具編寫這些語言
開頭隨便聊聊
在我最初開始學習編程的時候,接觸的是c語言,看的是《c 程序設計》是譚浩強老前輩的,起初覺得自己很笨啊,這種i++,++i,都不會哈哈~。
所以剛開始學習編程的時候速度也是很慢的,而且有時學到一般就學不下去了,直到我在網上看了一些文章,一些過來前輩的學習過程。
我知道了一本好書對你的學習來說是非常重要的
于是在網上買了本《c和指針》,看這本書的時候讓我有了頓醒的感覺,以前覺得迷糊的知識有些清楚了,而且了解到了更多的知識。
后來學習c++的時候,就買了本《c++ primer》第四版,看了大概一個多月吧看的差不多了,當時對待課后習題的態度是大概掃一眼,看著覺得自己差不多會,就過了,這種自我感覺良好是不可取的,當然實戰的時候自己嘗到了惡果,一堆錯誤加還不熟悉這門語言。
我知道了書上的練習和課后題有多重要
自己嘗到了惡果后,咋辦,重學唄,這一次下定決心重學c++,無意中在小組看到了《c++ primer》第五版,學姐說是新出的,我暈,這么快都出第五版了,應該不會有什么大區別吧…,在我看了目錄后發現,這這這…,差這么多,在內心糾結下,又整了本《c++ primer》第五版,開始學習!!學習過程中由于對第四版知識還有印象,所以我發現了第四版和第五版的差距之大,c++11更新多么重大(前一陣看見一位學弟在看c++primer第三版,這也是我決定寫這篇文章的一個原因吧)。
我知道了過時的知識點就讓它過去吧,應該學習較新的且被大眾認可(運用)的知識。
也因為嘗到了苦頭,閱讀第五版時速度很慢,敲了練習和課后題,將遇到的坑和重點知識都記了筆記并且記錄到了博客上,因為c++是一門比較復雜的語言,在我忘記部分知識點的時候,我能夠迅速在自己的博客上找到并且想起來。
我知道了記筆記有多重要。
當然記筆記是很花費時間的一件事,視自己情況吧~,c++學習時間比較長。看完了《c++ primer》后,我還看了一些其他的c++書,會在后面說到。直到今年5月份我才開始學習python,大概2周左右看完了《python核心編程》并敲了大部分課后題,看的過程中非常順,感激我之前看c++作出的努力,即使很慢。
我知道了付出的努力總是值得的
下面就是做項目的時候要用到java,此時我轉換了學習語言的方式,推薦一篇孟巖老師的文章:快速掌握一門語言最常用的50%
這篇文章非常好,但是適用于有類似語言基礎的人,類似語言基礎指的是比如說你會c++,這是一門面向對象的語言,那么你學習python或者java就可以按照上面的來。
學習java的時候,都說《thinking in java》 好,都說學c++后學java很輕松,開始看《thinking in java》還是比較容易的,直到看到了第14章 類型信息,我卡住了,有些真的很難理解,雖然說都是面向過程的語言,但是很多地方不一樣,并且java這門語言有自己的特點,如果僅僅想使用它,很容易,二八定理,百分之百的東西我們最常用的也就百分之二十,想理解原理,比如說我看看java的容器怎么實現的?那必須要學習一些原理的東西了,此刻就沒那么容易了。
我知道了,每門語言都有自己的特點,我們應該找到它的特點來攻破它,而不是以一門語言來看其它語言。
以上是我大概的學習路線,隨便聊聊,希望看完后你會有一些想法和收獲。 學習本身就是一個不斷改進和不斷進步的過程。
聊聊這些語言的特點
printf("C語言\n");
個人覺得c語言作為入門的語言是非常合適的。
- 語法很簡單,沒有那么多語法糖。如果第一次接觸編程的話,我覺得不要接觸封裝太“嚴實”的語言,比如python,python是抽象層次比較高的語言了,而且語法糖也不少,會讓我們迷失到一些語言中比較“炫酷”的東西,而忘記了一些本質,而且作為入門寫python這種寫習慣了寫c/c++會很難受的,畢竟什么都要自己來實現,變量還要定義?- -,我不是說python不好,寫著方便也是解放人類嘛,不適合入門而已。
- C語言能讓我們了解到一些底層的知識,語言只是計算機體系中的一部分,不是說你學了語言就夠了,還有操作系統,網絡等等一些知識,但是C這個除了匯編外最接近底層的語言在寫過程中能讓我們學習一些系統的偏底層的知識,對未來學習發展是非常好的。建議在linux下學習。
std::cout << "C++" << std::endl;
c++是一門很復雜的語言,學好不容易,用好也不容易,對于c++而言我是不推薦快速入門的,快速入門只能坑自己和隊友,學習c++建議靜下心來,整體過一遍,再在實戰中鍛煉自己。
特點
c++是一門面向對象的語言,但是因為要兼容c語言,所以它不是一門純粹的面向對象的語言,如果想學習面向對象編程的思想,建議學習java。
c++效率和性能相對來說是比較高的,怎么說,python這種解釋型的語言就排除了,c++開發效率比c高(STL能省你不少事),性能比java好(但是開發效率是低于java的,具體選擇還是看我們追求性能還是節省時間)。
c++適合偏底層的人員學習,比如后臺開發等,用c語言開發效率是略底的,java又都封裝好了,所以個人覺得選擇c++還是不錯的。
c++近年來也不斷再進步,c++11/14更新了很多內容,極大提高了我們的開發效率,c++17標準也在擬定中,還是蠻期待的。
System.out.println("Java");
接觸了Java后,不得不承認Java開發起來的效率是非常高的,而且Java從事的面非常廣,學習java Web的也非常多,還有安卓等,成熟的框架和開發工具也多,jdk更新到1.8。
- java是一門純面向對象的編程語言。學習的時候一定要切記,會明白為什么這么設計這么寫。
- java的框架和庫以及ide非常多,善用成熟的庫和框架。
- 感興趣可以看看一些框架的源碼,比如netty,能學習到許多東西,很多設計模式等都運用在其中,個人感覺比較值得學習。
- java由于基于虛擬機JVM,所以跨平臺支持的非常好。
- java健壯性非常好,異常體制非常完善。
- 天生支持多線程,寫起多線程程序效率比較高。
print 'python'
python是一門腳本語言,功能強大,也是庫非常多,寫起來非常簡便,開發效率高,近幾年用的人也越來越多。
- 語法簡潔,使用起來非常方便,比如用切片等處理字符串非常方便,不過因為是解釋型語言,速度比較慢。
- 庫非常多,應用很廣泛,網絡爬蟲,系統編程,web編程,數學圖形學,文本處理等等。
- 被稱為膠水語言,能把許多語言模塊結合到一起。
- 對多線程支持不好,由于GIL存在多線程只能單核運行,不過支持進程和協程。
水平有限,上面僅僅說自己了解的一部分,不過個人認為自己需要熟悉一門面向對象的語言,根據自己所學習的方向感興趣的方向。
聊聊這些語言看什么書
要學會自己能分辨什么書好,看一本好書真的是節約自己時間啊!我一般是上豆瓣看評分評論,網上搜索看下評價等,再看看目錄,覺得不錯才入手。
printf("C語言\n");
個人覺得挑一本完整看完就行。
std::cout << "C++" << std::endl;
《C++ primer》第五版看的話一定看第五版,想比較于第四版更新很多東西。內容非常細,課后題也非常好,便于自己查漏補缺。
《Effective C++》里面是按照條款的方式列出c++的知識點和坑點以及一些技巧,可以作為進階書。
《Effective STL》stl是C++最重要的一個組成部分,如何用好可以看看這本書。
《深度探索c++對象模型》也是c++進階的一本書,主要是了解c++對象的模型內部是怎樣的。 比如你定義一個類,它內部是如何表示的。
《STL 源碼剖析》上面的如果看完了,可以進階這本了,我自己僅僅看過一小部分,功力不夠,比較難看懂,主要是模板編程的技巧和數據結構。
參考順序:c++primer -> effective c++ -> effective stl -> 深度探索c++對象模型 -> STL源碼剖析,后兩本順序隨意。
System.out.println("Java");
《Thinking in java》絕對的好書,每一句話都值得細細品讀,不過不適合入門 ,需要一定的基本功。
《瘋狂java講義》我看了一小部分,覺得還不錯,內容比較易懂,不像thinking in java這種需要琢磨一下,適合入門。
《Java核心技術卷1》評價也比較好,不過我沒有看過,已經出到第九版了。
《Effective Java》上面其中一本看完差不多就可以看這個了,java的進階書。
thinking in java,java核心技術編程卷1,瘋狂java講義選一本看就行了,沒面向對象編程基礎,不建議看thinking in java。看過可以看看effective java。
print 'python'
《python核心編程》入門還不錯,內容也比較廣泛,還有socket,web編程,數據庫編程等,不過錯別字有些多。看的時候發現了好幾處。
《python cookbook》python編程技巧大全,進階用。
python學習手冊貌似也不錯,基礎挑一本看就行,進階可以看看python cookbook。
總結:
下工夫學習一門語言也是蠻費精力的,所以還是建議根據自己的興趣來選擇學習,比如你喜歡java web,那么就下功夫學java,c++和python了解即可,或者不了解也沒什么大礙。
不要貪多,尤其同時學習兩門,會亂的
不要貪多,尤其同時學習兩門,會亂的
不要貪多,尤其同時學習兩門,會亂的重要的事情說3遍
推薦這些書是自己看過,或者搜索過的。個人覺得比較好的,不代表我推薦的就是好的,大家在選擇的時候可以參考,實際看還是要自己去調查,多問問前輩有經驗的人等,看看目錄適合不適合自己,不要盲目隨便挑本就開干。
聊聊用什么工具編寫這些語言
c/c++
個人覺得是vim啦~,學習編程還是linux下好。
編譯器gcc/clang都行。調試用gdb
vim
java
比較流行eclipse,個人覺得idea也不錯。
python
寫的不是很多,我是用vim寫的。
vim配置好是非常好用的。可以學習一下。
路是自己走出來的,適合別人的不一定適合自己,不過參考下還是可以的,希望能幫助到看的朋友。