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

原文做者:Dan Abramov前端

譯者:UC 國際研發 Jothynode

寫在最前:歡迎你來到「UC國際技術」公衆號,咱們將爲你們提供與客戶端、服務端、算法、測試、數據、前端等相關的高質量技術文章,不限於原創與翻譯。react

編者按:今天這篇文章是 React 團隊成員、Redux 做者 Dan Abramov 新編寫的一篇文章,這篇文章很是不錯。在 2019 到來之際,謹以此文祝你們元旦快樂!算法

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

在這篇文章中,我將列出一份你們常常誤覺得我很瞭解的編程主題列表。 並非說你沒必要學習它們 - 或者我不瞭解其餘有用的東西。 但因爲我如今的立場並不弱,因此我能夠說實話。數據庫

如下是我認爲這很重要的緣由。編程


首先,有個不現實的指望認爲,經驗豐富的工程師就該瞭解所在領域的每一項技術。你應該見過囊括了 100 個庫和工具的「學習路線圖」吧?它頗有用 - 但使人望而卻步。canvas

更有甚者,不管你經驗多豐富,你的情緒仍是可能會在感受良好、信心不足(「冒名頂替綜合症(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國際技術」致力於與你共享高質量的技術文章

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

相關文章
相關標籤/搜索