學習多門編程語言有哪些好處?

優秀的編程語言數不勝數, python,ruby,lisp,go,lua,haskell, js,等等等等。

有人說, 學習更多編程語言能夠幫助你拓寬解決問題的思路, 但也有說, 學習多種語言往往只多不精,那麼, 你認為學習多門語言為你帶來的好處到底是什麼?在研究和工作中有什麼樣的幫助?有無具體案例?


我覺得顯著的好處就是說,當你學完了四大類(C++,Prolog,Haskell,Ruby)之後,無論你用什麼語言,你都可以從全人類的智慧中吸取寶貴的知識,取其精華去其糟粕,用最恰當的方法,在環境強迫你使用的那門語言裡面,做出質量最高的東西來。


一直寫

繼續寫

然後你就會想

這麼傻逼的功能爲什麼沒有人寫過呢

然後你開始用 google

光是用 google

你就把學校教的網路概論跟加密演算法

(如果你像我這麼老那就只有加密演算法網路概論得另外找書學)

從頭到尾重新擼了一遍

然後

哈哈哈

有人寫過了

咦咦咦

這是什麼語言沒見過

啊啊啊

好吧爲了改到順手開始邊看 code 邊擼語法

如果你倒霉一點(或者說幸運一點?)

在剛剛想寫點 ascii 美術自動化的時候被扯進那種

不知道爲什麼把動詞放在最前面跟最後面的語言

(是的我說的是 Lisp 跟 Forth)

然後莫名其妙在查資料的過程中認識了挖恐龍的爺爺什麼的

一番死去活來之後

你就知道

先他媽的把最笨的資料結構建立好流程圖畫完

隨便什麼語言

它會動了

你收工了

飯在鍋裏

...什麼都沒有在床上

RIP


一種語言有一種語言的「哲學」,感覺哲學這個詞太大了,所以我傾向於一種語言有一種語言的方法論。每種方法論在一定情景下都有某些適應性,但編程哲學就像馬克思哲學,如果一個人長期用一種方法論解決問題,會發現絕大多數問題都能被它解決,所以下意識的認為這種語言的方法論是真理。

這時候就需要有一個強有力的語言來破壞你的三觀,重塑你的三觀,讓你發現原本完全不在意,或者無可奈何的地方你竟然可以這樣做,一門語言可以讓你學到很多東西,我在用了很久的 Python 後投奔 Rust 就是這樣的經歷。享受了很久動態語言的靈活後,發現類型安全的約束也是別有一番風味。


The Role of the Study of Programming Languages in the Education of a Programmer

譯文:Keep On Fighting

原版:http://www.cs.indiana.edu/~dfried/mex.pdf


我們學的不僅是語言,還有這種語言的應用場景。

語言像是工具,各有其擅長的領域,同樣的問題,一種語言解決起來很輕鬆,換一種可能就會覺得彆扭。就好像要擰下個螺絲帽,只用鉗子也可以,但要費大力氣,不過,如果會用扳手就容易多了。

語言間的不同,不僅是語法和關鍵字,更多的是其生態環境和應用場景。學會一種新語言,往往也進入了一個新的領域。


郭德綱:「程序員四門基本功課:C++,Java,Python,Bash,少學一門就相當於缺一條腿。好多Windows程序員就不會bash scripting,別人都拿100,他拿75。」


有助於避免你成為某一種神教的沙文豬,避免你忘記語言的真正目的,避免你失去編程的真正樂趣。


沒有好處。。。LISP神教和c++神教都這麼認為。


編程語言只是工具而已,木工況且需要錘鋸磨刨尺,碼農也沒什麼太多不同。

編程的最大目的無非是驗證自己的想法或者傳播自己的想法。前者怎麼方便怎麼來,後者怎麼有效怎麼來。

