things-i-dont-known-as-2018

大家都以为我所知道的比我实际使用的要多得多。这不是一个糟糕的问题,我也不会去抱怨什么。(来自少数群体的人们往往遭受相反的偏见,尽管他们来之不易,但这很糟糕。)

在这篇文章里,我会提供一个不完整的编程主题列表,这些列表就是人们以为我会,其实是我不会的。 我不是说你不需要学习他们 — 或者说我不知道其他有用的东西。但是因为我现在并不处于弱势地位,所以我可以很坦诚的和你说一些实话。

下面就是为什么我认为他很重要。

首先,经验丰富的一些工程师通常会不切实际的去了解他们所在领域的每项技术。不知道你是否看过一个由100个库和工具组成的“学习路线图”?它很有帮助 — 但是却令人生畏。

更重要的是,无论你获得多少经验,你可能仍然可以发现自己在感觉能力的方面上,持续在不足(“冒名顶替综合症”)和过度自信(“Dunning-Kruger效应”)之间转换。这取决于你的环境,工作,个人,队友,精神状态,一天中的时间等。

经验丰富的开发人员有时会公开他们的不安全感,以鼓励初学者。但是,这就比如一个经验丰富的外科医生仍然会感到紧张,而一个学生拿着他们的第一把手术刀,这两者存在着天壤之别!

听说“我们都是初级开发人员”可能会令人沮丧,听起来就像是面对实际知识差距的学习者空谈。像来自我这样善意的从业者的良好口述是不能帮他解决的。

尽管如此,即使是经验丰富的工程师也存在知识上的差距。这篇文章是关于我的,我鼓励那些能够承受类似不足的人分享他们自己的。但是,在我们这样做时,不要贬低我们的经验。

我们可以承认我们的知识差距,可能会或可能不会像骗子,并且仍然拥有需要多年努力发展的宝贵的专业知识。

有了这个免责声明,这里只是我不知道的一些事情,不止这些:

  • Unix命令和Bash。 我会lscd,但是其他的东西需要查阅。我得到了管道的概念,但我只是在简单的情况下使用它。我不知道如何使用xargs创建复杂的链,或如何组合和重定向不同的输出流。我不知道如何使用xargs创建复杂的链,或如何组合和重定向不同的输出流。 我也从来没有好好地学习Bash所以我只能编写非常简单(通常是错误的)shell脚本。

  • 低级语言。 我知道Assembly允许你将内容存储在内存中并跳转代码,但这就是关于它的了解。我写了几行C并理解指针是什么,但我不知道如何使用malloc或其他手动内存管理技术。从来没玩过Rust。

  • 网络堆栈。 我知道计算机有IP地址,DNS是我们解析主机名的方式。我知道有像TCP / IP这样的低级协议来交换数据包(可能?)以确保完整性。就是这样 - 我对细节很模糊。

  • 容器 我不知道怎么使用docker和Kubernetes。(他们相关吗?) 我有一个模糊的想法,他们让我以可预测的方式启动一个单独的VM。听起来很酷,但我还没试过。

  • 无服务(Serverless) 听起来也很酷。从来没有试过。我不清楚该模型如何改变后端编程(如果它完全没有)。

  • 微服务。 如果我理解正确,这只是意味着“许多API端点相互通信”。我不知道这种方法的实际优点或缺点是什么,因为我没有使用它。

  • python. 对这个感觉很糟糕 - 我已经在Python工作了好几年了,而且我从来没有费心去学习它。导入行为有很多东西对我来说是完全不透明的。

  • Node 后端。 我了解如何运行Node,使用像fs这样的API来构建工具,并且可以设置Express。但我从来没有从Node谈到数据库,也不知道如何在其中编写后端。我也不熟悉像next实现“hello world”这样的React框架。

  • Native 平台 我曾尝试过在某些时候学习Objective C但是没有成功。我没有学过Swift,至于Java也是如此。 (因为我使用C#,我可能会接受它。)

  • 算法。 这个就会冒泡和快排了。如果它们与特定的实际问题联系在一起,我可以做简单的图形遍历任务。我理解O(n)符号,但我的理解并不比“不要在循环中放置循环”更深刻。

  • 函数式语言 除非你算上JavaScript,否则我不会顺畅的使用任何传统功能语言。 (我只精通C#和JavaScript - 我已经忘记了大部分C#。)我很难阅读LISP启发(如Clojure),Haskell启发(如Elm)或ML启发(如OCaml)代码。

  • 函数式术语 就我而言,mapreduce是最重要的。我不知道monoids,functors等。我知道monad是什么,但也许这是一种幻觉。

  • CSS 我不知道Flexbox和Grid.Float就是我的最爱。

  • CSS方法论。 我使用BEM(意思是CSS部分,而不是原始的BEM),但这就是我所知道的。我没有尝试过OOCSS或其他方法。

  • scss/sass 从没有去学习过。

  • CORS 我担心这些错误!我知道我需要设置一些标题来修复它们,但过去我浪费了几个小时。

  • HTTPS/SSl 从没有设置过。不知道它如何使用私钥和公钥工作。

  • GraphQL 我可以阅读一个查询,但我真的不知道如何表达节点和边缘的东西,何时使用片段,以及分页如何在那里工作。

  • Sockets 我的心理的概念就会是他们让计算机在请求/响应模型之外互相交谈,但这就是我所知道的。

  • Streams 除了Rx Observables之外,我还没有密切关注过溪流。我使用旧的Node流一两次,但总是弄乱错误处理。

  • Electron 从没有去尝试过。

  • TypeScript 我理解类型的概念,可以阅读注释,但我从来没有写过它。我试过几次,遇到了困难。

  • Deployment and devops 我可以设法通过FTP发送一些文件或杀死一些进程,但这是受限于我的devops技能。

  • 图像(Graphics) 无论是canvas,SVG,WebGL还是低级图形,我都没有高效率。我得到了整体想法,但我需要学习原语。

当然,这份清单并非详尽无遗。有很多事我不知道,这只是知道的不知道。

讨论可能看起来很奇怪。写它甚至感觉不对。我吹嘘自己的无知吗?我从这篇文章中表达的意思是:

  • 即使是你最喜欢的开发者也可能不知道很多你知道的东西。

  • 无论知识水平如何,信心都会有很大差异。

  • 经验丰富的开发人员拥有宝贵的专业知识,尽管知识不足。

    我知道我的知识差距(至少,其中一些)。如果我变得好奇或者我需要它们用于项目,我可以在以后填写它们。

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

更新:我还了一些我知道的事情。

Last updated