支付宝研究员王益的建议:“学好语文,才能写好代码”

王益,蚂蚁集团研究员,开源项目SQLFlow 和 ElasticDL 的负责人。他从10岁开始写代码。曾经用自己焊接的电路板扩展“中华学习机”来把自家的老式“威力牌”双筒洗衣机改造成了自动洗衣机;用Apple BASIC语言和6502汇编混合编程写了人生中第一个游戏;高中自学了大学所有计算机课程,参加计算机水平测试,先后获得了“程序员”、“高级程序员”、“系统分析员”认证。王益从事 AI 基础架构工作十三年,先后在全球多家顶级互联网公司任职,亦曾在硅谷和北京两地创业。

image.png

王益还是知名开源项目SQLFlow、ElasticDL的负责人,虽已“高龄”,但仍对代码充满热爱,并经常写代码。以下是他的观点:

和每个程序员一样,我的十三年职业生涯里,每一天都在和 code review、design doc、bug reports 打交道。我在中国和美国互联网公司之间切换了多次,也在北京和旧金山两个机场间往复飞行了多年,其间唯一不变的是 —— 每天都要和写得不够好的技术文字战斗 —— 有我自己写的,也有同事们写的。

科学之母

为什么这么悲催呢?我有一个反思。我小时候听过老师们的很多谬论。最荒谬的是“学好数理化、走遍天下都不怕”。并列第一的还有“数学是一切科学之母”。很多年以后,我靠数学拿到了博士学位,然后发现身边很多学好了数理化的朋友们,在硅谷被印度同事干得一败涂地。而真正堪称科学之母的,是“逻辑”和“理性”,并不是数学。如果要清晰表达理性,需要的是语文。

因此,我宁可说“语文才是一切科学之母” —— 写不清楚论文的研究生都毕不了业,根本没资格研究科学。类似的,不能清晰表达逻辑的程序员,说不清楚自己的想法和贡献,没法得到晋升;甚至因为 deisgn doc 写不清楚,没法吸引同事一起做一个项目,也就无法带头;甚至没法吸引领导的注意和认同,无法立项。于是只剩下中年危机。

很多中国程序员没法加入到开源项目中来,自以为是因为“英语不好”。我的观察是,大概 15% 是因为英语技法问题,85% 还是因为逻辑梳理不清楚,换成汉语一样写不好。而我,虽然高考英语 148 分,也仍然在后来的求学生涯里经历了四年发不出一篇论文的精神折磨。

这里没有看不起谁的意思 —— 核心问题出在我们经历的教育体制上 —— 当偏科理工成为理所当然,那就真的只培养螺丝钉,培养不出来领头羊了。

试举一例

看官怕不信我的危言耸听。那么我们试举一例。这是我负责百度 PaddlePaddle 项目期间,一位绩效很不错的年轻同事在一个 design doc 里的一句。

We propose an approach to prefetch parameter from Parameter Server while distributed training so that Fluid would training a model including the large parameter which could not be stored in one trainer's memory.

英语词法和语法问题:

prefetch => pre-fetch
would training => would train (其实这里的核心问题是逻辑问题,并不是虚拟语气的语法问题,下文详述)
parameter => the parameter(单数名词前需要有冠词)、或者 parameters(改成复数形式)、或者 the parameters(复数名词前也可以用冠词强调特定性)
逻辑问题:

Fluid 是 PaddlePaddle 的一个子项目。我们做 Fluid 不是为了训练某一个模型,所以 a model => models,用复数泛指不同用户训练的很多模型。
including the large parameter。数学上,一个 parameter 就是一个数字,用计算机表示就是 64 bits,不会 large 也不会 small。这里逻辑上把 parameter tensor 和 parameter 混淆了。可以说 a large number of parameters,也可以说 a large parameter tensor。

could not be stored in one trainer's memory。首先,PaddlePaddle Fluid 里的术语里,一个 trainer 是一个进程;而进程并不拥有 memory,所以不存在 trainer's memory 这个概念。这里作者想说的是进程的内存地址空间。不过行文逻辑和内存的地址空间也没有什么关系 —— a large parameter tensor 之所以存不下,就是因为一台机器的物理内存小,而不是某个特定进程的内存地址空间太小 —— 实际上,内存地址空间往往大于物理内存容量。

其次,这里 could not be stored in 只是说”不能被放进“,而没有说原因 —— 作者想说原因是”太大了所以放不下“ —— 这里的因果关系用英语表示可以说 too large to fit in the memory —— 可惜作者并没有表达出来,于是读者可能误会”不能被放进“的原因,比如”为了高效计算 parameter tensors 所以需要将其放进 GPU memory 里”。

当时一位在百度硅谷研究院工作的印度同事在 code review 这个 design doc 的时候帮着修改了一下:

We propose an approach to pre-fetch the parameters from a parameter server during distributed training so that Fluid is able to train models with parameter tensors that are too large to fit in the memory of a node.

这里我想强调的是:上述分析里,关于逻辑的文字量远多于关于英语的文字量。很多不完美的技术写作都是逻辑问题。

解决之“道”

写作是一门艺术。Donald Knuth 说人类的智慧分为几种境界,其中艺术是最高境界。

第一重境界叫技术(techniques)。对于一个问题,能给出一个解法的人就算达到这个境界了。这样的人叫 technician(技术工人)。

大部分程序员是这个级别的。

第二重境界叫科学(science)。经历了很多问题,提出了很多解法之后,技工可能会总结出一些规律,称之为理论(theory)。每个 theory 的出发点是一些抽象描述物理世界的公理(axioms)。比如欧式几何这个理论有五个公理,就是记录在欧几里得老师的《几何原本》(Elements)里的。从公理出发,大家可以按照逻辑可以导出很多推论(theorems)。很多推论恰好也符合对物理世界的描述。比如沿着欧式几何的公理,大家推导了两千多年,一些推理帮着人类把阿波罗发射到月亮上还能活着回来 —— 数学真是tmd一个巧合啊 —— 没事没事,语文才是科学之母。这里我要严正声明,这不是玩笑 —— 20 世纪人类最伟大的科学发现是哥德尔定理。用俗话说,就是沿着逻辑推导,推着推着一定会发现一个推论和之前的某个推论是相悖的,比如一个说老王家的鸡是公的,另一个说老王家的鸡是母的。所以,真的,用数学计算出来的阿波罗轨迹能把人安全的带回来,真是一个奇迹 —— 说它是公的,它恰好就是公的。

什么样的程序员可以算是 scientist 呢?给定一个问题,能分析设计出最优解法的,而不是随便给一个解法了事的。

第三重境界叫哲学(philosophy)。小学思想品德课制造的一个误区是让人以为哲学是文科,其实哲学是理科。理工科的硕士研究生毕业之后的学位是 Master of Science。而博士研究生毕业之后就是 Ph.D. 了 —— Philosophy Doctor(哲学博士),也有人说是 permanent head damage,也有道理,不是悖论。哲学是归纳了很多 theory 的人归纳出来的原则(principles),说的是怎么思考问题,可以归纳出好的 theories —— 别从公理出发刚推了没几步就出现悖论 —— 这tm多尴尬)。因为哲学是指导人们归纳 theory 的,所以我们说哲学原理(principles)是帮助我们拓展人类知识边界的工具。

什么样的程序员可以称为哲学家呢?有一套哲学思想叫 Unix Philosophy https://en.wikipedia.org/wiki/Unix_philosophy 。看进去就明白了。

第四重境界叫艺术(art)。Paul Graham 有一本书叫《Hackers & Painters》,说的就是最高境界的程序员和画家一样。徐悲鸿画的马,大家都说好!而且每个人都能说出一些好的理由 —— 比如简练却生动、比如线条刚柔相济、比如动感十足。既然人人都能说出来的评价标准,恐怕算不上 theories,估计可以算 techniques。徐老师无疑是大家!他也明白自己不同寻常,可是他却没法把自己的高才总结成一些 theories 或者 techniques,让徒弟照着弄就能画出一样好看的马。艺术家的直觉(英语叫 gut feeling,直译为猪肚和肥肠的感受)只可意会,不可言传。汉语里的“道可道非常道”,这个道不是 principles 而是 arts。老子不是哲学家,而是艺术家啊。

有些程序员,每次碰到一个难题,其猪肚和肥肠的都会有一些感受,照着这灵感做,总是没错,基本就是最优选择。如果他不是蒙的,那么他就算一个艺术家了。

写作技法

