學習的藝術——如何學好一門技術、語言

還在繼續開發Growth(Github: https://github.com/phodal/growth)的路上,不少功能彷佛已經趨於完善,有些功能也讓我百玩不厭——如最近添加的規則引擎。接着我開始陸陸續續地添加了這麼多功能。直接今天我想我須要一篇文章放在最前面來告訴用戶,你須要怎樣去學習?所以,也就有了此文。前端

我不是一個學霸,大學掛了六科。也沒有受過很是好的教育,上大的大學是二本倒數的。好在計算機學得比較早,也能夠混點自學能力,也算混得還行。一直想着作一些有意義的事,而且能夠得到更多的用戶反饋。想法一直有的,直到有一天在整理資料的時候纔想起來能夠整理出一個APP。git

儘管以前已經有技能樹、成長書單和Web Developer 成長路線圖的經驗,說到底這也是很大的挑戰。github

一次語言學習體驗

在咱們開始學習一門語言或者技術的時候,咱們可能會從一門hello,world開始。編程

好了,如今我是Scala語言的初學者,接着我用搜索引擎去搜索『Scala』來看看『Scala』是什麼鬼:後端

Scala 是一門類Java 的編程語言,它結合了面向對象編程和函數式編程。bash

接着又開始看『Scala 'hello,world'』,而後找到了這樣的一個示例:閉包

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello, world!")
  }
}

GET到了5%的知識。架構

看上去這門語言相比於Java語言來講還行。而後我找到了一本名爲『Scala 指南』的電子書,有這樣的一本目錄:框架

  • 表達式和值前後端分離

  • 函數是一等公民

  • 借貸模式

  • 按名稱傳遞參數

  • 定義類

  • 鴨子類型

  • 柯里化

  • 範型

  • Traits

  • ...

看上去還行, 又GET到了5%的知識點。接着,依照上面的代碼和搭建指南在本身的電腦上安裝了Scala的環境:

brew install scala

Windows用戶能夠用:

choco install scala

而後開始寫一個又一個的Demo,感受本身GET到了不少特別的知識點。

到了次日忘了!

Bro Wrong

接着,你又從新把昨天的知識過了一遍,仍是沒有多大的做用。忽然間,你聽到別人在討論什麼是這個世界上最好的語言——你開始加入討論了。

因而,你說出了Scala這門語言能夠:

  • 支持高階函數。lambda,閉包...

  • 支持偏函數。 match..

  • mixin,依賴注入..

  • 等等

雖然隔壁的Python小哥贏得了此次辯論,然而你發現你又回想起了Scala的不少特性。

最流行的語言

你發現隔壁的Python小哥之因此贏得了這場辯論是由於他把Python語言用到了各個地方——機器學習、人工智能、硬件、Web開發、移動應用等。而,你尚未用Scala寫過一個真正的應用。

讓我想一想我來能作什麼?我有一個博客。對,我有一個博客,我能夠用Scala把個人博客重寫一遍:

  1. 先找一Scala的Web框架,Play看上去很不錯,就這個了。這是一個MVC框架,原來用的Express也是一個MVC框架。Router寫這裏,Controller相似這個,就是這樣的。

  2. 既然已經有PyJS,也會有Scala-js,前端就用這個了。

好了,博客重寫了一遍了。

感受還挺不錯的,我決定向隔壁的Java小弟推銷這門語言,以解救他於火海之中。

『讓我想一想我有什麼殺手鐗?』

『這裏的知識好像還缺了一點,這個是什麼?』

好了,你已經GET到了90%了。以下圖所示:

Learn

但願你能從這張圖上GET到不少點。

輸出是最好的輸入

上面那張圖『學習金字塔』就是在說明——輸出是最好的輸入。

若是你不試着去寫點博客、整理資料、準備分享,那麼你可能並無意識到你缺乏了多少東西。雖然你已經有了不少的實踐,然並卵。

由於你一直在完成功能、完成工做,你總會有意、無心地漏掉一些知識,而你也沒有意識到這些知識的重要性。

Output is Input

從我有限的(500+)博客寫做經驗裏,我發現多數時候我須要更多地的參考資料才能更好也向人們展現這個過程。爲了輸出咱們須要更多的輸入,進而加速這個過程。

而若是是寫書的時候則是一個更高水平的學習,你須要發現別人在他們的書中欠缺的一些知識點。而且你還要展現一些在別的書中沒有,而這本書會展示這個點的知識,這意味着你須要挖掘得更深。

因此,若是下次有人問你若是學一門新語言、技術,那麼答案就是寫一本書。

如何應用一門新的技術

對於多數人來講,寫書不是一件容易的事,而應用新的技術則是一件迫在眉睫的事。

一般來講,技術出自於對現有的技術的改進。這就意味着,在掌握現有技術的狀況下,咱們只須要作一些小小的改動就更能夠實現技術升級。

而學習一門新的技術的最好實踐就是用這門技術對現有的系統行重寫。

第一個系統(v1): Spring MVC + Bootstrap + jQuery

那麼在那個合適的年代裏, 咱們須要單頁面應用,就使用了Backbone。而後,咱們就能夠用Mustache + HTML來替換掉JSP。

第二個系統(v2): Spring MVC + Backbone + Mustache

在這時咱們已經實現了先後端分離了,這時候系統實現上變成了這樣。

第二個系統(v2.2): RESTful Services + Backbone + Mustache

或者

第二個系統(v2.2): RESTful Services + Angular.js 1.x

Spring只是一個RESTful服務,咱們還須要一些問題,好比DOM的渲染速度太慢了。

第三個系統(v3): RESTful Services + React

系統就是這樣一步步演進過來的。

儘管在最後系統的架構已經不是當初的架構,而系統自己的業務邏輯變化並無發生太大的變化。

特別是對於如博客這一類的系統來講,他的一些技術實現已經趨於穩定,並且是你常用的東西。因此,下次試試用新的技術的時候,能夠先從對你的博客的重寫開始。

相關文章
相關標籤/搜索