最近在网上看到很多关于10xdeveloper的讨论。有人想成为这样的人,有人想远离这样的人。但在此之前,我们可能需要弄清楚以下问题:10x开发者是否真的存在,他们只是传说,还是人们因相对认知而产生的概念?在下结论之前,我想先说说我自己的经历。1.与10x开发人员一起工作大约十年前,公司的软件开发总监聘请了一名3级软件工程师,我们都称他为Gary。大约在同一时间,我们还聘请了一位名叫米奇的二级软件工程师。在最初的几个月里,加里非常安静,一个人,试图解决一个又一个纯技术问题。我们当时的任务是为实时3D机械培训软件制作空气等流体的流动动画。公司里的每个人都一直想达到这个效果,但是由于各种挑战,一直没有实现。而Gary,成为了帮助我们克服困难的英雄。当他准备将该功能提交给QA审查时,该功能的整体外观至少比我想象的要好,并且性能超出预期,并有数千个单元测试断言作为后盾。相比之下,我们的主要代码库从未经过如此彻底的测试。不用说,各级管理人员对这个久违的功能都非常满意。我们的代码中有许多庞大而复杂得可怕的部分。不久之后,加里组织了另一场工程演示。该演示文稿侧重于架构级别,即围绕对象生命周期、依赖倒置、临时生命周期/范围明确的对象、某些分配反模式的危害、阻碍单元测试覆盖率的代码耦合,以及这些因素如何与相关性相关许多内部工程问题等等。演讲使与会者感到困惑甚至尴尬。毕竟,所有这些明目张胆的批评,都是针对那些最先加入公司,一路走来打造知识产权体系的老员工的。我们确实有严重的技术债务问题,但……没那么严重。虽然它不会影响生产力,但我们的代码中确实有很多庞大而复杂得可怕的部分。揭露这一切都是加里的工作。但我们感到压力很大,因为我们每个人都是他所问问题的一部分。在理解现代软件设计方面,他领先我们好几年。这个人的特点是他总是对的。不仅在论证上,在各种判断上,他更像是一个无所不知、无所不能的神。虽然我向来以先查明事实再说话的好习惯着称,但我不得不承认,在整个共事期间,我只因为表达不准确而抓到他一两次。与这样的人一起工作可能会有压力,因为同事总是会发现他们应该知道但不知道的重要知识。考虑到他们经常与加里共享相同的职位和头衔,这就更加令人尴尬了。人性总有阴暗面,人们不喜欢特别聪明的人。尤其是对方提出的见地既正确又缺乏善意的时候,更是让人难受。所以同事之间的普遍共识是,这家伙很刻薄。我个人不认为他是故意让别人难堪,但加里真的很擅长让别人难堪。同时,他对现代软件设计的理解领先于我们好几年,这些经验还得在我们公司逐步实践。也许他觉得身边的同事真的让他很失望。平心而论,我们使用旧技术和方法是有原因的,我们基于这些旧方法开发出强大的产品。任何公司都可能存在类似的问题。Gary强大的技术实力,加上他对敏捷流程的强烈拥护,最终将雇用他的老领导赶下台,由他自己取代。同事们先是一愣,但很快就发现,Gary总监带来了一系列激动人心的新变化。公司调整了产品线,米奇、我和另一位新的软件开发测试工程师(SDET)被编入新的团队,尝试公司以前从未做过的事情。根据交流经验,Gary一直认为我是二级软件工程师。但是当他发现我其实只是一级的时候,相当生气,赶紧去找公司的高层理论。几周后,我升职了。同样,米奇虽然只是二级软件工程师,但他拥有与三级工程师相同的知识和技能。可他也只能等了……他也不知道自己在等什么,但想要得到一个符合他等级的称号,还需要一段时间。有时,米奇和加里形影不离。我记得我们过去常常在办公室里花无数个小时组织关于未来新产品架构设计的头脑风暴和思想实验。这个时候我才发现,这两个人的等级高到我都不知道他们在哪了。很长一段时间,他们两个似乎在用一种独特的语言交流。尽管他们以前从未合作过,但他们都觉得公司缺少现代编程的基本概念。一开始,人们不喜欢两个人??谈事情;但事实证明,见面之后,两个人的编码效率真的很高,质量也真的很稳定。我是那个更擅长处理技术上困难的任务的人,Mitch非常聪明,而Gary的编码质量最好。更令人吃惊的是,虽然Gary总是花很多时间在一般会议和管理会议上,包括设计和记录新的标准流程,为个别开发人员提供帮助和指导,但我对此仍然知之甚少。确切地确定他是如何在如此短的时间内为公司带来如此显着的生产力提升的。总之,在他的带领下,整个团队都不需要加班,包括他自己。让所有的开发者拥有共同的价值观,是构建和谐团队和强大代码库的关键。尽管我已经有几年的编程经验,但我在Gary团队度过的两年无疑为我后来的高级开发人员头衔奠定了基础。他帮助我改掉了多年来养成的许多习惯——这种习惯特别常见,但无益,有时甚至令人讨厌。相反,我们开始构建更具前瞻性的视角,并积极使用先进的工具和更高效的解决方案。而我从他身上学到的最重要的一点是,让所有开发者拥有共同的价值观是构建和谐团队和强大代码库的关键。我们开发的应用bug少,性能好,易于扩展,可以在后续项目中复用。从各方面来看,这是我入行以来所见证的最激动人心的技术成功。如果这样的情况还没有给公司敲响警钟,那么管理层就太失败了。如果读者朋友也是那种重工作、爱工作的人,早就应该在公司里被政治问题疯狂折磨了。我怀疑加里是因为这个决定离开的,因为他当时并没有跳槽的打算。不到一年之后米奇也选择了离职,并且没有跳槽的打算。两位最有才华的员工选择了裸辞,这绝对是一个强烈的信号。如果这听起来不像是给公司敲响的警钟,那么管理层就失败了——或者更确切地说,他们让自己陷入了更大的问题。加里对我的临别建议是,“你需要多多表达自己。”回顾我们一起奋斗的过程,加里和米奇都非常善于表达,有时甚至不给我空间。但只要你把话筒给我,我说的话就一定有意义。在他们的指导下,我意识到这真的很重要。我必须快速成长,帮助填补他们离开后留下的空白。虽然我的工作表现也很好,但最后我也离开了这家公司。我在这里度过了一些黄金岁月,并感谢帮助我开启职业生涯的公司。但离别的最后,没有必要把大家绑在一起。多年后,我仍然把从Gary那里学到的价值观应用到其他角色中,并努力成为一个善于表达的人。事实证明,这种价值观确实让我在其他公司获得了尊重和广阔的发展空间。2.重点总结不知道大家怎么看这个故事,说说我自己的亲身经历吧。。。我们很难去量化什么是真正的10x程序员,但是这个问题没那么重要.真正重要的是帮助你周围的人提高。有些人可能会争论同事是否真的是10x程序员。这10倍跟谁比?10倍具体有哪些方面?很多朋友都有过用一半的时间完成4倍工作量的经历,在项目中实现了更高的单元测试覆盖率和更好的代码质量,整体产出可以达到其他初级开发者的水平。10倍以上等等。有时,在与具有一定经验的同行竞争时,您可能会以更少的技术债务或更多的特定领域专业知识获得类似的优势。但这一切最终都会被磨平,每个人都会使用相似的经验,使用相同的工具,基于相同的代码库,并使用相同的理念/流程/设计模式来处理相同的技术债务。在这样的前提下,开发者的效率还是有差距的,但恐怕永远不会夸张到10倍。重点不是比别人强,而是帮助身边的人进步。伟大的开发者没有理由用自己的长处去打败其他同事,最重要的是为他人提供指导,找出阻碍生产力进步的因素,解决问题并防止它们再次发生。这样,我们就可以拥有一支真正的战斗团队,而不是仅仅围绕着开发明星旋转。成为专家,或者说培养自己的职业自满,其实就是在沉默中寻找安全感。我们不应该责怪某人出于长期的习惯使用经过充分验证的标准和成熟的技术,从而以毫无疑问的安全方式完成功能实现。结合自己的经历,加里把我们看作是这样一群业余爱好者。他不太在意自己的态度,但他希望整个团队都成长为软件开发专家,这完全可以理解。但是请不要忘记,其他人也是人,人总是有各种各样的缺陷。加里也是如此,他肯定会在第100次看到同样的错误时发脾气;只是这样的错误对其他人来说是“正常的”。当你失去耐心的时候,你也失去了对同事应有的尊重,这本身就是对专业精神的践踏。软件的专业性是一条任何时候都不能逾越的底线,但也不能在看到系统性问题需要改正时视而不见。在这段时间里,你可能会引起混乱,你可能会树敌,你甚至可能会威胁到你自己的工作……但自满其实是在沉默中寻找安全感。如果你想要改变,在社会层面找到完美的平衡。仔细选择何时提出建议,更要仔细选择提出建议时使用的词语。重实践、重技术、重哲学如果你能做到,这一切都会改变你的职业生涯。这些东西并不能保证生产力提高10倍。但我可以保证,只要你培养了这样的能力,你就会对软件开发有更深的理解。严格遵循SOLID设计原则使用MVC模式进一步分离关注点命令查询职责分离使用实时代码覆盖工具完成单元测试覆盖使用行为驱动开发发现需求细节,同时自动化UI测试明确定义和执行“确认定义”代码质量和分支策略确保源代码控制系统具有良好的清洁度和性能拥抱敏捷概念,但不必被动接受SCRUM中强调的所有过程在你的职业生涯中实践这些目标并不容易,毕竟,每个人都有自己在成长过程中积累的一套工作方法。但如果你能做到,它将改变你的职业生涯。10x程序员的背后可能代表着10x错误。这类开发商的根本问题在于他们的顶头上司。公司里还有一个独特的开发者,我们就叫他James吧。从某种意义上说,他在公司里已经很有资历了,很擅长处理一些编程任务。但他不愿为自己的错误承担责任,经理的再三批评也无济于事。最重要的是,其他人的大部分工作都处于James团队开发工作的下游。因此,如果他弄错了,每个人都会感觉到;而别人得了,对他影响不大。这是上下游依赖的基本特征,要求上游方有很强的责任感。那么为什么会落到如此糟糕的地步呢?因为牛仔不相信单元测试,认为这是“浪费时间”,但其他人需要为他的武断买单。此外,他还会反复将有问题的代码(包括无法编译或存在严重阻塞问题的代码)添加到其他人正在使用的分支中,导致公司内部的怨恨沸腾。这些开发商的根本问题是他们的顶头上司。这群管理者未能建立良好的实践,甚至将这种独行侠的坏习惯视为理所当然。3.最后,我认为这个世界上有几种类型的10x开发人员,有些是自私的,有些是乐于助人的,有些是平易近人的,有些是令人生畏的。如果你有足够的天赋加入10x开发者阵营,希望你慎重选择你想成为的类型。