写作虽然是最高境界 —— 艺术,可惜作为一个程序员,语文并非我的专长,我只能算技工。我有几条技法,类似于欣赏徐悲鸿大师的画的时候说出来的那些评价标准,在此分享给大家,抛砖引玉,仅供参考。如果有高人能指正,升华成 theories 甚至 principles,可谓善莫大焉,提升了当代基础教育水平。

首先,篇章结构上讲究 层层递进。

作为一个知识分子,应该理解这个世界是分形的(fractal)。要说明一个事儿,得从大面儿上先把逻辑理顺。每个逻辑环节可能需要补充 evidence,每一层 evidence 是递进的一层境界。就像剥洋葱,一层一层往里剖析。

从行文上看,一篇文章各个章节的标题,应该存在逻辑关系。读者只看标题,就能明白文章大意。如果感兴趣,则看每一段的首句。这些首句连起来是递进的第二层,更详尽的逻辑。如果对某一段的首句感兴趣,再看其中的内容。

其次,文法上请讲究:环环相扣、滴水不漏。

环环相扣的意思是:相邻两句之间要有因果关系;相邻两段要有因果关系;相邻两节要有因果关系。因为因果的衔接就是逻辑。

滴水不漏的意思是:逻辑推理不可跳跃,不可以默认读者知道某一环节所以跳跃。如果要保持行文的精简 ,应该通过递进来做到,而不是跳跃。

然后,句法上讲究:尽量用短句,不要长句;尽量用简单句;不要从句。

相传白居易作诗要给老婆婆们读。反复修改到老妪能解,才发表。这倒是符合一条哲学原理,Occam's Razor,也是我的专栏名字。用汉语说叫“删繁就简三秋树”。我读书时崇拜 Bertrand Russell 的行文 —— 颇多从句,但却无力模仿 —— 不知怎么保持每个从句如此简短,而且用从句把逻辑编制得密不透风,同时保持繁简相宜。为免邯郸学步,还是学习白乐天老师吧。

句法的第二条技法是:一定要用主动语态,技术行文不可用被动语态;每句要有主谓宾 —— 汉语里被动语态比比皆是,英语里被动语态是用来表达强烈情绪的 —— 一个程序员怎么可以有情绪?面试官放水了吧?

最后说词法。规则最繁复。但是注意几条,差不多也就覆盖了常见问题的十之七八。

章节标题里的单词要 capitalize。但是 and 这些词不要 capitalize。迷迷糊糊搞不清楚的可以借助工具 https://capitalizemytitle.com/
专有名词要按照作者的写法来写。没有道理。

TensorFlow 的 F 要大写。Kubeflow 的 F 是小写。为什么 —— 没有为什么?因为他们的发明者一拍脑袋就这么定了。

单数名词前要有冠词。复数名词前可以没有冠词。但是也可以有,来表示特指。

一个缩写在文中第一次出现的时候,一定要有全称。比如 Machine learning (ML) is like chicken ribs.

言归正题

上文中颇多玩笑。但是写作是非常严肃的事情,是人生必备的技能。今天开源软件开发成了一种新的商业模式。MySQL 曾经是第一个开源商业项目,买了一亿美元。今天的开源项目的估值百亿美元者比比皆是。来自五湖四海的程序员,完全通过 code review 的方式合作,创造了 Linux 和很多其他重塑了人类社会形态的技术(Android、Chromebook、data centers)。在这个大教堂向大巴扎转型的时代里,一帮老死不相往来的程序员,完全通过写作实现 proposal、design docs、code review、和 issue tracking。从这个角度来说,语文是人类文明之母也不为过。

历史上每一个伟大的人类文明的语文都是逻辑。中国的科举,比的不是诗词歌赋,而是策论。策(战国策的策,也是湖南经视著名节目越策越开心的策)就是娓娓道来,也就是上文中的“环环相扣”;论就是推理严谨,也就是上文中的”滴水不漏“。诗词歌赋小说演义都属于杂书;不好好学习的人才看的,比如三国、水浒、西厢记、金瓶梅、金瓶梅、还有金瓶梅啦。藏传佛教有因明学。因就是因果,明就是说明白逻辑关系。古希腊就不用说了,整个社会制度建立在逻辑辩论之上。我们小学时学过一个为了练习发声,把小石子放在嘴里练习辩论的演说家。如果不记得名字了,他叫德摩斯梯尼。小石子只是他练习的一个小环节,为了具有说服大众的雄辩能力,他早年师从伊萨攸学习修辞,后来教授修辞学。今天的西方世界视古希腊为其文明源头;现代西方民主制度仍然参照古希腊的制度建立。美国总统大选的路演和候选人辩论都是对德摩斯梯尼那时的规则的模仿。策论和因明是美国公立小学从学前班就开始的教育。我娃在疫情之前每周要做一个presentation。小屁蛋儿们的小手握不住鼠标,没法做ppt,都是手绘。疫情失学之后,她经常无聊地爬在后院枇杷树上和篱笆墙外遛狗的行人越策越开心。

