《新程序员001:开发者黄金十年》

内容目录

新程序员001:开发者黄金十年

CSDN

36个笔记

◆ 蒋涛对话王成录:开发者的黄金十年

> 涛:听了你的分享,未来的确令人兴奋。不过更多的机遇下也对开发者提出了更高的要求,你眼中优秀的开发者具备哪些特征?

王成录:好的软件开发者,我个人觉得有两点特别关键:第一,自驱动力一定要强,被动的人很难将软件做好。第二,持续的学习能力。虽然读书的时候很多人很刻苦,学了很多理论知识,但实际上两三年不用可能就忘了。

蒋涛:如今新一代的程序员,身处在被游戏、短视频包裹的互联网圈中,和过去的程序员相比,你认为不同时代的程序员会有差别吗?

王成录:因为我对华为的员工了解多一点,我认为越年轻的程序员反而越努力,其中很多刚毕业三五年的程序员,他们在学校里养成了很棒的习惯,比如不断参加学术会议,研究顶会的优秀论文等。

再往前的程序员,就是依据自己的经验比较多,不太与外面沟通和连接。我认为这一点对于软件而言,是很大的一个短板。

蒋涛:华为是如何培养管理层的?是否多数管理者都是技术出身?

王成录:绝大部分都是技术出身,从底层开始一步一步做上来的。华为给了大家很多在不同岗位工作的机会,只有对系统结构清晰,才能更好地进行决策。尤其在业务层面,与大家沟通交流才能处于同一平面上。如果作为一名管理者,没有技术功底和业务功底,只会跟着别人的脚步走,想要做到领先会非常困难。

◆ 世界因开发者而动 对话声网Agora创始人&CEO赵斌

> 操作系统生态的发展规律会导致最后只有一两个操作系统可以持续发展,而这种技术当时基本上不在中国生产,所以就想自己是不是应该去美国涨涨见识。

[插图]

蒋涛:作为来自中国的程序员,相比美国当地的程序员,你感受到了哪些不同?

赵斌:从个人能力或者个人视角,没感觉有太大差别。但从产业和团队的视角,我觉得差距很大。做Windows、MSC、Office这些软件之时,微软已经能组织几千人的程序员团队分工配合,架构师、各个领域的专家、测试人员形成整个工作流,这就是软件工程方法。

> 蒋涛:关于人才方面,第一批团队组建的时候,你的选拔标准是怎样的?

赵斌:只要是创业者,都想找优秀的人才。与我第一次创业差别比较大的地方在于,我们将一些柔性特质从早期提炼出来,作为一个很重要的因素。

◆ 对话Linus Torvalds:Linux 30年

> Jeremy:如果用Rust这种专门为性能和安全而设计的语言来进行部分重写可以吗?在这种情况下是否还有改进空间?其他像Rust这样的语言有没有可能在内核中取代C?

Linus:还需要再观察。我不认为Rust会接管内核,但是做单独的驱动程序(或整个驱动子系统)还是有可能的,或许还能做文件系统。所以它不是要“取代C语言”,而是“在适当的地方增强C”。

特别是驱动程序约占实际内核代码的一半,所以空间非常大,但我不认为有人真的会用Rust全盘重写现有的驱动程序。绝大多数人都会“用Rust做新的驱动程序,在适当的地方重写几个驱动程序”。

但现在更多的人仍处于“试着玩玩”的阶段。要指出优点很容易,但其背后存在着复杂性,所以我更愿意持观望态度,看看其承诺的优点是否真的能实现。

> Jeremy:内核有哪个部分是你个人最引以为豪的吗?

Linus:个人认为是VFS(虚拟文件系统)层,尤其是路径名查找和我们的VM代码。前者是因为Linux在做基础任务时表现确实非常优秀(在操作系统中查找文件名就是操作系统中的基础核心操作)。后者主要是因为我们支持20多种架构,但仍使用基本统一的VM层,我认为这一点非常了不起。但与此同时,这很大程度上取决于“更注重内核的哪一部分”。我个人在VM和VFS领域的参与更多,因此自然也会选择这两方面的内容。

