為什麼有些知乎大牛說兩周就能掌握一門編程語言?
看到有些大牛說可以兩周時間左右時間掌握一門編程語言,有些半信半疑,這是如何做到的?是不是他們掌握了編程語言的本質,能短時間找到編程語言的共通點(快速學習),和不同點(重點學習)。從而達到快速學習一門語言。如何才能達到這種水平?如果不是這樣,他們有其他什麼方法快速系統的掌握一門編程語言?
2015.3.9更新
謝謝各位的回答!回答可以做到的大牛,能不能簡單說說自己達到這種水平的過程?
因為語法以外的其他內容他們早就會了。
其實首先需要有其它語言比較好的基礎,這是大前提,因為在學習其它語言的時候,這種程序學習能力是有鍛煉的,再學習其它語言的時候,這種能力是有很大的幫助。其次是根據一些具體的事情,去驅動掌握所需的語言,我現在不會Go語言,如果現在真的有一個需求是讓我用Go語言實現一個內部要用簡單的Git的話,我可能也最多兩周,我沒有開玩笑。
如何能達到的話,除了剛才說的有其它語言比較好的基礎外,補充的一點兒應該去看編譯相關的知識,能動手寫編譯器是最好的,因為這樣的話,你看語言會站在更本質更高的維度,這樣的話,學習語言也是非常快速的。與此同時,如何能夠快速的編寫出軟體與程序,則不僅與快速的學習語言有關,也與以前大量的編程經驗有關,這樣的話,即使出了問題或者遇到不懂的,也能很快定位,這是需要時間累積的,這也讓我突然想起了周六困擾我的一個問題,我寫的自動測試框架,發送郵件含有的測試錯誤的文件附件總是丟失內容(因為我需要在程序退出前發送寫好的文件),而我去查文件確實完整的,而我最開始都不知道是哪裡出問題了,我換了很多種實現方式,直到我手賤的去點擊了一下郵件的附件文件的屬性,發現文件大小是4096,我就機智的感覺是我沒有調用file.close或者file.flush把文件內容及時的flush出來,最後發現真的是,我想我這輩子都不會忘記及時flush文件內容了,而不能交給程序退出後自動flush了。你做了十五年職業程序員以後,你應該也不會覺得這是吹牛。
這就好比,一個廚子,換了套灶台和鍋,試個幾次,也就可以上手炒菜了。
但他首先要是個廚子。這個問題有兩個層面:1. 你目前已經知道了些什麼;2. 所謂的「掌握」是指什麼。掌握一門新的語言,對於編程老鳥和新手來說代價完全是不一樣的。老鳥在學習新的語言的過程中,完全可以參考自己已經知道的很多編程方面的範式,跳過很多編程語言中重複的概念,而只需要觀察一下新語言中的語法形式就可以了;新手則不然,因為很多基本的編程概念或者思維方式還沒有形成,因此必須要非常努力地去搞懂這些東西以後,才能明白自己究竟在做什麼,這是完全不同的兩個過程;第二就是對「掌握」這個詞的含義,如果說「掌握」只是說明白這門語言所有關鍵字的含義,以及基本的語法規則的話,那麼對大部分編程語言來說,這都不是特別困難的,甚至是有很多相當艱深的編程語言,語法元素很少,可能只要幾十分鐘就能大致記住,但是真正困難的是這門語言的「特色」,即如何能用這門語言的語法,最大程度地發揮該語言對問題的描述威力。如果把這一點定義為「掌握」的話,我相信能夠自信地說「兩周」的人數就會大大減少了。當然,大牛真正牛的地方,就在於他們已經參透的編程語言的思想實質,從編程思想的角度出發,如果思路和解決方案已經形成了的話,那麼語言什麼的只是一個表現形式而已。所以,真正的大牛在兩周內「掌握」一門語言是完全可能的,但是真正的大牛畢竟是不多的
並沒有所謂的「編程語言的本質」。你需要理解,然後就能融會貫通了。不光編程語言,所有領域都這樣。
十分鐘就能學會一門語言了好嗎
https://learnxinyminutes.com
不是一周嗎?
編程,最困難的部分,不是語法。
而是,你如何把現實的問題,轉成計算機可解的邏輯,並把大的功能分解成模塊並實現。
在大學你很容易看到,把語法學的很好的女生,一個程序都寫不出來,就是這個道理。
因為語言的特性就那麼些,每個語言不過是從那一大堆特性里選取部分而已,如果每個特性你都掌握了,那麼學語言基本就是在背語法了,當然快。
其實做到這一點也未必必需是大牛,見過的語言多或者編譯學的好都可以讓你快速學會新的語言。相信這個問題下回答的人有相當一部分能極快的學會一門新的語言
兩個星期都夠我們造一門編程語言了
語言都有相似性。各種語言對於程序的描述只是角度不同而已。
什麼是掌握呢?這本身就沒有一個評判標準。
其次,標榜一下自己接受一下膜拜滿足一點虛榮,僅此而已…
挺正常的喵~
Ruby:第一周讀代碼,第二周寫並部署代碼喵~
Lua:一星期後我都直接運用到線上項目中了喵~
Python:一星期後部署到GAE,能用喵~
Node:…這不是語言只是個庫啊摔!高速掠過文檔index即刻上手喵…
SQL:你相信么?畢業前一句都沒寫過,工作第一天就開始用了喵…不是大牛,弱渣也來答一發。
比如上周工作中需要用到lua,我以前沒學過這門語言,於是用了一個下午的時間把語法看了一遍,又把lua和c交互的介面了解了一下,然後就可以在工作中使用了。
在學校的時候,因為曾經對Java有偏見,所以沒學過Java,Java課幾乎不去,去了也不聽。後來因為跟著一個老師做項目,他偏就要用Java,於是就花了一個晚上的時間看了看語法,第二天就可以在項目中幹活了。
女票在我的鼓動下決定學習Python,但是我早已好幾年不用Python了,於是我提前半個小時看了看Python的語法,然後就可以開始教女票了。
為什麼呢?
因為一門語言的基礎語法,真的就是最最基礎的東西,學會了語法並不能稱自己會編程了(想想學了一年C以後,除了個小黑框框什麼也寫不出來的情況)。而真正編程的功底其實是在語法之外的,比如數據結構與演算法、設計模式、各種軟體的實現架構、出了bug快速糾錯的能力之類的。
這個………………我1周不到就學會了scheme…………………………主要還是簡單叭…………………………
學會 Lisp 之後看什麼都是 Lisp 的子集當然兩周就會=,=
(逃
學習一門語言經歷的階段應該是這樣的:熟悉
因為有很多東西都是相通的,兩周只是拿來了解它的特異性而已。
非大牛,嘗試著回答一下。
首先,「掌握」一門語言,應該是指可以使用該門語言開發或修改特定的目標程序。肯定是比不上在此行業浸淫數年甚至數十年的老鳥。
然後,編程語言這個東西,分為幾個層次。
第一層是語法,這個其實萬變不離其宗。多看幾門語言就知道,雖然語法的定義有區別,但是來來回回就那麼幾個東西,純粹記憶性的東西。這個通過手冊或是介紹語言的書,幾個小時,或者1、2天,就可以掌握了。特別是理解了編程範式,並擅長一門類似語法的語言的話,更加可以觸類旁通。
學會了語法,為了編寫目標程序,接下來需要了解這門語言常用的一些庫和框架。
說實話我覺得這個有點難度。如果沒有懂行的人講解一下的話,有些現成的東西可能自己摸索要花不少時間。不過話說大牛應該有自己積累的資源庫(人、網站、書等)。達到「能用」這個級別的話,1.5~2周應該夠了。
至此,應該可以達到「掌握」這個級別了。
再往上的話,是能夠使用這個語言設計的思路去思考、設計。現代出現的新型語言,往往是為了解決特定領域的問題,這個需要對這個領域有所理解。不過,這個往往是大牛的「長項」,所以更加不是什麼問題了。推薦閱讀: