標籤:

當我們在學習一門編程語言的時候,我們究竟在學習什麼?

什麼是學會了一門編程語言?


正常人按順序學會下面的編程語言的感覺:

什麼都不會:我讀CS地同學工資都那麼高(偽),我也要轉IT!

學會C#:接受編程的新思想

學會C++:拓展了一下記憶力,這些語法糖真爽

學會Haskell:卧槽原來還能這麼寫

學會Prolog:卧槽原來還能這麼寫

學會F#、Scala、TypeScript、C++/CX、Erlang、Go、Rust、Ruby、Lisp……:人類真蛋疼,同樣的事情做了那麼多遍

後來自己做了個語言:犯法啊?我也是人類!


編程語言是一座橋,連接著計算機和人類的思想。

當我們學編程語言的時候,學的其實是三部分:

1. 編程語言本身

2. 計算機

3. 人類的思想

編程語言本身:該門語言的語法、設計哲學、編程範式、使用技巧、最佳實踐等。

計算機: 主要核心是編程語言是如何操作計算機,以及計算機如何工作,計算機之間如何形成網路並通信,計算機結構對編程語言的影響,計算機的未來如何發展等

人類的思想:

1. 數學和編程的聯繫(比如,編程語言理論)

2. 編程語言的發展史,為什麼不直接寫彙編呢?為什麼會出現那麼多的編程語言?以及編程語言背後有著什麼樣的哲學思想?(從編程語言中學習「抽象」的能力,「抽象」對於人類來說多麼重要)

3. 編程語言的出現和當代社會技術水平的關係 (比如,為什麼現在函數式編程流行了)

4. 人類如何設計計算機?人類如何設計網路來讓計算機之間互聯?

5. 人類如何利用計算機解決領域問題

題主可以試著從這三方面反思下自己。

謝邀。簡單回答一下吧,這個話題能寫好長的篇幅了。


學習一門編程語言的時候,我們在學習如何調教電腦這種萌寵。

學習兩門編程語言的時候,我們在學習如何人格分裂的調教萌寵。

學習三門+編程語言的時候,我們在學習如何被萌寵調教。

所以你看那些老程序員,一個個整天目光獃滯,盯著電腦發獃,基本上都是語言學多了,被調教成這樣的。


學習一門編程語言實際上包括三部分:

學習基本語法

學習核心類庫

學習開發特定領域應用所需要的第三方類庫

第二條中的核心類庫指的是作為語言標準的一部分的那些類庫,比如c++中的stl,java中的各種數據結構、線程、文件、IO


兩個問題。

1. 當學習一門語言,我們在學習什麼?

以我的切身體會,在學完數據結構和演算法的基礎上,學習OO為主的語言時是在學架構,抽象能力;學習函數式為主的語言時是在學習切片能力;學習面相過程的語言時是在鍛煉邏輯能力;學習以協議為主的語言時是在學習業務,鍛煉生產力。

2. 什麼是學會了一門語言?

當能用語言滿足你生產需求的時候,就是你學會了一門語言。你會不斷產生新的需求,再學習便是提高語言技能。


其實吧,現在的C++、C#、甚至http://VB.Net,寫起程序來都差不多。 你的思維習慣也差不多。 各種語法特性,如匿名函數、template編程,大家都有了。

但是, 轉到SQL編程上,把大量的數據操作、數據查詢用SQL語句實現。你會發現:艹,竟然連循環語句都不必寫,會寫Select語句幾乎包辦一切。據說,SQL是一種描述式語言。


學怎麼和機器對話

就好像你學英語法語德語日語,你的目的是什麼,其實是相通的。


學習如何使用語言表達自己的思想


分人

一種人學習編程是在學習如何賺錢;

一種人學習編程是在學習如何裝嗶;

----

其實第二種情況挺好的, 包括: 庫歐, 因吹斯汀....


當你在問這個問題的時候,你究竟在問什麼?


方法,方法,編程的方法

--------------------------------------------

從高二那年拿起那本C語言,已經過去了8年,這期間按時間順序先後學習了C, VB, Python, assembly language, Java, HTML, R, JavaScript

語言沒有好壞,甚至沒有優劣, it depends on conditions. 區別只在使用者

你可以用Java輕而易舉的寫出一個類(或者函數),但是你有想過用彙編寫嗎?當你用彙編寫的時候,你就會想這種語言這麼低級有什麼存在的必要嗎?

反之,你可以用彙編逆向一個已經寫好的程序,找到程序的workflow, 可是別的語言能做到嗎?

編程語言之間只是表達事物的方式不同,而對於事物本身,內部的運作機理都是一樣的

舉個栗子,做糖醋排骨這道菜

配料是一樣的,烹飪方法是固定的

那麼Java用一個類及它自己的語法表達如何做這道菜

Python用一個方法及他自己的語法表達如何做這道菜

當我們談論學習一門編程語言的時候,我們談論的是方法,談論用一門編程語言表達事物的方式


推薦閱讀:

寫一個具有model based design功能的Simulink需要哪些技術?難度如何?
內聯函數可以是虛函數嗎?
請問mono unity Xamarin 這三者之間是什麼關係?
初學者學編程,是看項目源碼學習,還是看著書一步步敲代碼見效?
詳細介紹一下python和matplotlib,ipython的安裝使用方法?

TAG:編程語言 |