查看原文
其他

面试了一个 46 岁程序员……思绪万千……如何从平庸走向理想?

嵌入式ARM 2021-01-31

整理:付斌,参考:Web寻梦师  https://www.jianshu.com/p/e99ee8e894f3

frank909 https://blog.csdn.net/briblue/article/details/103609814


最近一直忙于面试,人事推给了我一份简历,职位是算法工程师,年龄是 46 岁,我揉了揉眼睛后再看看,确实是 46 岁。抱着忐忑的心,我电话面试一番后,还是不觉得他和我们的团队很适合。

人都会有同理心,尤其是这么大岁数的程序员还是为了生计来找工作,心还是会隐隐触痛。

年龄是多数程序员的天敌,之前没有概念因为生活中样本较少,现在来了一个鲜明的例子,并且还需要自己亲手关闭一扇门,总会有一个世道轮回的后怕。

写这篇文章的目的,是以这件事作为一面镜子,让我自己好好思考一下,我自己的前途和出路。


面试细节



学历亮眼

那位先生的学历其实挺好的,很早就研究生毕业,处于隐私保护我就不透漏详细了。

并且毕业后就一直从事视觉方面的工作,每一份工作都呆了 5 年以上,算是很稳定的那类人。

我能想象他年少轻狂,意气风发的状态,只是现在有些境遇大有不同,这是一个变化的世界。


表达能力的缺陷



看简历的时候,我有仔细看过他的简历。

简历的项目经历都没有什么问题。

但是有个细节让我很意外。

错别字。

简历上有很多的错别字,按照道理讲,在职场上打拼这么多年这是不应该的,况且电话面试的时候他说有担任过项目经理的经历。

除了错别字以外,简历上的描述没有重心。

也许是做了太多的项目,很多东西一股脑往上整,关键词都很少,直接对简历而言,很难让人一时搞清楚他究竟擅长什么。

还有一个细节,电话面试的时候,我一直皱眉头竖起耳朵在听,因为他口音极重,说话时轻时重,这让沟通成本变得很高。


与年龄不相符的总结陈述能力



项目经历和我团队现在的业务需求有相关性,但是不是那么强烈,所以我简单搞清楚他做的东西后,重点想关注的是他对这个行业怎么看法。

但结果有些失望。

他做人脸识别很多年了,简历上说对目标检测也颇有研究,但是这么多年过去了,似乎他的认知并没有因此有明显的提高。

他一直说传统的机器视觉不行了,现在要用 AI 的方式,然后又一直说 AI 也不是万能的。

我问他为什么觉得机器视觉传统的方式不行了。

他回答说需要大量的数据训练,模型才能好。

他又说人们都觉得 AI 很厉害,但 AI 不是万能的,因为它需要数据训练,没有数据也不行。

那他说的这些对吗?

他的结论都对,但不深刻,刚毕业的大学生都知道。既然认知和刚毕业的大学生没有差别,那么公司不会支付更多的用人成本,虽然现实,但就是这个理。

然后,我又问了一个问题:

为什么通过数据训练能够进行人脸检测或者识别目标?

他又回答了一堆,他用了什么 MTCNN 模型然后这个那个开源的模型。

其实,我期望的是他能回答类似这样:

从大量的训练数据中,寻找有效特征,从输入空间或者是特征空间得到输入,通过模型回归 landmark 值或者用超平面分离数据等等等等。

我想要那种把技术分拆的很细的观念,不是简单的说用哪个开源模型,我想了解的是为什么而不是怎么做。

我期望得到为什么而不是怎么做的原因是团队成员现在都很年轻,攻克难题需要有人带,薪资不同,面对的压力也不同,责任也就不同。况且,他的经历与团队的领域方向相关性不是那么高。面试的目的是试一试看。

我承认他的经验有,但是他的表达能力吃亏了。

我觉得他应该有高度总结的能力,但这次面试过程没有体现出来。

我讲的高度总结能力指的是对于技术或者是架构比较深的理解,或者是对于业务逻辑有比较清楚的认识。

我唯一的感觉是,这些年来可能他一直执着于比较底层的术,忙忙碌碌,蹉跎了很多岁月。

在我们团队,工龄大的人需要带团队新手的,如果领头人认知不高,下面的成员成长就少,容易起矛盾。


自我反思



面试结束后,我一直在思考一个问题。

我如何才能不在 10 多年后变成这样?

