如何學習一門程序語言

2021-02-14 嘀嗒嘀嗒


題圖:from bessiesbluedress.tumblr.com

避免看到最後說我誆你,這篇其實應該是《我是如何學習一門程序語言的》。

對我而言,不同的語言,學習的方法似乎也不太一樣。

最早的時候都是在學校裡學的,比如 Fortran、C、C++、Java、OCaml 等。通過正式的課程去學習一門語言,方式會比較固定和統一,都是上課、做作業、以及編程作業。這種方式通常可以比較系統地了解語言各方面的特性,而實際實踐還是要看各人的機遇和選擇。所以有一些語言,上完課之後,卻是很少再用了。

離開學校後,很多工作中再接觸到的語言就屬於自學了。總的說來有三點感觸。

一是不要為了學習一門語言而學習。至少你知道自己在不遠的將來有很大可能性會用再去學。因為學了一門語言而不去實踐,除了對語言特性能有些了解,其實不會有什麼用。因為很多東西肯定會忘掉。這有的時候和一門說話的語言一樣。大學的時候覺得好玩學了日語和德語,然而從來沒有真正的應用場景,所以都忘的差不多了。都不好意思跟別人說我學過。不過以後需要用的時候可能學起來還是比從頭開始快些吧。

二是不同語言別人口中的學習的難度和你自己學起來覺得的難度會很不一樣。原因就在於你已經熟悉掌握的語言其實是你的底子。比如一個已經熟悉 OO 編程的人,再學另一門 OO 語言就會相對輕鬆;一個已經熟悉函數式編程的人,再學習另一門函數式語言也會比從沒接觸過的人容易的多。

但這僅限於相對輕鬆。每門語言都還是有很多區別於同類語言的特性。還有很多語言,是綜合了多個類型語言的特性,再做了不同的權衡。即使是看似語法很相近的語言,可能實際使用起來卻又有很大的區別。一個眾而周知的例子就是 C++ 和 Java。二者都是典型的 OO 語言,然而使用起來很多思維方式卻是有著極大的差異。因此,學習一門語言很忌諱膚淺的覺得 「這個和我知道的 X 語言差不多」,然後想當然的在使用中套用一些 X 語言的思維。

三是因為工作時候學習語言通常都是邊用邊學。一方面,這比在學校時候能夠學的更快,因為你有使用的場景,可以不斷練習。而且周圍很多高手可以討論,還有別人的代碼可以參考,更容易積累實戰經驗。而另一方面,直接上手沒有系統學習很容易想當然,很容易以偏概全。這又必須在工作以外自己主動學習理論知識來彌補。

說幾個我工作中學習語言的例子。

首先說 Scala。需要用 Scala 的時候,是一個別組的項目有特別緊的 Deadline,我因為一向比較 「手快」 且對業務邏輯比較熟,所以被借調過去幫忙。那時候我並沒有學過 Scala,但是因為時間關係,必須立馬上手。好在面向對象語言和函數式設計語言我都有比較好的底子。所以在已有代碼庫的基礎上寫一些新的函數,而不需要我去寫架構代碼,總的來說還是比較輕鬆的。

但是用 Scala 寫 Spark 相關的代碼,邏輯正確是不夠的,一定要對代碼執行的性能有所考慮。比如需要知道一些常見函數大概的時間代價,例如 group by 和 order by 其實都是比較昂貴的,應該避免一些不必要的頻繁使用。而有些操作又是相當低代價,可以隨意使用。另一個就是 Lambda 嵌套使用過程中語言的一些局限性等。好在組裡當時有幾個 Scala 比較熟的,所以一些不規範或者低效的使用方式,在 Code Review 中也會被指出。所以,幾個月後,雖然用 Scala 也寫了不少代碼,過程中也了解了很多這樣的易出錯的地方,但是感覺如果不是因為是在一個協作的過程中有人幫忙,這種裸上寫代碼的方式還是可能引起一些性能上自己沒有意識到的問題。

