漫淡技术人的自我修养
Redis之父antirez在去年退休的临别赠言中讲到:
有时候,我觉得软件成果虽然很棒,但永远不可能像经典著作那样永世流传。这并不是说软件本身不好,而是软件具有动态特性,其中某些部分总会随着时间推移被替换掉。所以我越来越感觉自己做的一切都是在浪费时间。我们设计和编码的系统,终将被新的系统取代。
或许大家看到这句话时,看出了antirez所表现出的悲观情绪:“我们设计和编码的系统,终将被新的系统取代。” 这是一个很伤感的声音,而作者想比也是有过深度思考。有些人在思考之后走向乐观,而有些人在思考之后走向了悲观。那么对于我们,又应该引发怎样的深思呢。信息技术一往无前,在这个“终将被取代”的过程中,我们到底沉淀下来什么?我们又是如何迭代的,问题的根源在哪里?
一、从程序员的三大情节说起
软件之所以为“软”件,相比于硬件,就在于它的迭代属性以及效率之高。换句话说,只有变化才是不变的,软件的存在就是为了变化,为了迭代。在冯诺伊曼计算机体系结构下,软件技术栈的发展越来越上层迁移。其对底层的依赖会越来越少,这句话的另一层意思是,改变技术的底层依赖栈是极其困难的,基本是指数级的复杂度。这也就不难理解科技革命的基石一旦建立,剩下的基本都是在这个大厦边界内做事情了。这对于现在的很多科技产业都是如此,很难有颠覆式创新,而是不断优化的积木式迭代。
(1)要解释Redis创始人的困惑,本质上是要理解软件的生命周期
汉诺塔一直在动态的迁移,并逐步趋向于越来越稳定的技术架构。和物理世界的“优胜劣汰”一样,这是一个软件进化的必然结果:在不停的迭代过程中,产生了越来越稳定的技术架构。我们对软件开发的理解,应该也是一个动态优化、不断更新的过程。
(2)操作系统与数据库的生命周期,以十年计
不同软件的生命周期不同。汉诺塔越底层的架构,因为其依赖栈的复杂性而导致迁移更难。所以,底层的技术一旦确定,便很难加以改变。我们的桌面操作系统,迭代很快,一般很难超过20年,而服务端操作系统和数据库(存储)系统,也很难超过50年。
(3)语言的生命周期,以百年计
而对于语言的生命周期,一般是按百年计的。语言一旦流行开来,很难实质性地消亡。大部分语言比创建它的人或公司寿命还长,真正做到了“流芳百世”。所以,程序员的语言之争,想必是最大的情节所在。
二、五级工程师,从工匠到艺术
“码农”和计算机工程师其实并没有明确的界限,他们每天都在和计算机代码打交到。正如Redis之父antirez所言:“I write code in order to express myself, and I consider what I code an artifact, rather than just something useful to get things done.” 但现实是,并不是每个人“coder”都能向他那样创造伟大的数据库(存储)系统。
一个“码农”能走多远?在吴军老师看来,如果不断努力而且方法得当,能走很远很远:能够获得图灵奖,成为工程院院士,也能成为改变世界的人物。
吴军老师在《硅谷来信》中,参照朗道的方法,提出了一个计算机工程师和科学家的五层分级标准。这五层大概这样描述。
五级:能够独立解决问题,完成工程工作。一个能够独立工作、很好完成任务的工程师,属于五级工程师,Google、微软和Facebook里面一半左右的工程师属于这个级别。部分IT企业里写代码的人,很多还达不到五级工程师的要求,因此被称为“码农”也不太过分。
四级:能够用已知的最优方法(state of the art)解决问题,并指导和带领其他人一同完成更有影响力的工作。很多公司里所谓的技术专家、技术大拿,大致就是这个水平。
三级:能够解决前人未解决的问题,并且能独立设计和实现产品,在市场上获得成功。目前普遍的情况是,在大部分IT企业中能够达到这个水平的人非常少,他们通常是企业里的总工程师或者架构师。这个级别的工程师在Google或者微软里面却不少见。
二级:能够提出重要的计算机理论和实践中的新问题,并解决它们,还能设计和实现别人做不出的产品,也就是说这一级别的人的作用很难取代。
一级:能够开创一个产业,或者奠定一个学科的基础。
每一级在各个维度差出10倍。也就是说,一级工程师的贡献是二级的10倍,二级是三级的10倍,以此类推。
考虑到刚毕业或刚入行的新手,吴军老师在他的新书《计算之魂》中,基于其原有的五层分级又增加了两级,提出了一个计算机工程师和科学家的七层分级标准。增加的两级如下:
六级:能在他人指导下完成计算机工程师的工作。那些水平还不错的大学的计算机专业硕士毕业生,或者在一流计算机公司里工作过半年、过了见习期的新人,大约就是这个水平。
七级:本科毕业自水平不错的大学的计算机专业,但没有参加过六个月以上实习的学生。也就是说课程的内容都学过了,就能达到这个水平。当然,从小就接触编程的计算机天才,他们可能再高中就达到了这个水平。
一个人优秀的计算机专业毕业生,经过一段时间的锻炼,能够熟练应用工程的知识和技能解决问题,独立完成所分配的工作,而不需要他人指导,就算是一个合格的五级工程师了。对于四级工程师,需要经历大约10000小时的训练,也就是整整四年从事专业工作的时间,才具备一定的领导能力和在工程上把大问题化解为小问题的能力。需要说明的是,工程师和科学家不同,后者考虑的是对和错,前者只是在现有条件下考虑好和坏的解决方案。对于三级工程师而言,需要深入理解计算机,即对科学有品位(taste)。同样做一件事,怎么能做得够艺术水平,里面很有讲究。这里需要对计算机科学的“大道”–即本质或精髓有深入的理解;其实要清楚计算机科学的边界,知道哪些事情不能做。
达到三级工程师水平对于大部分人已经是天花板了。那怎么才能继续往上走呢?根据吴军老师的经验和对不同级别工程师的接触,立志成为最好的计算机工程师要解决四个问题:
1.判断什么事情能做,什么不能做。从事计算机科学行业的人,最重要的一点就是要明白做事情的边界,然后在边界内做改进。比如了解今天的人工智能能做什么、不能做什么就很重要,否则很多努力都花在了制造不可能实现的永动机上。在计算机领域,我们需要不断地了解计算机学科中的各种边界,从数学的边界,到图灵机的边界,再到计算机系统和各种算法的边界。
2.任何重大发明都要有预先要求(pre-requisites)。比如要烧制瓷器,就要能将炉温长时间保持在1300℃,这就是预先要求。在计算机领域也是如此,在尝试前人未做过的事情时,要知道预先要求是否已经满足。这一点在应用型的研究以及工程中至关重要。进入21世纪后,互联网骨干网的网速是得异构并行计算成为可能,加之海量的数据处理需求,使得Google的云计算工具应运而生。
3.对计算机科学的深刻理解。这种深刻理解包括空间上的和时间上的。所谓空间上的,就是知识的广度和深度。所谓时间上的,就是从计算机科学的过去、现在和未来看清它的发展变化规律。有了这样深刻的理解,才能在遇到复杂问题时找到最简单而有效的解决方法。Google搜索的负责人辛格博士正是基于对计算机科学空间全面理解,在2010年后开始将机器学习技术应用在网页搜索。或许就是因为他看清了当时采用机器学习的条件,即算法和数据都具备了。用简单有效的方法解决复杂问题,正是基于他对计算机科学的深刻理解,正如他的名言:计算机不必学习人的做法,就如同飞机不必学习像鸟一样飞行。
4.掌握计算机科学的艺术。计算机科学发展到后来成为一门艺术,正如高德纳的不朽之作《计算机程序设计艺术》。将计算机科学掌握到炉火纯青、运用之妙存乎一心到地步,需要体会出这门学科中的一种美感。对于从业者来说,需要完成从工匠到艺术家的升华。如果一个问题是靠一堆拼凑出来的、修修补补的程序勉强解决的,说明工程师对这个问题没有认识清楚。很多看似复杂的问题,其解法都非常漂亮。如哈夫曼编码算法、图论中的最短路径算法等等。正如高德纳所说:“Computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty.”(计算机程序设计是一门艺术,因为它把累积的知识应用于世界,因为它要求技巧和智慧,特别还因为它产生美的目标。)
三、中年危机,跨不过35?
最近有一位45岁的大龄程序员,在国务院官网留言,称自己精通各种技术体系,而且还考取了各种证书,但辞职回家半年后再回来找工作的时候,却发现连个面试机会都很难找到。这个新闻引发了互联网圈内关于IT行业的热烈讨论。
今天,我们生活在信息技术的时代,而受益于20世纪60年代摩尔定律的持续作用,全球信息化、数字化浪潮正汹涌来袭。这场科技革命的技术核心就是将人类的经验数字化,然后作为服务规模化地输出。而未来的世界,在以互联网为基建的基础下,加之大数据、云计算和人工智能等技术的应用,必将产生更多影响整个人类文明和社会进化的产业应用。而这也将继续催生IT人才需求的继续上涨。
中国互联网的发展历史虽然只有20多年,但行业竞争激烈,内卷严重,是个写代码的都自称为“工程师”。但“卷”的背后,其实是社会经过高速发展之后,达到平稳发展状态时出现的一个必然结果而已。这对产业进化是有利的,只有更多掌握最新技术能力的人才才能不断推动科学技术向前发展。而作为这个领域的从业者,在享受行业红利的同时,应该从自身内在能力出发,不断提升自己的专业技能水平,紧跟最新的科学技术,深刻思考社会未来发展的内在需求和进化方向,通过技术创造更多价值。
路漫漫其修远兮,吾将上下而求索。
学长壳太优秀了
2022-01-09 上午1:23催更啦
2022-08-19 下午6:40来点更新
2024-02-02 下午9:52