如果你是一个工程师,那么在成为资深工程师之前,永远不要担任管理职务。
如果一种计算机语言不会影响你对编程的看法,它就不值得学习。
-- Alan J. Perlis,第一届图灵奖得主
我们不搞培养制,我们没有责任培养你,我们是选拔制,选拔更优秀的人上来,在全公司和全世界范围内选拔优秀者,落后者我们就淘汰。
-- 任正非
程序员是怎样的人
我最近看到一个令人深思的心理学实验,叫做"斯坦福监狱实验"(Stanford Prison Experiment),跟大家分享一下。
1971年,一个美国的心理学家在斯坦福大学心理学系的地下室,搭建了一个模拟监狱。
他找来一批志愿者,让他们掷硬币,一半人扮演囚犯,另一半人扮演狱警。这些志愿者都是正常人,从来没有接触过监狱,心理学家也不告诉他们,该怎么扮演囚犯和狱警。
每个人换上角色服装,进入逼真的环境。一开始,大家都举止笨拙,不知道做什么,还觉得这件事有点滑稽。
但是过了一会,事情就开始发生变化。囚犯们慢慢摆脱了从前的身份,开始接受现在的角色,站在囚犯的立场思考。他们感受到心理压力,没心思吃东西,向"狱警"提出抗议,彼此互相指责。
狱警们也开始像真正的狱警,管起了囚犯,划定单人牢房,让囚犯呆在里面,接受心理惩罚。同时,对囚犯发表长篇大论的说教,听任囚犯互相攻击,还会缓慢地在走廊上踱步,用木棍敲打牢房门的栅栏。
最惊人的是,过了两天,心理学家让所有人调换角色,囚犯扮演狱警,狱警扮演囚犯。结果,双方很快就适应了新角色,行为变得与新角色一致。
由于所有人太入戏,心理学家担心发生难以控制的局面,原定两周的实验不得不在第六天就宣布结束。
心理学家从这个实验,得到一个结论:人类行为受到工作环境的强烈影响,你会变成环境要求你成为的样子。 正常人关进监狱,就会变得囚犯般俯首听命,暗中算计;要是当上狱警,就会不由自主地居高临下、残忍霸道。
这个实验带给我们的启示就是,要小心你的工作,它会改变你,让你成为另一个人。 很多人都有一种印象,会计师的性格是斤斤计较、对数字格外敏感,律师的性格是重视利益最大化,海关执法人员的性格则是充满怀疑、不信任他人,这就是职业对性格的改变。
这不禁让我思考一个问题:程序员这个职业,会如何改变一个人的性格?
我能想到的有下面几点。
(1)你会变得习惯孤军奋斗,靠自己解决问题。编程本质上属于个人劳动,不是团队劳动。一段代码终究需要你一个人写出来,不可能两个人合写一个函数,你写上半段,我写下半段。现代软件工程是基于分工的协作,每个人完成自己那份工作,然后才能互相协作。
(2)你会习惯孤独。编程非常孤独,日复一日、长时间地与机器打交道,很少与他人面对面交流。如果遇到赶工期,一连好几天,都说不了几句话。我能想到的类似工作,大概只有作家。
(3)你必须非常细致,做到谨小慎微。每个细节都要考虑到,任何一个字母、一个小数点都不能写错,每个逻辑条件都要理清。只要有一个疏忽,代码就会无法运行,或者留下安全隐患。
(4)强大的心理承受能力。程序员是压力很大的工作,公司越大,压力越大,代码写得慢、写错了、或者写不出来,你都要承担责任。有时候出现重大线上 Bug,别人在屁股后面催着你,你却迟迟想不出问题出在哪里,又没有办法测试,那种心理压力真会让人崩溃。
总之,一个人如果没有形成稳定的个性之前,就去当职业程序员,可能就会变成上面这样:不习惯与他人紧密协同,喜欢单干,长时间的孤独劳动,非常重视细节,任何一处都不能偷懒或写错,心理压力巨大。
如果你想好了,能够接受变成这样的人,可以来当程序员。
"一只蓝鸟站在一大篮彩虹马卡龙上。"Imagen 与 DALL-E 效果对比
一个开源的跨平台 BitTorrent 客户端,自带搜索、数据分析、块视图等大量丰富功能。
这个网站很有意思,收藏一些消失的声音,比如打字机的击键声、点阵式打印机的打印声、Windows 95 的开机声。
很多人心目中,阅读书籍的过程是,从页面读取句子,理解以后进入大脑,获取知识,就是下图的箭头方向。
但是,如果你真的想从读书中有所收获,阅读过程应该是这样的:
你从页面读取句子,读了以后提出问题,再回过头读取句子,在书中寻找答案,最终获得知识。
这篇文章的作者是 Saleforce 公司的前端工程师诺拉·劳森(Nolan Lawson),题目就叫做《复杂软件的崩溃》(下图)。
"任何在科技行业工作足够长的人,尤其是在大公司工作的人,都曾见过下面的场景。
有一个遗留系统,很大很复杂,没有人完全理解它是如何工作的。
架构师被要求"修复"系统,他们找来一块大的白板,把这个大系统分解成很多方框和箭头。对于遇到的问题,他们的解决方案就是......添加更多方框和箭头。没有任何一个可以从系统中消去,每个人都只是加上自己的那部分。
根据他的文章,我整理了一下,Saleforce 内部的情况大概是这样的。
客户的需求非常复杂。为了满足这些需求,大型软件不可避免变得复杂。
软件公司的管理者真正在意的不是系统的复杂性,而是利润。只要软件能赚钱,高层并不在意软件变得复杂。
软件复杂性都落到少数架构师和高级程序员的头上。每个人加上自己的解决方案(方框和箭头),让软件越来越复杂,然后不可避免地,他们就会在一段时间后离开公司。
复杂系统最终变得难以理解和维护,唯一的解决方法就是放弃旧系统,从头开始写一个新系统。
诺拉·劳森的结论很悲观:怎么解决软件的复杂性?解决不了。最后就是你走人,公司把软件推倒重来。
这就是一个大厂高级程序员的真实想法。国内的情况其实差不多,上面的描述完全适用于 BAT 内部的复杂系统。
诺拉·劳森还说了一个观点。大家通常认为,复杂系统往往会在经济繁荣的时候崩溃,因为业务太多,支撑不过来,但他认为不是这样的,系统崩溃往往发生在经济收缩期。
经济繁荣时期,软件公司会大量雇佣新员工,投入更多的财力和人力,支撑复杂系统。等到经济收缩期,公司开始减少投入、冻结招聘或裁员,复杂系统可能就会在这个时候出问题,变得难以维护。
现在就是经济收缩期,那么接下来,会不会就是软件故障的高发期,我们将看到很多复杂系统的崩溃?
前端依然是 IT 行业中最活跃的分支。一年一度的 GitHub 调查中,JavaScript 多年来一直稳居第一,TypeScript 更是快速上升到今年的第四位,仅次于 Python 和 Java。
技术稳定带来的一个后果,就是新框架、新工具少了,大家更关注已有框架/工具的改进和功能增加。
大厂的前端团队也转向了精细化探索,注重如何做得更细、更好,垂直化的技术领域(比如可视化、工程化等)得到了更多的关注。企业的用人要求也越来越高,从能够上手工作就可以要人,变成了要求深入某个领域。
总的来说,现在的前端开发处在下图右侧的那个椭圆,比前一个阶段的难度上升了。
波斯波利斯是古代波斯帝国的首都,位于现在的伊朗,已经是一片废墟了。这个页面还原了这座雄伟的帝国都城,重建了 3D 街景,让你在其中漫游。
1950年代,一家国外的牙膏公司,向公众征求能够大幅提高销售额的点子。
几天之后,有一个人来应征,声称他有办法让销售额快速增长40%,而且实施起来不需要很大成本。他要价10万美元。
公司管理层犹豫了数周,最后还是同意了给钱。
等到法律手续和付款流程完成后,这个人给出装有一张小纸条的信封,小纸条上只有四个英文单词:
"Make The Hole Bigger"
这句话翻译成中文,就是"让牙膏开口更大一点"。
此前,管状牙膏的开口一般是5毫米直径。稍加计算就可以知道,当直径从5毫米增加到6毫米时,假设挤出的牙膏长度不变,挤出量会增加44%。
原先顾客用一管牙膏的时间,现在要1.4管牙膏才能满足需求。看似很小的改变,却刷新了这家公司的销售记录,创造了历史。
假晶体丑闻(中文)
英国的一个晶体结构数据库宣布,将删除近1000个晶体结构,因为它们是不存在的。
它们来自800多篇中国医生的论文,因为中国医院要求,医生只有发表论文才能评职称,结果就产生了这些不存在的小分子结构。
一件事最可怕的时刻,总是在你开始做之前。
-- 斯蒂芬·金
对于那些没有想象力的人来说,保持常态就是他们的理想。
-- 荣格
IT 行业与传统制造业有一个重要区别,就是 IT 行业有着严重的垄断。
全世界的智能手机有70亿部,比汽车多出5倍(14亿辆)。但是,智能手机制造商比汽车制造商少了好几个数量级。搜索引擎、社交网络、操作系统都是这样,几个巨头就垄断了整个市场。
2021年只有两种人在写博客,一种是试图建立受众并从中获利的人,另一种是只想写出想法、而没有任何目标的人。
这两种人的行为都非常好。选择做你喜欢的事,坚持下去,它们最终都可以对他人产生价值。
-- 《我从博客中学到的东西》
软件开发的目标不是类型安全、100%的测试覆盖率、流畅的代码逻辑、完善的开发工具、高效的系统、使用最好的编程语言、优雅的 API 设计、快速的反馈循环、编写很棒的代码等等......
软件开发的真正目标只有一个:发布解决客户问题的软件,为客户提供价值。
最好的销售方法,就是真诚地相信你所销售的东西。
出售你真正相信的东西感觉很棒,而试图出售你不相信的东西,感觉很糟糕。
人们拥有一种神奇的能力,就是使事情发生。但是大多数人从来不敢尝试这种能力,只是默默接受世界本来的样子。
Comments