V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
shadeofgod
V2EX  ›  程序员

2019 年了,来分享一下有哪些东西是你并不懂的

  •  
  •   shadeofgod ·
    zoubingwu · 2018-12-31 01:53:54 +08:00 · 3201 次点击
    这是一个创建于 2187 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近看了 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 是很靠谱的架构。

    越写越有点丧了,其实自己也没有那么菜。。。

    • 技术上 p6 水平吧,es6/react/redux/electron,js 相关生态基本都很熟悉了,但完全不知道要怎么到 p7。
    • 思维比较缜密,逻辑也算清晰,写的 bug 相对来说还算少,代码可读性也还可以。
    • 英语不错,读写口语都没什么问题。
    • 软能力方面都还不错,沟通啊做事啊什么的。
    • 对技术算是有追求,但我觉得自己是,相比那种特别喜欢钻研底层研究各种原理的人,更关注怎么做出来一个好用产品出来的人。不是科研心态,算是匠人心态多一点。(当然不是说底层原理不重要,我也是会去学的,但更多是理解思路除非有需要不然不会一路深挖下去)

    瞎写一堆,就这样吧。马上 2019 年了,祝 v2 的水友们新的一年保重身体,好好赚大钱。

    37 条回复    2019-01-01 11:08:56 +08:00
    orangeade
        1
    orangeade  
       2018-12-31 02:15:39 +08:00 via Android
    作为非科班的后端:

    编译原理,图形学:不太了解,不是科班,而且工作中接触不到,可能有空时会去自学一下

    前端的各种打包构建工具,各种现代前端框架,仅限了解,不怎么熟悉

    UI/UX/产品设计 /原生 App 开发:这些领域都还没接触

    函数式语言仅限了解

    分布式原理、大数据开发:属于了解生态和用法,也了解部分工具原理,但是基础的理论(CAP/raft 之类) 还有待加强

    容器、微服务、服务网络:有待实践和深入
    aijam
        2
    aijam  
       2018-12-31 03:21:56 +08:00
    不懂:写硬件驱动,寄存器分配问题,dependent type,FLP impossibility 第三步证明,实现 SMT solver,麦克斯韦方程,common lisp。
    yanaraika
        3
    yanaraika  
       2018-12-31 03:43:48 +08:00
    - 分布式系统的很多基础知识:读了不少工程 paper,但一些基础性的东西(consistency、cap、flp、liveness 等)还有欠缺,准备跟一门 advanced paper reading course
    - 前沿系统领域的进展:osdi sosp eurosys 和 usenix 下感兴趣的几个方向。准备补一补最新学术界的进展
    - 程序分析:很多时候非常好用
    - 虚拟化:准备读一些工程代码
    elikoi17
        4
    elikoi17  
       2018-12-31 03:52:35 +08:00 via Android
    除了学过的教科书上和用过的东西的官方文档新手教程里面,DFS 在 10 步以内能搜到的内容,都只是听说过看不懂或者根本没见过
    vegito2002
        5
    vegito2002  
       2018-12-31 04:36:53 +08:00   ❤️ 1
    女人
    zealot0630
        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 年也无法了解为什么要这样设计。
    zealot0630
        7
    zealot0630  
       2018-12-31 05:58:54 +08:00
    半夜写了一堆不知所谓的,大意就是你会什么不重要了,重要的是你理解了什么

    语言建议不要学 C/C++这种毫无借鉴意义的古董了,建议学习一下 Scala 和 Haskell,一个工程向的巅峰之作,一个学术向的巅峰之作
    subdued
        8
    subdued  
       2018-12-31 06:15:39 +08:00
    nothing2
        9
    nothing2  
       2018-12-31 08:02:06 +08:00 via iPhone
    你是谁?从哪儿来?到哪儿去?
    gzlock
        10
    gzlock  
       2018-12-31 08:04:30 +08:00 via Android   ❤️ 1
    不懂怎么赚大钱是最痛苦的
    hugee
        11
    hugee  
       2018-12-31 08:25:20 +08:00 via Android
    罄竹难书
    dacapoday
        12
    dacapoday  
       2018-12-31 09:14:43 +08:00 via iPhone
    @zealot0630 这个要分开看吧,纯 c 还是值得的。文法简单,而且 c 系语言都继承了些 c 的约定,容易触类旁通。c++还是算了,太复杂,学不完。
    beginor
        13
    beginor  
       2018-12-31 09:48:55 +08:00 via Android
    知识就像一个圆圈,圆圈内是你掌握的,圈外面是你未知的。
    你掌握的越多,你的圈就越大, 同时面临的未知领域就越大
    aijam
        14
    aijam  
       2018-12-31 09:54:13 +08:00
    @beginor 上一句比喻和下一句的逻辑怎么感觉一点都不连贯?
    zealot0630
        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 不友好是最致命的。
    dacapoday
        16
    dacapoday  
       2018-12-31 10:35:35 +08:00 via iPhone
    @zealot0630 如果准备设计一门新语言你说得对。但是 c 这些糟粕不少被继承到其他语言中,你不得不用。
    Daiwf
        17
    Daiwf  
       2018-12-31 10:36:42 +08:00
    什么都不懂靠直觉写代码的路过
    zealot0630
        18
    zealot0630  
       2018-12-31 11:51:14 +08:00
    @dacapoday 题主的困扰是如何提升,如何突破,这样情况下当然是去学习新语言的高端特性,开阔眼界。如果方向是如何入门,这种才会去推荐学 C/Java
    yangzhezjgs
        19
    yangzhezjgs  
       2018-12-31 12:00:51 +08:00
    楼上的说法有失偏颇,C 语言是至今还是整个计算机知识体系最基础的部分之一,如果想了解 Linux 内核或者某些系统级软件,如 ngnix,不会 C 可谓寸步难行
    yjm9898
        20
    yjm9898  
       2018-12-31 12:16:02 +08:00
    @beginor 老铁说得很对呀。full stack 真不容易
    0xABCD
        21
    0xABCD  
       2018-12-31 12:44:18 +08:00 via Android
    古希腊哲学家芝诺的圆圈理论,知道的越多,就知道自己不知道的越多
    zzzhbooo
        22
    zzzhbooo  
       2018-12-31 13:12:06 +08:00
    牛顿云:我就像在海边玩耍的小孩,偶尔拾到美丽的贝壳,就高兴不已。但面对真理海洋,我仍一无所知。

    人生苦短,这么多技术和真理是肯定来不及把所有细节都学会的,能在自己的行业上保持不断学习的动力就很不错了
    gnosis23
        23
    gnosis23  
       2018-12-31 13:41:34 +08:00
    Dan 至少不用学 React 和 Redux :)
    smdbh
        24
    smdbh  
       2018-12-31 14:26:51 +08:00
    计算机里那么多东西,哪看的完。每年又有不知道多少新东西出来
    所以。
    一年能有进步就是好同志
    scnace
        25
    scnace  
       2018-12-31 14:28:42 +08:00 via Android   ❤️ 1
    我不懂的东西 怕不是要把 V 站的数据库写炸(
    mytsing520
        26
    mytsing520  
       2018-12-31 14:38:09 +08:00
    我啥都不懂
    shadeofgod
        27
    shadeofgod  
    OP
       2018-12-31 14:54:20 +08:00
    @zealot0630 谢谢,很赞同关于重点是理解多少的看法,只是单纯学习如何使用一个库 /工具我觉得是没有什么难度的事情,任何智商正常的人花费一定的时间都能做到,但是要真正理解里头的为什么是要花费很多功夫的。

    有分工又要专注,注定了在某些方面会很薄弱。上面列举的很多东西除非是有需要,否则我并不打算都去学习的。

    我觉得知道自己有哪些不懂的东西,知道自己的极限在哪里是很重要的事情,可以让自己一直保持一个谦卑的心态继续学习,但也不用妄自菲薄或是压力太大,这中间的平衡是需要自己去把握的。
    KevZhi
        28
    KevZhi  
       2018-12-31 15:04:52 +08:00
    我也什么都不懂
    wisematch
        29
    wisematch  
       2018-12-31 15:34:54 +08:00 via Android
    我也。。什么都不懂。很多东西都只是懂个概念和皮毛,稍微细一点就全部抓瞎
    Raisu
        30
    Raisu  
       2018-12-31 15:43:56 +08:00
    不懂怎么赚钱
    likuku
        31
    likuku  
       2018-12-31 15:50:12 +08:00
    如同一张刚烘干的热腾腾的白纸
    Zzdex
        32
    Zzdex  
       2018-12-31 16:08:08 +08:00
    I dont't know anything.
    limbo0
        33
    limbo0  
       2018-12-31 18:55:28 +08:00 via Android
    突然想到囧雪,you know nothing
    Cryse
        34
    Cryse  
       2018-12-31 20:22:05 +08:00
    除了已经懂的东西,其他的都还不懂
    abcbuzhiming
        35
    abcbuzhiming  
       2018-12-31 22:46:47 +08:00
    @zealot0630 当年有这么个说法,在编程大牛眼里,Haskwell 才是优雅,强大的实现,C 是丑陋的,简单的实现。然而最后获胜的是 C。因为简单
    zealot0630
        36
    zealot0630  
       2018-12-31 23:08:39 +08:00
    @abcbuzhiming 所以我说 Haskell 是学术向,学了并没有什么卵用,但是能从里面得到非常多的知识,理念,方法。
    ccpp132
        37
    ccpp132  
       2019-01-01 11:08:56 +08:00 via Android
    @zealot0630 中间得 filter 出来==v[0]的,否则有点 bug
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1125 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 18:52 · PVG 02:52 · LAX 10:52 · JFK 13:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.