对代码的愤怒:程序员和否定性



我正在看一段代码。 也许这是我遇到过的最糟糕的代码。 要仅更新数据库中的一条记录,它将提取集合中的所有记录,然后发送请求以更新数据库中的每条记录,即使是那些不需要更新的记录也是如此。 有一个map函数可以简单地返回传递给它的值。 对变量具有明显相同值的条件检查,只是以不同的样式( firstNamefirst_name )命名。 对于每个UPDATE,代码都会将消息发送到另一个队列,该消息由另一个无服务器功能处理,但是由同一数据库中的另一个集合完成所有工作。 我没有提到这个无服务器功能是来自基于云的“面向服务的体系结构”,其中包含环境中的100多个功能?

这样的事情怎么办? 我遮住脸,笑出声来。 我的同事问发生了什么事,我以彩色重述了BulkDataImporter.js 2018最差命中数 。 每个人都同情我点头并同意:他们如何对我们这样做?

负面:程序员文化中的情感工具


负性在编程中起着重要作用。 它内置于我们的文化中,用于分享被认可的内容(“您不会相信这段代码的样子!”),通过心烦意乱表达同情(“上帝,为什么要这样做?”)鉴于(“我永远不会那样做”),责备他人(“我们因为他的守则而自夸,这是不可能陪伴的”),或者按照最“有毒”的组织的惯例,通过羞辱来管理他人(“您在想什么?正确”)。



负性对程序员非常重要,因为它是传达价值的非常有效的方法。 我曾经在程序员营地学习,对行会文化的学生进行疫苗接种的标准做法是慷慨地提供模因,故事和视频,其中最流行的模因,故事和视频使人们感到困惑 ,从而使程序员失望 。 当您可以使用情感工具来表示好,坏,可怕,从不这样做,从不做到这一点时,这是很好的。 有必要为初学者做好准备,以使他们的同事(远离IT部门)可能会错误地理解他们。 他们的朋友将开始向他们推销“百万级”应用程序的想法。 他们不得不在即将来临的无数迷宫中徘徊着什么,周围有许多牛头怪。

当我们第一次开始学习编程时,我们对“编程经验”深度的理解是基于对他人情感反应的观察。 在ProgrammerHumor重低音扬声器的帖子中可以清楚地看到这一点,许多新程序员都在其中闲逛。 许多幽默的帖子或多或少都带有不同程度的负面色彩:失望,悲观,怨恨,放纵等等。 如果您觉得还不够,请阅读评论。



我注意到,随着经验的积累,程序员变得越来越消极。 初学者没有意识到等待着他们的困难,而是以热情和愿意相信这些困难的原因仅仅是缺乏经验和知识开始。 最后,他们将面对事物的真实状态。

时间的流逝,他们获得了经验,并获得了区分良好代码和不良代码的能力。 当这一时刻到来时,年轻的程序员会因使用显然不好的代码而感到沮丧。 而且,如果他们在团队中(远程或亲自)工作,他们通常会采用经验更丰富的同事的情感习惯。 通常,这会导致负面影响的增加,因为年轻人现在可以若有所思地谈论该法规,并将其分为好与坏,从而表明他们“处于主题之中”。 这更加加剧了负面情绪:由于失望,很容易与同事见面并成为团队的一部分,对Bad Code的批评会提高您在他人眼中的地位和专业水平: 表达负面意见的人通常被认为更聪明和能干

增强负面影响不一定是一件坏事。 除其他事项外,有关编程的讨论特别关注书面代码的质量。 代码是什么,完全决定了代码的预期功能(我们丢弃了设备,网络等),因此重要的是要表达您对此代码的意见。 几乎所有讨论都归结为该代码是否足够好,并谴责不良代码的清单本身,这些表达式的情感色彩体现了代码的质量:

  • “此模块中存在很多逻辑上的不一致,这是进行重大性能优化的一个很好的选择。”
  • “这个模块非常糟糕,我们需要对其进行重构。”
  • “此模块没有意义,需要重新编写。”
  • “这个模块很烂,需要修补。”
  • “这只是一块ram,而不是一个模块,根本不需要编写,作者在想什么。”

顺便说一下,正是这种“情感版本”迫使开发人员将代码称为“性感”,这很少公平-除非您使用PornHub工作。

问题在于人们很陌生,困扰,充满创造的情感,对任何情感的感知和表达都改变了我们:起初它几乎不引人注目,但随着时间的流逝,它会急剧变化。

躁动不安的滑轨


几年前,我是一个非正式的团队负责人,并采访了一位开发人员。 我们真的很喜欢他:他很聪明,提出了很好的问题,精通技术,非常适合我们的文化。 他的积极性和冒险精神使我印象深刻。 我雇用了他。

