Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2018 年快过去了,那些我还不会的技术 #19

Open
CyanSalt opened this issue Dec 30, 2018 · 0 comments
Open

2018 年快过去了,那些我还不会的技术 #19

CyanSalt opened this issue Dec 30, 2018 · 0 comments

Comments

@CyanSalt
Copy link
Owner

CyanSalt commented Dec 30, 2018


path: things-i-dont-know-as-of-2018


书写本文的主要起因是阅读了了 Dan 的同名文章。Dan 是 React 项目的核心开发者,但即便如此,他依然坦言自己有许多事情不甚了解。倘若他非谦虚,那么我认为这是一种非常难得的反思精神。一个人对自身所知道的事情的了解远比自己知道了什么更加重要,因为通常在对能力的认知上,人总是习惯于欺骗自己。

如 Dan 的文章中所言,国内也有很多“CTO 技术路线图”一类的产品,内容往往让人望而却步。但实际上一个人的精力总是有限的,与其得八方之皮毛,不如在某些方向上用尽所有的力气。所以我写这篇文章,也并不是为了告诫自己在新一年里要额外学习些什么,仅仅是想要向自己承认,自己的能力究竟如何。

以上也是属于我的 disclaimer。我同样尝试按照 Dan 的思路枚举自己不会的东西,得到以下内容:

  • 低级语言:虽然曾经系统学习过 C++,但是仅仅停留在了解指针等概念的程度,对于手动管理内存并不知道。对于 Go 仅能读懂,写是写不来的,Rust 根本没看过
  • 计算机网络:同样停留在一个大学差生的水平,大概知道分成几个层,每层的任务大概如何,但对于 TCP 如何完成工作等不甚熟悉
  • 新服务端架构:完全不了解 Serverless 的含义。对于微服务大概可以理解,RPC 也了解应用,但对于从头搭建并没有思路。Kubernetes 听说过但连是什么都不知道,Docker 停留在可以看着文档大概写 dockerfile 或者 docker-compose.yml 的水平
  • NodeJS 后端框架:只对 Koa 比较了解,可以顺利使用的地步,对于 Express 讳莫如深,成套的后端框架比如 Nest 只是见过,完全不熟悉
  • 数据结构和算法:这就是为什么我不觉得自己是后端工程师的原因,对数据结构说得上熟悉的极限就是树了,对于诸如堆、红黑树和更复杂的结构完全没有印象;算法方面挑几道刁钻的题目考别人倒是可以,但自己大概只能分析一下复杂度,连动态规划也说不清楚
  • 函数式编程:对于函数式编程的基本概念大概还清楚,但是诸如 functor,monad 就完全不清楚。像 Ramda 这样的代码可以使用也可以看懂,自己实现大概也 OK,但是诸如纯函数递归这种就直接放弃好了
  • 原生平台:macOS 上面大概可以写一个最简单的 AppleScript,Windows 上可以写 batch 脚本,但都是完全写不了有界面的东西。安卓项目看文档大概也可以写,但大概停留在只知道 Activity 的水平;iOS 就一点都不了解了
  • HTTP扩展:HTTPS 我只知道可以用 StartSSL 申请证书然后看着攻略在 nginx 上部署;HTTP2 只知道性能上会比较优秀,细节完全不了解
  • 前端框架生态:对于前端框架本身的问题不大,但是涉及到相关的库可能会比较困扰,比如 SSR 相关技术,比如 react-router/vue-router,比如 React Native/Weex
  • Angular 和 rxjs :对 Angular 只知道双向绑定和脏检查,以及它用了 TypeScript;ReactiveX 对应的思路和各种语言都不了解
  • 数据库:SQL 只能写些简单的 join 操作,对于其他的比如 Redis 和 MongoDB 大概只知道其大致的结构以及怎么使用一些框架,对更多的诸如 neo4j 则完全没用过只知道概念。比较可惜的是 IndexedDB 也不了解
  • 操作系统:对于操作系统的工作原理几乎不了解,极限大概是说出死锁的概念,对于 Socket 和文件系统的了解非常有限
  • Web多媒体技术:之前研究过 Web Audio 甚至写过类库,但是几乎完全忘了;对 WebRTC 不太了解,只知道可以用来录像。WebGL 几乎没接触过。对 WebP、WebM 之类的格式完全不了解原理
  • PWA:只知道 Web Worker,没有用过 Service Worker,但是大概知道 PWA 包含几种技术
  • WebAssembly:了解概念,但是从来没有写过甚至读过

不过除此之外,我还额外列举了一些我觉得未必算得上擅长但还算有些研究的内容:

  • Shell 和命令行:除了常用的指令可以顺利使用之外,简单的管道操作、xargs、grep、sed、awk 也算比较熟练。可以用 Shell 脚本写大部分场景下使用的批处理命令
  • 设计模式:虽然我认为刻意强调设计模式的概念本身是一种多余的事情,但对于多数设计模式还算比较了解。通常来说自己会化用很多模式到合适的场景,但我觉得刻意套用是比较不可取的
  • 服务端程序语言:虽然对各种框架的了解有限,但除了 Node 之外,对 Java/Python/PHP 大概还是可以写一写的,也知道一些常见的小 tips(比如 Java 用 run 实现匿名函数,Python 的引用类型参数默认值的坑,PHP 的语法等等)
  • CSS:当前标准内的 CSS 基本还算了解,至少面对大部分场景都是没问题的。BEM,渲染层还可以搞清楚,像 filter 和 blend-mode 一类的也比较熟悉。遗憾的是不太了解 Grid,对 table 相关的规则一无所知,还有 Level 4+ 也很希望有机会多了解一些
  • Vue:几乎没有阅读过源码,但是文档中提及的内容还算捻熟于心,仅限于版本 2。对于 Vue 的编程风格有些理解,不认同某些官方推荐(比如自闭合组件模板标签)
  • TypeScript:对于过于复杂的类型不太搞得来,但是大概可以达到给绝大多数类库书写 typings 的水平,甚至可以写一点简单的元编程
  • Electron:对于 Electron 可以做什么以及怎么做还是比较清楚的,几乎所有的模块都使用过,大概可以总结出一些范式。对于线程通信的坑比较熟悉知道如何避免
  • ECMA262:对于 JS 的前生今世算是比较了解了,诸如 Object.prototype.eval 这种古老实现,以及一些新的提案比如 Pipeline Operator 和 Protocol 也有一定的认知。大概属于有些底气发表意见的水平
  • Web 2D:Canvas 基本可以实现脱离文档书写了,SVG 还需要看着文档来写。不过对于 CSS Paint API 还没那么多了解

上面两个列表列举的其实不是很全面,有些特定领域的技术(例如微信小程序)并没有被算进去,也有一些可能我当下还没有意识到的。写这篇文章的时候有种很其他的心态是,觉得自己像是在写一份简历,时时觉得自己好像身无长物,只是多了些无所谓的情绪。

有时候很希望所有人都能专注在某些领域,但又知道这是不可能的。生也有涯,可有时却也没有办法,但我还是希望,如果明年还能记录的话,希望不是上面的列表变少下面的变多,而是世界上的新知识让上面的越来越多,而下面的列表能让我更有信心记录。以上。

@CyanSalt CyanSalt transferred this issue from another repository Feb 24, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant