@Lenciel

1024的礼物

目录

优质工程师是人类之光

昨天是 1024 节,所谓的「程序员节」。

但是在各种媒体上,这群人好像主要被描述成一群发量少,格子衬衫,邋里邋遢背着双肩包,孤僻而木讷的怪咖。

看到这些基于刻板印象的消遣,心里觉得怪怪的(当然,也有些二逼公司自己就在消遣自己的员工)。

其实,人类目前能构建的最复杂的系统,就是软件系统。优秀的软件工程师(我说软件工程师是因为叫程序员是片面的),他们不但掌握构建软件系统的黑魔法,而且大多聪明可爱,有理性的一面也非常感性,上知天文下知地理还不装逼,沟通表达和推动事情的能力都很强。

关键是,优秀的工程师普遍收入不错,所以大部分过得挺正能量的。

简直是人类之光。

人们有那些刻板印象是因为,他们从来都是无关痛痒的配角。

在商业社会,无论是建立丰功伟业的乔布斯马云,还是撕得昏天黑地的当当两口子,企业家才是主角。就算有公众号要写王坚,标题也只会强调他的商业价值:

「当年忽悠了马云10亿的这个男人,还了马云5000亿!」

我从工作到现在,一直是工程师,大部分朋友也是。

虽然被当成配角,但我很喜欢这份工作,也很爱这个群体。

所以我想,不如把作为一个工程师,有什么是我希望十年前就有人告诉我的,总结一下,算是给大家的一个礼物。

你有几十年的规划?

首先声明,如果你是有很多选择的人,这篇文章可能不适合你(但也未必)。

我是 80 后,我们的父辈们因为经历了中国改革开放的过程,所以有一些选择和改变的机会。我们的下一代,靠着我们手里攒起的本钱,可能也会有一些选择和改变的机会(愿世界和平)。

我们这几代人,选择不多:在城市化进程中,完成从山区、农村或者小县城,到大城市的迁移,主要是靠读书和工作。

在之前讨论 996 的时候我说过,对大多数人而言,工作是通往更理想的工作或者人生,唯一的手段。

而且按照现在中国的社会和经济发展情况,大多数「城一代」,可能需要付出终身的努力,才能勉强让自己的家庭在自己工作的城市里真正扎根。

然而,你问问身边的同事,几乎没有人有长远的,保障自己安全度过这几十年的职业规划

这是一件细思恐极的事情,等你中年了就知道了。

还好,你进入职场的时候是一名「软件工程师」,规划并不复杂:起步之后,只要尽最大努力避免被淘汰出局,修成正果的问题不大。

但因为创业的风潮,很多工程师开始用类似于玩彩火箭的方式对待自己:把自己最宝贵的一段甚至一大段时间当成筹码,扔进自己看不清的漩涡里面,就希望屏幕上转出五彩斑斓的大字:「财务自由」。

所以,很多人 40 岁不到就精疲力尽,充满沮丧地离开了这个职业。

我建议不妨把「工作」当成一个使用期限至少 30 年的产品去打造,用户就是你自己。

这个产品的核心要素是规划、能力、人、钱,这些要素也会形成飞轮效应

这是源自亚马逊的模型,但简单说就是,只要集中精力发展它们,随着时间的推移,这些要素会在自身壮大的同时,发生一些神奇的化学反应:每一个都使其他的部分变得更容易,并且有复利。

规划

当你把「工作」当成是一件长期的事情(如果身体允许的话,我估计我会工作五十年左右),规划就变得很重要了。很多人每天都会觉得工作很烦,是因为没有做到下面两点:

  1. 干自己真正有激情的事情
  2. 注意节奏,可持续发展,不要 burn out

第二点和第一点同样重要,就算好吃,也别暴饮暴食,小心伤着脾胃。

找到自己的节奏是所有要素发展的基石,所以它是飞轮的起点也是终点,后面我们还会回来。

能力

在一份工作中你最重要的收获是能力的提升。

学习,你得不停的学习。

比较反直觉的是,学习不一定是学「新东西」。在工程领域,太喜好新技术是很容易有的毛病,而实际上,主要的收获常常来自于对干过的事情、他人的经验不断地吸收、反思和精进。

过去的优秀工程师是很擅长复盘的,比如几个月前过世的 Erlang 的作者 Joe Armstrong 就说过,他每周会拿 4 个小时来复盘自己,这个习惯对他取得最终的成绩贡献很大。

但是要注意的是,我们这代工程师缺乏复盘,很多时候并不是因为大家想偷懒,而是随着技术的发展,信息的获取速度太快,体量太大,我们绝大多数人每天都在并行处理大量的跨多个领域的任务。

所以在这个年代,「能力强」常常意味着你怎么高效的获取、处理并输出信息,促成组织需要的结果发生

这三个步骤每个都可以做很深入的分享,这里不细说了。

另外,你没有时间在每一个领域成为专家,但你得花时间在某一个领域成为专家。

广度要么是深度的副产品,要么是你自以为的广度,其实只是浮光掠影

你有几十年可以计划,别着急。不断发展自己,不断反思,不断调整。

对于软件工程师,一个特别要计划的就是什么阶段发展技术能力,什么阶段发展管理能力:这是两个完全不同的领域,都需要大量的学习和实操,才会有螺旋式的上升

(不想叫「人脉」是因为这个词臭了)

前段时间跟一个很成功的企业家聊天,他说自己每年会准备大概 100 万的经费,去找各行各业的达人聊天。运行了几年之后他发现,每年如果他这个钱花光了,公司就做得很不错;如果有哪年这个钱没花到位,经营也不太好。

这个关联性建立得是不是合理可以再讨论,但是这说明了靠谱的人有多重要。

我选择去哪个公司哪个团队,最主要的原因就是因为人。

随着工作经历的增加,我还发现,哪怕是大家不再共事,你结识的靠谱的人仍然会影响着你。

他们有人给你推荐靠谱的机会,有人成为你的分析师和顾问,有人成为你的创业伙伴或者投资人。

还有,这些聪明、积极又靠谱的人,能够影响的还不仅仅是你的工作。

所以,遇到他们,请认真对待,不要放过,如果填满你的邓巴数的人是他们,你也不会差的:据说人是自己关系最好的五个人的平均值,你算算。

对于刚刚进入行业的你,请尽量加入那些声名显赫的大公司,他们有资源聚集一大帮靠谱的人,然后因为各种偶然必然的原因,这些人会和你一起散布在软件行业的各个山头里。

声望

因为这个词的「功利性」,很多的工程师,包括我自己,会一开始有本能的抗拒:无论有人让我去什么技术大会做分享,还是去极客时间开个专栏,我的第一反应会是,不去。

在我看到一份简历的时候,跟一个人聊天的时候,也会尽量在脑子里面消除他的声望造成的我对他或者他的观点的影响。

但随着工作经验的增加,我发现声望确实非常重要。在公司内和市场上一些重要机会出现时,谁能获得这些机会很多时候能力和声望相比,后者可能更重要。

并且,声望的增加并不是靠装或者骗的。

仔细观察你会发现,能够在事业上持续获得成功的人,做人通常也很棒,对其他人产生了积极的影响的。

卑鄙是失败者的通行证,最多让他们赢一两集。

要想真正增加声望,只能靠不断的高质量的利他,这需要你从很多方面突破自己,但是值得你坚持和投入:它是很多事情的润滑剂,并且也有复利,一旦你有了一点点声望,扩大它会变得越来越容易,做个对别人有用的人就行了。

如果你玩过魔兽世界,不妨试试,每年在自己的规划里面给自己留一些时间,刷声望

变老意味着对更多的人负责。

伴侣,孩子,父母,团队,朋友等等。

同时,对我们开放的机会将越来越少。

一方面,如果你一直是普通职位,这个行业的年龄歧视是普遍存在的。

一方面,如果你的职位高了,这样的机会是很少的。

虽然如果你确实遇到了这些情况,我也可以安慰你:所有遇到这种情况的人,最终还是会找到一份工作。

但这个过程可能很长,可能因为钱的因素,你没法好好的挑选下一份工作:你按照 30 年期限打造的产品就脱轨了。

