01

Linus Torvalds

Linus Torvalds两次改变了技术,第一次是Linux内核,它帮助互联网的发展;第二次是Git,全球开发者使用的源代码管理系统。在一次TED的采访中,Torvalds以极其开放的态度讨论了他独特的工作方式和性格特点。Torvalds说:“我不是一个空想家,我是一名工程师,我非常乐意跟梦想家在一起,他们行走四方,仰望苍穹,看着满天星辰说,“我想到那儿去。”但我是低头看路的那种人,我只想填好眼前这个坑,不让自己掉进去,这就是我。”

02

关于开源

Linus Torvalds

Linux并不是一个合作的产物,它是我一系列项目中的一个,纯粹出于自己当时的需要,部分原因是我需要得到结果,但更重要的原因是我享受编程。这段旅程的终点,在25年后的今天(2016),我们仍未达到。当年我只是想做一个完全属于自己的项目,我压根就没想过开源这件事。但在那之后,随着项目越来越大, 你会开始想让别人知道。感觉就像“哇,快来看看我的成果!”

成千上万的人想参与进来(Linux内核项目),但很多时候,我成为了那个断点,我无法让自己跨出那一步,同上千人合作。

因此Git是我的第二个大项目,它存在的意义就是维护我的第一个大项目。事实上这就是我的工作方式。我编程并不是为了… ,我编程是因为好玩,但我也想做一些有意义的事情,因此我设计每一个程序仅仅是因为我自己需要。

而我喜欢开源软件的一点就是,它能让形形色色的人在一起合作。我们不必相互喜欢,有时候我们甚至互相讨厌。是真的,我们经常吵得不可开交。

科学界的开源显然是一种回归,科学最初是开源的。但之后变得越来越封闭,只存在那些昂贵的科学期刊上。开源让科学回归了,我们有了arXiv和开放期刊。

小编有话说

Linux并不是选择了开源,只是因为开源恰好是Linux需要的。就如Linus Torvalds所说:“纯粹出于自己当时的需要。”

Linus Torvalds是睿智的,做好自己能控制的。

开源不仅仅代表源代码的开放,开源更是一种工作方式,一种教育方式。因为有了开源,我们多了一种更好的合作共赢的工作方式;因为有了开源,让更多从业者和学生能够学习到更好的技术。

03

代码的品味

Linus Torvalds

有时候你可以换个角度看问题,重写代码,排除特例,完美覆盖所有情况,这就是好的代码。同时也很简单,这是最基本的原则。细节非常重要。对我来说,我愿意与之共事的人,必须有好的品位。

采访中Linus Torvalds对比了以下2个函数:

小编有话说

大牛们总是对自己严格要求,不仅仅是要实现功能,并且要优雅的实现。下面我们来看看采访中Linus Torvalds对比的两段代码:

1. 不怎么漂亮的代码

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

上面的代码,需要区分要移除的成员是否为链表的头一个成员。需要单独处理特例情况(要移除的成员为链表的头一个成员)。这个函数比较好理解,这里小编就不做更多的解释了,如有疑问,请添加小编微信交流。

2. 好的代码

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    // points to the entry we want to remove     while ((*indirect) != entry))    {        indirect = &(*indirect)->next;    }    // .. and just remove it    *indirect = entry->next;}

这个代码完全不需要单独处理特例情况,程序整体更加整洁、优雅。其实现原理为:指针变量indirect保存的是链表成员结构体中的next成员的地址(head指针也可这样看),如下图所示:

所以变量*indirect就相当于是前一个链表成员的next成员(相对于要移除的成员来说)。当找到要移除的成员后,进行如下操作即可:

*indirect = entry->next;

—————END—————

扫码或长按关注

回复「 加群 」进入技术群聊