就像我幾乎不會為了驗證自己的一個數學或者物理上的想法而去動用c或者c++。在這些方面,python的scipy啊matlab啊什麼的都有許多優勢,實現起來更方便啊,人家從數據讀寫到矩陣運算代數各種到輸出結果圖片都是全套一條龍,一些成熟模型都還有現成的模塊,能夠簡化許多的工作量。用c讀一堆高精度數據然後繪出各種圖不是不能做到,只是找來一堆庫然後拼一個幾十行代碼是不會比一句plot更方便的。我也不會去用python寫底層或者追求高效的東西,c和c++才能更加有效完成工作。寫單片機我會用keil c,寫網站後台我會用php或者python,寫h5頁面毫無疑問會用到js,做ios app我會用objc,寫安卓應用我會選java,這些都是理所當然的事情。

很多語言都會說自己高效全面擴展多,什麼地方都能用,學精一個就夠了之類的。確實存在如此強大的東西,但是能用不代表就最方便最有效。在合適的場合選用合適的語言工具可以成倍提高編程效能,所以多學幾個語言不是問題。

學太多確實不可能每樣都精通,但除了自己常用的幾種,真沒必要樣樣精通。不精通模板元編程不會妨礙你用c++做要用的東西,不了解python里generator和iterator的區別也不會影響你用python寫小工具。就算學得再多,精通其中的兩三種不同應用範疇的語言應該都不會是太困難的事情。

本人會用的語言包括但不限於:basic, pascal(delphi), c, c++, java, obj-c, swift, python, css, html, JavaScript, action script, matlab, c#, php, asm.


治療傲慢與偏見


在解決實際問題的時候有更多更方便快捷的解決方案可供選擇。

c寫底層,Java寫Android,PHP寫伺服器,Python寫腳本,lua寫遊戲,js寫前端,反正各有各的好處。

當然,缺點就是經常串語法⊙﹏⊙


你不能限制自己在一個崗位上干這輩子,於是技不壓身就是對的,機會給有準備的人。

把遊戲時間用來多學幾門語言與專精並不衝突,早學比晚學好。


思想差別極大的語言可以學學,都差不多,沒啥用,都是搬磚


學編程語言,我們究竟在學什麼?

我大學學的是計算機,當然必不可少的課程就是學習編程語言。一開始接觸,可以用一臉的蒙逼來表達我的感受。晦澀的專業術語,複雜的邏輯演算法不知道「殘害」的多少學習計算機小童鞋的心靈。

很多人感慨學習計算機語言不會就是去當的苦逼的碼農,學習這些有啥意思?還不如來個實際的,像市場營銷,物流管理啥的,就算是學個會計也比這強。但是掌握編程語言帶來的好處絕不僅限於會寫代碼,學習它是因為它會教我們怎麼用不同的方式思考。它會教我們以大化小,比如將大問題切分成小問題,然後解決;如何能把一個複雜的系統簡化,更清晰明了地分析計算,這是未來世界人必須具備的能力。

谷歌CEO埃里克 施密特說:「很明顯,現代人最需要培養的技能是分析能力。人們做的大部分是將被電腦所取代,但是人會管理電腦,因此分析能力絕不會過時。

我們都在談人工智慧時代的的到來,認為很多人的工作將會被機器人所取代,但是人類的思考問題的模式不會被機器取代,人夢想的能力,藝術創造的能力不會被取代。學習編程就是在控制機器,控制電腦。未來也許會出現種人:一種是做機器的奴隸,一種是做機器的主人。所以就要看,我們是做主人還是奴隸了。

美國總統奧巴馬不止一次的說過要全美的學生都要學習編程,美國最大的在線學習網站也是教學生編程語言,即計算機方面的知識。由此看來美國對於編程語言和計算機的看重,所以很多高新科技,和互聯網方面的創新都出在美國。而中國改革開放三十年,一直強調學英語的重要性,所以英語補課機構,和英語在線教育平台層出不窮。

現在中國強大了,不會像以前那樣跟在別人後面學習,逐漸加大科技教育的投入,注重互聯網發展。政府還特意舉辦全國大學生互聯網+大賽,鼓勵互聯網創新。很多重點大學即使不是計算機專業,也會讓學生學習編程語言。我想未來將是編程語言學習的時代,學習編程就像我們過去和現在學習英語那麼重要和被社會所認可。

