对软件工程师来说,Linux 实在是太熟悉了,互联网上用到的很多技术和产品背后都有 Linux 的身影。
你在用 Google 搜索的时候,用 kindle 看书的时候,用淘宝购物的时候,用 QQ、微信聊天的时候,后台是成千上万的 Linux 服务器在支撑着这些软件和服务。它们时时刻刻都在进行着忙碌的运算和数据处理,确保数据信息在人、软件和硬件之间安全的流淌。
Linux 可以称得上是 IT 发展史上圣杯级别的产品,同时,Linux 不仅仅在技术层面影响了人们的生活,它的诞生和发展历程本身就产生了很多有意思的话题和文化。
我读过不少 Unix/Linux 相关的书籍,到现在,很多具体的技术内容已经记不清了,但那些话题、模式和文化,却像醇香的好酒、美丽的传说,历久弥新,还在不断的为我带来思考和启发。
比如,最初的想法,往往并不是决定性的,几乎所有成功的产品都是边走边看做出来的。
林纳斯为了给自己做一个好用的终端仿真器,而最终做出了让他名垂青史的 Linux 操作系统。这样的例子并不罕见,沃兹因为热爱计算机而设计出了 Apple I,乔布斯因为想把 1000 首歌装进口袋而推出了 iPod。
所以说,好的软件产品,常常源于开发者自身的需求。这是我的另一个思考,你可能也有这样的感觉,如果有什么工作能够让自己保持长久的热情,那一定是做自己需要的产品。
很久之前,我做过一个给程序员用的开发工具,当时,我会要求每个研发人员都使用我们自己开发出来的工具,而不是仅仅把工具推给测试人员和项目组的程序员。过了一段时间,我发现那个 IDE 突然增加了很多“善解人意”并“出人意料”的功能。
现在我在做极客时间,这是一款面向工程师、产品经理和运营人员的知识服务产品,每次推出新功能,公司的研发人员往往是第一批真实用户,他们会不厌其烦的提出各种改进措施,产品经理细化之后,自己去实现改进。我们开玩笑说,程序员疯起来连自己都提需求。
然而,一个很现实的情况是,每个人的兴趣和需求都会转移,很可能你做着做着就不感兴趣了,林纳斯也不例外。
在 Linux 进入稳定发展的阶段后,他把更多的精力放到了开源社区上,但是,这并没有降低 Linux 操作系统的代码质量,因为他找到了更多的顶级源代码贡献者。
在软件开发项目中,我们同样会遇到类似的问题。某个功能的开发者突然对继续做这个功能失去了兴趣,这时候我们就有责任为这个功能找到一个可以胜任的接棒者,而不是强迫原来的开发者在原地踏步。
很多时候,我们厌倦了一件事情,并不是能力缺失,而是因为已经洞悉了这件事的所有秘密,于是开始渴望更多别的挑战。而这时,最好的做法是找到一个有能力的接棒者,这样,你才能没有负担的踏上新的征程。
在 Linux 诞生的过程中,还有一点非常值得说说,那就是林纳斯并没有尝试从零开始编写 Linux,而是从复用 Minix 的代码和理念开始的。虽然在 Linux 最终的版本中,几乎所有的 Minix 代码都被移除或重写了,但它在 Linux 成长初期确实起到了类似脚手架的作用。
可以说,优秀的程序员知道如何编程,而卓越的程序员知道如何合理复用。如果探究一下原因,卓越的程序员通常都很懒,我们把这种懒叫做“建设性懒惰”,因为他们知道,很多时候我们要的都是最终的结果,而不是勤奋的过程。如果有可以复用的基础,显然比从零开始更具有建设性。
在开源社区澎湃发展的今天,我们有了更多的技术选择。所以,当你拿到一个轮子的需求时,最好去社区里找找问问,如果有可以复用的东西,就不要再费劲去造一个新轮子,况且你也无法保证自己造的轮子要比旧轮子好用。
当然,我从来不算卓越的程序员,我只是知道如何模仿他们,借鉴他们的编程理念和做事方式,最终形成自己的风格,做出自己的产品。
你之前有了解过 Linux 的诞生和发展历程吗?有得到什么收获和启发?欢迎在留言区分享给大家。