当时,我在公司工作了两年,觉得在我国采用的文化不是很有效。 在到达之前,我们曾尝试过两次,三次和多次发布该产品,这导致大量返工费用,在此期间,除了漫长的夜晚,短暂的截止日期和可打字的产品外,我们什么都没显示。 尽管我仍在努力工作,但我对管理层给我们指定的最后期限表示怀疑。 在与同事讨论代码的某些方面时,他随便诅咒。

因此,尽管让我感到惊讶,但事实并不令人惊讶-几周后,同一位新开发人员以与我相同的否定方式讲话(包括宣誓就职)。 我意识到他在具有不同文化的另一家公司中将采取不同的行动。 他只适应了我创造的文化。 内使我不知所措。 由于我的主观经验,我向新手灌输了悲观情绪,我认为它们完全不同。 即使他真的不是那样,只是试图表现出他可以加入团队,我还是对他施加了卑鄙的态度。 而且,无论是开个玩笑还是路过的话,所有所说的话都改变了人们的信仰。



否定方式


让我们回到以前的新手程序员那里,他们获得了一点智慧和经验:他们更加深入地了解了编程行业,并了解到无处不在的不良代码,这是无法避免的。 即使在专注于质量的最先进的公司中也可以找到它(并且请注意:现代性似乎根本无法使我们摆脱不良代码的困扰)。

好脚本。 随着时间的流逝,开发人员开始接受这样一个事实,即错误的代码是软件的现实,而他们的工作就是改进它。 如果无法避免错误代码,那么就没有理由制造噪声了。 他们走上禅宗之路,专注于解决他们面临的问题或任务。 他们基于多年的经验,学习如何准确地衡量软件质量并将其交付给企业所有者,编写出合理的估计,并因其令人难以置信的,不变的业务价值而最终获得丰厚的回报。 他们的工作做得如此之好,以至于他们获得了1000万美元的奖金,并且他们退休后会继续做自己想做的事(请不要出于信仰而接受)。



另一种情况是黑暗之路。 开发人员并没有不可避免地接受不良代码,而是承担了在编程世界中宣布所有不良行为的责任,以便他们可以克服它。 他们基于许多充分的理由拒绝改进现有的错误代码:“人们应该了解更多而不是那么愚蠢”; “不愉快”; “这对企业不利”; “证明我有多聪明”; “如果我不告诉您这是一个多么糟糕的代码,整个公司将陷入困境,”等等。

当然,没有机会实施所需的更改,因为不幸的是,业务必须继续发展并且不能花时间在意代码的质量,这样的人赢得了投诉者的声誉。 它们被保留以具有较高的能力,但被驱逐到公司的后院,在那里不会打扰很多人,但同时它们将支持关键系统的运行。 他们失去了在发展中获得新机会的机会,因此丧失了技能并不再满足行业要求。 他们的消极情绪变成了剧烈的痛苦,结果,他们逗乐了自我,与二十岁的学生争论着他们钟爱的旧技术所走的路,以及为什么它仍然很清脆。 最终,他们退休并长寿,对鸟类大骂。

现实可能介于这两个极端之间。

一些公司在创造极度消极,孤立,坚强的文化方面取得了巨大的成功(例如微软在失去的十年之前)-通常,这些公司的产品与市场完全匹配,并且需要尽快增长。 或具有管理和控制层次结构的公司(乔布斯表现最好的时期是苹果公司),每个人都按照自己的命令去做。 但是,现代商业研究(和常识)表明,要想最大限度地发挥创造力,从而提高公司的创新能力,并提高个人生产率,就需要较低的压力才能保持持续的创造性和有条理的思想。 而且,如果您一直担心同事们对代码的每一行要说些什么,那么根据讨论进行创意工作就非常困难。

负面的是工程流行文化


今天,比以往任何时候都更加关注工程师的态度。 在工程组织中,“ 禁止使用 ”规则变得越来越流行。 在Twitter上,有越来越多的关于离开该行业的人的笑话和故事,因为他们无法(不想)继续忍受对外界的敌意和敌意。 甚至连Linus Torvalds多年来对他的敌意和对其他Linux开发人员的批评也都道歉 -这引发了关于这种方法有效性的讨论。

仍然有人捍卫Linus的非常批判权利-那些需要对“毒性否定性”的优缺点有很多了解的人。 是的,正确性是极其重要的(甚至是根本的),但是如果我们总结了为什么我们许多人将负面意见转化为“毒性”的原因,那么这些原因看起来就像家长式的还是青春期的:“他们应得的,因为他们是白痴”,“他我必须确保他们不会重复,“”,如果他们没有那样做,他就不必对他们大喊“,依此类推。 领导者的情感反应如何影响程序员社区的一个例子是Ruby社区中的MINASWAN缩写-“ Matz很好,所以我们很好”(Matz(语言的创造者)很好,所以我们很好)。

