你說你學不動啦,看 Redux 作者怎麼說?

Jothy發表於2019-01-01

原文作者:Dan Abramov

譯者:UC 國際研發 Jothy

寫在最前:歡迎你來到“UC國際技術”公眾號,我們將為大家提供與客戶端、服務端、演算法、測試、資料、前端等相關的高質量技術文章,不限於原創與翻譯。

編者按:今天這篇文章是 React 團隊成員、Redux 作者 Dan Abramov 新編寫的一篇文章,這篇文章非常不錯。在 2019 到來之際,謹以此文祝大家元旦快樂!

大家總以為我懂得許多東西,而實際情況並不是這樣的。我不是在抱怨什麼,這也不是什麼壞事。 (儘管少數派有來之不易的證據,但他們總是受到偏見,這就比較噁心了。)

在這篇文章中,我將列出一份大家經常誤以為我很瞭解的程式設計主題列表。 並不是說你不必學習它們 – 或者我不瞭解其他有用的東西。 但由於我現在的立場並不弱,所以我可以說實話。

以下是我認為這很重要的原因。


首先,有個不現實的期望認為,經驗豐富的工程師就該瞭解所在領域的每一項技術。你應該見過囊括了 100 個庫和工具的“學習路線圖”吧?它很有用 – 但令人望而卻步。

更有甚者,無論你經驗多豐富,你的情緒還是可能會在感覺良好、信心不足(“冒名頂替綜合症(Impostor syndrome)”)和過度自信(“Dunning-Kruger 效應”)之間切換。這取決於你所處的環境,工作,個性,隊友,精神狀態,在上面時間等等因素。

老練的開發者有時會公開表示他們的不安全感,以鼓勵初學者。但其實二者有天壤之別,就像一個經驗豐富但仍會緊張的外科醫生,和一個第一次拿手術刀的學生!

聽見別人說“我們都是初級開發者”挺喪的,就像是對著與你有知識差距的學習者空談。像我這樣善意的從業者並不能用多好的口述解決這個問題。

儘管如此,即使是經驗豐富的工程師也存在許多知識缺口。這篇文章寫了我的知識缺口,我鼓勵那些能夠承受類似漏洞的人分享他們的。但分享的時候,記住不要低估我們的價值。

我們可以大方承認我們的知識缺口,但也要記得我們仍然擁有寶貴的專業知識,需要多年努力積累。


