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. Camera噪声问题
  2. swift判断iPhone 各种型号
  3. 正则表达式30分钟教程
  4. centos7.3 编译安装 git 2.13
  5. 01背包、完全背包、多重背包问题的C++实现及路径记录
  6. 网络管理与维护作业12
  7. 对于开发 0 bug 代码的思考——Design by Contract 契约设计
  8. 计算机科学与技术专业导论mooc答案,中国大学MOOC人工智能导论(2017级)网课答案...
  9. Linux黑客基础01篇
  10. 超好用的卸载工具——geek(免安装)
  11. ESP32利用百度智能云实现图像识别 文字识别
  12. 如何成为团队核心?从写出不可维护的代码开始
  13. svn提交变慢,svn update提示Node remains in conflict报错解决办法
  14. DevExpress 报表 格式化
  15. 一起读论文 | 文本分类任务的BERT微调方法论
  16. iOS和Android和H5交互WebViewJavascriptBridge
  17. 四川大学研究生计算机学院官网,四川大学计算机学院2018年硕士研究生招生拟录取名单及成绩公示...
  18. 如何做好基层管理者(二)
  19. 递归算法与非递归算法的转化
  20. 李阳英语228句口语要素 +校园英语迷你惯用语 +1000句最常用英语口语

热门文章

  1. 电脑网页打不开,提示错误err connection如何处理呢
  2. 【转】苹果iPhone常见名词术语
  3. 去除控制6.0 首创完美破解学生机房管理助手密码及限制 通杀机房控制软件
  4. 2014年江西省电子专题大赛赛题剖析
  5. 体验Dundas Dashboard数据可视化控件
  6. ubuntu 删除自带的游戏
  7. (附源码)计算机毕业设计JavaJava毕设项目珠宝首饰进销存管理系统
  8. 产业链和供应链的区别和联系
  9. java旅游管理开题答辩ppt_旅游管理学大学本科开题报告 开题报告怎么答辩
  10. 怎么压缩ppt文件的大小?