草庐IT

Linus Torvalds背后 :成功的五个残酷真相

布加迪 2023-03-29 原文

​译者 | 布加迪

如果你不知道Linus Torvalds是谁,我会做一番简短的介绍;如果你是一名软件工程师,应该知道Linux是什么,我几乎可以肯定你至少使用过一次Git。Torvalds可以说是这两大项目背后的功臣。

当时间回转到1991年,年仅22岁的芬兰程序员Linus Torvalds发布了操作系统Linux。他公布了代码,允许爱好者们贡献自己的力量来使它强大。彼时,还没有人可以窥见一个开源时代的开启,也无法预见如今Linux在全球遍地开花的光景。

Linus Torvald本人无疑是传奇的,如果你想了解他的更多信息,可以上网搜索,我不想在本文中介绍更多细节。这里要讨论的是他的成功以及成功背后那些并不怎么励志的现实。

在正文开始之前,我想告诉你一件事:我不能保证你会喜欢这些想法,我只是道出真相,残酷而痛苦的真相。

1、没有人是特别的

励志视频和书籍有一个共同的主旨:你不平凡;如果工作方向对头,并投入所有精力,你就能如愿以偿,然后你会变成一个很特别的人。它们应该是对的,因为看看历史,数十亿人中有很多人流芳百世。我们认识他们是由于他们取得了巨大的成就。一个共同的主旨是,如果我们摁下正确的按钮,我们也能取得同样的成就。

很久以前我对这些想法深信不疑,但它们完全是谎言。没有人是特别的,一个人靠自身取得的成就很少。我们通常没有注意到的一个共性是,成功人士实现目标的方式不是努力工作,而是利用他人的工作能力来实现他们想要实现的目标。长期以来,人类一直在这么做。出色的指挥官利用国家来实现他们想要实现的目标。在近现代史中,我们开始通过创建公司做同样的事情。这些公司发现,通过付钱给员工并利用他们的能力,可以成就一番伟业。

比尔·盖茨、马克·扎克伯格、史蒂夫·乔布斯之类的大人物,所有这些人都是用同样的策略发家致富的,连沃伦·巴菲特也是。一般来说,我们认为巴菲特是通过长期用自己的钱做投资发家的。由于他奉行长期投资,所以他很成功。然而,他一度发觉其个人资金不够用,于是开始利用别人的钱,后来发明了新的方法来利用别人的钱。

那么Linus Torvalds呢?他发明了一种新方法来实现同样的目标。他放手一搏,决定向所有人开放其内核的源代码,然后他注意到人们贡献好的想法。后来他创建了Git ,允许人们实现想法,从而加快了这个过程。通过25年如一日地做同样的事情,他创造了特别的东西。然而,这不是他一个人做到的。今天,如果你查看Linux的GitHub页面,会发现这个项目有13000多个贡献者,超过13000人自愿参与他创建的这个项目。此外,我们甚至没有算上使用Linux创建新型商业模式的许多公司的那些人。数以百万计的人努力将Linux打造成今天的版本。

简而言之,没有人是很独特的。我们都是庞大系统中的一分子。就像蚂蚁和蜜蜂一样,我们共同取得了伟大的成就。互联网不是某个人创造的,有很多工人在海洋深处铺设电缆,连接不同大陆上的人们。因此,如果你想获得成功,应与其他人合作,并学会如何将他人的力量为你的项目所用。如果你认为自己可以做很多事情、认为自己很独特,那么你就是另一个巴斯光年。

2、保持友善并不好

我和其他人一样是一名软件工程师,在我所在的那家公司,保持友善很重要,因为公司在评估你的年终奖时,最主要的衡量指标之一就是你的性格。事实上,如果人力资源解雇人,与绩效同样是重要的衡量指标之一就是行为。我们强迫人们变得友善,否则就淘汰他们。

