最近開了一個讀者回饋表單,無論是對文章的感想或是對部落格的感想,有什麼想回饋的都可以填表單跟我說:表單連結

從 Redux 作者 Dan Abramov 的文章談前端學習路線圖

前言

前幾天看見 Redux 作者 Dan Abramov 寫的這篇:Things I Don’t Know as of 2018,看了之後其實滿有感觸的,前些日子也在思考這種跟自信相關的事情,也做了個簡單的總結,寫下了兩年過後,我能夠被稱為資深工程師了嗎?

無獨有偶地,這幾天也看到一些 2019 年更新版的學習路線圖,下面依舊有些留言在說「怎麼前端要學那麼多東西」、「怎麼學的完」、「前端好難啊」等等之類的,雖然這兩件事看似沒有關連,但我覺得其實是相關的。

大神沒有你想像中厲害

常常會看到許多有名的開發者被稱之為大神,既然會被稱作是大神一定有其原因,可能是每年都會在 conference 上面演講、在社群耕耘許久且貢獻良多、寫過一本很厲害的書等等,在這些方面他們的確很厲害,但大神只是個稱號,終究還是個人,他們在那些擅長的領域很厲害沒有錯,可是不用把他們想成什麼都會。

以下節錄自開頭貼的那篇 Dan Abramov 寫的文章:

People often assume that I know far more than I actually do.
大家常以為我會的東西很多,但其實沒那麼多

In this post I’ll offer an incomplete list of programming topics that people often wrongly assume that I know. I’m not saying you don’t need to learn them — or that I don’t know other useful things.
這篇文章會列出一些大家以為我會但其實我不會的東西,但我不是說這些東西不需要學,也不是說我不知道其他有用的東西

First, there is often an unrealistic expectation that an experienced engineer knows every technology in their field. Have you seen a “learning roadmap” that consists of a hundred libraries and tools? It’s useful — but intimidating.
首先,大家對大神們總有一些不切實際的幻想,認為他們在各自的領域中什麼都會。你有看過那些列出一大堆工具跟函式庫的學習路線圖嗎?那很有用沒錯,但也很嚇人

(這邊的翻譯只求意思有到,可能會跟原文有些許偏差)

引太多段就沒意思了,建議大家還是先去看完那篇文章,或是看完我這篇再去也可以,總之一定要去看原文。

如果你不知道 Dan Abramov 是誰,這邊簡單介紹一下,他是 Redux 的作者,後來跑去 Facebook 工作,目前是 React 團隊的成員之一,在他的部落格上會發表一些跟 React 相關的小知識或是其他文章,又強又會寫又熱愛分享,是我個人的 role model。

在上面引用的段落中,他想表達的就是大家都以為一個厲害的開發者什麼都會,他就常被大家以為他會的東西超級多,但其實根本沒有到這麼多,接下來他就列了一大堆自己不會的東西:

  1. 完全不會用 docker
  2. 對網路的理解知道有 IP 位置、DNS 以及有個通訊協定叫做 TCP/IP,就這樣了
  3. 不知道 Flexbox 跟 Grid
  4. 從來沒學過 SCSS/Sass
  5. 從沒設定過 HTTPS / SSL,只知道跟公鑰與私鑰有關

他舉了二十幾個他不會的東西,有些其實跟後端比較有關,所以我挑幾個跟前端比較有關的(除了 docker)出來而已。

舉了這些他不會或是不熟悉的技能,他希望大家看完文章後能理解的事情是:

Even your favorite developers may not know many things that you know.
儘管是你很崇拜的開發者,知道的可能還沒有你多(這邊原文 favorite 應該比較像喜愛?但我直覺翻崇拜比較貼近)

Regardless of your knowledge level, your confidence can vary greatly.
(這句不知道怎麼翻比較好)

Experienced developers have valuable expertise despite knowledge gaps.
有經驗的開發者儘管還是有很多不懂的,但至少他在某些領域上是專家

文末提到儘管他講了這麼多,也不會貶低自己的價值或是經驗,因為有其他東西是他擅長的,所以他下一篇就寫自己擅長的東西:The Elements of UI Engineering

這給我的啟示是什麼?

老實說一開始看到那篇文章我有點嚇到,想說:「哇,原來我會的居然比 Dan 多,至少我用過 docker、我會用 SCSS,我也知道 TCP 的三次握手」,但仔細想想之後發現這句話只對了一半。

