最近看了 Dan 的一篇博客,Things I Don ’ t Know as of 2018,确实是有点诧异。非前端的同学可能不太熟悉,dan 是 react 的核心贡献者,redux/create-react-app 的作者,在 react 生态里非常有名。一般常人眼里都会对大牛有着很高的期待,会认为他们在自己的领域里无所不知。因为我算是对自己要求比较高的,知道自己有很多东西不会所以会给自己不少压力,我相信 dan 应该有自谦的成分,不过看到如此大牛站出来坦白说他也有很多不懂的东西,还是有一种哇原来大牛也有不会的东西这种感觉,顿时觉得应该少给自己一点压力。
作为一个前端,感觉自己很弱的地方:
算法。bubble sort/quick sort 这种还是能写出来的,当初刷过一点点算法不过现在基本忘光了,知道 Big O notation,平时写的时候也会稍微注意下避免用时间复杂度高的操作,不过更多的复杂算法题就不怎么会了。如果是需要面试的话还是会提前准备一些。
数据结构。linked list/hashtable/stack/queue 这些最基础的了解,但更复杂的什么红黑树之类的完全没看过。
计算机基础 /网络。大概知道 CPU/内存 /硬盘都是干啥的,windows/linux 这些操作系统的细节就搞不太清楚了,TCP/IP,仅限于看过一些面试题解析,三次握手四次挥手那种,深入的细节完全不会。HTTP 还算熟悉,知道常见的 header 和 cors 怎么处理。
底层知识。没看过 chromium/v8 这些源码,什么 libuv,epoll,kqueue 听说过这些单词但是完全不懂,为了查一些问题看过一点点 nodejs 源码( js 部分)。理解 event loop,当初翻过规范和很多文章,不过现在哪些是 macrotask 哪些是 microtask 已经有点忘了,要去查一下。
低级语言。完全不懂汇编,写过 c 的 hello world,(可能)知道 pointer 是什么东西,就到此为止了。看过一点点 Rust,虽然没写过几行但是很喜欢这种工具链很完善的语言,文档什么的写的也很棒。
后端。用过一些 node api,写过简单的 crud,看过 koa 源码,洋葱模型设计的很妙,加上代码短小精悍,看起来还是很开心的。不过仅限于写一个简单的 crud 服务部署到单机上了。看过一些 large scale system 的架构设计,大概理解负载均衡、读写分离、分库分表、数据缓存这些概念,但具体怎么操作完全不懂。一直很好奇分布式什么的几百台机器怎么管理的,自己翻墙的机器上多跑几个服务就不太会管理了。
unix/linux。知道一些常见的命令,但是从没写过复杂一点的 shell 脚本。
原生应用。完全没碰过 oc/swift/kotlin,写过 rn/flutter 的 hello world,比较看好 flutter,打算用 flutter 写个正儿八经的应用。
CSS。不喜欢写 CSS,现在已经只会写 flex,margin,padding 加上简单的 css animation 这些了,业务来说基本够用了。模块化一般用 css module 或 css-in-js 解决。深入点的原理基本不会,BFC 什么的已经忘光了。
函数式。看过一点点函数式的书,知道 curry/compose/pointfree/pure 这些简单的概念,从来没学过一门正儿八经的函数式语言。functor/monad 听说过但完全不懂。
TypeScript。一直想用,用来写过一些简单的 demo,但是要写复杂点的类型就抓瞎了,碰到没有 d.ts 的第三方库用起来也很痛苦。
图形。只用过一些简单的 canvas api,但复杂的图形,可视化相关的完全不会。
Observable。翻过好几遍 rxjs 文档,也自己实现过简单的 Observable,但是各种操作符完全不熟。对这方面很有兴趣,简单页面没什么用,但我相信复杂的 web app 以后基本会是 reactive programming 的天下,typescript/react/redux/redux-observable 是很靠谱的架构。
越写越有点丧了,其实自己也没有那么菜。。。
瞎写一堆,就这样吧。马上 2019 年了,祝 v2 的水友们新的一年保重身体,好好赚大钱。
1
orangeade 2018-12-31 02:15:39 +08:00 via Android
作为非科班的后端:
编译原理,图形学:不太了解,不是科班,而且工作中接触不到,可能有空时会去自学一下 前端的各种打包构建工具,各种现代前端框架,仅限了解,不怎么熟悉 UI/UX/产品设计 /原生 App 开发:这些领域都还没接触 函数式语言仅限了解 分布式原理、大数据开发:属于了解生态和用法,也了解部分工具原理,但是基础的理论(CAP/raft 之类) 还有待加强 容器、微服务、服务网络:有待实践和深入 |
2
aijam 2018-12-31 03:21:56 +08:00
不懂:写硬件驱动,寄存器分配问题,dependent type,FLP impossibility 第三步证明,实现 SMT solver,麦克斯韦方程,common lisp。
|
3
yanaraika 2018-12-31 03:43:48 +08:00
- 分布式系统的很多基础知识:读了不少工程 paper,但一些基础性的东西(consistency、cap、flp、liveness 等)还有欠缺,准备跟一门 advanced paper reading course
- 前沿系统领域的进展:osdi sosp eurosys 和 usenix 下感兴趣的几个方向。准备补一补最新学术界的进展 - 程序分析:很多时候非常好用 - 虚拟化:准备读一些工程代码 |
4
elikoi17 2018-12-31 03:52:35 +08:00 via Android
除了学过的教科书上和用过的东西的官方文档新手教程里面,DFS 在 10 步以内能搜到的内容,都只是听说过看不懂或者根本没见过
|
5
vegito2002 2018-12-31 04:36:53 +08:00 1
女人
|
6
zealot0630 2018-12-31 04:57:49 +08:00 2
很多东西不是看你懂多少,更重要的是你理解了多少,比如 qsort,不就一行的事情么
qsort(v) = qsort(v.filter(_ < v[0])) ++ v[0] ++ qsort(v.filter(_ > v[0])) 你理解了这一行,把他翻译成你正在使用的语言,边界条件都考虑进去,会有困难么? 另外,拿你所说的 Observable 这个具体点的例子,这就属于一个需要从上往下理解的,理解这个东西全靠自己,比如你能否理解下面这俩问题: 1. vuex 的 data flow 为何要设计 view action state 三个玩意,只有 view 和 state 不好么? view 直接更新 state,state 直接更新 view 2. angular 为何要引入 emitter,直接在 ovservable 的 callback 里面做 render 不好么?为何要 emit 一个事件出来,下次再更新 dom 这两个东西是同一个问题的两种不同解决方案,你如果设计实现过类似系统一定就明白,只是用框架的话,用 100 年也无法了解为什么要这样设计。 |
7
zealot0630 2018-12-31 05:58:54 +08:00
半夜写了一堆不知所谓的,大意就是你会什么不重要了,重要的是你理解了什么
语言建议不要学 C/C++这种毫无借鉴意义的古董了,建议学习一下 Scala 和 Haskell,一个工程向的巅峰之作,一个学术向的巅峰之作 |
8
subdued 2018-12-31 06:15:39 +08:00
人
|
9
nothing2 2018-12-31 08:02:06 +08:00 via iPhone
你是谁?从哪儿来?到哪儿去?
|
10
gzlock 2018-12-31 08:04:30 +08:00 via Android 1
不懂怎么赚大钱是最痛苦的
|
11
hugee 2018-12-31 08:25:20 +08:00 via Android
罄竹难书
|
12
dacapoday 2018-12-31 09:14:43 +08:00 via iPhone
@zealot0630 这个要分开看吧,纯 c 还是值得的。文法简单,而且 c 系语言都继承了些 c 的约定,容易触类旁通。c++还是算了,太复杂,学不完。
|
13
beginor 2018-12-31 09:48:55 +08:00 via Android
知识就像一个圆圈,圆圈内是你掌握的,圈外面是你未知的。
你掌握的越多,你的圈就越大, 同时面临的未知领域就越大 |
15
zealot0630 2018-12-31 10:17:52 +08:00
@dacapoday c 语言简直就是历史糟粕集合体,学这些糟粕有何用。
说起文法简单,Scala 比 C 简单太多了,Scala 的 spec 只有不到 200 页,C99 有 600 页。而且 Scala 实现了比 C 多几倍的语言特性。 C 的糟粕就举几个例子: 1. null,Scala 可以说消灭了 99%的 null 需求,剩下 1%是为了兼容 Java。 2. offset_of/container_of,这俩宏基本是每个 C 程序员天天见的,受限于 C 语言的表达能力,容易只能用这种浸入式方法实现。 3. 宏,macro,糟粕中的糟粕,功能强大?!,全靠同行衬托,因为 C 的表达能力太差,才显得宏功能强。使用难度高,难调试,易出错,IDE 不友好。其中 IDE 不友好是最致命的。 |
16
dacapoday 2018-12-31 10:35:35 +08:00 via iPhone
@zealot0630 如果准备设计一门新语言你说得对。但是 c 这些糟粕不少被继承到其他语言中,你不得不用。
|
17
Daiwf 2018-12-31 10:36:42 +08:00
什么都不懂靠直觉写代码的路过
|
18
zealot0630 2018-12-31 11:51:14 +08:00
@dacapoday 题主的困扰是如何提升,如何突破,这样情况下当然是去学习新语言的高端特性,开阔眼界。如果方向是如何入门,这种才会去推荐学 C/Java
|
19
yangzhezjgs 2018-12-31 12:00:51 +08:00
楼上的说法有失偏颇,C 语言是至今还是整个计算机知识体系最基础的部分之一,如果想了解 Linux 内核或者某些系统级软件,如 ngnix,不会 C 可谓寸步难行
|
21
0xABCD 2018-12-31 12:44:18 +08:00 via Android
古希腊哲学家芝诺的圆圈理论,知道的越多,就知道自己不知道的越多
|
22
zzzhbooo 2018-12-31 13:12:06 +08:00
牛顿云:我就像在海边玩耍的小孩,偶尔拾到美丽的贝壳,就高兴不已。但面对真理海洋,我仍一无所知。
人生苦短,这么多技术和真理是肯定来不及把所有细节都学会的,能在自己的行业上保持不断学习的动力就很不错了 |
23
gnosis23 2018-12-31 13:41:34 +08:00
Dan 至少不用学 React 和 Redux :)
|
24
smdbh 2018-12-31 14:26:51 +08:00
计算机里那么多东西,哪看的完。每年又有不知道多少新东西出来
所以。 一年能有进步就是好同志 |
25
scnace 2018-12-31 14:28:42 +08:00 via Android 1
我不懂的东西 怕不是要把 V 站的数据库写炸(
|
26
mytsing520 2018-12-31 14:38:09 +08:00
我啥都不懂
|
27
shadeofgod OP @zealot0630 谢谢,很赞同关于重点是理解多少的看法,只是单纯学习如何使用一个库 /工具我觉得是没有什么难度的事情,任何智商正常的人花费一定的时间都能做到,但是要真正理解里头的为什么是要花费很多功夫的。
有分工又要专注,注定了在某些方面会很薄弱。上面列举的很多东西除非是有需要,否则我并不打算都去学习的。 我觉得知道自己有哪些不懂的东西,知道自己的极限在哪里是很重要的事情,可以让自己一直保持一个谦卑的心态继续学习,但也不用妄自菲薄或是压力太大,这中间的平衡是需要自己去把握的。 |
28
KevZhi 2018-12-31 15:04:52 +08:00
我也什么都不懂
|
29
wisematch 2018-12-31 15:34:54 +08:00 via Android
我也。。什么都不懂。很多东西都只是懂个概念和皮毛,稍微细一点就全部抓瞎
|
30
Raisu 2018-12-31 15:43:56 +08:00
不懂怎么赚钱
|
31
likuku 2018-12-31 15:50:12 +08:00
如同一张刚烘干的热腾腾的白纸
|
32
Zzdex 2018-12-31 16:08:08 +08:00
I dont't know anything.
|
33
limbo0 2018-12-31 18:55:28 +08:00 via Android
突然想到囧雪,you know nothing
|
34
Cryse 2018-12-31 20:22:05 +08:00
除了已经懂的东西,其他的都还不懂
|
35
abcbuzhiming 2018-12-31 22:46:47 +08:00
@zealot0630 当年有这么个说法,在编程大牛眼里,Haskwell 才是优雅,强大的实现,C 是丑陋的,简单的实现。然而最后获胜的是 C。因为简单
|
36
zealot0630 2018-12-31 23:08:39 +08:00
@abcbuzhiming 所以我说 Haskell 是学术向,学了并没有什么卵用,但是能从里面得到非常多的知识,理念,方法。
|
37
ccpp132 2019-01-01 11:08:56 +08:00 via Android
@zealot0630 中间得 filter 出来==v[0]的,否则有点 bug
|