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;

—————END—————

扫码或长按关注

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux执行sh提示非标准环境,Linux执行.sh文件时提示No such file or directory该怎么办(三种解决办法)...

先给大家看下问题描述,下图是我在运行时出现错误截图:解决方法分析原因,可能因为我平台迁移碰到权限问题我们来进行权限转换1)在Windows下转换:利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linu…

你应该知道Linux内核softirq

说起这个softirq ,很多人还是一头雾水,觉得这个是什么东西,跟tasklets 和 workqueue有什么不同。每次谈到这个,很多人,包括我,都是有点紧张,特别是面试的时候,因为你一旦说错了什么&…

linux 查看磁盘分区,文件系统,使用情况的命令和相关工具介绍,Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍...

Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍作者:北南南北来自:http://doc.xuehai.net提要:Linux 磁盘分区表、文件系统的查看、统计的工具很多,有些工具是多功能的,不仅仅是查看磁盘的分区表&#x…

C语言,链表

定义一个链表的节点之前说到树,里面也有一个节点,节点是用来存数据的,不管是树还是其他什么数据结构,最终的目的都是用来处理数据的,所以节点里面包含两个东西,一个是指针,指针可以指向其他位置…

linux hosts文件如何修改_3 种方法教你在 Linux 中修改打开文件数量限制

当文件被打开访问时,操作系统临时分配一个名为文件句柄的数字。主内存的一个特殊区域是为文件句柄预留的,这个区域的大小决定了一次可以打开多少个文件。Linux上的进程受到许多限制,这些限制也阻碍它们正确地执行,而且每个进程都有…

10个高效Linux技巧及Vim命令对比

写在前面:今天没来得及唱歌~一个多星期没更新了,今天记录下我自己用得比较多的Linux命令行快捷键,小伙伴们别嘲笑我哈~不知道为啥,每次发文就有好几个小伙伴取消关注离开之前,可以告诉我为什么吗~~Vim的很多命令和功能…

python 微信机器人_Python 微信机器人

一、写在前边的话 如何做一个自动回复的微信机器人?机器人的功能有,自动加好友,关键字回复,等等,它甚至可以成为你的私人管家,只要你的代码到位。今天,主要讲解下,微信机器人-图灵版…

linux 控制台存储,技术|使用 Stratis 从命令行管理 Linux 存储

通过从命令行运行它,得到这个易于使用的 Linux 存储工具的主要用途。正如本系列的第一部分和第二部分中所讨论的,Stratis 是一个具有与 ZFS 和 Btrfs 相似功能的卷管理文件系统。在本文中,我们将介绍如何在命令行上使用 Stratis。安装 Strati…

你想要的江湖,可能不在这时候笑傲

昨天看知识星球看到的一个码农的经历,然后我看了,也回答了,想把回答分享给大家,我觉得这应该是很多人都会遇到的。困扰的问题潜水这么久,有一个问题想问一下,帅张。可能有点啰嗦。就是在一家公司做开发&…

mysql binlog 备份_MySQL的binlog知识梳理

1、binlog概念:binlog是一个二进制格式的文件,用于记录“修改数据或可能引起数据变更”的SQL语句(查询的SQL不会记录)。2、binlog功能:(1)恢复: 利用binlog日志恢复数据库数据。(2)复制: 主从架构通过binlog同步数据。(3)审计: 可以用binlog中的信息进行审计&#x…

你需要知道的Linux 系统下外设时钟管理

嵌入式系统一般要求低功耗,出于这个原因,一般只把需要使用到的外设时钟源打开,其他不需要使用到的模块,则默认关闭它们。LCD 模块,上电时候默认情况是关闭的,所以,要想使用 LCD 模块&#xff0c…

千万级大表如何更快速的创建索引_分享一份生产环境mysql数据库大表归档方案,值得收藏...

概述分享下最近做的一个mysql大表归档方案,仅供参考。整体思路一、明确哪些大表需做归档1、数据库表概要信息统计SELECTt1.table_schema,t1.table_name,ENGINE,table_rows,CAST( data_length / 1024.0 / 1024.0 AS DECIMAL ( 10, 2 ) ) data_size(M),CAST( index_le…

载波和LoRa

最近lora这个很火,火的原因是因为国家出了一个政策,这个政策呢,有很多人解读了,我身边也有好几个朋友做这方面的,然后我今天找他们聊了下,得到的结果是,这个政策肯定是或多或少对现在的行情和市…

imread函数 matlab_【MATLAB图像处理学习】1.读取和显示图片

CHAPTER2 图像处理的基础函数【使用的教材:冈萨雷斯 数字图像处理MATLAB(Digital image processing with Matlab】【原书图片下载地址:点这里】先介绍三个MATLAB中图片基本操作:imread imshow imwrite2.2读取图片imread(filename)imread是读取…

一场不能只看结果的较量

林书豪的比赛看得真的很舒服,虽然输掉了比赛,但是看到两边不断改变打法,不断试图侵犯对方的夺取分数,就好比看了一场战争电影,过程酣畅淋漓,结果差点令人满意。第一节广东的双后卫给北京制造了非常多的麻烦…

嘻哈帝国第一季/全集Empire迅雷下载

英文译名Empire,第1季(2015-01-08)FOX.本季看点:《嘻哈帝国》卢西奥斯莱恩是一名超级音乐明星兼Empire娱乐公司的创始人,故事讲述了他如何在困境和失败中运营公司的故事。拥有庞大帝国的老板得了绝症,于是他决定培养继承人&#x…

cassandra可视化工具_一位数据科学家的私房工具清单

作为一位万人敬仰的数据科学家,不但需要培育一棵参天技能树,私人武器库里没有一票玩得转的大火力工具也是没法在江湖中呼风唤雨的。近日北卡来罗纳大学CTO,一位数据科学家Jefferson Heard分享了多年来收集沉淀的数据分析工具集:处…

Dev C++,一个好玩的猜数字游戏

周末了,看了一点代码,发现有一个好玩的数字游戏,贡献给大家,个人觉得还是挺好玩的。说个题外话,之前写的文章,都是零散的,主要是时间的原因,最近事情有点杂,一说到这个事…

[BZOJ 2500] 幸福的道路

照例先贴题面(汪汪汪) 2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 368 Solved: 145[Submit][Status][Discuss]Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一…

你手上的PCB怎么制作的?几张动图揭晓工厂生产流程

在PCB出现之前,电路是通过点到点的接线组成的。这种方法的可靠性很低,因为随着电路的老化,线路的破裂会导致线路节点的断路或者短路。绕线技术是电路技术的一个重大进步,这种方法通过将小口径线材绕在连接点的柱子上,提…