小言_互联网的博客

什么是好代码,Linux大神来告诉你

275人阅读  评论(0)

‍‍‍‍‍我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。

在工作中经常有同学在讨论,到底什么是好代码?

对于好代码,相信每个人都有自己的理解,可能它是包括以下几个维度:

  • 关于代码结构本身;

  • 关于功能实现;

  • 关于学习成本;

  • 关于程序可读性...

但是全面清晰的将所有标准都一一列举出来又是非常困难。

记得某一期的TED邀请了 Linus,里面讲到了他个人对生活的品味,以及为啥有 Linux 等等。其中Linus 提到了对 “好代码”的一些看法,一起整理分享给大家。

1. Linus Torvalds 介绍

Linus Torvalds 是Linux内核的缔造者,22岁他还在上大学的时候,就把Linux内核写出来了, 在他购买IBM PC的时候,第一想法是为这个PC写一个操作系统,而不是像普通人一样地去装这个系统装那个软件。

Linux 内核基本上全部是C语言实现的,底层的/boot由汇编实现,大量的移位运算,按位运算,定点移位运算,速度极快!特别在很多没有乘法指令的RISC结构CPU上,这样做是极其高效的,也是硬件容易接受编程方式。

注意: Operating System 可不是谁想写就能写的。尤其是OS内核部分,单会编程语言是远远不够的, 硬件知识的储备也是必不可少的。

Linus Torvalds两次改变了技术,第一次是Linux内核,它帮助互联网的发展;第二次是Git,全球开发者使用的源代码管理系统。

Linus 本人同样是Git的缔造者, Git目前世界上最牛逼的分布式版本控制系统(没有之一)


2. 关于好代码

Linus Torvalds说:

“有时候你可以换个角度看问题,重写代码,排除特例,完美覆盖所有情况,这就是好的代码。同时也很简单,这是最基本的原则。细节非常重要。”

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

1. 不怎么漂亮的代码


   
  1. remove_list_entry(entry){ prev = NULL; walk = head;
  2. // Walk the list
  3. 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. 好的代码


   
  1. remove_list_entry(entry){ // The "indirect" pointer points to the // *address* of the thing we'll update indirect = &head;
  2. // Walk the list, looking for the thing that // points to the entry we want to remove while ((*indirect) != entry)) { indirect = &(*indirect)->next; }
  3. // .. and just remove it *indirect = entry->next;}

这个代码完全不需要单独处理特例情况,程序整体更加整洁、优雅。

其实现原理为:指针变量indirect保存的是链表成员结构体中的next成员的地址(head指针也可这样看),如下图所示:

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


   
  1. *indirect = entry->next;

3. 访谈中的其他观点

3.1、关于工作方式

在本次TED的采访中,Torvalds以极其开放的态度讨论了他独特的工作方式和性格特点。

Linus Torvalds说:“我不是一个空想家,我是一名工程师,我非常乐意跟梦想家在一起,他们行走四方,仰望苍穹,看着满天星辰说,“我想到那儿去。”但我是低头看路的那种人,我只想填好眼前这个坑,不让自己掉进去,这就是我。”

3.2. 关于开源

Linus Torvalds说道:

Linux并不是一个合作的产物,它是我一系列项目中的一个,纯粹出于自己当时的需要,部分原因是我需要得到结果,但更重要的原因是我享受编程。

当年我只是想做一个完全属于自己的项目,我压根就没想过开源这件事。但在那之后,随着项目越来越大, 你会开始想让别人知道。感觉就像 “哇,快来看看我的成果!”

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

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

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

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

附:关于Linus Torvalds 本期 TED采访原视频,关注公众号回复关键字“TED”即可获取

- END -


作者:架构精进之路,专注软件架构研究,技术学习与个人成长,关注并私信我回复“01”,送你一份程序员成长进阶大礼包。


往期热文推荐:


「技术架构精进」专注架构研究,技术分享

Thanks for reading!


转载:https://blog.csdn.net/ZhangHuan0126/article/details/112792970
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场