Linus Torvalds的“暴脾气”是出了名的,看到令自己不爽的事情就会怼过去,比如:

他曾经说Intel提交的漏洞修复程序是彻底的垃圾!

当别人说Git没用C++开发的时候, 他反击说“C++是一种可怕的语言”

他喷别人的Pull Request : Your code is shit .....

他吐槽XML可能是有史以来最糟糕的格式......

甚至直接对着摄像机说了一句“So NVIDIA, Fxxk you.”同时给了一个中指。

有人说这是天才的个性,但是这种性格确实是得罪了不少人,去年9月份,他发邮件做了一个反省,说自己也许要照照镜子,为自己的人身攻击言论道歉。

我是有点好奇,领导着世界上最大的开源项目,Linus欣赏谁,尊重谁,喜欢和谁一起共事?

TED上对Linus 的一段访谈视频“The mind behind Linux” 给出了一点线索。

(ps. Linus 不喜欢在公众面前演讲,如果非要参加一些活动的话,他更喜欢和主持人一对一地对话,这会让他感觉到舒服)

在这段访谈中展示了两段完成同样功能的代码(伪码), 第一段是这样的:

remove_list_entry(entry){
prev = NULL;
walk = head;// Walk the listwhile (walk != entry){
prev = walk;
walk = walk -> next;
}// Remove the entry by updating the
// head or the previous entryif (!prev)
head = entry->next;
else
prev->next = entry->next;
}

学过数据结构的同学(即使你没学过C语言中的指针),估计也能明白这段代码的大致意思: 这是在删除一个单向链表中的某个节点。

(这段代码没有考虑待删除的节点不在链表中的情况。)

由于是单向链表,在寻找某个节点的时候,需要不断地记录下这个节点前面的节点(prev)

另外,这段代码还考虑到了一个特殊情况, 待删除的节点不是中间节点, 而是头节点(head)。 即使有这个特殊的情况,这段代码还是相当容易理解的,绝大部分人都会写出这样的代码,学校的老师也会这么教我们。

然后Linus给出了另外一段代码(伪码),完成了同样的功能。

remove_list_entry(entry){
// The "indirect" pointer points to the
// *address* of the thing we'll update
indirect = &head;// Walk the list, looking for the thing that
// poins to the entry we want to remove_list_entrywhile ((*indirect) != entry){
indirect = &((*indirect)->next);
}// .. and just remove it
*indirect = entry -> next;
}

我看到这段代码的第一印象就是很简洁, 根本没有if else, 不管你删除的是头结点还是中间节点,都可以用同样的逻辑来表达。

但是这段代码使用了指针的指针,我看了一会儿才明白到底是怎么工作的。 一旦理解以后,就发现,这确实是个更优雅的方法。 消除了if else, 消除了previous。

我本来也想用图来表达一下,但是发现画出这个indirect的变化过程有点麻烦,大家充分发挥下想象力,自行脑补一下吧。

关键点就是indirect 这个指针第一次指向的是 head 的地址,第二次指向的是节点1.next的地址, 第三次指向的是节点2.next的地址。

Linus对比了这两段代码以后说道:

第一段代码并不好, 它需要区别第一个节点和中间节点,有特例。

第二段代码展示了用一种不同的方式来看待一个问题,它可以把一个特例当成正常情况来处理,这就是好的代码。

我就喜欢和这样的人一起工作,他们有着更好的代码的“品味”。

好的代码“品味” 能够让你从更大的范围来看待问题,本能地知道怎么才能把事情做对,做好。

这两段代码只是很简单的例子,它们甚至不完美, 但我理解Linus所说的意思,它给我们的启示是:在写代码的时候,要努力地从更高的层次去思考问题,找到更抽象,更通用的解决方案,而不是简单地对各种情况写满if else, 那样的代码,难以理解,难以维护。

优雅的代码不仅仅是格式规范,命名良好,更重要的是思维方式和抽象层次,以及由此带来的良好的设计。

