半条命

最近观察到一些人跟事,有感而发。 假设你听说编程很厉害,有很多用,想学编程,但是编程有这么多不同的分支,有手机APP开发,有算法,有深度学习,有区块链,有编程语言。。。你该学什么好呢? 很明显,因为你基本上不懂编程,所以你无法做技术上的分析,那你只能从表面上分析:越热门火爆,越缺人的东西,越适合 - 供需关系,基础经济学嘛,人才越缺,我越好找工作,工资越高,热门的方向,发paper更多人cite,做出项目也有更多star,更多人用,谁不想被更多人需要呢? 如果这方向还比较简单,这就更好了:同等条件下,为什么要选更辛苦的工作,而不是轻轻松松攒钱? 但是如果你真这样选,那就把自己坑了。 在说原因之前,我们先来考虑一些问题。 众所周知,技术会过时,30年前学的visual foxpro到现在价值为零,而你不希望你学的东西毫无用处,那你应该去学更不会过时的技术(半衰期更长)。而什么技术半衰期更长? 更新迭代比较慢的技术。大版本号每上升一次/新框架推出一次,你就要重新学习一次新的API(比如啥tensorflow啥react),然后还要把旧的代码升级上去。 已经活了很久的技术。如果大公司推出了一个新平台,很可能过几年就打入冷宫,重新选个新欢(Objective C)。或者更惨的,这个方向直接凉凉(VR),你学的东西全部变废物,好不好玩? 很不巧的是,热门的方向正好这两点都不具备。 热门的方向,自然有各大公司卖力的去推平台推框架竞争,飙版本号,生怕落后一点点就丧失掉大蛋糕。这样迭代周期一两年一单位,你要不停翻新你会的知识,君不见tensorflow2.0一出,一推叫着我不行了,不能再学的?(如何评价 TensorFlow 2.0 版本,是否是 Google 再一次力挽狂澜?) 如果一个方向活了很久,那为什么最近才变得热门?就算我们去考虑特例,比如大环境变了,突然这个方向变得可行(GPU跟大量数据导致深度学习效果很好),那以前学的东西也变得没用了 - 因为玩法变了。90年代那些链接主义NN在现代还有什么用吗? 如果你选了个更简单的工作,那你处境更危险:本来低半衰期就导致你难以积累技术,现在再加上积累了的技术也不会带来太多竞争力,那过个五年,你不能再经常996,工资也变高了,然后跟新员工技术上拉不出差距,然后当方向慢慢变冷,竞争变激烈的时候,老板不炒你,难不成留着你过年?注意,有的工作准入门槛低,但这不等于简单 - 因为提升能力的最有效方法就是让你做刚好在能力范围外的事情。 你可能会反问‘难不成我看啥方向冷门,然后一头扎进去饿死?’ 也不是。你应该做的是去学习基本功。比如啥操作系统,算法,编程语言,体系结构这些。 这些东西都出来半世纪多了,能发掘的都发掘得差不多了,所以你能随便打开任意优质大学的公开课,然后毫无违和感的假装自己活在1990。 半世纪多的东西也不会一天突然凉凉,被打入冷宫需要重新学习。这些东西也不是一个公司能左右的 - 谁家产品这么长命? 同时,做这些基础方向,也不代表你不能做有实际impact的工作,只能去grind 1% gain,或者直接呆象牙塔,无实际应用(不一定是坏事)- 你完全可以打好基础,然后去用这些基础做各种热门应用,这样大家都需要你,但是你的半衰期则是几十年,等你的应用方向凉凉,人老珠黄了你拔吊无情,去接着做其他的应用方向,岂不美哉? 比如我表面上看上去是在做深度学习框架(TVM),其实天天都在写SML Compiler,一边在看Abstracting Abstract Machine打算实现下,另一边写的代码却被deploy到亚马逊,爽歪歪。 再举个反面例子:在这么多深度学习框架/算法中,有很多(我数出了五个,其中还有citation就快上万的教授的paper,不想点名,因为这是体制的问题,就lantern没问题)都自称对自动求导做出了创新,但是其实90年代的啥ADIFOR ADIC就已经覆盖了所有的所谓创新(其中还有这些新work由于缺乏自动求导常识做的负优化)。如果这些人肯耐着性子去看几十年前的自动求导书,从头翻到尾,也不至于闹这种笑话。 PS:我本来觉得这些道理本科生也都懂的,但是认识了好几个不好好打基础去学新潮东西的高中生,写上来希望对这种人有帮助。

October 1, 2019 · 圆角骑士魔理沙 · CC BY-SA 4.0