> 找到并信任具备“好品味”的人——这不仅仅是Git的故事,也是Linux的历史。与Git不同的是,Linux是一个我仍积极亲自参与维护的项目;但与Git相同的是,它也是一个有很多人参与的项目。我认为Linux的一大成功之处就在于有数百名的维护者,他们都具备难以言表的“好品味”,齐心协力共同维护内核。

Jeremy:你有没有过把控制权交给维护者后,却发现这是一个错误决定的经历?

Linus:我们的维护体系并不是非黑即白且僵化的,所以从来没有出现过此类问题。而且我甚至没有将维护控制权严谨记录归档:我们有一个MAINTAINERS文件,但那只是为方便让大家为任务找到合适的人选,并不是某种排他性所有权的标志。

因此,“谁拥有什么权利”更像是一个流动性指导,以及“这个人很活跃,而且做得很好”。

> 天时、地利、人和都非常重要。对于Linux和Git来说,最重要的是这两个项目恰好满足了很多人的需求,或者是因为很多人都有这样的需求,但我是唯一一个站出来创建了这样的项目,并取得了成功的人?我个人更倾向于后者,选择很重要,运气也很重要。

另一方面,我觉得对于开源维护者而言,确实需要一些务实的精神和思想,这很重要。

首先,你必须时刻关注其他开发人员。当你遇到技术难题时,可以与他们交流,可能会有不同的想法。

难的部分在于,你可能需要和自己不太喜欢/不太喜欢你的人交流,最终可能会导致双方都很不爽,但必须克服这些困难完成工作。我想说的是,维护一个大项目需要付出大量努力,而且你需要付出长期的努力,这不是儿戏。

◆ 20年开源软件之路——专访OpenCV创始人Gary Bradski

> 但以我的个性,我基本上不怎么搭理这项规定,因为当时计算机已经发展很快了,所以我希望研究一些对整个计算机领域更具价值的东西。我发现计算机视觉需要大量的计算,而大部分实验室都在“重复造轮子”,有些工作甚至是学校里的研究生就能做的。于是我去了MIT(麻省理工学院)实验室,发现他们自己开发了一些库,实验室内部的人都可以使用。我当时就想,为什么不能把这样的库开放给所有人呢?这就是我创建OpenCV的主要原因。

第二,如果大家能基于一个通用、公开的基础设施来做开发,就能更清楚这套基础设施的特点和基本原理,从而减少很多Bug。

第三,我做OpenCV是想加速AI产业的发展,尤其是智能AI(Intelligent AI),这是我毕生所愿。

◆ 直接学Vue 3吧——对话Vue.js作者尤雨溪

> 《程序员》:8年过去,你认为前端发生了哪些变化?未来前端的发展方向将是怎样的?

尤雨溪:我个人觉得,前端主要的变化就是从相对“手艺活”的定位变得更加工程化了,时下已经有了大量成熟的工具和模式,生产力大大地提高。目前在前后端分离的场景下已经没有太多潜力可挖,所以在生产力和性能方面的探索开始分裂为两个方向:

▪ 一个是JavaScript全栈,打通前后端数据和类型,比如React Server Components以及Next/Nuxt这样的全栈框架;

▪ 一个是对传统后端更友好,但保留现代前端部分开发优点的方案比如Phoenix LiveView、Laravel LiveWire。

> 程序员》:8年过去,你认为前端发生了哪些变化?未来前端的发展方向将是怎样的?

尤雨溪:我个人觉得,前端主要的变化就是从相对“手艺活”的定位变得更加工程化了,时下已经有了大量成熟的工具和模式,生产力大大地提高。目前在前后端分离的场景下已经没有太多潜力可挖,所以在生产力和性能方面的探索开始分裂为两个方向:

▪ 一个是JavaScript全栈,打通前后端数据和类型,比如React Server Components以及Next/Nuxt这样的全栈框架;

▪ 一个是对传统后端更友好,但保留现代前端部分开发优点的方案比如Phoenix LiveView、Laravel LiveWire。

具体来看,JavaScript语言在ES2015大跃进之后慢慢稳定。随着微软停止支持IE11,我个人希望看到的情况是现代JavaScript语言特性的支持能够彻底普及,这样无论是框架还是工具层面都可以在兼容方面少浪费些精力。TypeScript会越来越普及,类型会成为大部分非玩票前端项目的标配。

另一个崭露头角的趋势就是用非JavaScript语言编写支持前端的工具。自从有了Node.js,前端工程师们自然而然地用JavaScript去写给自己用的工具,但现在我们发现在构建性能上,JavaScript依然是完全没法跟Go或者Rust这样的编译型语言比的。esbuild和swc已经用优于JavaScript工具链几十倍甚至上百倍的性能证明了这一点。某种程度上来说,接下来几年非JavaScript语言对前端的影响可能更多会体现在工具链方面。

◆ RISC-V开源势头强劲,CPU领域“三分天下”局势已定?

> 
——RISC-V International首席技术官Mark Himelstein访谈录

文 | 郑丽媛、屠敏

开源指令集架构RISC-V诞生于2010年,几年光景便火遍全球。它对于开源硬件的意义,一如Linux之于开源软件。在本文中,RISC-V International首席技术官Mark Himelstein为我们揭开了RISC-V的神秘面纱,从社区、商业化等诸多维度深入分享了RISC-V的成功秘诀。

中国工程院院士、中国开放指令生态(RISC-V)联盟理事长倪光南曾说:“未来RISC-V很可能发展成为世界主流CPU之一,从而在CPU领域形成Intel(x86)、ARM、RISC-V三分天下的格局。”

◆ TiDB 创始人黄东旭:In Community We Trust

> 反之,如果只是简单地秀优越感,是不会长久的,随着兴趣衰减,网络效应也会崩塌。

网络效应对于基础软件的意义

对于基础软件来说,我一直坚持两个观点:

▪ 基础软件是被“用”出来的,不是“写”出来的;

▪ 迭代和进化速度是这类软件的核心竞争力。

这两点恰恰是网络效应能带来的,虽然价值链条不像IM那样明显,但是,网络效应存在的基础是新用户给老用户带来的额外价值。而基础软件的价值,体现为以下几点:

▪ 可控的风险(稳定性);

> 对于基础软件来说,我一直坚持两个观点:

▪ 基础软件是被“用”出来的,不是“写”出来的;

▪ 迭代和进化速度是这类软件的核心竞争力。

◆ 从物联网数据库谈起,为什么开源是颠覆传统软件的重要武器?

> 文 | 陶建辉

随着数据通讯成本的急剧下降以及各种传感技术和智能设备的出现,全球联网设备的规模已达百亿级。在这些设备源源不断地产生海量实时数据并上云的趋势下,如何高效存储和分析物联网数据成为众多企业创新发展的机遇所在,其中开源更是颠覆传统软件的重要武器。

现如今,联网设备遍布人类生活的方方面面:从手环、共享出行工具、智能电表、环境监测设备,到电梯、数控机床、挖掘机、工业生产线等各个领域,全球的数据量也开始呈指数级增长,不过由这些设备产生的物联网数据和我们过往所熟悉的互联网数据有所不同。传统互联网数据几乎都是非结构化数据,这些数据不太容易组织或格式化,如常见的网络爬虫、视频、图片、文字等;而物联网数据有着显著不同,其中,最典型的是,数据是时序的,带有时间戳。

> 用户关注的是一段时间的趋势。互联网数据对于它的用户而言,每一条都很重要。但对于物联网数据,每个数据点与数据点的变化并不大,一般是渐变的,用户一般对某一特定时间点的数据值并不关注,更多的是关注一段时间的数据。

数据具有保留期限。采集的数据一般都有基于时长的保留策略,如仅保留一天、一周、一个月、一年甚至更长时间,为节省存储空间,系统最好能自动删除。

数据的查询分析往往是基于时间段和某一组设备。对于物联网数据,做计算和分析时,一定是指定时间范围的,不会只针对一个时间点或者整个历史进行。而且往往需要根据分析的维度,对物联网设备的一个子集采集的数据进行分析,如某个地理区域的设备、某个型号、某个批次的设备、某个厂商的设备等。

◆ 家家都是技术公司

> 2021《程序员》数字科技企业研发实力榜TOP 50

互联网的盛行带来了众多数字科技企业的崛起,但如何客观地衡量每家企业的技术实力?研发投入、研发人才的数量和人才密度是关键指标。2021年5月,《程序员》根据相关企业披露的财报数据及市场调研数据,整理发布“2021数字科技企业研发实力榜TOP 50”,由此揭示研发价值在资本视角下的量化关系,供所有企业和管理者思考。

技术硬实力的源头:研发投入与人才密度

我们正处在一个快速变化的时代!数字化浪潮席卷全球,用户、技术、政策环境、经济结构以及商业模式都在创新迭代,跨界竞争不断加剧。

◆ 陆奇:数字化的长潮与巨浪

> 今天,数字化正在发生,随着数字化的发展,整个社会中的一切都会被数字化。

每个人都在谈论数字化产业,数字化对整个社会有着非常深远和广泛的影响,在为此感到兴奋的同时,也必然有焦虑伴随。因为数字化会产生一些前所未有的社会现象,其后果如何、会带来怎样的影响,我们都还没有充分理解,其未来将何去何从就成为当下讨论的热点问题。

> 依我之见,洞察未来是有方法的,我将其拆解为几个部分。首先,探究其背后的驱动力;其次,研究其结构;最后,构建其形成的具体图谱。弄清楚未来趋势的这三个组成部分,我们对其的理解就是结构化的、深层次的,也才能更仔细、有效地观察未来。

> 过去20多年,我个人非常幸运,正好在对的时间有机会在一线参与、观察整个高科技产业历经的几代技术平台,以及所衍生的商业生态。

> 在进入对数字化未来发展趋势的解读之前,先分享一个十分有用且我自己也一直在使用的思考方法,它对我产生了巨大的影响。美国物理学家理查德·费曼说:“如果我没能把某件事建立起来,我就没法理解。”这句话十分重要,它揭示了一种认识世界、观察研究对象的方法:针对任何一个复杂的问题,可以把它进一步拆解为子问题,针对每一个子问题,又继续拆解为子问题的子问题,如此穷尽直到不能再拆解为止。然后,针对每一个子问题的答案都想好方法测试验证,直至把所有子问题的答案都清楚正确了,才能说真正弄明白、搞清楚了最初的问题。这是一种线性思考的方法,可以帮助你把所有问题都探究到本质。这种思考方法已成为我的一种习惯。研究数字化,我也采用这种方法。

> 数字化的本质数字化是什么?其本质到底是什么?我认为数字化包括六个核心步骤,缺一不可。第一,获取(Capture)信息。搜集获取某现象的相关信息是数字化的第一步。第二,表达(Represent)信息。搜集信息后必须把特定信息表达出来,可以用各种形式表达,比如二进制、符号和向量等。第三,存储(Store)信息。必须把现有信息存储在某个有效的媒介上,纸就是存储信息的一种媒介。第四,传送(Transmit)信息。在使用信息时,需要对信息进行传递。第五,处理(Process)信息。这是数字化过程中最为核心的部分,对信息进行处理,通常是利用数学知识或模型通过计算对信息进行处理。第六,交付(Deliver)信息。把处理好的信息传送给某个特定终端,该终端能够达到我们所需的目标。

> 数字化的核心在于信息的获取、表达、存储、传送、处理和递送,它将现实中的现象或物体用信息抽离出来,让信息在某种新的媒体上,以不同的形式表达出来,用一种高效的计算处理信息,形成可获取的知识。这就是数字化的核心。它可以大大提高效益,帮助人们更好地达到目标,这是数字化的核心。

> 总结一下,首先,AI和5G是一次非常振奋人心的机会,它把整个物理世界、人类活动全都数字化了,通过传感器获得数据就能做到。比如,一个房间以后装两三百个传感器,完全可以数字化,这只是时间问题。所以,物理世界和数字世界会逐步融合在一起,这是本质上与众不同的一次机会。同时,数字化技术也会改变物理世界,比如基于无人驾驶,新的路网会逐渐产生,一旦有了新的路网,城市半径会变大,都市结构会发生变化,这也是历史上的规律。

长期的社会结构因此而变,当然更多人类行为、人类互动都可以被数字化,这将对社会经济产生巨大的影响。纵观历史,每30-40年,就会有新的社会基础技术出现。今天的社会基础技术基本上是电力和大规模的钢材料,40年之后,每个房间里不仅仅有电,还有AI,AI会成为一种随处可用的公共服务。

其次,这波数字化将促使现有的每一个行业,如农业、制造业、娱乐业、金融业等大规模转型和提升,同时数字化技术有可能提高每一种职业(不管是律师还是厨师)的效率。当然,这其中也有一些需要人类把控的地方,这是整个社会需要做的。

最后,教育和医疗也会深受影响。这波数字化浪潮真的是振奋人心,这与它的技术本质有关。我个人认为“深度学习”并非一种很恰当的说法,其核心本质是一种新的计算基础,通过重叠向量,很快地把数据放到一个特征空间里,进而解决多种任务。

> 虽然数字化进程在不断向前推进,但数字世界和物理世界现在基本上还是脱节的。比如,在没有数字化之前,每位作者只能将内容写在纸上,然后变成报纸、杂志、书籍印刷出版,分发传播出去,进而口口相传,形成舆论,整个过程基本在物理世界发生。数字化之后,信息的生产、传输、内容分发与口碑舆论的形成等一系列动作都在数字世界发生,对现有的社会机制造成了很多冲击,比如西方世界的竞选就深受影响。面对这些问题,需要整个计算工业一起提出新的计算系统架构和信息架构,更好地把数字化后的社会行为的信息结构、核心步骤规划设计出来,把数字世界与物理世界的交互界面界定出来,明晰什么样的人做什么样的行动,以及需要为此负何种责任都仔细地划分出来。这样的话,才可以用现有的或者不断演变的社会规则,更好地把控这些数字化的社会行为。这既是数字化驱动社会进展的一个巨大的机会,也是一个巨大的挑战。

> 第一个子系统是观察系统,观察世界或人的行为,获得信息。第二个子系统是智能系统,把获取的数据进行表达、存储、做模型计算(处理),最后进行传输。第三个子系统是动作系统,负责与用户或环境(物理世界)进行互动。第四个子系统是运营系统,由人(也就是这个系统的作者)通过运营系统来维护、更新这样一个数字化的生态体系。

> 数字化未来

谈到数字化未来,我有以下几点看法。

第一,人工智能早期和近期主要落地的应用是在工业垂直领域。其数字化的趋势是往下沉的,通过传感器可以把纺织业、农业、鱼塘、医院、工厂都实现数字化,高概率都是往垂直的方向发展的。而人工智能贯通多个行业领域的横向应用则还需要时间。无人驾驶有望建立一个新的社会基础,是人工智能横向发展的典型应用。另一个横向发展的机会,则是把每个空间、每个场所都智能化(数字化)。

第二,前端数字化也还有一些机会,诸如AR(增强现实)和VR(虚拟现实)。从长期看,脑机接口是一个比较重要的机会。如果可以在人脑的皮层后植入观察体系,那数据的获取和交互会完全不一样,所以从数字化的能力角度来讲,这也很有机会。

第三,计算的基石是算法。人类历史上所有的科学,包括传统的物理学或狭义相对论,基本上都有商业的应用。只有量子是尚未被商用的科学,前面提到的理查德·费曼教授在50多年前提出的理论,奠定了量子计算的基础。在算法领域,量子计算有很大的突破机会。而Crypto(加密模块)是一种不同的计算方法,把信任用数字化的形式表达出来。同时还有生物形态的算法,用DNA的方法或者用合成生物学的方法来测算。

第四,我个人非常关注的是能源。一如最初讲到人类社会发展的核心驱动力就是能源和信息,如果能源结构发生改变,其引发的变革效果也必将是划时代的。在能源领域,也有不少机会。

第五,空间的探索与扩展,仅仅在地球上远远不够,要走得远一些。YC(美国著名创业孵化器)就投资了不少致力于拓展地球之外空间的企业。