先說好免責宣告,以下是我不知道的一些東西:

  • Unix 命令 和Bash。我記得 ls 和 cd,但其他命令我也得查了才會用。我理解管道(pipe)的概念,但我只在簡單的場景下使用它。我不知道如何使用xargs 建立複雜的鏈(chain),如何組合並重定向不同的輸出流。我也從來沒有系統地學習過 Bash,所以我只能編寫非常簡單(通常是錯誤的)shell 指令碼。
  • 低階語言。我知道 Assembly 能將內容儲存在記憶體中並跳轉執行程式碼,但我瞭解的僅此而已。我寫過幾行 C,明白指標是什麼,但我不知道如何使用 malloc 或其他手動記憶體管理技術。從來沒玩過 Rust。
  • 網路堆疊。我知道計算機有 IP 地址,DNS 是我們解析主機名的方式。我知道有像 TCP/IP 這樣的低階協議來交換資料包(可能?)以確保完整性。我就知道這麼多 – 並且對細節認識比較模糊。
  • 容器。我不知道如何使用 Docker 或 Kubernetes。 (它們有關係嗎?)我對它們一個模糊的認知,知道它們能讓我以可預測的方式啟動一個單獨的 VM。聽起來很酷,但我還沒試過。
  • Serverless。聽起來也很酷,但沒試過。我不是很明白該模型如何改變了後端程式設計(也許它並沒有)。
  • 微服務。如果我理解沒錯的話,它只是意味著“許多 API endpoint 相互通訊”。我不知道這種方法的實際優缺點是什麼,因為我沒用過。
  • Python。我不是很喜歡它- 我已經用 Python 工作了好多年,而且我從來沒有費心力去學它。它的匯入行為等很多東西對我來說是完全的黑盒。
  • Node 後端。我知道如何執行 Node,使用像 fs 這樣的 API 來構建工具,並且能使用 Express。但我從來沒有用 Node 連線過資料庫,也不知道如何用它編寫後端。我也不熟悉像 Next 這樣能實現“hello world”的 React 框架。
  • Native平臺。我曾嘗試學過 Objective C 但是沒有成功。我也沒有學過 Swift,Java 也是如此。(雖然我可以學習Java,因為我會C#,但是我並沒有學Java。)
  • 演算法。我會的最多就只有氣泡排序以及快排了。如果它們與特定的實際問題聯絡在一起,我能進行簡單的圖形遍歷。我理解 O(n) 符號,但我的理解並不比“不要在迴圈中巢狀迴圈”深刻多少。
  • 函式式語言。除非算上 JavaScript,否則我不會流暢的使用任何傳統函式式語言。 (我只精通 C# 和 JavaScript – C# 的知識我差不多都忘了)。閱讀 LISP 風格(如 Clojure),Haskell 風格(如 Elm)或 ML 風格(如 OCaml)的程式碼也讓我覺得吃力。
  • 函式術語。就我而言,Map 和 reduce 是最重要的。我不瞭解 monoids,functors 等。我知道 monad 是什麼(但也許是我的幻覺吧?)。
  • 現代 CSS。我不瞭解 Flexbox 或 Grid。Floats 才是我的菜。
  • CSS 方法論。我用過 BEM(意思是 CSS 部分,而不是原始的 BEM),但我就知道這麼多了。我沒有嘗試過 OOCSS 或其他方法。
  • SCSS/Sass。從來沒有學過。
  • CORS。我超怕這些錯誤!我知道得設定一些首部欄位(header)來修復它們,但過去我浪費了幾個小時做這事情。
  • HTTPS/SSL。從未設定過。不知道它如何使用私鑰和公鑰工作。
  • GraphQL。我會使用 query,但我真的不知道如何使用 node 和 edge 等表達,何時使用 fragment,以及分頁的原理。
  • Sockets。我的心智模型是他們實現了計算機在請求/響應模型(request/response model)之外互聯,但我就知道這麼多。
  • Streams。除了 Rx Observables 之外,我還沒有密切關注過 stream。我使用一兩次舊的 node 流,但總是搞亂錯誤處理。
  • Electron。沒試過。
  • TypeScript。我理解型別的概念,可以閱讀註釋,但從來沒有寫過它。我試過幾次,遇到了困難。
  • 部署和開發。我可以通過 FTP 傳送檔案或殺死程式,但我的 devops 技能僅限於此。
  • 圖形。無論是 canvas,SVG,WebGL 還是低階圖形,我都沒有高效使用過。我瞭解整體想法,但需要學習原語。

當然,這份清單並非詳盡無遺。 我還有很多事情都不知道。


討論可能看起來很奇怪,甚至這篇文章都寫得有問題。 我吹噓自己的無知嗎?我的意圖是:

  • 即使是你最喜歡的開發者也可能不知道很多你知道的東西。
  • 無論你的知識水平如何,不同時期你的信心都會有很大差異。
  • 儘管存在知識缺口,但經驗豐富的開發者術業有專攻。

我知道我的知識缺口(至少是一部分)。 如果我對某個技術感到好奇,或者專案需要用到,我之後可以學習它。

這不會使我的知識和經驗貶值。 我可以做很多事情。 例如,在需要的時候再去學它。

英文原文

好文推薦:

Why review code?


“UC國際技術”致力於與你共享高質量的技術文章

歡迎關注我們的公眾號、將文章分享給你的好友

你說你學不動啦,看 Redux 作者怎麼說?

來源:https://juejin.im/post/5c2b1aeae51d454671451a4c

相關文章