我在2018年不知道的事情

哈Ha! 我向您介绍Dan Abramov撰写的文章“截至2018年我不知道的事情”的翻译。


人们通常认为我了解很多,但实际上并非如此。 还不错,我一点也不抱怨。 (尽管一小部分人应得的更多,这经常使他们遭受先入为主的信念,这是可怕的)。


在这篇文章中,我将显示不完整的编程主题列表,人们会误以为我知道。 我并不是说您不需要学习它们,或者我不知道其他有用的东西。 但是因为我没有让自己处于弱势地位,所以我可以对此诚实。


为什么我认为这很重要


首先,经常会有一个不切实际的期望,那就是经验丰富的工程师了解其领域中的每种技术。 您是否看到过包含数百种库和工具的“学习地图”? 这很有用,但令人恐惧。


此外,无论您经验如何,您仍然会发现自己在能力意识,不足(“冒犯综合症”)和自信(“邓宁-克鲁格效应”)之间切换。 这取决于您的环境,工作,个性,同事,精神状态,一天中的时间等。


经验丰富的开发人员有时会谈论他们的不安全感,以鼓励新手。 但是,仍然经验丰富的仍然紧张的外科医生与第一次持有手术刀的学生之间存在巨大的差异!


听到“我们都是新手开发人员”的消息会令人沮丧,听起来像是与面对实际知识鸿沟的学生进行的空谈。 仁慈的从业者(例如我)的自白无法克服。


但是,即使是经验丰富的工程师也存在许多知识空白。 这篇文章是关于我的,我敦促那些能够承受这种弱点的人分享自己的观点。 但是,现在我们不要轻视我们的经验。


我们能够认识到我们的知识鸿沟,我们可能会或可能不会觉得自己是冒名顶替者,但是我们有非常宝贵的经验,可以说多年的努力可以发展。


对此,我不承担任何责任,以下是我不知道的几件事:


  • Unix和Bash命令 我可以做lscd ,但也可以监视其他所有事情。 我了解管道的概念,但仅在简单情况下使用它。 我不知道如何使用xargs创建复杂的链或如何组成和重定向各种输出流。 我从来没有适当地学习过Bash,所以我只能编写非常简单(且经常有错误)的shell脚本。
  • 低级语言。 据了解,Assembly允许您将内容存储在内存中并浏览代码,仅此而已。 我用C语言写了几行,我了解了什么是指针,但是我不知道如何使用malloc或其他手动内存管理方法。 永远不要把Rust弄糟。
  • 网络堆栈。 我知道计算机具有IP地址,而DNS是我们使用主机名的方式。 我知道有用于数据包交换的低级协议(例如TCP / IP)(可能吗?)来保证完整性。 就这样-我不了解细节。
  • 货柜 我不知道如何使用Docker或Kubernetes。 (它们有关系吗?)我有一个模糊的想法,那就是它们允许我部署单独的虚拟机。 听起来不错,但我还没有尝试过。
  • 无服务器。 听起来也很酷。 从未尝试过。 对于这个模型如何更改后端编程,我还没有一个明确的想法(如果有的话)。
  • 微服务 如果我理解正确,那仅表示“许多API端点相互通信”。 我不知道这种方法的实际优缺点是什么,因为我没有使用它。
  • 巨蟒 对我来说,记住这一点总是很不好的-我已经使用Python几年了,而且我从不费心去学习它。 有很多事情,例如导入行为,对我来说,这是一片黑暗的森林。
  • 节点JS。 我了解如何启动Node,使用一些API(例如fs)来构建工具,并且可以配置Express。 但是,我从未通过Node与数据库进行通信,也不知道如何在其中编写后端。 我也不熟悉React框架,例如Next,进一步的“ hello world”。
  • 本机平台。 我曾尝试过学习Objective-C,但这对我没有帮助。 我也没有教敏捷。 Java也是如此。 (自从我使用C#以来,我可能已经掌握了它们。)
  • 演算法 您从我这里得到的最大好处是气泡排序,最好是快速排序。 如果它们涉及特定的实际问题,我可能可以执行简单的图形遍历任务。 我了解O(n)表示法,但我的理解并不比“不要将循环放在循环中”更深入。
  • 功能语言。 如果您不使用JavaScript,那么我不会说任何传统的功能性语言。 (我只有C#和JavaScript才有空-并且已经被C#遗忘了。)我几乎看不懂Lisp风格(如Clojure),Haskell风格(如Elm)或ML风格(如OCaml)。
  • 功能术语。 映射并减少我知道需要多少。 我不知道Monoid,函子等。。。我知道Monad是什么,但也许这只是一种幻想。
  • 现代CSS。 我不知道Flexbox或Grid。 浮游物就是我的一切。
  • CSS方法论。 我使用了BEM(意味着它是CSS的一部分,而不是原始的BEM),但这就是我所知道的。 我没有尝试过OOCSS或其他方法。
  • SCSS / Sass。 我从来没有开始研究它们。
  • CORS。 我怕这些错误! 我知道我需要调整标题才能修复它们,但过去我在此上花费了大量时间。
  • HTTPS / SSL。 永远不要设置它。 除了私钥和公钥的概念外,我不知道这是如何工作的。
  • GraphQL。 我可以阅读请求,但我真的不知道如何用节点和边来表达事物,何时使用片段以及在那里分页如何工作。
  • 插座 据我了解,它们允许计算机在请求/响应模型之外彼此通信,但这仅是我所知道的。
  • 流。 除了Rx Observables,我还没有使用过如此紧密的线程。 我使用旧的Node线程一次或两次,但始终会遇到处理错误。
  • 电子 从未尝试过。
  • 打字稿 我了解类型的概念并且可以阅读注释,但我从未写过。 我尝试了几次,但遇到了困难。
  • 部署和开发。 我可以通过FTP发送多个文件或终止某些进程,但这是我在devops中技能的限制。
  • 图形 无论是画布,SVG,WebGL还是低级图形,我都不是很聪明。 我了解一般的想法,但是我不需要学习简单的东西。

当然,这不是完整的列表。 我不知道有很多事情


讨论起来似乎很奇怪。 这甚至不值得写。 我在炫耀我的无知吗? 我对这篇文章的结论如下:


  • 甚至您最喜欢的开发人员也可能不知道许多您知道的事情。
  • 无论您的知识水平如何,您的信心都可能大不相同。
  • 尽管存在知识空白,但经验丰富的开发人员非常有能力。

我知道我的知识差距(至少其中一些)。 如果我对此项目感兴趣或需要它们,可以稍后再填写。


这不会损害我的知识和经验。 我可以做很多事情。 例如,在需要时学习技术。

Source: https://habr.com/ru/post/zh-CN446088/


All Articles