我没有肯定的答案,但仔细思考后,我决定从下面几个方面入手。


业务能力提升



源代码固然好,但是对于新问题而言,还是需要团队有自己的核心技术。这个核心技术也包括针对性地改造开源代码,让它更适应于自己的业务。

逻辑非常重要。

身经百战同时也不要忘记思考,这个才能带你脱离永远在底层忙碌的困境。

人人都爱能解决问题的人,重复的问题大多数人能搞定,新问题或难题需要高手。

所以,我的认知是高手不会落寞。


学习能力



人是需要自我升级的。

这个自我升级主要是指认知。

所以,保持阅读是非常重要的。

  • 专业论文
  • 行业动态
  • 新技术

作为一个纯粹的技术人,这些不可少。

  • 认知提升
  • 沟通技巧
  • 基本的常识与见解
  • 基本的形态体态礼仪

人是社交动物,能力越大影响就越大,所谓影响就是与更多人的社交或者互动。

而这些都需要学习,并且是长期的学习。


投资能力



如果长期在一个公司,后来终止了。

如果长期在一个行业,后来终止了。

那个时候,用什么养活自己呢?

挣钱并不算耻辱,是基本的生活能力。

我个人而言,我计划这么做。

  1. 年轻时多买实物如房子。
  2. 薪水再高点时,追求一些高风险的理财产品。
  3. 提高业务能力,提高工资收入。
  4. 尝试副业,如技术网站上的付费专栏。


最后



需要说明的是,说是面试其实是我个人的反思。面试是双方选择的结果,不代表面试者本人不行。

按照他的履历也许可以找到更理想的职位。但就我个人而言,我并不希望自己 10 多年后变成这个样子,为此我给自己提个醒,告诉自己要干些什么,怎么干,仅此而已。

好了,重申一些概念。

1、并不是因为年龄大的问题,面试是一个双向沟通的问题,电话面试的时候我都是用请教的态度去和他沟通的,不只我一个人和他面试过,另外一个同事面试他后也没有给予考虑。

2、公司团队的发展需要合适的人才,是有个坑位才有个招聘需求,现在团队需要的人是要带新人的,这一点我觉得不合适,所以没有考虑。

3、再谈技术,有些人把夸夸其谈和技术不好联系在一起了。所以如果没有通过面试就要归咎于面试者喜欢吹牛的人。我本身是个技术人,也想招实干的人进团队。但如果你觉得把算法逻辑捋清楚是一种吹牛的能力的话,我无话可说。我作为面试官,这点要求也有错?

4、至于所说的优越感,没有。在面试前领导跟我说:“面试后告诉我一个答案,你不能草率说不行,也不能轻易说行,你思考一下,你给我答案是基于什么。”我只是履行一份差事而已,所以别说我有什么优越感。

5、大概很多人会愤愤不平,为何要这么对待我们程序员。IT 行业是个迭代周期非常短的行业,我自己也时常思考未来的出路。但一码归一码,就我而言,一直学习下去,stay foolish stay hungry,我不会抱怨什么,选择这个快速的行业,我选择了它,我就会尊重它。

6、这文章是我个人反思,你可以说我错了,但我没有攻击任何一个人,我觉得我的未来不要这样,不代表别人不要这样,也不代表别人要这样也不行,只是我不要这样,我知道懂得的人会懂的。


如何从平庸走向理想?



我认为程序员只需分三类:天才的程序员、理想的程序员、平庸的程序员。天才的程序员我只敢说接触过3个,这是天命7分由你是颗精子的时候就已决定,拥有绝佳的数学天赋、冷静致密的逻辑、为解决难题宁愿不眠不休而深以为乐的技术热情;3分来自起步要早早早,恨不得同龄人玩泥巴的时候就得开始玩电脑,大学毕业前就突破一万小时法则,后面的已是游戏人生。


天才的程序员可遇不可求,更不能长有,我看到的90%仍是平庸的程序员。IT时代的膨胀,已让程序员如同文艺复兴时的印刷匠一样的普通,多数投入祖师爷门下的人,仅是为了更大的饭碗、更高的待遇、更好的生计。平庸的程序员编写腐烂的代码,没有规范和一致性,固守旧世界的语言,还好谈论大的架构和性能,说的比做的漂亮。