以上,谨策。祝大家开心!

 

原文链接:https://developer.aliyun.com/article/766797?utm_content=g_1000169105
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音实战~搜索页面~视频详情

文章目录一、前端部分1. 检索关键词短视频列表2. 选中某一个短视频3. 短视频详情二、后端部分2.1. 短视频入口2.2. 短视频接口层2.3. 短视频服务层2.4. 持久层-接口2.5. 持久层- xml三、效果图鉴赏3.1. 搜索页面3.2. 短视频列表3.3. 短视频详情一、前端部分 1. 检索关键词短视…

技术人的灵魂 3 问,阿里工程师如何解答?

作者 | 氐宿 阿里云高级前端技术专家 导读:在业务团队做事的工程师摸爬滚打了一段时间后,一定会有所疑问。团队同学在最初的一段时间都提出这样的疑惑:如何在业务中发现有技术价值的问题?发现问题后如何思考和发起再到解决&…

10+知识图谱开放下载,让你的学习效率提升5倍! | “右脑”开发套餐

简介: 为了让广大开发者清晰了解技术体系,打造属于自己的系统学习路径。今天,开发者社区整理了10知识图谱,供大家交流学习,持续更新中~ 知识的学习从来就不是孤立的,学习任何知识(概念、定义、…

抖音实战~分享模块~短视频下载(保存到相册)

文章目录一、可见范围1. 自己发布短视频2. 其他人发布短视频二、源码分析2.1. 底部窗口popup2.2. 实现组件uni-popup 弹出层2.3. 插件涉及组件2.4. 组件改造2.5. 关键的api三、作品鉴赏3.1. 自己发布视频3.2. 其他人发布视频3.3. 保存短视频一、可见范围 保存到相册、复制链接、…

HDC.Cloud 2021剧透:六大创新产品、开发者年度盛宴即将开启

编辑 | 宋慧 出品 | CSDN云计算 头图来源 | HDC.Cloud官网 今日,华为开发者大会2021(Cloud)(简称HDC.Cloud 2021)媒体预沟通会在京召开,华为技术有限公司高级副总裁、云与计算BG副总裁张顺茂在会上表示&am…

抖音实战~分享模块~复制短视频链接

文章目录一、可见范围1. 自己发布短视频2. 其他人发布短视频二、源码分析2.1. 底部窗口popup2.2. 实现组件uni-popup 弹出层2.3. 插件涉及组件2.4. 组件改造2.5. 关键的api三、作品鉴赏3.1. 自己发布视频3.2. 复制链接一、可见范围 保存到相册、复制链接、二维码 都是前端完成的…

莉莉丝《剑与远征》:基于阿里云全站加速提升用户体验

公司介绍 莉莉丝游戏致力为全球玩家创造好玩的游戏,坚持“全球化”与“品类进化”核心战略,通过对全球市场与品类发展阶段的深度理解,将国产手游带向了世界,代表作:《小冰冰传奇》,《万国觉醒》&#xff0c…

亚马逊云科技首次发布“三驾马车”中国业务战略

2021年3月25日,亚马逊云科技今天在北京举行媒体沟通会,首次正式发布“三驾马车,齐头并进”的中国业务战略。通过亚马逊云科技独一无二的全球优势,发挥亚马逊全球业务体系的强大支撑,并利用亚马逊的创新文化和方略&…

KubeCon 2020 阿里云推出四大企业级容器新品 ,详解云原生操作系统进化

导读:云原生操作系统进化,详解阿里云 ACK Pro、ASM、ACR EE、ACKEdge 等四款企业级容器新品。 KubeCon 2020 中国站,阿里云容器服务负责人易立会在《云原生,数字经济技术创新基石》的演讲中,分享阿里云原生如何助力数字…

抖音实战~分享模块~生成短视频二维码

文章目录一、可见范围1. 自己发布短视频2. 其他人发布短视频二、源码分析2.1. 底部窗口popup2.2. 实现组件uQRCode2.3. 插件涉及组件2.4. 组件改造2.5. 实现原理三、作品鉴赏3.1. 生成短视频二维码3.2. 微信扫描3.3. 抖音扫描一、可见范围 保存到相册、复制链接、二维码 都是前…

轻松处理高于平常10倍的视频需求,还能节省60%的IT成本,蓝墨做对了什么?

近年来,Serverless 一直在高速发展,并呈现出越来越大的影响力。主流的云服务商也在不断地丰富云产品体系,提供更好的开发工具,更高效的应用交付流水线,更好的可观测性,更细腻的产品间集成,但一切…

PassMark 更新排行,苹果 M1 杀疯了

整理 | 寇雪芹出品 | CSDN云计算(ID:CSDNcloud)3月24 日,PassMark 网站更新了单核性能排行榜,苹果 M1 3.2GHz 首次上榜就直逼榜首。苹果 M1 杀疯了以数千个 PerformanceTest 基准测试结果为数据基础,PassMa…

uni-app使用canvas绘制二维码

文章目录1. 插件选型2. 页面部分3.事件部分1. 插件选型 uqrCode 点击安装即可 https://ext.dcloud.net.cn/search?quqrCode 2. 页面部分 template&#xff1a; <view class"canvas-qrcode-box" style"align-self: center;"><canvas id"q…

好物推荐|下载超过 23w 次的 IDE 插件,让效率飞速提升

日常开发运维的过程中&#xff0c;我们总是会遇到各样重复性劳动而这些工作占据了我们大量时间。 我们一定都经历过这样的场景&#xff1a; 每一次产品迭代更新&#xff0c;都要一遍遍「打包-上传-登录服务器-替换-部署-重启」重复的类似工作&#xff1b;在本地 IDE、云产品控…

怕入错行?这群技术人写了本“择业指南”

计算机专业好找工作吗&#xff1f;哪些方向是当前的主流和热门方向呢&#xff1f; 计算机专业的你是不是还在为职业发展纠结犹豫呢&#xff1f; 刚经历完高考选专业的你是不是还在迷茫徘徊呢&#xff1f; 那么福利来啦&#xff01; 《软件技术职业选择之道》重磅来袭&#xff0…

连载:阿里巴巴大数据实践—数据开发平台

数据只有被整合和计算&#xff0c;才能被用于洞察商业规律&#xff0c;挖掘潜在信息&#xff0c;从而实现大数据价值&#xff0c;达到赋能于商业和创造价值的目的。面对海量的数据和复杂的计算&#xff0c;阿里巴巴的数据计算层包括两大体系&#xff1a;数据存储及计算平台&…

真的有无人工厂吗,IoT 怎么在产业界落地?| 赠书

责编 | 寇雪芹头图 | 下载于视觉中国出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;明天&#xff0c;工厂里没有人智能工厂可以灵活应对各种情况的新时代智能化工厂&#xff0c;即便没有人的参与&#xff0c;智能工厂也可以通过联网的制造设备完成信息交换…

开放下载!基于PAI个性化推荐系统开发指南

亚马逊的CEO Jeff Bezos曾经说过&#xff0c;他的梦想是“如果我有100万个用户&#xff0c;我就要为他们做100万个亚马逊网站”。而智能推荐系统的出现&#xff0c;就是为了实现这个梦想&#xff0c;智能推荐系统解决的是一个信息比对的问题&#xff0c;怎么样基于用户的信息和…

抖音实战~搜索页面~扫描二维码

文章目录一、二维码扫描1. api2. 前端源码3. 实现原理二、、作品鉴赏2.1. 短视频二维码2.2. 微信扫描2.3. 抖音扫描一、二维码扫描 uni.scanCode(OBJECT) 1. api 自己发布的短视频会有“保存到相册、复制链接、二维码、转为私密” 2. 前端源码 // 搜索扫码scan() {uni.scanC…

发力公有云的用友YonSuite,云原生实力到底如何?

作者 | 宋慧 出品 | CSDN云计算 头图 | 付费下载于视觉中国 在云原生吞噬一切的口号下&#xff0c;云计算厂商和企业用户对云原生的关注度达到空前的高度。不过&#xff0c;在容器、微服务、DevOps等云原生概念被普及后&#xff0c;CSDN的2020-2021年度开发者大调查显示&#…