如何快速掌握一門技術
幾周前一個朋友也打算通過跑步來甩一甩脂肪,控制一下自己那已經嚴重扭曲了的身材 —— 他便求教我從衣服到鞋,從腕錶到心率帶,都買了什麼裝備,效能如何,他好照著原樣來一套。我告訴他我什麼裝備都沒買,跑了半年多了,我還是隨便套上件純棉的T恤,穿條舒服的運動短褲,蹬著跑鞋,抓著手機,就這麼跑將起來。他連連說不信,一個連排汗速乾的衣服,臂包,運動腕錶都沒配的人,怎麼也能(配得上)跑步?
這讓我想起了我在撰寫「程式人生」公眾號經常會遇到的一些讀者留言:
「我想學rails,有沒有推薦的ruby的入門書籍?」
「我想學android,對java掌握到什麼程度才能開始呢?」
「我c/c++還沒入門,能直接學python麼?」
這些問題都是初學者常常縈繞心頭的疑慮。在我們自己的現狀和想要達成的目標間,總是橫亙著一條名為「先決條件」的大河,似乎除了花費巨大的精力遊過這條大河外,別無他法。很不幸,大部分人還沒能夠接近目標,便被湍急的水流沖走了。然而,還是有少部分人似乎坐上了阿拉丁的魔毯,毫無遲滯地直達彼岸,好像學什麼技術都不那麼費勁。這是怎麼回事?
學一門新的語言,或者新的技術,與其說是一種能力,不如說是一種方法。試問什麼樣的人,或者說人在生命的什麼階段,學習效率最高?效果最好?答案顯而易見:嬰兒期。我的不到兩歲的女兒估計現在也就掌握了幾十個名詞,十多個動詞,三五個形容詞和介詞而已,但每天從她口中蹦出來的話不下幾百句。想想我們自己學了多少年英語,才能從口中完整地說出:"hello everybody, so glad to see you",初中?高中?抑或大學?想想我們單詞量三千的時候能做什麼程度的溝通,交流?
如果你仔細觀察,你會發現,嬰兒的學習方法極盡實用之能。模仿,試錯,練習,不管一切所謂「權威」的語法,詞法,一切以用為主。還是以我女兒為例,她的表達是以短語和句子為主:
「爸爸抱抱小寶」- 求安慰
「小寶要喝奶奶」- 餓了
「要是小寶不聽話呢」- 學會了反問之後你跟她說話她時不時就將你一軍
「媽媽媽媽快回家,讓我親親你吧」- 跟唱歌機學的,賣萌
「goodbye so long farewell my friend」- 跟音樂課學的,賣萌
說出的大部分的句子,她並不知道每個詞的具體含義,但她知道這個句子的模糊的意思,而且從大人的反應中,她能知道她理解的意思是否正確,就這樣,一次又一次模仿,試錯,獲得反饋,不斷地累積自己直接能用的「知識」。
這是實用主義者的學習方法:繞過障礙,直奔主題,專注那些你馬上需要學的。幾年前,我在開始學某樣東西前,會上網蒐羅幾乎所有能找到的從入門到進階再到專家的書籍,在看了一大堆各式各樣的評論後,心滿意足地篩選出所謂的「精品」購買回家,然後把他們壘在書桌前,彷彿這是學習之前必要的儀式。但這樣的做法僅僅是成就了豆瓣和亞馬遜,堆積的圖書往往在我豪氣萬丈地看到第一本的第X章(X<=5)後便被束之高閣。後來我發現,我被所謂的「學習要先系統地打下紮實的基本功」坑了 —— 我不斷地陷入「基礎知識」的泥沼,越陷越深,越學越苦,只能苦苦掙扎。這掙扎的結果,80%的情況變成了放棄。
其實我大可不必去擔心這些「基礎知識」,把它們先放在一邊,用到多少,便學多少。比如說,我要學rails,那就直接從rails開始,遇到有關ruby的語法障礙,回過頭來看看ruby文件中相關的內容,掃清障礙立刻回到rails本身,而不是先從ruby啃起。要知道,rails裡用到的ruby特性,可能佔ruby總體語言和類庫特性的20%都不到!從ruby學起,便是走了岔路。
軟體開發是個手藝活,它的學習不是各種可能很少用到的知識一股腦的堆積,我們沒法在一切理論知識準備就緒以後再開始學習。scala的作者批評java的低效時曾經說過,java把寫程式變成了做儀式,因此毫無樂趣可言。那麼,當我們在桌前堆滿了從入門到專家的各種書籍,是不是也把學習變成了一場盛大莊重的儀式?重要的不是堆砌了多少知識,而是學以致用。
僅僅專注並直奔主題還遠遠不夠。學習過程中你需要大量練習和獲得反饋。 嬰兒並沒有在累計了3000個詞彙之後才開口說話,而是當身體和大腦準備好後的第一天就張口說話了,並且,儘管說得錯誤百出,他們依然越挫越勇,屢敗屢戰。同樣的道理,當你學習python而不使用ipython在REPL環境下嘗試各種使用技巧,當你學習django而沒有從搭建一個可執行的web專案開始,那學習效率肯定不高,效果也必然馬馬虎虎。在健身房裡,就算觀摩教練的動作一百遍而不是自己親自嘗試,並接受對方的糾正建議,你還是無法掌握正確的動作要領。我見過有人把書中的例子一個個敲到編輯器中,全部執行正確,然後就心滿意足地認為自己「掌握」這門技術了。殊不知,這種「練習」並非有價值的練習。我們需要試錯,就像嬰兒學步那樣,模仿,邁步,摔倒,爬起來,再邁步。犯錯是學習的一部分,當你看完教程掌握了裡面所述的內容後,可以自己構思某個應用或者某個使用場景,然後從頭寫起。你會發現很多問題,也會加深對教程的理解。自己無法回答的問題,可以尋求社群的幫助,大部分和開發有關的問題都能在stackoverflow上得到解決。這樣不斷地練習和獲取反饋,你的開發功底會很快提升。很多非系統的知識和能力(甚至洞見)就是這樣通過不斷練習和試錯在下意識間學到的 —— 它們來得如此悄無聲息,以至於除你之外,別人都將其視為你的一種天賦。
那麼,什麼時候需要系統地學習呢?當你有了實戰所需的技術和經驗,需要巨集觀上對自己所學的內容做一個昇華時,或者當你的實戰能力遭遇到了瓶頸的時候。有句話說得好:你不需要成為一個優秀的ruby工程師才能用好rails,但如果你想成為一個優秀的rails工程師,則你必須很好地掌握ruby。遺憾地是,很多初學者的問題是:想對一門技術快速入門,卻使用了系統學習的方法,還未入門,便倒在了艱苦修行的路上。
相關文章
- 如何快速掌握一門技術?
- 陳天:如何快速掌握一門技術?
- 如何快速掌握一門新技術/語言/框架...框架
- 如何快速掌握一門新技術/語言/框架框架
- 怎樣才能快速掌握ps技術
- 怎樣快速學會一門技術
- 怎樣快速學習一門新技術
- 如何快速掌握Javascript入門小知識JavaScript
- 如何快速掌握一個ui框架UI框架
- 入門web前端需要掌握的技術Web前端
- 如何快速的學習一項技術?
- 如何掌握C#的核心技術C#
- 作為一名安卓開發人員,怎麼快速掌握熱門技術?!Jetpack Compose+鴻蒙入門指南安卓Jetpack鴻蒙
- 如何高效的學習掌握新技術
- 如何快速應用機器學習技術?機器學習
- 不再碎片化學習,快速掌握 H5 直播技術H5
- SAP諮詢顧問如何掌握核心技術?
- 如何快速入門一門語言
- 如何快速提升你的技術能力
- 掌握6條技能快速Java入門Java
- 不重視技術,何談掌握核心技術?
- 如何入門掌握Nginx?Nginx
- 如何從 0 開始學一門新技術框架框架
- 學會這幾招,你就能快速掌握Android開發技術!Android
- web專案技術必備-------jQuery快速入門WebjQuery
- Spring Boot系列之一:如何快速熟悉Spring技術棧Spring Boot
- 我是如何學習一門程式設計技術的?程式設計
- 掌握 Linux 除錯技術Linux除錯
- 前端如何快速進階,突破技術瓶頸?前端
- 機器學習入門 - 快速掌握邏輯迴歸模型機器學習邏輯迴歸模型
- 一文快速掌握 Git 用法Git
- Java技術分享:小白如何入門Mybatis?JavaMyBatis
- 一週熱門IT技術大會
- 怎樣新學一門技術
- Hadoop v3.1 大資料技術快速入門Hadoop大資料
- 做SEO技術如何快速實現月賺十萬?
- 全方位掌握OpenStack技術知識
- 嵌入式需要掌握哪些技術?