怼天怼地怼空气的Linus喜欢怎样的工作方式?相关推荐

  1. 怼天怼地怼空气的Linus 喜欢和什么样的人一起工作?

    Linus Torvalds的"暴脾气"是出了名的,看到令自己不爽的事情就会怼过去,比如: 他曾经说Intel提交的漏洞修复程序是彻底的垃圾! 当别人说Git没用C++开发的时候, ...

  2. 室内空气流动原理图_新风系统工作原理图—新风系统工作原理介绍

    相信大家对于新风系统工作原理图都很感兴趣,因为新风系统工作原理图可以让我们很直接的了解到新风系统工作原理,让我们对新风系统工作方式有一个较好的认知,对此小编便来为各位介绍新风系统工作原理图,用图片告知 ...

  3. 某大厂程序员吐槽外包员工是大爷,晚上八点就想下班,叫他加班却被怼!网友:怼得没毛病!...

    外包员工是公司里比较特殊的存在,拿钱比正式员工少很多,还常常被嫌弃,许多外包员工都觉得自己低人一等. 但有一个大厂正式员工却发帖吐槽外包员工是大爷,因为晚上八点该外包员工就要下班,楼主叫他做完需求再走 ...

  4. 被程序员怼完被自己人怼,产品经理就这样被逼哭了!

    我是一个产品运营 每天总有各种各样的会议等着我 我每天需要不断的听取用户提的需求 在听取的同时还得去笔记本上把需求记录上 记录完以后还得去厚着脸皮去找我们技术讨论这个需求是否可以做 每次讨论完,我都很 ...

  5. 中国空气质量指数(AQI)及其计算方式

    1.简介 环境空气质量标准的建立,可以为环境空气质量管理.保护人体健康.维护生态环境安全,促进人与社会.自然和谐可持续发展发挥积极作用.20世纪70年代,美国最先构建环境空气指数标准,随后,世界各国也 ...

  6. 大数据下的空气监测如何改变你的生活方式?

    摘要:"穹顶之下,无论贫富,我们同在一片雾霾下".13年底,诸如此类的调侃亦或是正经吐槽传遍互联网,那时的笔者,尚在内蒙的草原深处,对肆虐华北乃至全国大部的雾霾,仅仅是有所耳闻却未 ...

  7. 点成分享| 空气卫生的重要性和病毒传播方式

    引言 本文为您从空气传播的感染途径角度出发,介绍净化空气的几种方法(重力沉降.过滤.加热.紫外杀菌),通过比较几种方法的使用场景,论证过滤和紫外线在空气净化的优势和可行性. 1 为什么空气卫生很重要? ...

  8. 写技术文章也挺好的,虽然没有多少人看

    微信改版信息流以后,正式进入了"拼标题"时代,如果没有一个吸引眼球.摄人心魄,不点进来心里就痒痒的标题,那阅读量肯定是嗖嗖地下降. 偏偏我又不擅长此道,绞尽脑汁想了个自以为是10w ...

  9. 共好:为管理者提供指南(肯·布兰佳)

    第一部分 第1节 上任伊始--初闻同心协力 我被人算计了. 我,佩吉·辛克莱尔,总公司里正在崛起的新星. 当老莫里斯告诉我,总公司决定任命我为沃尔顿二号厂总经理的时候,我就应该意识到 这一点. 但是当 ...

最新文章

  1. @总结 - 6@ 后缀自动机
  2. 启动HBase抛出org.apache.hadoop.hbase.ClockOutOfSyncException异常:hmaster正常,节点hregionserver启动失败
  3. VTK:PolyData之ExtractCellsUsingPoints
  4. Reporting Area and Available Characteristics
  5. 【模型训练-loss】模型训练过程中train, test loss的关系及原因
  6. 用.NET解索尼相机ARW格式照片
  7. 文件的 MD5 签名介绍
  8. OpenShift 4 - 下载OpenShift项目中的ImageStream
  9. ssas计算度量_如何在Analysis Services(SSAS)中创建中间度量
  10. 【编程语言】正则表达式快速上手
  11. 超市商品摆放图片_商品摆放舍不得拿、干净又卫生的马来西亚版大润发——NSK超市...
  12. python tkinter listbox控件 简书_python tkinter模块的控件操作(1)
  13. 后台开发 vs App应用开发?
  14. Linux三剑客之SED
  15. 文件上传到ftp服务器命令,ftp上传文件到服务器命令
  16. 聊聊几个阿里 P8、P9 程序员的故事
  17. IDEA不支持SQL语法校验,一招搞定
  18. 暖风熏的游人醉 直把杭州作汴州 题临安邸--林升
  19. 如何在linux下解压缩rar和zip格式的文件压缩包
  20. 微信支付v3生成签名

热门文章

  1. Go 菜鸟学习笔记-快速入门(上)
  2. Idea 生成Api插件之 EasyYapi
  3. 小功能⭐️关于Unity Collider Physics.Overlap
  4. OrangePi R1 plus LTS的固件下载
  5. 细数 ShardingSphere 5.0.0-beta 版本新功能
  6. 广州房地产契税完税凭证在微信无法下载的解决办法
  7. 初刷【洛谷P2181对角线】题解心得
  8. wpsup计算机内存不足处理方法,wps表格太大了占用内存大怎么办_wps表格占用大量内存的处理方法...
  9. postgresql备份还原缺失问题,检查进程,强行结束用户进程连接
  10. 2020.8.28丨转录组、全转录组产品概述和应用方向