程序员书库(ID:OpenSourceTop) 编译
Linux可以说是21世纪的操作系统,Linus Torvalds在构建开源社区方面做出了巨大的贡献,网络专业人员和开发人员采用Linux的主要原因是它的代码质量和实用性。毋庸置疑,Torvalds是一个编程天才。
Steven J. Vaughan-Nichols询问了Torvalds以及其他世界顶级的Linux开发人员,是哪些书帮助他们实现了卓越的编程。以下这就是这些大神们推荐给我们的书:
耀眼的C语言
Linux是在20世纪90年代开发的,其他基础开源应用程序也是如此,开发人员选择使用的工具和语言与时代有关,这意味着当时的开发者大多选择C语言编程。虽然如今C语言不再流行,但对于许多老牌开发者来说,这是他们的第一门语言,因此对他们影响最大的书籍中,一定有C语言相关的。“你不应该用我学习编程的路线去学习。”Torvalds说。他是从学习BASIC语言开始,然后转向机器代码(这里指的不是汇编语言,实际上只是‘数字’的机器码,”),最后才是汇编语言和C语言。
Torvalds说:这些语言都不应该成为当下学习编程的第一门语言,其中一些(机器代码)根本没有任何意义,虽然C语言仍然是一门主要的语言,但是我仍然认为你不应该从它开始。
Torvalds这样说并不是因为他不喜欢C语言,毕竟Linux是用GNU C编写的。他说:“我仍然认为C语言是一种很棒的语言,语法非常简单,各个方面都表现很好。但是,以今天的标准来看,要让它成为一门好的初学者语言,需要付出的努力太多了。“在这个过程你可能会感到很沮丧,从你写出第一个‘Hello World’程序到你开发出可能实际使用的程序,这中间间隔实在是太大了。
而且并不是只有Torvalds推荐K&R,其他人也都把这本书作为最有影响力的参考书籍之一,诸如甲骨文负责Linux和虚拟化开发的高级副总裁Wim Coekaerts;著名Linux内核开发者Alan Cox;谷歌云CTO Brian Stevens;以及Canonical公司技术运营副总裁Pete Graner 。
如果你想学习C语言编程,Samba联合创始人杰里米·艾利森(Jeremy Allison)还向我们推荐了《C程序设计新思维》;
此外,艾利森还推荐了《C专家编程》以及具有20年历史的《POSIX多线程程序设计》。
除了C语言,还有什么?
Linux开发人员对当前编程书籍的建议都是他们认为最适合当今开发项目的工具和语言相关的。同时它们也反映了他们自己的个人偏好。艾利森建议年轻的开发人员可以通过《Go Programming Language》来学习Go语言编程;
以及通过《Programming Rust》来学习Rust 。
但是,超越编程语言之外(以及书籍教你的技术)也是十分有意义的。“比如从一些环境开始,你可以通过一个工具包,为你完成99%的大致框架,然后你再围绕它编写出其他的东西,”Torvalds建议。Torvalds还说:“老实说,语言本身并不像它周围的基础设施那么重要,无论你是从Java或Kotlin开始。比如你想开发一个移动APP,最好的选择可能是Android SDK。或者你对游戏很感兴趣,所以你要开始使用其中一种游戏引擎,这些引擎通常都有自己的脚本语言。“
这种基础结构包括特定于操作系统本身的编程书籍。除了K&R之外,Canonical公司技术运营副总裁Pete Graner 还阅读了W. Richard Stevens的《UNIX网络编程》
特别是W·Richard Stevens 的《TCP/IP详解 卷1:协议》这是是一本完整而详细的TCP/IP协议指南,到了如今依然十分受欢迎,即使它已经出版近30年了。
由于Linux开发在很大程度上与网络基础设施相关,因此Graner还推荐了《sendmail》,《学习bash》,《DNS与BIND》和《Managing IMAP》等 O'Reilly书籍。
设计永不过时
谷歌云CTO Brian Stevens认为:技术是比较固定的,但设计却不一样,他认为所有的开发人员都应该在学习语法之前就开始学习设计。因此他极力推荐《The Design of Everyday Things》这本书
甲骨文的Linux 元老Coekaerts喜欢Kernighan和Rob Pike的《程序设计实践》,Coekaerts建议所有人都应该读一读这本书,遗憾的是Coekaerts还是学生的时候这本书还没有出版
如果你问一个经验丰富的开发者:你最喜欢的技术书籍是什么?一定会有人告诉你是《 计算机程序设计艺术》,VMware的首席开源官Dirk Hohndel认为,虽然这本书备受推崇,但是放在今天并不一定非常有用。阅读大量代码
虽然编程书籍可以教会你很多,但不要错过开源社区带给你的另一个机会:阅读代码《代码阅读方法与实践》本书的作者使用600多个现实的例子,向读者展示如何区分好的(和坏的)代码,如何阅读代码。
同时,也不要忽视共同学习的机会。Cox说:“我是在计算机俱乐部和其他人一起学习基础知识的。在我看来,这仍然是迄今为止最好的学习方式。”他通过《Mastering Machine Code》和Honeywell L66 B编译器手册学习机器代码,但是自学和与其他开发人员一起学习有很大的不同。
Cox认为一群人在一起不仅能够玩的开心,还能相互帮助解决遇到的难题是最好的学习方式,而且这种一起学习的方式,无论你在那个年龄段都是适用的。
最后,如果你想尝试Linux硬核开发,Linux Kernel的维护者Greg Kroah-Hartman还推荐了Steve Oualline的《C程序设计语言》和Samuel Harbison以及Guy Steele的《C语言参考手册》