13年前,我从沈阳来北京的时候。去互联网公司面试,因为和之前的技术栈完全不同,所以问题都答不上来。后来,来了一个漂亮姐姐,用日语跟我面试,最后反馈因为我日语特别好,然后就过了,去了当时的一家知名互联网公司当程序员。
但是现在,去大厂当程序员只凭着【我不会但我可以学】的上进心就很难通过面试了。原因有两点:
我不会我可以学是个悖论
现在的面试流程越来越正规化,一般大厂都会有招聘JD(职位描述),上面明确写着要求和需要掌握的技能。如果面试者真的有【我不会但我可以学】的上进心,为什么不按照JD上的要求准备好了再来呢?
其实这个理论可以延伸来想。咱们平时工作中,实际需要很多的技能。比如在排查问题的时候需要很多网络的知识。我之前有整理过《网络通信知识地图》。如果排查问题的时候遇到没有思路,很可能是欠缺某一方面的知识。这就需要系统化把这方面知识补齐。不补齐就成了技术债务。
技术债务是由 Ward Cunningham 在 1992 年的报告中创造的一个比喻,被定义为当我们有意或无意地做了错误的或不理想的技术决策所累积的债务。它和金融债务非常相似。一个人贷款了就会产生债务。如果他定期还款,那么所创建的债务是可以接受的,不会产生进一步的问题。但是,如果他不还款,就会以利息作为惩罚,并随着不还款次数的增加而增加。如果这个人很长一段时间不能支付任何款项,那么应计利息使得他更难以偿还债务。在极端情况下,该人不得不宣布自己破产。
技术债务没有补齐有一种可能是工程师有一颗积极向上的红心,但是他们不知道如何做才是好的。这种情况需要很高的指导成本,很多公司更愿意招聘自己能把这个问题搞定,可以制定出自己的技术债偿还计划并实施的人。
不但要会还要做好
大厂在逐渐淘汰“野路子”,不仅流程在规范化。方案和设计思路也在规范化。这就需要工程师具有系统化的思想。系统化的思想就是体系、举一反三、通过类比、抽象、层次化等手段挖掘本质。
系统化的思想是不是听着有点抽象,不同的人在具体事情上有着不同的理解。这就是我要表述的问题。实际需要的人才要求远远高于会这个标准。下一个层次需要综合素质能力。现在面试考察点更偏重于这个能力。
人和人之间的区别我举个例子,深度学习三巨头之一:Yann LeCun 最近有语出惊人,提出:“深度学习已死,可微分编程万岁”。
![](/qrcode.jpg)
LeCun承认,“可微分编程”只不过是对现代深度学习技术体系的重新命名,和当年给神经网络里有两个以上隐藏层的变体起名叫“深度学习”差不多。他还说:
但是重点是,人们现在正通过组装参数化功能模块网络,并用某种基于梯度的优化方法训练它们,来构建一类新软件。越来越多的人正在以一种依赖于数据的方式(用循环和条件)来程序化地定义网络,让它们随着输入数据的动态变化而变化。除了参数化、自动微分和可训练/可优化的特性之外,这非常像一个普通程序。动态网络已经变得越来越流行(尤其是对于NLP来说),这要归功于PyTorch和Chainer等深度学习框架(注意:以前的深度学习框架Lush,可以处理一种名叫Graph Transformer Networks的特殊动态网络,用于文本识别)。现在,人们正在积极研究命令式可微分编程语言的编译器,对开发基于学习的AI来说,这是一种非常激动人心的途径。
我就白话来解释一下:将深度学习功能进行拆分,拆分出可程式化解决的部分和需要深度学习的更小模块。那深度学习人员要解决的问题得到了问题分解,让解决问题更容易。
这个思路似乎自己也能想到,但是用一个贴切而准确的词表达出来并且能得到大家的接受,这就不是一般的功力了。
总结
在《面试官问我:你做事仔细吗?》中,我提到意识最难培养,我打算隔一段时间出篇这样的文章,耳濡目染,把这颗种子种下去。今天就是其中的一篇。
在工作过程中还是面试准备时都要注意补齐技术债务。当一个发现的问题解决了才能进入下一阶段,跨过一个阶段说不定会面临不同的人生。
编程一生
因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。
PDCA方法论,检查自己是否错过更新:每周三晚上8点左右,我都会更新文章,如果你没有收到,记得点开【编程一生】公众号找一下(*^▽^*)