所以钱是一个好东西,因为它可以换来时间,让你在不同的工作之间,在工作和休息之间,有探索的余地。

现在流行的FIRE运动(Financially Independent, Retire Early)你可以研究一下,挺适合技术人实践的。但记住你的目标:不是「财务」而是「自由」,为你自己和你负责的人创造灵活性,让你们更审慎同时也更自由地挑选机会或者是进行创业

这里顺便就说一句,创业可能不是一个财务自由的好途径,其实更适合财务自由之后干。

如果你特别想创业,先加入一个靠谱的创业公司。

规划

我们又回到了这里,规划是最关键的地方。

假设你做到了之前说的两点,从事了自己感兴趣的行业,也注意了节奏,随着飞轮开始转动,可能慢慢的也会缺乏规划。

要随时停下来检查自己的节奏。

软件这个行业的门槛其实很高的,技术更新快,认知负担也重,关键是复杂度高。

要想做到优秀,无论是在某个领域有深度有突破,还是在规划和管理技能上有突破,都需要你在一个稳定的环境里面持续投入好几年。

学会对自己的能量进行管理,不仅仅是对你的工作很重要,对你的心理健康也很重要

在找到适合自己的节奏之前,你会不断遇到挑战。

在找到适合自己的节奏之后,你还是会遇到挑战,因为你在工作以外的角色和责任,大环境和团队的具体情况等等因素,会变。

没有简单的公式可以评估你是不是处于正确的节奏,这取决于你本身的智力体力和心力。

但有一个简单的测试就是,你能不能空出时间做一些你觉得开心的事情,并且不感到焦虑。

这个时间是多久?一个小时?一下午?还是一个星期?

比如今天我花点时间写这个东西,挺开心的。

现在,我要按照自己的规划下班了。

我当然不会告诉你们,我发现自己的规划是错的,因为电梯没电了。

他的密码原来是...

2014 年左右,大叔们往 Github 上丢 BSD3 的源码时,放上了 /etc/passwd 文件,于是诸如 Ken Thompson,Dennis Ritchie,Brian W. Kernighan 这样的老司机就玉体横陈了,只不过关键部位,打了马赛克:

Don't touch me

众所周知,打马赛克的 crypt 函数是基于 DES 的,很弱。说众所周知是因为它的作者 Robert Morris 和 Ken Thompson 在 manpage 里面自己就是这么写的:

The DES algorithm itself has a few quirks which make the use of the crypt() interface a very poor choice for anything other than password authentication. If you are planning on using the crypt() interface for a cryptography project, don’t do it: get a good book on encryption and one of the widely available DES libraries.

我猜设计者这么实现是有它的「历史原因」的:那个年代大众能够获取的计算能力还非常弱搞不了什么暴力破解,以及 OS 的安全机制是分层的(比如这个文件本来要 root 才能打开看)。现在 crypt 早就是 obsolete 的了,大家至少都用基于 AES 的 mcrypt 或者 ccrypt

总之,现在大家的机器这么猛,只需要用 hashcat 这样的工具,就能很容易看到文件里面大多数人的明文密码了:所以你能想到 Brian 的密码是 /.,/.,, 么。

但是,这堆人里,Ken 爷的密码就没有那么容易看到,一下子成了悬案。当时觉得因为这部分代码就是他写的,知道有多弱鸡,所以设密码的时候用了门槛很高的组合:毕竟弱如 DES ,如果努力混用大写字母和特殊字符,就算上 GPU 也得搞好几年才能出来的。

结果,今天偶然在订阅里看到一个帖子,上个月一个叫 Nigel Williams 的兄弟用一块 AMD (还能是谁的呢)的 Radeon Vega64 把这个密码给破解了:

Don't touch me

所有人看到这邮件的感觉应该都是,原来如此,但 p/q2-q4! ,这密码 Ken 爷你怎么记住的。

结果有人解读说,这是一种国际象棋记谱子的方法p/q2-q4! 表示了很常用的Queen’s Pawn开局

嗯,Ken 爷这样的计算机对弈的先驱,记住这样的密码应该不是难事吧。

他们真有趣,我们要学习。