而毫无例外的,他们认定技术没有出路,做产品、营销和管理的是更高大上的手艺,而他们当中的99%,又会自然流露出自己恰巧具备了那方面的天赋,至于进程为什么会崩溃这样的小问题是不屑于去了解的。


而我最喜欢和理想的程序员相处,恨不得与他们同吃同住,如果允许,我希望我的队伍能插满他们的旗帜。理想的程序员心眼儿不坏(他们从来都不是办公室政治的宠儿,是一群单纯明亮快乐的手艺人),有天真烂漫的好奇心(他们的眼睛里经常闪着「哇,这个是怎么做到的!」),永远精益求精(他们的口头禅是「我再研究一下」),还乐于分享(他们活跃于GitHub、各大问答社区和你的身边,舍得将宝贵时间用于帮助新手)。


是的,他们不需要被管理,只需要给一个大的方向,总能回报以意想不到的结果。

 

理想的程序员与平庸的程序员只有一墙之隔。两者的差距只有6个一点点,而人与人的差距,正是在这日积月累的一点点中,被永远拉开了。有意思的是,我发现这6个一点点都和意识有关,也就是程序员和其他一切新兴产业的工种一样,只需要意识加上时间的锤炼,人人皆可达到理想的阶段。理想的程序员必然也是一个优秀的problem solver。


第 1 个一点点:专注眼下


见过太多心猿意马的程序员,我不得不把「专注眼下」作为天字第一条。他们往往有各式各样的小梦想,比如做个小茶农、做个小鹅贩、做产品、做销售、做投资,却被程序员的高薪或是没有转行的魄力「耽误」了,而因为不专注,他们不在意做好自己的本分,不在意锤炼自己的技能,不在意学习新兴的技术。不可否认,这世界上存在着伟大的产品(像乔老爷)、伟大的销售(像埃里森)、伟大的投资客(像彼得菲),而他们毫无例外都是程序员出身。


可你听说过巴菲特评价盖茨的话么,比尔盖茨如果转行去卖狗,那他一定是全世界最大的狗贩。我坚信除了少数的天才外,冥冥众生均可以在多个领域取得成功,只要保持足够的专注。而哪怕你下一年就想卖狗去,程序员的经验仍然能训练你强大的逻辑、谨慎和耐心,放在哪个行业都是相当可观的竞争力。


第 2 个一点点:思考力与推动力


我认为处理bug、崩溃、调优、入侵等突发事件比编程本身更能体现平庸程序员与理想程序员的差距。当面对一个未知的问题时,如何定位复杂条件下的核心问题、如何抽丝剥茧地分析问题的潜在原因、如何排除干扰还原一个最小的可验证场景、如何抓住关键数据验证自己的猜测与实验,都是体现程序员思考力的最好场景。是的,在衡量理想程序员的标准上,思考力比经验更加重要。


有时候小伙伴跑过来,问我「提交了一个任务被卡住了,怎么办」的时候,我总觉得他可以做得更好。比如,可以检查试验别的任务,以排除代码自身的原因;可以通过Web UI检查异常(如果没有账号,可以让我提供);可以排查主机日志或删除缓存,再不济,总应该提供任务ID和控制台日志给我。


理想的程序员永远不会等事情前进,他们会用尽一切方法让事情前进。


第 3 个一点点:Never Say No


记得从前厂离职之前,找老板谈话,他说我最大的优点就是从来不和他说这个做不到。后来我发现在很多团队里,都存在一种技术和产品的对立,程序员往往以「技术上无法实现」来挡产品的需求,而产品也往往以「Facebook可以为什么我们做不到」来奚落程序员。这两句话应该属于禁语,从根本上都不利于程序猿和产品狗的相亲相爱。


 一句「技术上无法实现」是容易出口,可有多少人在说出这句话的时候,心里是100%肯定的?如果不肯定,为什么不能回去谷歌一下再回答?原本我以为程序员是充满想象力,因为有想象力,才能诞生那么多改变我们生活的软件和互联网产品。见识多了,才了解大部分程序员已经在与bug的对抗中变得保守而不愿担当风险,与此同时许多团队也不愿意宽容失败。


于是「Say No」变成一种习惯性的抵触,还记得曾国藩为什么解散湘军么?他说那支军队已「暮气渐深」,不能打仗了。要做理想的程序员,就不能给自己滋生暮气的机会,如果面对不合理的需求,可以把时间成本摆出来,把曲线救国方案亮出来,简单粗暴「Say No」是不可取的。