Linux背后的思想相关推荐

  1. Linux 背后的思想

    01 Linus Torvalds Linus Torvalds两次改变了技术,第一次是Linux内核,它帮助互联网的发展:第二次是Git,全球开发者使用的源代码管理系统.在一次TED的采访中,Tor ...

  2. 文件名为空linux,文件系统:隐匿在Linux背后的机制

    原标题:文件系统:隐匿在Linux背后的机制 在 Linux 中,最直观.最可见的部分就是 文件系统(file system) .下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及 ...

  3. permutation_importance是什么?背后的思想又是什么?是如何使用permutation_importance计算特征重要度的?

    permutation_importance是什么?背后的思想又是什么?是如何使用permutation_importance计算特征重要度的? inspection.permutation_impo ...

  4. 一页纸项目管理方法(OOPM)背后的思想

    一页纸项目管理方法(OOPM)背后的思想 --选自<一页纸IT项目管理:大道至简的实用管理沟通工具> 设想一下 , 你的上司要求你快速提供一份项目报告 , 内容包括以下方面 : 项目的哪些 ...

  5. 探索强化学习算法背后的思想起源!

    https://www.toutiao.com/a6630657888442384909/ 接受生物大脑的混乱和电子大脑的秩序 人们对人工智能的追求总是与另一场斗争交织在一起,更富有哲理.更浪漫.更不 ...

  6. 再谈编程范式-程序语言背后的思想

    link link 编程范式 托马斯.库尔提出"科学的革命"的范式论后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词.编程范式一般包括三个方面,以OOP ...

  7. linux文件系统分隔符,Linux的哲学思想和文件系统

    Linux的哲学思想 Linux是一个自由的操作系统,其内部也有着自己独特的一些特定的规则,就是我们所说的关于Linux的哲学思想. Linux系统的哲学思想 1.一切皆文件:Linux系统把几乎所有 ...

  8. Linux九大哲学原理,Linux/Unix设计思想(全新阐释开源哲学,Jon “maddog” Hall作序推荐)...

    <Linux/Unix设计思想> 第1章 Unix哲学:集思广益的智慧 1 1.1 NIH综合征 2 1.2 Unix的开发 2 1.3 Linux:一个人加上一百万人的智慧 4 1.4 ...

  9. 再谈编程范式—程序语言背后的思想

    编程范式 托马斯.库尔提出"科学的革命"的范式论后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词.编程范式一般包括三个方面,以OOP为例: 1,学科的逻 ...

最新文章

  1. 静态路由中的下一跳地址和送出接口的区别和使用
  2. 团队开发冲刺第二阶段_4
  3. 鸿蒙开发-使用Storage实现数据存储
  4. 找出n个自然数(1,2,3,…,n)中取r个数的组合(C语言)
  5. spring框架mvc框架_Spring的MVC测试框架入门–第1部分
  6. python 文件指针在文件末尾_python文件操作及seek偏移详解
  7. java 链表算法_数据结构算法Java版(一) 链表
  8. Java开发笔记(八十八)文件字节I/O流
  9. virtualmin修改php.ini,virtualmin安装和配置使用
  10. 快逸报表多数据源解决办法以及项目多数据源切换方法
  11. linux环境安装的odac,net不安装Oracle11g客户端直接使用ODAC
  12. Tongweb 7 集中管理工具
  13. 安时积分法的c语言程序,代码生成 | 安时积分法模型搭建
  14. html的blockquote标签,html blockquote标签怎么用
  15. 交换机与路由器技术:静态路由配置和路由器上配置DHCP、虚拟局域网VLAN
  16. vue + openlayers鼠标移动获取地图经纬度格式化的两种方式
  17. 商汤面试题android,商汤面试经验
  18. Spring系列九:Spring 事务
  19. 产品经理的六大工作职责
  20. springboot2.x整合tkmapper

热门文章

  1. mysql从入门到精通之数据库基本概念理解
  2. GMF 教程 Mindmap 5
  3. 疯狂java学习笔记1023---线程的同步
  4. html字符串生成器源代码
  5. 一些Select检索高级用法
  6. 华数联手海信升级互联网电视平台
  7. LIMIT M,N分页性能优化方案
  8. 2台电脑一根网线传文件_「教程」如何快速的在两台电脑间传输大文件?
  9. oracle rds 运维服务_从运维的角度分析使用阿里云数据库RDS的必要性–你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库...
  10. 生活中常见物联网实例_物联网网关常见问题解答(一)