對,在 Dan 提出的這些「不擅長」的領域中,我的確懂的比他多,可是這沒辦法推出:「我懂的比他多」,因為在那些他擅長的領域裡面,他有的知識一定屌打我。

例如說對 React 的理解、對開源專案的理解、對 Redux 的理解以及對種種 UI 常見問題的理解,這些絕對都遠遠超過我。

所以結論就是:有什麼好比的呢?

除了一個人在幾乎所有的領域都比另外一個人厲害以外,似乎也很難說誰懂的比較多。儘管我們把範圍侷限在前端,前端還是包山包海包郵包了一大堆東西,為什麼一定要分出個高下?

就像我在兩年過後,我能夠被稱為資深工程師了嗎?裡面寫到的,我知道我會很多,但我也知道我不會的很多,每個人都是這樣的。事實上公司也很難找到一個「什麼都會」的人,所以找某個領域的專家比較實在。

你如果讓 Dan 去做那種需要一堆華麗動畫跟特效的網站,還要加上複雜的排版,他可能會做得很差;可是你今天把他放到他擅長的 UI Engineering 的職位,他就能夠做得很出色。

不需要因為自己懂的不多而沒有自信,相反地,你要為了你懂的那些部份而變得有自信。

這跟學習路線圖有什麼關係?

現在請你打開 Google Map,定位到自己家附近,然後把方圓三公里之內的範圍都仔細看一遍。

好,裡面每一個點、每一間店你都知道、都有印象嗎?

沒有?沒關係這很正常,因為這是他媽的地圖啊!

什麼是地圖?地圖就是把所有東西都標示的清清楚楚的,你越 zoom in 之後東西就越詳細,除了在特定時間才會開啟的時空之門以外,其他細節都在地圖上找得到。

可是就算不知道所有的細節,有問題嗎?沒有問題,我還是知道附近哪間店好吃、該到哪裡去買菜、走這條巷子會比外面大馬路快,對周遭的環境我還是瞭若指掌,只是沒有到 100% 的了解而已。

學習路線圖也是差不多的,上面列了一大堆的知識點、一大堆的專有名詞,我自己也是每次看到都頭昏眼花。但就像我上面所說的,它之所以是路線圖就是因為夠完整、夠詳細,幾乎把所有細節都列出來了,才有資格成為路線圖。

事實上你也可以把其他學科列出這種 roadmap,像是數學,從加減乘除、平方小數、根號對數、二元一次方程式再到微積分,最後再到一些我也不知道是什麼的東西。

路線圖最大的功用在哪?在於讓你有個明確的方向以及概念,讓你知道整個前端的領域大概是長這樣,有這些東西可以學;既然是要給這種大方向的東西,那路線圖當然大的不可思議,把能想到的全部都列出來了。

可是你沒必要每一個都會。

如果只是想踏入這個領域,你把 HTML、CSS 跟 JavaScript 搞好其實就行了,頂多再外加個三大框架之一,剩下的那些都可以暫時忽略,等以後再慢慢補起來。

儘管你已經是開發者了想要繼續加強自己的技術,也沒必要把學習路線圖上面的所有東西學起來。前端學不完沒錯,但不只前端學不完,後端也學不完,寫 Android 跟寫 iOS 的也學不完,這本來就是一件很正常的事情,學得完才比較奇怪,就代表這項技術已經停滯不再發展了,不然怎麼可能學完?

以後看到那些學習路線圖,你要想的不該是:「唉,前端學不完」,就算沒有路線圖你也學不完,你應該要做的是先看看路線圖,知道有哪些東西可以學,再去學你有興趣的那些技術。

看路線圖不是看六法全書,要你研究每個法條甚至背起來,而是跟看地圖一樣,讓你對地理位置有概念,並且幫助你決定要往哪裡走。

結論

學習應該是一件開心的事,我相信 Dan 在解決那些 UI 問題時都很開心,就像我寫每篇技術文章的時候無論花了多少時間、查了多少資料也還是覺得開心。

沒什麼,就因為我熱愛。

最後幫大家做個簡單的條列式總結:

  1. 所有領域本來就都學不完,這很正常
  2. 挑自己有興趣的部分學,然後成為專家
  3. 不要因為自己不會的部份而失去自信,而是要為了自己會的部分產生自信
邪魔歪道還是苦口良藥?Functional CSS 經驗分享 兩年過後,我能夠被稱為資深工程師了嗎?

評論