Linux的创始人Torvalds在一次演讲中有一段涉及“什么才是优秀程序员”的话:

“烂程序员关心的是代码。好程序员关心的是数据结构和它们之间的关系。”

这句话听起来很直白,但未必所有人都能理解其内在的涵义。在国外知名的问答网站stackexchange上有人对这句话提出了自己的困惑:

对这句话应该如何理解?

如何学习和应用其中的道理?

能问出这样的问题需要勇气,提问的人自己也自嘲的说:我不理解这句话也许不是一个好的征兆。但同一句经典言论,100个阅读会得到100种不同的领悟,正像stackexchange网站上各式各样不同的回答一样。下面我们来看看最被认可的一种理解吧。

如果看一下Torvalds在此句话之前说的话,可能会对我们理解它有帮助:

git的设计其实非常的简单,它的数据结构很稳定,并且有丰富的文档描述。事实上,我非常的赞同应该围绕我们的数据结构来 设计代码,而不是依据其它的,我认为这也是git之所以成功的原因之一[...]依我的观点,好程序员和烂程序员之间的差别就在于他们认为是代码更重要还 是数据结构更重要。

他说的意思是,好的数据结构设计能使代码更容易设计和维护,而再好的代码也不能弥补糟糕的数据结构带来的危害。

如果你不理解他举的git的例子,我再解释一下,很多的版本控制软件都会有规律的修改它们的数据格式来支持增加的新特征。当你升级软件来获得新功能时,你通常需要一些工具来转换到相应的数据库格式。

举个例子,当分布式版本控制系统刚刚开始流行时,很多人不知道,为什么相对那些集中式的版本控制软件,分布式模式下的代码合并会如此的干净整洁。答 案无它,分布式的数据结构更适合这样的任务。我相信集中式的合并算法也在快速的改进,但它需要很长的时间才能赶上,因为老的数据结构限制了他们使用的某些 算法,而新的数据结构破坏了很多现有的代码。

相比较而言,git里的新特征在不断涌现,但它底层的数据结构几乎没有什么变化。先考虑数据结构,你的代码会自然的整洁起来。

linux是优秀程序员吗,如何理解Linus Torvalds“什么才是优秀程序员”相关推荐

  1. 与Linus Torvalds“并列”,虚拟化天才程序员法布里斯贝拉

    摘要:谈起阿兰·图灵.高德纳.艾兹赫尔·戴克斯特拉,我们并不陌生,这些振聋发聩名字背后是颠覆了人类生活的现代计算机工业.然而有些人的荣誉却远低于他的贡献,比如Fabrice,过去20年最闪亮和最有影响 ...

  2. Linux之父(李纳斯·托沃兹/Linus Torvalds)

    自由软件 Linux 之父:李纳斯·托沃兹(Linus Torvalds) 导语:28岁的芬兰青年李纳斯创造了一个全新的世界:就是一种名为Linux的操作系统.它所产生的力量决定了编程领域的新氛围,正 ...

  3. Linux程序员语录,Linux和Git之父 Linus Torvalds 的那些经典语录

    Linux和Git之父Linus Torvalds曾说过这样一段话: "Bad programmers worry about the code. Good programmers worr ...

  4. 什么样的代码才是优秀的代码

    一,什么样的代码才是优秀的代码 许多去 Google 参观的人,用完洗手间后,都会惊奇而略带羞涩地问:"你们马桶前面的门上,贴着的 Python 编程规范,是用来搞笑的吗?".搞不 ...

  5. 上帝视角:程序员为什么需要理解 CPU?

    来源 | 码农的荒岛求生(ID:escape-it) 可能有的同学会问,程序员写代码就好了,为什么需要去理解CPU啊?不嫌累啊?啊?啊?你倒是说啊. 计算机系统 != 汉堡包 在之前的文章中我把计算机 ...

  6. c++ include 路径_程序员应如何理解include

    相信很多同学在学习C/C++后都有这样的疑问,#include这句话到底是怎么意思?这句话的背后隐含了什么?我们常用的stdio.h存放在了哪里? 这篇文章就来解答这个问题. 谁来处理头文件 有上述疑 ...

  7. 对话MySQL之父:代码一次性完成才是优秀程序员

    [CSDN 编者按]MySQL之父Monty有着四十多年的编程经验,从儿时的兴趣到长大后的深耕,他在编程领域不断钻研,最终成为编程大师.<新程序员004>带你走进Monty的程序人生,谈谈 ...

  8. @程序员,你知道大厂是如何招聘到优秀项目经理的吗?

    当下的开发团队中,工程师的存在不可或缺,但是团队拥有一位优秀的负责人则更为重要,那么对于企业而言,究竟该如何才能挖掘到一位适合自己的工程经理? 作者 | Lena Reinhar 译者 | 弯月,责编 ...

  9. 程序员你真的理解final关键字吗?

    文章目录 1.修饰类 2.修饰方法 3.修饰变量 4.final变量修饰变量(成员变量.局部变量) 4.1 final修饰成员变量: 4.2 final修饰局部变量: 5.final变量和普通变量的区 ...

最新文章

  1. PHP学习 文件操作函数的应用--简单网络留言模板
  2. #23 Counter Cache Column
  3. golang 时间原点 时间日期格式化
  4. 自动装配——@Autowired@Qualifier@Primary
  5. 0x5f3759df的数学原理
  6. 博客文章列表(二)——算法、数据结构、数据库、ABCD
  7. 轻量级Web应用程序:PrimeFaces(JSF)+ Guice + MyBatis(第1部分)
  8. 【转】细说.NET中的多线程 (五 使用信号量进行同步)
  9. hbase-1.3.2安装
  10. ios中生成uuid
  11. 查一个字段中字符集超过30的列_Mysql 的字符集以及带来的一点存储影响
  12. java中bin和src文件夹_编译src中的所有文件?
  13. linux img 转 iso,Ubuntu下将img 转化成iso
  14. 矩阵代数(四)- 分块矩阵
  15. Datastage数据装载报错:Consumed more than 1000000 bytes looking for record delimiter
  16. 婚纱纪实类照片调色思路 教你PS洋气的油画效果
  17. android bmob上传图片,Bmob+Android+ECharts 实现移动端数据上传与图表展示
  18. 脑神经科学简单介绍(小白入门)
  19. 自然数 素数 质数_素数列表–最多20,000个素数的图表
  20. 汇编语言程序设计期末总结

热门文章

  1. cmd批量修改文件名 增加文字_CMD批量修改文件名的批处理方法
  2. matlab零交叉块,[MATLAB基础] 关于心电信号奇异点与其小波变换模极大值对的零交叉点的关系?请教下面程序应该如何理解哈...
  3. 读懂nxyz:究竟是个什么项目 Paradigm、红杉竞相入局
  4. 除去英文句子中的数字、空格和标点符号
  5. 必备软件一键安装卸载脚本(小作业)
  6. 分段二次插值函数表达式_数值分析(拟合、插值和逼近)之数据插值方法(线性插值、二次插值、Cubic插值、埃米尔特zz...
  7. 京东动内、阿里拉外:物流变革已关乎生死存亡
  8. 数据连接池的工作机制是什么
  9. Hbuilder与夜神模拟器连接
  10. Java 补全正负号