我认为我们这么做是由于我们不想听到残酷的事实。我们希望听起来不是我们的过错,即使明明是我们的过错。然而,我不认为我们在做正确的事情。当然在一些方面,为人友善是必须的。比如说,如果你照顾一位老人,为人友善应该是一项要求。然而,我认为这不适用于科技行业。

几位研究人员尝试了这个理论:他们设立了两个由随机人群组成的对照组。一组人被迫变得友善,另一组人可以随意地更积极地捍卫其想法。将同一个问题抛给这两组人,对结果进行评估。在多次重复之后,他们发现积极捍卫想法的那组人一再找到更好的想法和解决办法。技术改进专注于同一件事:找到解决问题的最佳办法。因此,我认为我们应该能够坚持各自的想法,直到我们通过使用数学证明或进行实验找到最佳解决办法。

这一点上,我想澄清一件事:积极捍卫并不意味着即使你错了也要坚决捍卫想法。如果你错了,而且有证据或有合理的解释,你就应该坦然接受,让其他人加以指正和改进。在捍卫想法的同时,应该保持理性。

Torvalds对Linux做了同样的事情。无论面对代码提交,还是新闻媒体,他都非常积极地捍卫其想法。我不支持这一点,他也伤了很多人的心。然而,这是找到最佳解决办法的好策略。由于这种做法,Linux变得与众不同。macOS 专注于特定的硬件,Windows因内存泄漏和缺乏效率的实施而频频出现致命蓝屏,而Linux适用于所有设备上,只需要一点专业的操作,并且经过合理优化,因此内核的调用跟踪比Windows远胜一筹。

3、目标、想法……统统是谎言

你知道什么是幸存者偏差吗?二次大战期间,美国海军分析中心的研究人员对执行任务后返回的飞机受到的损坏进行了研究。然后,他们建议在受损最严重的部位加厚装甲,以尽量减小轰炸机在敌方炮火中的损失。然而,Abraham Wald发表了不同的看法。Wald是一位匈牙利数学家,也是统计研究小组的成员,他运用统计技能处理各种战时问题。他注意到一件非常简单的事情:他们在分析的飞机是返回的飞机。这意味着这些飞机即使在那些部位被击中时也成功返回,这意味着如果它们在其他部位被击中,就无法成功返回。

在我看来,目标、想法和愿景是同一种理念的产物,即幸存者偏差的产物。很多人只研究成功人士,他们认为成功人士都有愿景和目标。然而,我不认为这是区别所在。不妨想想大学入学考试。你认为排在第1百万位的人争取入学考吗?很可能,这个人争取更高的位次,但没有正确地做其他事情。如果成功者和失败者的目标和愿景都同样,那么它们就不是他们之间的区别。

Linus Torvalds在TED演讲采访中承认,他没有愿景或5年计划。他基本上是遇到问题就解决问题;另一方面,他试图为已经解决的问题找到更好的解决办法。他有一套系统,一套解决问题和寻求更好办法的系统。将这套系统运用25年,这就是Linux背后的成功理念。

4、没有智能设计一说

有些人只会一味地想,却无法开始做想做的事情,我就是其中之一。我在开始实际动手之前研究一番,以求找到最佳方法。到头来,我永远不会开始,因为我已经迷失在寻找最佳方法和学习获得最佳方法的过程中。

后来我注意到一件事。人类通过犯错学会了一切。我们通过尝试、试验和犯错,发现了很多东西。我想举个例子:如果你了解日本的地理位置,可能知道那里经常发生很多地震。在日本历史上,造的房子不太长,一般比较宽,因为如果他们建造的房子很长,会在地震中毁于一旦。今天他们解决了这个问题,但如何解决?他们创建了一个小型地球模型,实施了不同的想法,然后通过形成人造地震来测试这个模型。只有测试想法、发现新问题,并逐一解决每个问题,日本才为建筑物地基想出了出色的设计。现在,日本是建筑物非常牢固耐用的国家之一。