所以從現在開始,不管你什麼的學歷和背景,都應該學習編程語言,學習計算機的適應,這樣才可以做未來的主人,不被時代所淘汰。


長年遊走在各種編程語言之間,寫過:C(單片機與Shader)、C++(主業)、JAVA(小工具與Servlet)、SQL以及存儲過程(網站資料庫)、HTLM/JS/CSS(網站)、Delphi(以前用過一段時間)、MATLAB(做數值實驗)、Python(做演算法實驗)、Fortran(該死的LAPACK)、彙編(調內核、掛鉤子)、VB(MS Office自動化)等等。

說句實話,真正精通C++或JAVA的人根本不會在乎使用什麼語言。常用高級語言的邏輯甚至基本語法都是相通的,如果你真的對一門語言已經非常熟悉,用另一種語言寫程序你只需要去翻一下手冊,細節問題stackoverflow一下就可以了,寫起來無非比這種語言的專門程序員效率低一些罷了。

問題是很少有人對一門語言達到「精通」的水準。有一個辦法可以讓你把這些語言都過一遍,就是不使用任何現有的網站伺服器軟體(比如Tomcat或IIS等),從C語言開始寫一個完整的網站。


鄙人專科渣渣一個,還是網路專業。

1、必修是C,沒打算認真學,萬萬沒想到,班裡同學都不願學,考試還是要考,每天都去上課的我肩負了重任,一個月,學完了數組,雖然有些半吊子,但還是勉強的寫了一個十四個小工具的合集,外加一個所謂的銀行存錢取錢業務。交差了。

2、大二,接觸到了openstack,酷炫的讓我膜拜,當時教網頁設計的老師說,他們計算機讀研就學過,感覺不是很好玩,,,,女老師就是實在,,,不好玩。。。然而發現python。。。那段時間比日了狗還痛苦,天天看python教程,逼迫自己學下去,其實我很想參團,但我還是忍住沒去和舍友來一波愉快的中團。

3、C++和C#http://asp.net、這是我的痛苦。一個妹子同學,四川某校,非要選國際金融還是啥專業,我也忘了,最後被調劑成計算機。最讓我心痛的是,她學習的動力就是失戀了。。。高中外加大一一年,他的男友成功在大二換了女友。雖然我不屬於備胎,但還是被找上來,要求我幫忙搞定開頭這三個。悲傷net這個,學了一個月,他們作業要求還是很簡單的。就是山寨一個購物網站。C#我沒看,反正她考試直接放棄了、 C++、說實在的,,,和我一塊學習的同學都以為我學瘋了。看了整整三個月。就這麼一眨眼就陪著他考完到了假期。。我的業餘生活啊。就這麼搭進去。

4、本著考完就還給考試卷的老特色。我又一次犯病了。我告訴他。在四川java或者安卓開發好像很不錯喲。她說。你教我把。。。。當時我就想打死自己了。。。後悔怎麼會嘴劍說了這種話。。。

然後java啊,你們應該懂得,學習周期不是一般的長,那根本就不是php什麼速成班可以速成的。然後我的大三就這麼熬過去了。他現在也開始做java開發了。然後他說,他喜歡寫作,他要當作家。。。

我的親姐。。。弟弟陪你學這麼久,褲子都脫爛了,,你就說這個。

當然。我順從他得意思。,沒有阻攔他,因為我知道,如果給他說別的,他的回話估計就是兩個內容,一個是讓我養她,一個讓我給他找工作。

5、所以,我雖然不對ruby做任何推薦,但我還是偶爾會看一看,因為python學習的時候,我看的是某位java出身的講師講的。他老是推薦ruby、

6不得不說一下我們單位寫perl那位大哥。他單身好久了。今年37、單位同事說他是單身王、不太理解。。。但我覺得,會了python。實在是不知道應該用怎樣的心情面對perl。

7其實五年里,就會了這點內容,不多。而且也不專業、


我覺得,認識面要廣,都精通是不可能的,多認識些就是了,

不至於拿一串代碼出來連這是什麼語言也不懂,最好能大概感覺出這代碼是在幹嘛,