第 4 个一点点:投资未来


程序员是一个非常残忍的职业。你所学所用的语言、框架、模式,很可能在数年内就成昨日黄花了;你现在嘲笑的另一群程序员,可能马上就能转身来嘲笑你了。所以理想的程序员除了做好自己的本分,还要花费时间来投资未来。什么是「投资」?投资就是你现在投入的时间,在未来会以更多的时间或者金钱(看看早几年学习iOS的程序员现在的薪酬!)回报你。


举我自己的领域——数据挖掘为例,08年左右Hadoop开始兴起,一时「大数据」概念火热,Hadoop工程师万金难求,各互联网公司纷纷把数据统计、数据分析和数据挖掘的业务切换到分布式平台上。这几年眼看Hadoop还在不断迭代,Spark又异军突起,一举刷新了Hadoop保持的排序记录,以内存存储中间数据带来的性能优势和丰富的数据结构让人爱个不停,各种奇异的小bug和陡峭的学习曲线又让人打退堂鼓。


那么,明眼人都知道Spark是未来的趋势(内存会越来越便宜),在主业务放在Hadoop的条件下,就可以适当把一些小模块切换到Spark上,同时留意Spark社区的发展,很快从Spark获得的性能收益就能把之前投入的学习时间挣回来。


第5个一点点:善用工具


善用工具可以分为 4 个层面:搜索引擎、不相信重复、代码片段、自动化。

我刚入行那会,一个计算机专业却当了公务员的朋友问我,你一点都没学过编程,平时怎么写代码?我说,谷歌,于是遭到无情的耻笑,以至于我在哪里的账号都叫 2shou,告诫自己是一个无耻的二手程序员。这是一个笑话,但如果现在问我,我还是要回答谷歌。


程序员的成长就像膨胀的圆饼,外面是无边无际的大海,圆饼越大,与大海接触的面也越大,懂的越多,不懂的越多,而计算机科学又是一门更新换代异常迅速的学科,同时也是知识互联网化最好的学科,很难利用传统的科班式有教有学的方法,相反通过搜索引擎则很容易获取到最新的知识。


不相信重复,大师的话叫DRY原则(Don't repeat yourself),代码写多了,会有人为的直觉判断好的和烂的代码,我的标准是简洁和规范,简洁并不是美感上的标准,重复越少,给自己出错的机会也越少,后期维护的成本也越少。


如果你不幸丢了三周前的代码,也许你能凭着过人的记忆力把脑子里残余的片段复写出来,但如果丢的是三个月前的代码,恐怕就没有那么好的运气了。理想的程序员会着力找寻有效的资料保存方式,把工作里灵光闪现写下的代码、脚本、配置、经验等短的片段保存起来,以便任何时候都能复查。


理想的程序员必须懒惰。对他们来说,重复的步骤和重复的代码一样丑陋,如果意识到一项工作有可能长期要重复,那么自动化的时间总是越早越好。


第6个一点点:管理时间


之所以管理时间会对程序员这个行当特别重要,是因为在完成任务时你必须像荒野里的狼一样,「独行」。没有外界约束的情况下还能稳定控制自己,保证能高效率地工作和学习,那么日积月累你肯定会变得比一般人厉害。


程序员干的是高强度的脑力活,一般每天集中4-5个小时应对本职工作就足够了,但工作之外,一定要安排时间用于学习。除了学习,留点时间放空自己也是必要的,利用泡茶或者喝咖啡的间隙,把弥足珍贵的时间留给自己,往前想往后想,事半功倍。


说了这么多,想必有人会问,费劲心思成为一个理想的程序员,又有什么用处?会有高薪吗?不。能升职吗?也不见得。迎娶白富美呢?不如去卖狗。


稻盛和夫曾经说过一个故事,明治时期的手艺人被天皇召见,虽然都是不读书的乡下人,但一辈子兢兢业业地做一件事情,自然有一股高贵的气质。理想的程序员,应该就是循着这种高贵的气质而去的吧!


-END-




推荐阅读



【01】含着眼泪看完,让程序员崩溃的瞬间!请勿对号入座【02】让程序员崩溃只需要一句话【03】十年程序员血与泪:千万别重构代码!【04】程序员,被代码耽误的段子手:承包了我一天的笑点【05】做软件的和搞硬件的,谁更优越?程序员:感觉搞硬件的真厉害!



免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存