2019 年了,来分享一下有哪些东西是你并不懂的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
shadeofgod
V2EX    程序员

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

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

    最近看了 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  
    PRO
       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     Solana     961 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 22:58 PVG 06:58 LAX 15:58 JFK 18:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86