我只認識c,c++,java,php,


這個問題很老,但我還是想強答一波:

語言技能樹:JavaScript(主業,附帶Node.js、HTML5、CSS3)、Python、C#、Shell

嚴格算就會三門語言,下面細說。但是我大學是從C大一開始學的,然後自學PHP和JAVA,當然這三門都棄了。

為什麼選擇這些語言安生立命,而棄了另外三門語言呢?同時說說我為什麼需要掌握多門語言。

===============================================

首先我是個前端,那麼JS本命語言不說,但它所附帶的價值是強大的,Node.js擼個後端妥妥的。而且現在Node也的確十分的火,像react native與weex等擼個跨平台APP也不在話下。

但是,在工作中遇到了喜歡的妹子,看她被一些重複、繁瑣的數據或工作折磨,我是不能忍的,就想著能不能通過自己的技能幫到她。

C#是我大二學的語言,winform程序需要用它,其實我在學了之後就沒有再用過了,但是後來因為喜歡的妹子拒絕了我,我又不愛打遊戲,又不愛玩手機,不想早睡只有看書學習了。然後果斷把C#撿了回來,當然也寫過一次小工具給她。但更多的是解決一些非程序員同事的問題。哭唧唧...

python也跟上面我喜歡的妹子有關,同樣是工作問題,有一次她叫我幫她一個事,但是需要用到爬蟲,那個時候我沒接觸到爬蟲,她看了數據量之後也就算了。但卻牢牢的記在了我的心中,然後我就開始學習Python(其實Node也可以,我選擇什麼語言寫爬蟲都是看數據量的)。學了的結果就是,我的工作往這邊開始轉變,也經常給同事寫爬蟲幫忙,但從沒幫到過我喜歡的妹子....我是很絕望的...

至於Shell,那是因為我會使用Linux,也就會一丟丟Shell,當一個技能補充而已,但當你會了Python在運維上的幫助是很大的。

但是,在學習這些語言的過程中,你所掌握的知識遠不止這些。比如不經意間會使用的SQL、Nginx等等一系列配套的東西。如果我當年只是老老實實的切頁面,說不定我現在每天都還在重複的去做一些切圖的工作。這樣不僅會喪失工作激情,而且會讓自己的職業生涯有所禁錮。我很多JS的問題無法想通,都是通過其他語言找到答案的。


就像做菜你可以只用一把刀。。。也可以準備很多刀。。。


話說我當年學html/js/php/css(前端)的時候,我老師跟我說如果你兩三天學不完就不要幹了,然後我硬是學好了。

當然C/C++是小時候學的,老師也教過VS開發之類,基本不怎麼記得,全靠搬磚。當中學過半年VB,能做點沒有實際應用價值的軟體。

後來進了大學,(SQL算語言嗎?)學了JAVA,當然不會開發,會像C的時候寫演算法(以前做競賽的好處)。

後來入了坑,開始寫COBOL,不是對日開發,是銀行系統,First Data,關心這家公司的人會知道Apple Pay也是我們做的(逃。。

好處么,一方面是找工作很好找(前提是你都比較熟悉,我從來不說精通),還有么就是我學了COBOL之後更有助於理解以前CPP的東西,CPP的書我一直翻來覆去看。。。然後公司除了自己研發部的東西,Open system的東西原理基本也懂,我都能告訴他們問題在哪裡哈哈哈哈~

PS:上次去cisco面試(我是帶著擴展人脈的心態去的),他們研發的人用的是個我沒聽過的語言,不過回來search的時候記得是和cobol彙編什麼一個時代出來的差不多的。(想起來了是FORTRAN)

PPS:我不會python蠻可惜的,從來沒機會也沒特意去學。。。


推薦閱讀:

為什麼中國大學MOOC網課程結束後就看不了了?
想學習C++,應該怎麼開始入手?
如何挑選一門計算機語言呢?
哪些編程語言有 C/C++ 的效率,又有 Python 的簡潔語法和極高的生產力?

TAG:編程語言 | 編程 |