◆ 企业数字化转型的十个方法论

> 个通用化的大数据处理框架,主要分为:数据采集与预处理、数据存储、数据清洗、数据查询分析和数据可视化。

▪ 数据采集与预处理环节,Sqoop常用来将关系型数据库和Hadoop中的数据进行相互转移,Flume NG作为实时日志收集系统,Flink处理流式数据分析场景;

▪ 数据存储方面基本上采用HDFS作为其核心的存储引擎;

▪ 数据查询分析方面使用Hive进行长时间的批处理查询分析,使用Spark、Impala等进行大数据实时查询分析。

◆ 人人都是开发者

> 《程序员》:对于软件工程师来说,在职业生涯的不同阶段需要培养什么样的技能或心态?Brian:下面这两个技能,不仅仅是对软件工程师,对每个人而言都很重要。一是学习如何写,二是学习如何说。如果你能写好、说好,并且能有效地把技术语言传达给非技术人员,这将在你一生的职业生涯中发挥难以想象的价值。同时,我还认为,要对“有趣”或“值得学习”的事物保持开放的心态。不要让自己变得狭隘,要保持广泛的兴趣。法国伟大的科学家Louis Pasteur曾说过:“机会是留给有准备的人”。所以,你看的东西越多,想的东西越多,探索的东西越多,你就越有可能在某件事上变得更幸运。

> 《程序员》:你曾预言,对于编程而言,语言将会更容易且更安全。就这一点而言,这特定的“语言”会是什么?Rust或者是更多面向应用程序的语言,比如JavaScript、TypeScript、Dart、Swift、Julia或其他语言?Brian:如今的大部分编程语言都更安全、简单,这是批量的而非单一的。每种语言都有其最适合的任务类型,比如适合嵌入式系统和高效库实现的C语言,适合大型系统的C++,以及适合作为简单通用语言的Python等等。我想,专业的程序员应该可以熟练掌握几门语言,并且熟悉5~10种其他的语言。旧的语言永不会消亡,它们中的大多数都还在继续发展。当然,有一些程序的嵌入式系统基础太大、太复杂,难以重写。但是,人们在创造新语言方面有着无穷的创造力,他们希望这些新的语言能够取代旧的语言,但这从未实现过。

◆ 我的Linux内核之旅

> 最大的原则就是:所有开发者/贡献者,摘掉你们所属公司的帽子,戴上“独立贡献者”的帽子,按照技术本来的最佳实践,去做设计与实现。大家都以“独立贡献者”的角度参与审查。

> 换言之,公司从商业竞争力角度,选择“做正确的事”;社区从技术通用性角度,确保“把事情做正确”。这就是开源社区与商业公司的基本合作共识。

◆ 姚颂:90后技术创业者的程序人生

> 开发者永远不要给自己设限,要不断挑战自己,不断去跨越那些你原来认为很难跨越的难题,这样你才能进步,你的人生才能往前走。

◆ 走近低代码:人人都是开发者时代来临?

> 代码和无代码这两个词的背后,有着两类不同的、明晰的技术路径,即表单驱动的Airtable模式和模型化的OutSystems模式。

> 利用Excel的形态,以个人用户自身为中心,形成点状轻应用(Sweet Spot)的逻辑;Outsystems则是“模型驱动模式”,代表以领域模型为基础,以实现关键性应用(Critical Apps),甚至核心应用(Core Systems)为目标提供的开发路径。这两种开发模式所对应的目标场景和客户是不一样的。

> ▪ Monolithic Platform即“大一统的应用系统”必将结束,此处SAP需要划个重点。当然SAP是行业精英,不可能不知道这一趋势,所以它提出了“重新崛起”(RISE)战略,而且收购了AppGravy。

▪ SaaS主要代表了标准化应用(Standard Apps)及应用碎片化,这个已经被时代证明,但它不能替代SAP这一类大一统的应用系统。

▪ Composable Platform即“模型化低代码平台及模型化组合式的应用平台”会逐渐成为主流,它代表着定制化应用(Custom Apps)。

◆ 点评

陆奇的对数字化的思考值得反复看。

打赏作者