我注意到,许多“傻瓜式”方法的热心支持者经常非常注意代码的质量和正确性,从而使自己与工作相符。 不幸的是,它们经常使硬度与刚度混淆。 这种立场的劣势源于简单的人性,但无济于事的欲望要超越别人。 那些沉浸在这种欲望中的人陷入了黑暗的道路。



编程世界正在迅速增长,并且紧接其容器的边界-非编程世界(或者这是编程世界还是非编程世界的容器?这是一个好问题)。

随着我们行业的快速发展和编程的普及,“技术人员”与“正常人”之间的距离正在迅速缩小。 编程世界越来越多地暴露于在技术兴起之初的孤立的“书呆子”文化中成长的人们之间的人际交流,而正是他们将形成编程的新世界。 而且,无论有关社会领域或世代的任何争论,以资本主义的名义出现的效率都会在公司的文化和雇用方式中体现出来:最好的公司根本不会雇用那些无法与他人进行中立互动的人,更不用说良好的关系了。

我从负面中学到的东西


如果您过度消极地控制自己的思想和与人的沟通,变成“毒性”,那么这对于产品团队来说是危险的,而对企业而言则是昂贵的。 我看到无数的项目(听说过)崩溃了,并且完全以高成本重做,因为其中一个值得信赖的开发人员加大了对技术的了解,另一个开发人员甚至选择了唯一代表整个代码库质量的文件。

负性也会使人士气低落并破坏人际关系。 我将永远不会忘记同事如何责骂我将CSS放入错误的文件中,这让我感到不安,并使我几天都无法收集自己的想法。 而且将来我不太可能允许这样的人接近我的一个团队(但是,人们知道,人们在变化)。

最后,否定性从字面上损害您的健康


在我看来,一个微笑大师班应该看起来像这样。

当然,这不是支持快乐的论点,在每个请求请求中插入100亿个笑脸或带着微笑去上大师班(不是,好吧,如果那是您想要的,那就没问题了)。 否定性是编程(和人类生活)中极其重要的部分,它标志着质量,使您可以向兄弟姐妹表达感情和慰问。 洞察力和合理性,问题深度的负面证据。 我经常注意到,当开发人员开始对自己胆怯和不确定的事物表示不信任时,它已经达到了一个新的高度。 人们以自己的见解表现出审慎和自信。 一个人不能拒绝否定性的表达,那是奥威尔式的。

但是,负面因素必须与其他重要的人类素质相辅相成:同情,耐心,理解和幽默。 您总是可以告诉一个人,他没有尖叫和诅咒就搞砸了。 不要低估这种方法:如果您完全没有感情,他们会说您严重搞砸了,那真的很吓人。

几年前的那个时候,CEO对我讲话。 我们讨论了该项目的当前状况,然后他问我感觉如何。 我回答说一切都很好,项目进展顺利,我们正在缓慢地工作,也许我错过了一些东西,需要进行审查。 他说,他听到我与办公室的同事分享了更多的悲观考虑,其他人也注意到了这一点。 他解释说,如果我有疑问,我可以向领导层充分表达,但不能“降低”。 作为首席工程师,我必须记住自己的言语会如何影响他人,因为即使我没有意识到,我也会产生很大的影响力。 他非常友好地告诉我所有这些,最后说,如果我真的有这种感觉,那我可能需要考虑一下我对自己和职业的要求。 这是一场“令人难以置信的软对话”,风格是“拉起自己或走出去”。 我感谢他提供的信息,说明我的态度在过去六个月中发生了变化,如何对他人产生不可察觉的影响。

这是一个出色,有效的管理和软方法力量的例子。 我意识到,在我看来,我完全相信公司及其实现目标的能力,但实际上,我以完全不同的方式与他人交谈和交流。 我还意识到,即使对我正在从事的项目持怀疑态度,我也不应该对同事表现出我的态度,并像感染一样传播悲观情绪,从而减少了我们成功的机会。 相反,我可以积极地向我的领导层转达真实情况。 如果我觉得他们没有听我的话,我可以表示不同意离开公司。

当我担任员工评估主管时,我获得了新的机会。 作为一名前总工程师,我仔细监视了我对我们(不断改进的)遗留代码的看法。 要批准更改,您需要想象当前的情况,但是如果您因抱怨,攻击或类似的事情而陷入困境,您将一事无成。 , , , , , .

, , , , . (« »), . , , (?) (« , , »). , .

, : , .

Source: https://habr.com/ru/post/zh-CN448956/


All Articles