自2018年以来我不知道的事情-Dan Abramov
人們常常假設我知道的知識遠比實際知識道的多。我不抱怨這個錯誤的想法。(擁有些許成就的少數群體的人們往往遭受外人遐想的偏見,盡管成就來之不易,但這很糟糕。)
在這篇文章里,我將提供一個不完整的編程主題列表,人們經常錯誤地假設我知道這些知識。我不是說你不需要學習它們 (或者我不知道其他有用的東西。)但由于我現在技術圈自己并不處于弱勢地位,所以我可以坦誠的談論這個話題。
這是我為什么認為這個話題重要的原因。
首先,存在一個不切實際的期望既:經驗豐富的工程師通常會了解他們所在領域的每項技術。您有沒有曾經看過一個由100個庫和工具組成的“學習路線圖”?也許它很有用 -卻令人望而生畏。
更重要的是,無論你獲得多少經驗,很多時候你仍然到自己在,能力不足(“冒名頂替綜合癥”)和過度自信(“Dunning-Kruger效應”)之間切換。這取決于您的環境,工作,個性,隊友,精神狀態,在一天中的時間段等。
經驗豐富的開發人員有時會忽略他們的不安全感,以鼓勵初學者。但是,一個經驗豐富的外科醫生仍然會感到緊張,當他的學生拿著他們的第一把手術刀!
聽到“我們都是初級開發人員”也許會令人沮喪,像是在對有著實際知識差距的初學者空談。即便由我出于善意提起這個出發點,也不好合理化解釋。
盡管如此,即使是經驗豐富的工程師也存在知識差距許,不過這篇文章是關于我的,我鼓勵那些能夠承受類似漏洞的人分享他們自己的想法。但是,在我們分析自己的知識過程中,不要貶低我們的經驗。
我們可以承認我們的知識差距,可能會讓自己看起來像冒名頂了別人,這些差距需要多年努力學習獲得的專業知識。
有了這個免責聲明,這里是我不知道的事情:
Unix commands and Bash. I can ls and cd but I look up everything else. I get the concept of piping but I’ve only used it in simple cases. I don’t know how to use xargs to create complex chains, or how to compose and redirect different output streams. I also never properly learned Bash so I can only write very simple (and often buggy) shell scripts.
Low-level languages. I understand Assembly lets you store things in memory and jump around the code but that’s about it. I wrote a few lines of C and understand what a pointer is, but I don’t know how to use malloc or other manual memory management techniques. Never played with Rust.
Networking stack. I know computers have IP addresses, and DNS is how we resolve hostnames. I know there’s low level protocols like TCP/IP to exchange packets that (maybe?) ensure integrity. That’s it — I’m fuzzy on details.
Containers. I have no idea about how to use Docker or Kubernetes. (Are those related?) I have a vague idea that they let me spin up a separate VM in a predictable way. Sounds cool but I haven’t tried it.
Serverless. Also sounds cool. Never tried it. I don’t have a clear idea of how that model changes backend programming (if it does at all).
Microservices. If I understand correctly, this just means “many API endpoints talking to each other”. I don’t know what are the practical advantages or downsides of this approach because I haven’t worked with it.
Python. I feel bad about this one — I
haveworked with Python for several years at some point and I’ve never bothered to actually learn it. There are many things there like import behavior that are completely opaque to me.Node backends. I understand how to run Node, used some APIs like fs for build tooling, and can set up Express. But I’ve never talked from Node to a database and don’t really know how to write a backend in it. I’m also not familiar with React frameworks like Next beyond a “hello world”.
Native platforms. I tried learning Objective C at some point but it didn’t work out. I haven’t learned Swift either. Same about Java. (I could probably pick it up though since I worked with C#.)
Algorithms. The most you’ll get out of me is bubble sort and maybe quicksort on a good day. I can probably do simple graph traversing tasks if they’re tied to a particular practical problem. I understand the O(n) notation but my understanding isn’t much deeper than “don’t put loops inside loops”.
Functional languages. Unless you count JavaScript, I’m not fluent in any traditionally functional language. (I’m only fluent in C# and JavaScript — and I already forgot most of C#.) I struggle to read either LISP-inspired (like Clojure), Haskell-inspired (like Elm), or ML-inspired (like OCaml) code.
Functional terminology. Map and reduce is as far as I go. I don’t know monoids, functors, etc. I know what a monad is but maybe that’s an illusion.
Modern CSS. I don’t know Flexbox or Grid. Floats are my jam.
CSS Methodologies. I used BEM (meaning the CSS part, not the original BEM) but that’s all I know. I haven’t tried OOCSS or other methodologies.
SCSS / Sass. Never got to learn them.
CORS. I dread these errors! I know I need to set up some headers to fix them but I’ve wasted hours here in the past.
HTTPS / SSL. Never set it up. Don’t know how it works beyond the idea of private and public keys.
GraphQL. I can read a query but I don’t really know how to express stuff with nodes and edges, when to use fragments, and how pagination works there.
Sockets. My mental model is they let computers talk to each other outside the request/response model but that’s about all I know.
Streams. Aside from Rx Observables, I haven’t worked with streams closely. I used old Node streams one or two times but always messed up error handling.
Electron. Never tried it.
TypeScript. I understand the concept of types and can read annotations but I’ve never written it. The few times I tried, I ran into difficulties.
Deployment and devops. I can manage to send some files over FTP or kill some processes but that’s the limit of my devops skills.
Graphics. Whether it’s canvas, SVG, WebGL or low-level graphics, I’m not productive in it. I get the overall idea but I’d need to learn the primitives.
Of course this list is not exhaustive. There are many things that I don’t know.
It might seem like a strange thing to discuss. It even feels wrong to write it. Am I boasting of my ignorance? My intended takeaway from this post is that:
Even your favorite developers may not know many things that you know.
Regardless of your knowledge level, your confidence can vary greatly.
Experienced developers have valuable expertise despite knowledge gaps.
我知道我的知識差距(至少,其中一些)。 如果我變得好奇或者我需要它們用于項目,我可以在以后填寫它們。 這不會使我的知識和經驗貶值。 我可以做很多事情。 例如,在我需要時學習技術。
總結
以上是生活随笔為你收集整理的自2018年以来我不知道的事情-Dan Abramov的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue CLI 3 多页应用项目的搭建
- 下一篇: iOS 学习