Torvalds在一次采访中表示,Linux中没有智能设计。大致说来,他尝试想法,通过犯错和解决问题,他才有所发现。就这点而言,你可以说“不存在智能设计,但有很多介绍智能设计的书籍”,确实如此。这类书中我最偏爱的一本是Robert Martin编写的《整洁的代码》(Clean Code)。他在书中给出了很好的设计基础。然而如果你读过这本书,就很容易理解他通过从错误中汲取教训提炼出了所有这些原则,不仅从他自己的错误中汲取教训,还从其他工程师和破产公司的错误中吸取教训。

总而言之,其想法是通过犯错误来学习。然而,不要一再犯已犯过的错误。尝试新的,通过解决遇到的每个问题,学习新知识。不要试图弄清楚什么是最好的方法,而是开始动手,犯错误也没关系。

5、分心是潜在的杀手

硅谷文化基于那些频繁跳槽的软件工程师。这么做的目的是什么?我认为有两个:这样一来,技术想法和改进散布于许多公司当中。其次,它掀起了聘请最有经验的工程师的一场竞争,这使得聘请这些人的报酬越来越高。在软件工程师的精美YouTube视频中(我也喜欢看这样的视频),我们可以看到精美的办公室提供免费美食,高额薪酬自不待言。有了所有这些诱人的东西,很多人都想成为其中一员。

与其他方面一样,这带来了我们通常不会注意到的成本。每个公司都有自己的系统,自己的实施风格和不同的技术。在我们了解其中的每个细节、开展某个项目足够长的时间之前,我们离开了公司。今天,在大多数大公司,工程师的平均停留时间不到2年。

这有什么不好?我想向你展示不同的视角。Linus Torvalds在硅谷的一家公司 (Transmeta)开始工作,他不是在多家公司当中跳来跳去,而是在这家公司待了将近7年,直到为Linux基金会奠定了基础。他为什么那么做?为什么他不像其他人那样在公司之间跳槽?他在TED Talk采访中所说,自己非常固执,并不轻易放弃项目。事实上,他太固执了,以至于已经在同一个项目上投入了25年多。

沃伦·巴菲特将同样的观念运用到投资界,长期运用同样简单但有效的策略,并使之完美,最终他成为了首富。这里的要点是,成功属于关注某件事的人,而不是属于从一个项目跳到另一个项目的那些人。

这个建议并不适合所有人,因为我们中的一些人只是为了钱而从事软件工程,这本身没有什么错。然而,有很多人想要创造伟大的产品;遗憾的是,唯一的方法就是专心致志。因为很多人同时在努力实现不同的目标,如果你想要成功,创造其他人想要使用的产品,那么你真的需要专注于想要解决的问题和想要完成的项目,并持之以恒。

原文链接:https://medium.com/codex/5-harsh-truths-from-linus-torvalds-406ab20cea02

