VB / Java / C / C# / C++ 等零基礎學哪個更容易上手?
不同的程式語言有著不同的抽象層次,
有些更偏向硬體的工作原理,有些更貼近人類的思維方式。以Python和C為例,Python更像英語,基本的思維方式也更類似自然語言,而C則更類似於計算機硬體本身的工作原理。
對於初學者而言,如果你的背景屬於對計算機底層原理不熟悉的一類的話,學習C會帶來一些困擾。如果與此同時,你的動機是要使用程式語言來解決你的領域知識,而不想了解更底層的細節,Python會比C更適合。需要澄清的是,這並不是說Python簡單,我覺得Python遠比C要複雜,C語言本身的所有細節都在K&R一本書中說得清楚,而卻從未見過一本Python的書籍能涵蓋這門語言的所有細節。
我想表達的一個觀點是:
其實主流的語言C/C++、Python, Pascal、Basic、 JAVA、C#都可以作為入門的程式語言。因為它們都存在一個具有足夠表達能力的語言子集,優秀的入門書籍,成熟的庫,以及強大的社群的支援。所謂選擇最好的入門語言可能是一個偽問題,而真正的問題是當你選擇了其中一門語言後,如何選擇合適的學習方法。
學習一門程式語言,應該是容易的,因為計算機語言本身的特性只是它的語法。而計算機語言的語法無外乎是表達以下幾個方面的概念:
資料的表達
- 常量的定義
- 變數的定義
- 結構體的定義
- 類的定義
- 控制流的表達
- 順序語句
- 條件語句
- 迴圈語句
- 封裝和抽象
- 函式的定義和呼叫
- 類的定義和呼叫
- 庫,模組,名稱空間的定義和呼叫
而當對這些概念有了基本的印象並學會了用一門計算機語言表達這些概念之後,接下來對於初學者來說最為重要的應該就是三件事情,掌握:
- 程式設計正規化
- 基本的資料結構,演算法
- 對應語言系統庫常用的API
常見的程式設計正規化有:
- 面向過程的正規化,這個應該是對於初學者而言最為容易理解的方式,幾乎所有的主流語言都支援這一正規化,初學者應當首先學會這種正規化;
- 面向物件的正規化,這個應當是最為主流的程式設計正規化,從軟體開發的角度看,它的優點在於能夠用面向物件的方式貫穿軟體開發的整個生命週期,包括軟體的設計、編碼、測試;
- 函數語言程式設計,在平行計算的時代,函數語言程式設計的正規化將會成為另一大主流,推薦對其做一些瞭解。
演算法是電腦科學的靈魂,它的意義在於讓你理解計算機的工作方式的本質。對於初學者而言,不需要掌握過於複雜的演算法,但是應當熟練地掌握基本的排序、檢索、遍歷的演算法。資料結構亦是類似,初期掌握陣列,連結串列,棧,佇列,雜湊表,棧即可。
系統庫的意義在於可以大幅提高你的開發效率,雖然重造輪子是程式設計師的一大樂趣。但是在實際工作中,我們可能更多地需要追求效率,而系統庫是過去優秀的程式設計師的經驗的結晶,往往在效能和強壯性上都做了大量的優化,一般來講都會比我們自己的實現要好得多。正因如此,學習和掌握系統庫雖然枯燥(初期要記憶大量的API細節),但是卻是一筆非常值得的投資。
以下想說說關於學習曲線的問題,初學者最大的障礙可能就是遇到問題得不到解答。不過,如今的學習條件跟當年網際網路不發達的時候相比已經好得多了,有這麼多優秀的問答網站,學習資源,百科全書可供使用,比如:
- 知乎
- stackoverflow
- wikipedia
- 美國一流大學的開放式課程
我推薦的學習方法是:
選擇一套優秀的學習資料,它可以是書亦可以是視訊; 堅持從頭到尾學習下來,遇到問題通過google來尋找答案或者上問答網站提問。 部分語言的優秀的入門教材
C: C Programming Language
JAVA: Java Programming Language,Stanford's the programming methodology
C++: C++ How to Program(<a href="http://www.dztcsd.com/">資質代辦</a>)
Python: Dive into Python, Learn Python the Hard Way,A Byte of Python
- Practice Makes Perfect,提高程式設計水平一定要勤加練習,推薦使用線上測評網站練習。
比較適合新手的線上測評網站:
- USACO
- Euler Project
- TopCoder
當你成功地寫出自己的程式並通過測試之後,停下來,想想是否還會有更好的實現方法,總結自己在實現過程中遇到的困難,並且閱讀比你更聰明的那些程式設計師的方法,閱讀優秀的程式碼會讓你學到很多。然後再嘗試用更好的方法去實現。
- 多分享,寫部落格或者來知乎,SO上回答他人的問答,幫助別人不但讓你感到有成就感,其實也是提升自己的手段,因為只有當你能解答他人的問題之後你才是真正地理解了這個問題。
最後, happy coding!