再說說 Ruby 以及 Rails。Ruby 是語言,Rails 是框架,但是實際工作中極大多數時候 Ruby 都是在 Rails 下使用的。因此放到一起說。Ruby 語言語法簡單、使用靈活,看似好學,其實又是最難學的語言之一。因為總和其配對的 Rails 中的 Magic 太多。很多在別的語言上挺有造詣的朋友,對這門語言/框架自學和速成都遇到一些困難。Ruby / Rails 其實是我最精通的語言/框架之一,卻也是我學習的時間最長的語言/框架之一。一來在 Square 的時候 Rails 就是主要(語言)架構,且公司有很多 Rails 的專家大牛,所以給了我一個極好的學習氛圍。且 Airbnb 也是重度使用 Rails。二來因為常用,所以自己也願意額外下功夫,整個 RailsCast 幾百段教學錄像,當時借用每天上下班坐車的時間都看完了。一些 Rails 的論壇也常常關注。所以對於 Rails,雖然坑很多,但是自己還是有信心能避開大部分常見的問題。之前的一篇《聊聊 Ruby on Rails》也寫過一些心得體會。

最後說說幾種前端語言、框架、和庫的學習,例如 JavaScript,Ember,React 等。我在學校的時候其實從來沒有碰過前端。後來因為工作需要才去學的這幾種。前端語言和後端語言差異還是蠻大的,尤其是語法上。如果一點底子都沒有,加上 Html,CSS 等,其實有時候讀懂代碼都費勁。所以直接上手寫幾乎是沒有可能了。

當時一開始是找的 W3School 上的一些教程類文檔,完整地過了一篇,不算很長,看起來倒也挺快。看完讀代碼問題就不算太大。然後白天看看公司的代碼庫,寫一些簡單的代碼練手。一有空,就拿語言的官方文檔邊看邊抄。什麼意思呢?就是從頭細讀,遇到能立馬理解體會的,根據熟悉程度,或快或慢,一帶而過。遇到有點不知其所以然,或者雖然理解了,但是覺得自己沒有深刻體會的的,就做筆記摘錄下來。這樣有一些在實踐的過程中慢慢又會遇到,通過實際場景就會更深刻地理解。不時再溫習一遍自己的筆記,覺得已經熟悉掌握的就劃掉。學和練交替,等到筆記上半懂不懂的內容全部被 Mark 了,基本也算學的差不離了。

大致就是如此吧。

最後說一下,語言畢竟只是工具。精通一門語言最多算是優勢,從長久的職業生涯來說,只能算技能之一。簡歷上多列幾門語言也不見得就在找工作的時候一定有優勢。有一定的語言功底,每種典型的語言類型都能熟悉或精通一門。然後在需要的時候再去學,學習的過程中能做到不想當然,不套用定式。

其實沒有絕對好或者絕對不好的語言,因為每種語言都是為了一些特定場景設計的。脫離了這些場景,就總有用起來比較尷尬的情況。多了解語言的特性,在使用過程中能做到揚長避短,大部分時候就足夠了。當然,如果是項目裡負責語言架構的技術人員,那又另說了。

因為是極客邦老大霍泰穩的親妹妹,年底了,不給我發紅包,卻被感情綁架發免費廣告。也不知道有幾個妹妹能這麼好使喚的。不過話說回來,極客邦的活動和產品確實是高品位、高品質的。所以推薦起來,也算是良心推薦了。技術人的未來沒準就在這裡。


長按二維碼關注InfoQ,中國最專業,最用心的IT技術資訊公眾號。行業內的技術大牛基本都在訂閱。

如果你不是技術出身,並不從事技術領域的工作,可以轉給你身邊的程式設計師,技術宅男,表示你很理解他們。等他們統治世界的時候,你會堅定的站在他們身邊。


長按二維碼關注stuq,更偏向於實戰,技術培訓,技術交流的社區公眾號。從菜鳥到大牛,很可能就從關注這個公眾號開始。

