Linux背后的思想

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;

本文分享自微信公众号 - CU技术社区(ChinaUnix2013)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

深度神经网络可解释性方法汇总,附Tensorflow代码实现

理解神经网络:人们一直觉得深度学习可解释性较弱。然而,理解神经网络的研究一直也没有停止过,本文就来介绍几种神经网络的可解释性方法,并配有能够在Jupyter下运...

18650
来自专栏数据森麟

我用python帮朋友做了猪肉数据分析图,结果……

打开官网,找到并跳转到猪价网址 http://zhujia.zhuwang.cc/

13120
来自专栏用户5521492的专栏

别再让我帮你盖楼了行不?给个脚本自动盖楼领喵币,附APK

要知道阿里每年都会发放大量红包、各种优惠券和各种互助游戏......而这两天,马爸爸的“ATM”们可都沉迷于这些个互助游戏里不可自拔,吾日三省吾身:签到了?做任...

16540
来自专栏python爱好部落

IOS App测试的那些坑和解决方案

在测试中常见的,如 xcode 版本问题,打包证书问题,闪退无法重现,不好抓 log, 上架被拒问题等等。本文总结一些常见的坑,可以完美绕过去。

20640
来自专栏python爱好部落

IOS自动化的那些经验

在自动化中,IOS我们可以用libimobiledevice来辅助做一些工作,用xcrun simctl可以来操纵模拟器,具体咋用呢?

13820
来自专栏用户1052078的专栏

git配置同时使用 Gitlab、Github、Gitee(码云) 共存的开发环境

Host github.com HostName github.com User git #默认就是git,可以不写 IdentityFile ~/.ss...

16210
来自专栏千里行走

rocketmq-6:golang实现的生产可用rocketmq-exporter

数据来源:从rocketmq-console的http请求获取数据。也就是说RocketmqExporter必须依赖rocketmq-console。好吧,我承...

36120
来自专栏用户1052078的专栏

Gitlab 数据搬家迁移

两台服务器的Gitlab版本必须是统一的,如有不统一,请先进行升级统一。 Gitlab版本升级教程:

14110
来自专栏眯眯眼猫头鹰的小树杈

猫头鹰的深夜翻译:开发者必须了解的分支发布模型

想要深入了解Git和中心化代码版本管理系统的优缺点比较,可以在网上自行查询,这个话题一直争论不休。作为一个开发者,我更倾向于使用Git。Git确实改变了开发者对...

7910
来自专栏服务端技术杂谈

左耳朵耗子谈架构师和技术专家

有一些技术人员一旦到了软件架构师和专家的级别,就会停止学习留在原地了,有时候他们做似乎开始变得封闭了。做技术这么长时间,经历了好些“有趣”的事,我这里例举一些,...

10520

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励