先學什麼編程語言比較好 你們有沒有後悔過?

看了下網站很多程序哥,這裡就不說程序猿了,因為我挺崇拜會敲代碼的人,看了很多知乎提問者,什麼java什麼C++什麼學了哪個幾年幾年然後說早知道先用哪個哪個語言,為了避免這些情況的發生,小弟準備進去程序世界,所以我想問的是,新手到底先學哪個語言比較好?我也不知道什麼語言針對什麼方面,我網上是有找的,但是希望權威的知乎程序大神給我解答解答 我先從什麼入手 哪個語言針對哪方面 小弟在此感激不盡!帶我進程序世界吧!我 不後悔


大一第一次學C,看Understanding and Using C Pointers - O"Reilly Media, 寫了一些蹩腳的void*模擬面向對象和pthread快排之類的程序,對這些技巧驚為天人,覺得高中搞Pascal簡直浪費了多少人生(後來搜了一下發現Pascal也是有函數指針之類的東西。。)

大一下開始學C++,用Qt寫了個會內存泄露只能跑十幾秒的坦克大戰,然後覺得繼承封裝多態模板外加Qt的信號槽什麼的吊得飛起,大一為什麼花時間去學C而不是直接從C++學起,浪費了多少時間。。

大二學Python,卧槽好高端,有REPL,有list/dict/set comprehension之類的語法糖,有高階函數。。。還有各種import分分鐘搞定的任務都試過不少,畫圖表,做數模,寫爬蟲,建網站。。然後當了一年Python腦殘粉,心想為什麼不一開始就從Python開始入門,真是浪費了好多人生啊。。

後來許是因為閑得蛋疼,網上看到了王垠、Belleve、vczh等人的博客,然後雖然看不懂但是逼格好高啊,我要去學。。。然後看sicp、eopl之類的書,還把網上能找到的所有跟編程語言/函數式語言/編譯相關的書全部找全了。。然後這學期學了兩門公開課,入門了一點函數式語言,嘗試自己設計語言和寫解釋器。寫函數式程序真是渾身舒泰、如沐春風,感覺為什麼沒有一開始就學函數式語言呢,真是浪費了好多人生。。。。

然後現在我為新學了一些東西而沾沾自喜,還到處發帖炫技撒野的時候,隱隱地會想起之前的無數個「為什麼不從XX學起,真是浪費了好多人生啊」。。想起那些水著各路大神的博客,如同小孩進了糖果店一般喜悅,卻沒花多少時間去寫程序的時光。。想起高中學編程幾次荒廢又拾起,開一個free pascal的窗口一個迅雷下片的窗口一個打遊戲的窗口糊弄老師的時光。。。

所以我覺得入門之前,去花時間糾結從什麼學起比較好,這件事簡直太TM操蛋了


我高中的時候也投入了很多精力在Delphi上,VCL用的滾瓜爛熟,Delphi的語法已經幾乎會背誦下來了(幾乎就跟我現在對C++和C#一樣熟悉)。後來Delphi就黃了。我有收到什麼損失嗎?顯然一點也沒有。因為我本來就不是沖著語言和API去的。只是因為語言和API實在太她媽容易掌握了,一不小心就熟悉了,根本沒有什麼成本。

還是理論知識難學,而且永遠不會過時。不過數據結構這一門就很難說了。純函數式語言的數據結構跟我們普通認識的數據結構完全不是一回事(但是編譯原理就都是一樣的啊哈哈哈),萬一將來Haskell那種語言統治世界,大家演算法導論豈不是白看了?是不是覺得不能花時間學演算法太浪費時間了?哈哈哈哈哈哈哈哈哈哈哈。

萬一將來量子計算機替代了我們現在的計算機成為PC的主要組成部分,那所有的演算法(這下連編譯原理也不一樣了)基本都白學了,是不是覺得再也不能花時間去學習任何東西了?哈哈哈哈哈哈哈哈哈哈。


python,後悔了我給你五百萬。

你學什麼語言,以後都不一定用它工作。

你學python,不管你做什麼工作都能用上。

程序員的世界裡,第一有用的是English,第二的就是Python.

================2016年6月13日編輯==================

作為我被點贊最多的回答,我覺得我應該多說點什麼?

首先,我們先給題問者畫個像,我覺得有語言選擇困惑的人,絕不會是已經工作的工程師,相當一部分人,對將要學習的語言還沒有確定的應用場景。所以我理解為,他們希望將要學習的語言能給他們帶來最大的投入產出比。影響他們決策的因素可能有:

  • 易學程度
  • 流行度
  • 廣泛的通用性
  • 易於得到幫助
  • 語言的生命力
  • 對簡歷的加分

下面是2016年6月份的TIOBE上語言排行榜。

java:很顯然的王者,企業開發和後端的最主力語言沒有之一。除非你有了確定的目標和應用場景,顯然你不需要開始學習這麼牛逼的東西。

C/C++:除了最牛逼的公司和最不牛逼的公司(還在用VC6維護遺留系統)的公司,目力所及真的很少人用到。

python:你很難說出來它是用來幹什麼的?也很難說出它的特定應用場景,因為它實在太能幹了。

C#:Windows越來越不好賣了,C#還能走多遠?

PHP:要不是創業的時候沒錢,誰會用它呢?

VB:呵呵,千萬別寫到簡歷上,會減分。

JavaScript:太火了。青年人還是離火遠一點。

Perl:你肯定不會選,因為你也許都沒聽說過。

Ruby:沒有rails,它就是個渣。掉渣大餅的渣,現在想吃一塊還真找不著。

......

對於選擇障礙和沒有明確目標的人,python真的是一個很好的默認選項。

有圖為證


今天看到這個 What f#king programming language should I use?

但是更應該看這個 如何選擇入行語言


小學學了qbasic,從此一發不可收拾。初中pascal/delphi,高中接觸c/c++,大學裡一口氣幹掉了java obj-c python matlab,最近研究了swift…

首先是,什麼時候學什麼東西要分清楚。小學生學QB培養一下興趣那已經是極限了,不要指望一個小學生能夠做到邏輯概念清晰玩轉c/c++;叫一個大學生學QB搞不好人家以為你侮辱他的智商…

其次,pascal是個好東西。這玩意流行不起來是因為它寫起來繁瑣以及庫比較少,絕不是因為它有先天缺陷。pascal規定多,概念十分清晰,功能完善,對象化支持也比較完整,執行效率還不低,對於新接觸編程的人來說作為入門語言,實際效果是比c更好的。不過話說回來,如今學pascal也就只是能學個編程基礎,實際生產力幾乎為0…無論如何我仍舊感激當初學pascal的經歷,不然高中時也不可能兩三周就玩通了c。

python是個好東西,但是仍舊建議有編程概念的人再研究python,而不適合做入門語言。python十分靈活,第三方模塊眾多,做個程序原型或者做大玩意的膠水都十分給力,但就是因為太靈活,新手上來容易各種混淆概念…

swift為大蘋果新神器。坦白說obj-c本身算不上多優秀,優秀的是cocoa。而swift則是個完整的優秀的語言。不過據說很多人不喜歡動態語言…我感激還好啦

以上


什麼語言都是有價值的,深入學習,都能學到很多東西。如果從打基礎的角度來推薦,我會推薦學習C語言來入門(尤其是對於學生哈),因為C算是一門承上啟下的基礎語言。

(1)承上啟下。C語言不屬於最底層和學習難度高的語言,例如彙編語言就屬於比較底層的語言。也不屬於完全屏蔽底層的語言,例如PHP/Python等腳本語言,它屏蔽了很多底層特性。學習C可以讓我們對計算機底層有一定了解,又能對軟體開發有一個初步的認識,而「腳本語言」往往又是基於C之上寫出來的。

(2)目前主流的應用軟體,包括移動端等,底層實現也往往是C。有助於我們對它們運作原理的認識。

如果感興趣,可以一直學習下去,如果感覺比較枯燥,然後再去選擇一門更偏應用型的方向來學習。例如前端開發的JavaScript,Web腳本語言PHP,或者綜合腳本語言Python等等。然後,你會發現,它們比C語言「簡單」很多。

如果一開始,就是學習Python等語言,剛開始感覺都挺容易,學到後來的底層原理,你會發現最終又重拾C的學習。


程序員都在幹啥呢?創造。

怎麼創造呢?像畫家一樣,用筆和紙描繪腦中所想。編程語言,就是程序員的紙筆。

好的畫家,好在絕妙的構圖、色彩等等,總之就是一樣的紙筆,好的畫家就是有能力畫的比我這個美術白痴強許多倍;好的程序員同理,同樣的語言好的程序員寫的就是高效精簡美觀。

學好編程語言很重要,因為它是我們表達的工具,可是更重要的是超出語言存在的那些深深印在腦海里的東西,那才是程序員最大的財富…至於學語言這種事,我從沒聽說過好的程序員學不會其他語言的…

不過既然是入門,那就選擇蘊含超出語言的瑰寶最多的語言好了,因此我大力推薦C和lisp(換成haskell也行?不過我不會haskell就不嗶嗶了),一個在最貼近真實機器的角度,一個在最高的抽象層次上。現在想想,學C和學lisp都對我產生了無比深刻的影響,哪怕是我第二喜歡用的Python都無法對我產生那麼深遠的影響

最後,我想強調一下,語言是很重要的,可是對程序員來說它並不是最重要的,所以重點更應該放在那些跨越語言的東西上。至於這些東西都有啥我就不說了,隨便搜搜能找出一大堆

最後廢話一句,其實不用怕學了語言後悔,只要你體會到了某語言的精髓,那麼學的語言是越多越好的,不嫌少就不錯了哪裡會後悔嘛

噢,忘了補充一句,其實我是來推薦lisp的,莫名的把C給帶進來了…


再怎麼說C也是值得一看的。


我想說的是,有時間後悔么。哈哈哈。


最近對rust很感興趣,已經是大齡青年了,半夜還在看rust


如果沒有基礎,個人建議從簡單的HTML和CSS學,然後開始學Javascript,開始做一些好玩的應用。學前端這些的一個好處是可參考的源代碼特別多,二個是學習過程中能不斷做出新東西和效果。不像Java等其他後端編程語言,可能需要學很久才能真正開發一個好玩的東西。如果英文好可以先從http://www.codecademy.com/ 上的互動式課程入手。


我覺得從「帶我進程序世界吧!我 不後悔」這句話說起會比較好。你要搞清楚你眼中的程序世界究竟是什麼,是計算機世界本身呢?還是如何使用計算機?

計算機是過去70年人類在各方面生產方式改進的最重要的源泉,而編程,是各行業利用計算機的主要手段。語言背後往往是一個行業對計算機最有效的利用方式。吳老師說的好:八股文若做的好,隨你做什麼東西,要詩就詩,要賦就賦,都是一鞭一條痕,一摑一掌血。那麼程序界的八股文究竟是哪個?

如果你是計算機專業的學生,或者立志投身於這個行業,而且智商高於平均,那麼應該首先了解一些基本的計算機架構知識,然後學C,把dmr的The C Programming Language紮實的過一遍手,便算築基成功了。這個時候的你對計算機從理性和感性上都算有了一個比較初步的認識,別的imperative語言無論哪門,學起來都會得心應手,也不至成為北大青鳥那些先被介紹「對象」,確總也搞不懂「對象」的半桶水。概括一下意思就是,C能夠加深你對計算機本身的認識,並且為理解更複雜概念打好基礎。

如果你不是計算機專業的學生,那麼問題就變成了學什麼中短期最有用?從2015年的狀況看來,答案應該是javascript。自從被最近的技術進展重新發現以來,javascript可以說是目前應用場合發展最快的語言。從實用角度來講應該是未來幾年之內的最優推薦。

這個之外再扯一些,最近10年函數式編程獲得了廣泛的重視,雖然現在流行的語言基本上都混入很多函數式編程的特徵,不過學習一門純函數式語言還是對加深認識很有幫助的,lisp,haskell都好。最後,除非工作需要,不要碰C++。現在這個年代任何用C++撰寫的新項目都是罪惡。


小時候競賽在386上敲一種叫gw-basic的東東,那玩意超沒模塊化,還是用行號的。後來大學學c被罵死。後來工作開始時用c風格寫java,又被罵死。現在寫java也被罵習慣了。

但這麼多年下來,又怎樣呢,身邊用各種語言的都很多,切換語言的也很多。總結下來就是牛逼人還是牛逼,煞筆人還是煞筆。不和語言選擇和語言切換有任何關係。

因語言習慣造成的事故。。。也就剛開始的幾天吧,稍微注意一下就消失了。


編程語言只是工具,並不是玩具。我個人討厭生澀難懂、冗長的代碼,喜歡結構清晰、簡潔易懂的代碼。作為工具,還需要考慮實際的應用價值。有些編程語言雖然語言特性設計的有有趣,但是由於庫支持等諸多因素,在實際的工程中用的很少,例如純函數式語言Haskell。同時還要考慮編程語言的時效性,比如現在你學習Pascal可能就沒啥用了,因此我覺得應該在使用最廣泛的幾大編程語言裡面選擇。

我個人比較熟悉(不都精通)的語言包括C/C++、Pascal、Java、Python、Ruby、JavaScript。

按照現在國內外高校的實際情況,入門通常會用C、C++或Java。我個人覺得用Java入門最合適,可以避免在一開始就接觸一些C/C++中難懂的特性(指針、模板、多重繼承等)。Java中的對象引用、繼承模型、垃圾回收等諸多特性影響了許多其他語言(包括Python、Ruby、JavaScript),因此能深刻理解Java的話,對於理解不少其他常用語言也是有幫助的。

最後說說後悔,我感覺沒啥好後悔的,只有當學習到新的東西時會驚嘆。畢竟作為工具的編程語言,是用來給人使用的,用的更舒服你就會讚美。例如我學習了Ruby後就覺得Java很繁瑣,但我並不覺得Java是沒用的,相反Java相對簡單的語言模型幫助了我理解了面向對象。


額~~我最初學的是Fortran,後來QBasic,後來 C++

感覺沒什麼後悔的,有很多是相通的,很多需要邁出去的第一步無關於哪種語言

至於API,當然也需要熟悉

至少我原來常用的那些Windows API,其名字再其他語言里也有他的影子


初一學了 VB ,上課寫小遊戲玩的風生水起

後來學了 C,發現卧槽這語言這麼屌我為什麼要在 VB 上浪費那麼多時間

高三之後學了 Lisp,發現卧槽原來程序還能這麼寫,然後現在我就變成 Lisp 腦殘粉了

不過最近看 Prolog 和 Erlang 又有卧槽這玩意怎麼這麼屌的感覺。。。

跑題了。。。

先學的話肯定是 LISP 啊(泛指所有 LISP 方言),建議從 HtDP 開始學,培養正確的思維方式


我最先學的是HTML,那時候IE的版本號才3.0,在Win95下雙擊一個HTML文件默認是用Word打開的,但是顯示出來的樣式比在IE里還好看……一堆亂七八糟的代碼能變成如此「漂亮」的頁面深深的震驚了我,於是走進了開發的坑。

後來學習的順序應該是C、Java、VB、Delphi、PHP、C#、Python、Objective-C、Nodejs。

為什麼要後悔?


要看你開始學習時技術發展的情況了,我覺得應該從中間開始,不要太底層也不要太高層,語言選擇比較嚴謹的,偏學院風的。現在看來java和c#是不錯的選擇,語法嚴謹,工具成熟,資料豐富,學好了找工作也沒啥問題。

當然,如果熟練掌握了javac#就覺得自己是牛人,那就太自以為是了。至於以後怎麼發展,我也不是什麼牛人,就不在這裡胡扯了,可以讀一本書《程序員的吶喊》,那個酒鬼說了很多關於語言的事。


java入手,後學c,用過c++,用過c#,最後學了php,常用java和php


PHP

1. 簡單。下載一個xampp伺服器套件,啟動。用任意一個文本編輯器裡面寫入& 一行代碼,存入在xampp的htdocs文件夾里命名為hello.php文件,在瀏覽器輸入:http://localhost/hello.php 。天啊!你會編程了!多神奇!

2. 有用處。現在web開發這麼火,php讓你即使剛剛入門,學到的知識都能派上用場。

3. PHP最大的優勢是你不需要研究編程最難的部分:GUI界面,直接藉助瀏覽器這個最好的界面工具就可以呈現漂亮的結果。

4. PHP的風格跟c和java比較接近,利於再去舉一反三的學習其它語言。

我的學習路線:PHP -&> Html -&> js -&> sql -&> Python -&>c -&> c++ ...OBJC.


推薦閱讀:

為什麼我覺得Python的學習很沒有條理?
非計算機專業的程序員能達到什麼樣的高度?
想學編程,請問從哪個開始較好:C/C++,Python 還是 Lisp?
熱愛編程,什麼時候開始學習?
Python中實現 (a and b or c) in xx 這種邏輯最簡潔的方式是怎樣的?

TAG:互聯網 | 編程語言 | 編程 | 編程學習 | 編程入門 |