相關焦點

  • 「如何快速學習一門語言」總結和分享
    從中我發現,不單單是我這種老兵,即時從大二的實習生,到剛畢業的學生,到畢業2年的,到畢業4年的,到畢業6年的等等小夥伴,無一不是在實踐著快速學習golang,然後起早貪黑的幫我寫業務代碼,用go。而我想給予go語言(雖然與其他語言比起來,這是一門最好學的語言),講一講如何快速的學習一門語言。
  • 從生物學的角度來討論語言,大腦是如何學習一門語言的?
    我們來談談語言和大腦。根據你對大腦的看法,我判斷我們今天要從生物學的角度來討論語言嗎?確切地說,這實際上是腦科學和心理學背景下的預測問題。如果我們再談一點,我覺得那是認知神經科學。我將更加關注認知神經科學。今天,讓我們從語言開始。
  • 如何掌握英語的語言邏輯?關於學習一門語言的個人看法!
    要想弄明白語言和邏輯之間的關係首先要明確語言和邏輯的的意思。語言人類交流的工具,邏輯,思維的規律。
  • 每日英語(學習一門語言就像談了一場戀愛)
    譯:學習一門新的語言就好比是開始一段新的戀愛。一部分會很快建立關係,而另一部分則像那些數學公式又或是歷史日期,一考完便忘得一乾二淨。而還有一些時候,不知是偶然還是命中注定,一些語言會讓你陷入愛的泥沼。那如何學習一門外語呢?
  • 學習一門語言,自信滿滿
    我其實並不很反感小孩去英語培訓班學習英語,如果孩子感興趣的話。其實學習一門語言,也許有一天孩子從這個技能獲得自信,未必不是一件好事。正如一個人愛漂亮一樣,能給她帶來滿滿的自信,讓她每天充滿了正能量去面對每天繁瑣雜事何嘗不好?人生從小到大,也是不斷積累的過程,積累多了,所聽到的,所學到的,所做到的等等也就成為了人生的閱歷。
  • 如何掌握程序語言
    所以程式設計師的苦惱就在於總是需要學習各種稀奇古怪的語言,而且必須緊跟「潮流」,否則就怕被時代所淘汰。  作為一個程序語言的研究者,我深深的知道這種心理產生的根源。程序語言裡面其實有著非常簡單,永恆不變的原理。看到了它們,就可以在很短的時間之內就能學會並且開始使用任何新的語言,而不是花費很多功夫去學習一個又一個的語言。
  • 如何選擇一種程式語言來學習
    停止學習的人都老了,不管是二十歲還是八十歲。人們在學習編程時犯的第一個錯誤是過於擔心選擇的語言是否正確。現在你可能已經意識到有很多程式語言。事實上,每次你重新看一個語言你都會發現很多新事物。你應該試著學習大家都在談論的新語言嗎?明年還會談論嗎?JavaScript到底是怎麼回事?當你一拍後腦勺然後打算跟風的時候,你需要看到以下兩個殘酷的現實。選擇一門語言需要知識。
  • 想學習一門新的語言的最佳時機是什麼時候?
    那麼,想開始學習一門新的語言的最佳時機是什麼時候? 「現在。」4沒有任何時候比現在更容易學習新的語言想像以前如果要學習一門新的語言,通常我們要到教室去上課,而且要剛好能遇到一個很好的語言老師,如果你因故無法準時出席,可能還需要請人幫忙拿錄音機錄下來回家聽。
  • 程序設計語言的發展及意義
    程序設計語言的概念既然程序設計語言如此重要,那麼首先的問題是,什麼是程序設計語言?程序設計語言是用於書寫電腦程式的語言,顧名思義,就是與電腦程式「對話」的一門語言。用以表達程序中數據的傳輸。這四種成分組成了它,淺顯來說,它就是一門與眾不同的語言,一門關係的我們發展的語言,一門能與計算機對話、下達指令的語言。
  • 如何掌握「所有」的程序語言?
    大家好,我是 zeroing ~分享一篇文章 《如何掌握所有的程序語言》,最近在在技術自媒體圈比較火,可能小夥伴們砍了標題,會覺得有些浮誇,但文章內容對學習語言確實很具有指導意義,可為我們提供另外一種學習角度
  • 學習一門語言最先學的就是髒話,如何不動粗用韓語懟人?
    如何不動粗用韓語懟人? 大家經常都能夠在韓劇聽到韓語的髒話,韓語裡的髒話有很直白的,就是電視裡常見的以「 」為主的罵人的話,但是這種直白的髒話如果直接說還是很不好聽的,那麼如何不動粗用韓語懟人? 不知羞恥類: 1. —臉皮厚 .
  • 如何掌握所有的程序語言
    對的,我這裡要講的不是如何掌握一種程序語言,而是所有的……很多編程初學者至今還在給我寫信請教,問我該學習什麼程序語言,怎麼學習。
  • 如何掌握所有的程序語言?
    文章有點長,耐心看下來,相信還是有收穫的,下面👇是正文:對的,我這裡要講的不是如何掌握一種程序語言,而是所有的……很多編程初學者至今還在給我寫信請教,問我該學習什麼程序語言,怎麼學習。由於我知道如何掌握「所有」的程序語言,總是感覺這種該學「一種」什麼語言的問題比較低級,所以一直沒來得及回復他們 。可是逐漸的,我發現原來不只是小白們有這個問題,就連美國大公司的很多資深工程師,其實也沒搞明白。
  • C語言程序設計入門學習六步曲
    例如,如果你不知道長方形的面積公式,即使C語言學得再好你也編不出求長方形的面積的程序來。三、C語言程序設計是一門實踐性很強的課程,「紙上談兵」式的光學不練是學不好C語言的。例如,大家都看過精彩自行車雜技表演,假如,你從來沒有騎過自行車,光聽教練講解相關的知識、規則、技巧,不要說上臺表演、就是上路你恐怕都不行。出現問題原因清楚了,那麼如何學習呢?
  • 如何用APP學習語言
    它們幾乎能在生活的各個方面幫助到你,無論是保持健康,管理日程安排,與朋友交流,還是學習一門語言。但是就像是任何工具一樣,你需要知道如何正確地使用它,使之真正地幫助到你。以下是最佳APP使用方法的的用戶指南,由一位APP迷友情提供。科技很奇妙。把它放到像是埃隆·馬斯克(Elon Musk)這樣的人手中,它能夠送人們進入太空,將清潔可再生能源的憧憬變為現實,或是發明出電動汽車。
  • 如何學習程序設計
    如何學習程序設計一、選擇學習什麼程序設計語言選擇的依據很簡單。
  • C語言程序設計入門學習六步曲(菜鳥福利哦!)
    例如,如果你不知道長方形的面積公式,即使C語言學得再好你也編不出求長方形的面積的程序來。三、C語言程序設計是一門實踐性很強的課程,「紙上談兵」式的光學不練是學不好C語言的。例如,大家都看過精彩自行車雜技表演,假如,你從來沒有騎過自行車,光聽教練講解相關的知識、規則、技巧,不要說上臺表演、就是上路你恐怕都不行。出現問題原因清楚了,那麼如何學習呢?
  • 3A英語小課堂:如何通過唱歌掌握一門語言?
    本文共1690字 | 閱讀時間約4分鐘學一門外語很難,作為一個土生土長的加拿大人,我曾經上過5年的法語課,但現在基本都還給老師了。現在我能記得的都是當時學習歌曲時的詞彙。更令我驚訝的是,即便是現在,時不時都會有一首法語歌跳進我的腦海。
  • 語言是文化的表徵,多學一門語言有啥好處
    據不完全統計,全世界有5651語言,有1400多種語言被少數人掌握,這些語言正在走向消亡,語言不僅僅是交流的傳統工具,語言更是文化的表徵,沒有語言,就沒有文化的傳遞,語言是人類保存文明的工具。陳寅恪先生說過,現代人必須要掌握兩門語言以上,他的一生更是掌握了20多種語言,看近代科學家,搞歷史,文化,幾乎都掌握了兩門外語以上。
  • 為什麼要學語言?怎樣學好一門語言?適合轉發學語言的朋友
    -今天我想結合科學理論和自身經驗和大家分享一下學習語言的好處以及如何有效地學習一門語言。先來客觀看一下語言是怎樣影響我們看到的世界的。有研究表明語言可以影響我們對顏色,性別,空間與時間的認知,從而影響我們對所感世界的詮釋。