有关Linus Torvalds背后 :成功的五个残酷真相的更多相关文章

  1. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  2. ruby - 如何知道通过 ruby​​ 上传 ftp 是否成功? - 2

    下面的代码通过ftp上传文件并且它有效。require'net/ftp'ftp=Net::FTP.newftp.passive=trueftp.connect("***")ftp.login("***","***")ftp.chdir"claimsecure-xml-files"ftp.putbinaryfile("file.xls",File.basename("file.xls"))ftp.quit但是如何确定上传是否成功呢? 最佳答案 之后ftp.putbinaryfile("file.xls",File.basename("

  3. ruby-on-rails - 成功发送延迟作业电子邮件后更新用户表 - 2

    我是一个尝试使用delayed_job的NOOB。我想在使用延迟作业成功发送邮件后更新用户模型。发送邮件:UserMailer.delay.welcome_email(user)如果邮件发送成功,请执行以下操作:User.update_attributes(:emailed=>true)邮件发送成功后如何回调或触发? 最佳答案 您需要创建一个Job对象而不是调用#delay帮助程序。您可以使用successHook来执行回调。classWelcomeEmailJob 关于ruby-on-

  4. ruby-on-rails - 使用 Stripe for rails 检查充电是否成功 - 2

    上下文:我正在使用Stripecheckout接受rails中的一次性付款。我有一个收费Controller,如下所示。我最初使用stripewebhook来监听charge.succeeded,但由于webhook的异步特性而遇到了一些问题。我已将业务逻辑移至Controller。如果客户收费成功,我会将客户和其他一些详细信息保存到数据库中。我的问题:此检查是否足以确保收费成功?ifcharge["paid"]==trueStripe::Charge.create的Stripe文档指出,“充值成功返回一个充值对象。如果出现问题,则引发错误。一个常见的错误来源是无效或过期的卡,或者可用

  5. ruby-on-rails - 有没有人用 Ruby 1.9.1 成功部署了 Rails 项目? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。上周我成功完成了我们公司所有应用程序从Ruby1.8.6到Ruby1.8.7的转换,包括本地和远程配置。从现在开始,开发不需要确保与Ruby1.8.6的向后兼容性。出于好奇,我尝试针对Ruby1.9.1运行几个项目的测试套件。正如预期的那样,我发现了一些与编码相关的问题,但当我发现诸如Rack::Link已知错误之类的低级不兼容性时,我真的很震惊。在这一

  6. ruby - 为什么 instance_eval 对 Proc 成功但对 Lambda 不成功? - 2

    我有以下类(class):classUsercode1=Proc.new{}code2=lambda{}define_method:testdoself.class.instance_eval&code1self.class.instance_eval&code2endendUser.new.test为什么第二个instance_eval失败并出现错误数量的参数(1代表0)错误? 最佳答案 instance_eval正在将self(User)生成给lambda。Lambda对其参数有特殊要求-方法也是如此-如果参数太少/太多,将引发

  7. ruby - 如何知道 FileUtils 命令是否成功? - 2

    我没有看到FileUtils命令的任何返回值。我想做这样的事情:really=(gets.chomp=="y")ifreallysuccess=FileUtils.rm_rf"./PROJECT_#{@name}"#doesnotworkendputs"./PROJECT_#{@name}deleted"ifsuccess我读了documentation对于FileUtils,还读取了“GettingexecutedcommandfromrubyFileUtils”,但我不知道如何使用答案。 最佳答案 根据文档(http://rub

  8. ruby - Ruby 中的 "and"、 "or"运算符背后有什么智慧吗? - 2

    我想知道为什么ruby​​给and、or的优先级低于&&、||和赋值运算符?有什么理由吗? 最佳答案 我猜这是Perl的直接继承。运算符or和and是后来在Perl5中添加的,用于需要较低优先级的特定情况。例如,在Perl中,我们希望||具有较低的优先级,这样我们就可以这样写:trytoperformbiglonghairycomplicatedaction||die;并确保||不会吞噬部分操作。Perl5引入了or,这是||的一个新版本,它具有低优先级,正是为了这个目的。Ruby中可以使用或但不能使用||的示例:value=pos

  9. ruby - 我可以在使用 Devise 成功登录后执行自定义操作吗? - 2

    我有一个具有基本Devise身份验证的应用程序。登录后,我想查找用户帐户(用户belongs_to帐户,帐户has_many用户),并将其存储在session中,以便它像@current_user一样可用。rails将session存储成这样的方式是什么?是否有一个钩子(Hook)可以与Devise一起使用,以便在成功登录后执行代码? 最佳答案 实际上,在Devise中组合使用Omniauth和数据库登录模块的情况下,接受的答案无法正常工作。在Devise中每次成功登录操作后执行的nativeHook(忽略用户身份验证channel

  10. ruby - Sinatra 成功案例 - 2

    关闭。这个问题是off-topic.它目前不接受答案。想改进这个问题吗?Updatethequestion所以它是on-topic用于堆栈溢出。关闭11年前。Improvethisquestion您成功使用过Sinatra吗?这是一个什么样的项目?在什么情况下您会推荐使用Sinatra而不是Rails或Merb?

随机推荐