
技术负责人Skyeng Kirill Rogovoy( flashhhh )在会议上发表讲话,他在会议上谈到了每个优秀的开发人员都必须具备的技能才能成为最好的开发人员。 我请他与哈布拉的读者分享这个故事,然后我将这个词传达给西里尔。
关于优秀开发人员的神话说:
- 编写干净的代码
- 知道很多技术
- 更快地编码任务
- 知道很多设计算法和模式
- 可以使用清理代码重构任何代码
- 不会浪费时间在非编程任务上
- 100%掌握您最喜欢的技术
人力资源部就是这样看待理想的候选人,而职位空缺也是如此。
但是我的经验表明,这不是真的。
首先,有两个重要的免责声明:
1)我的经验是产品团队,即 公司提供产品,而不是外包; 外包可能大不相同;
2)如果您是初级用户,则并非所有技巧都适用,我仍然会专注于您所在位置的编程。
好的开发人员:现实
1:Codite优于平均水平
优秀的开发人员知道如何创建出色的体系结构,编写出色的代码,并且不会产生太多错误。 总的来说,对他来说,一切都比平均水平要好,但他并不是专家的前1%。 我认识的大多数最酷的开发人员都不是优秀的编码人员:他们精通他们的领域,但是他们无法做任何超级事情。
2:解决问题,而不是制造问题
想象一下,我们需要将外部服务集成到项目中。 我们得到了TK,看了一下码头,看到那里有些过时了,我们理解我们需要传递附加参数,抓住一些东西,尝试以某种方式实现所有这些,并使某种曲线方法正确工作,最后,经过几次几天,我们了解到进一步不可能。 在这种情况下,开发人员的标准行为是重返业务并说:“我这样做了,那样就行不通了,而且根本就行不通,总要自己去看看。 业务存在问题:您需要深入研究发生的事情,与某人沟通,并尝试以某种方式解决它。 坏了的电话开始了:“你告诉他,我会写信给她,看看他们回答了什么。”
面对这种情况的优秀开发人员将自己找到联系人,写电话,交谈,讨论问题,如果所有其他方法都失败了,他将召集合适的人,解释一切并提供替代方案(很可能还有另一种外部服务获得更好的支持)。 这样的开发人员看到并解决了业务问题。 他的任务是在他解决业务问题时完成的,而不是当他遇到麻烦时完成的。
3:即使您必须写拐杖,也要花最少的精力,以获得最大的结果
杂货公司的软件开发几乎总是最大的支出:开发人员很昂贵。 优秀的开发人员了解企业希望通过花最少的钱来获得最大的钱。 为了帮助他,一个好的开发人员希望花费自己最少的时间花费最少的时间为雇主争取最大的利润。
这里出现两个极端。 一种是可以解决拐杖中的所有问题,而不必担心架构,不进行重构等。 我们都知道这通常是如何结束的:什么都没有用,我们从头开始重写项目。 另一个是当一个人试图为每个按钮想出一个理想的体系结构时,一个小时要花一个小时,而四个要花在重构上。 这样工作的结果看起来不错,但是问题是从业务方面来说,要花十个小时才能完成按钮,在第一种情况下,在第二种情况下,仅仅是出于各种原因。
一个好的开发人员可以在这两个极端之间取得平衡。 他了解上下文并做出了最佳决定:在此任务中,我将看到拐杖,因为这是每六个月触碰一次的代码。 但是在此-我很困惑,并且会尽可能正确地执行所有操作,因为还有一百项尚未开发的新功能将取决于我能否取得成功。
4.具有自己的业务管理系统,能够解决其中任何复杂的项目。
按照“完成工作”的原则进行工作-当您在文本系统中写下所有内容时,不要忘记任何协议,推动所有人,及时出现在任何地方,知道什么是重要的,什么时候是重要的,您将永远不会失去任务。 这种人的一般特征是,当您与他们达成协议时,您永远不会担心他们会忘记; 而且您知道他们都写下来,不会再问一千个问题,答案已经讨论过了。
5.怀疑并澄清任何条件和介绍
这里也有两个极端。 一方面,您可能会对所有介绍性内容持怀疑态度。 在您之前,人们想出了一些解决方案,您认为自己可以做得更好,并开始重新讨论摆在您面前的一切:设计,业务解决方案,体系结构等。 这会花费开发人员和其他人很多时间,并对公司内部的信任产生负面影响:其他人不想做决定,因为他们知道那个家伙会再次出现并破坏一切。 另一个极端是,当开发人员将任何介绍性,传统知识和旅馆的愿望看作是刻在石头上的东西时,才遇到一个无法解决的问题,便开始考虑自己是否参与其中。 一个好的开发人员在这里也找到了中间立场:在任务进行开发之前,尝试了解有或没有他的情况下做出的决策。 公司想要什么? 我们能解决他的问题吗? 产品设计师提出了一个解决方案,但是我了解为什么该解决方案会起作用吗? 为什么团队负责人提出这样的架构? 如果不清楚,则需要询问。 在进行澄清的过程中,优秀的开发人员可以看到以前的任何人都根本没有想到的替代解决方案。
6.改善您周围的流程和人员。
大量的流程在我们身边徘徊-每天的聚会,会议,临时会议,那些评论,代码评论等。 一个好的开发人员会站起来说:听着,我们每周都会讨论同样的事情,我不明白为什么要获得同样的成功,您可以花这个小时来学习“ Contra”。 或者:连续的第三项任务我无法输入代码,什么都不清楚,架构充满漏洞; 也许我们的审查代码很la脚,我们需要进行重构,让我们每两周进行一次mitap重构。 或者在进行代码审查时,一个人发现他的一位同事没有有效地使用某种工具,因此您需要稍后提出来。 一个好的开发人员具有这种本能,他在机器上做这些事情。
7.完美地管理他人,即使不是经理
该技能与“解决而不造成问题”的主题紧密相关。 通常,在空缺的文本中没有写任何关于管理的文章,但是,当您遇到无法控制的问题时,您仍然必须以一种或另一种方式来管理他人,并从他们那里得到一些东西,如果您忘记了推动,请确保他们都明白。 一个好的开发人员知道谁对什么感兴趣,可以与这些人开会,写下协议,懈怠,在适当的日子提醒他们,即使他个人不直接负责此任务,也要确保一切准备就绪,但结果取决于从其实施。
8.不认为自己的知识是教条,不断受到批评
每个人都可以回想起以前工作中无法与自己的技术妥协的同事,并大喊每个人都会因某些错误的变异而死于地狱。 一个好的开发人员,如果他已经在该行业工作了5年,10年,20年,他就会知道一半的知识是烂的,而在剩下的一半中,他所知道的却比他所知道的多十倍。 每当有人不同意他并提出其他选择时,这不是在攻击他的自我,而是学习一些东西的机会。 这使他的成长比其他人快得多。
将我对理想开发人员的想法与公认的想法进行比较:

在这张图片中,您可以看到上面有多少点与代码有关,有多少点与代码无关。 杂货公司的开发仅是编程的三分之一,其余的2/3与代码无关。 尽管我们编写了大量代码,但我们的有效性在很大程度上取决于这三分之二的“无关”。
专业化,通才和规则“ 80-20”
当一个人学会解决一些狭problems的问题时,他学习了很长时间并且很努力,但是随后他又轻松又简单地解决了这些问题,但是没有相关领域的专业知识-这是一种专业。 另一方面,通才主义是将一半的培训时间投入自己能力范围内,另一半用于相关领域。 因此,在第一种情况下,我会完美地做一件事,而在第二种情况下,我会做得或多或少都做得很好。
80-20规则告诉我们,通过20%的努力即可达到80%的结果。 80%的收入由20%的客户带来,80%的利润由20%的员工带来,依此类推。 在培训中,这意味着我们在前20%的时间中获得了80%的知识。
有一个主意:程序员只应该编码,设计师应该设计,分析师应该分析,经理应该管理。 我认为,这种想法是有毒的,效果不佳。 不是每个人都应该成为通用士兵,而是要节省资源。 如果开发人员精通管理,设计和分析,他将能够解决许多问题,而无需其他人参与。 如果您需要做一些功能,然后在特定上下文中检查用户如何使用它(这需要两个SQL查询),那么最好不要分散分析数据。 如果您需要类似于现有按钮的方式按下按钮,并且了解一般原则,则可以在不涉及设计师的情况下进行操作,公司将对此表示感谢。
总计:您可以花费100%的时间来学习某种技能,或者可以在五个区域中花费相同的时间,每个区域中抽出80%的时间。 遵循这种天真的数学,我们可以同时获得四倍的技能。 这是一个夸张,但它说明了这个想法。
相邻技能的培训程度不是80%,而是30-50%。 花了10到20个小时后,您会明显地进入相关区域,对其中发生的过程有很多了解,并且变得更加自治。
在现代IT生态系统中,最好具有尽可能多的技能,而不要成为其中任何一个的专家。 因为,首先,所有这些技能都会迅速消失,尤其是在编程方面;其次,因为99%的时间我们不仅使用基本技能,而且当然也不使用最复杂的技能,即使在编码中也足够了,即使在很酷的公司。
最后,培训是一项投资,多元化对投资很重要。
教什么
那么教什么,怎么教? 一家实力雄厚的公司中的典型开发商经常使用:
- 沟通交流
- 自组织
- 策划
- 设计(通常是代码)
- 有时包括管理,领导力,数据分析,写作,雇用,指导和许多其他技能
几乎所有这些技能都不会与代码本身相交。 它们需要分别进行培训和抽水,如果不这样做,它们将保持在非常低的水平,这将使它们无法有效使用。
哪些领域值得发展?
软技能-这仅适用于编辑器中的按钮按下。 这是我们编写消息的方式,在会议上的行为方式以及与同事沟通的方式。 似乎所有显而易见的事情,但很多时候它们却被低估了。
自组织系统。 对我来说,在过去的一年中,这已经成为一个非常重要的话题。 在我所知道的所有出色的IT工作者中,这是最先进的技能之一:他们超级有组织,他们总是按自己说的做,他们确切地知道明天,一周,一个月后会做什么。 必须围绕您自己建立一个系统,其中记录所有事务和所有问题,这极大地促进了工作本身,并极大地帮助了与其他人的交互。 根据我的感觉,在过去的一年中,朝着这个方向发展不仅给我带来了泵送的技术能力,还使我开始每单位时间做更多的工作。
积极主动,思想开放和计划。 这些主题非常笼统且至关重要,不是IT部门独有的,每个人都应加以发展。 主动性意味着不等待信号采取行动。 您是事件的源头,而不是事件的反应。 胸襟开阔-客观地与任何新信息相关联,独立于自己的世界观和旧习惯来评估情况的能力。 计划是对当今任务如何在一周,一个月,一年中解决问题的清晰愿景。 如果您看到未来超出了特定的任务,那么做所需的事情就容易得多,并且不要害怕随着时间的流逝已经浪费掉了。 这项技能对职业尤为重要:多年以来,您可以成功取得成果,但并不一定能达到目标,而当您清楚地朝错误的方向前进时,最终会丢失所有积聚的行李。
所有相关领域到基本水平。 每个人都有自己的特定领域,但重要的是要了解,通过花费10到20个小时的时间来灌输某种“外国”技能,您可以发现日常工作中的许多新机会和共同点,而这些时间可能足以职业生涯的终结。
读什么
关于自我组织的书籍很多,这是一个整个行业,一些不起眼的家伙写了一些技巧并收集培训。 但是,不清楚他们自己在生活中取得了什么成就。 因此,重要的是要对作者进行过滤,以查看作者是谁以及他们背后有什么。 有四本书影响了我的发展和前景,所有这些都以一种或另一种方式与上述技能的提升有关。
1.戴尔·卡内基(Dale Carnegie)“如何交友和影响人 。 ” 一本关于软技能的邪教书,如果不清楚从哪里开始,选择它是一个双赢的选择。 它以示例为基础,易于阅读,不需要太多努力就能理解所阅读的内容,并且所掌握的技能可以立即应用。 总的来说,这本书揭示了与人交流的话题。
2. Stephen R. Covey,“高效人才的7种技能”。 当您需要将一支小型团队变成一支强大的力量时,从前瞻性到软性技能的各种技能混合在一起,着重于实现协同作用。 易于阅读。
3.雷·达里奥的原则 。 它基于作者管理的40年历史,揭示了思想开放和积极主动的主题。 许多来之不易的生活例子,很好地说明了一个人可能有多偏见和依赖,如何摆脱它。
4.大卫·艾伦(David Allen)“如何整理事物” 。 学习自组织必读。 阅读并不是那么简单,但是它提供了一套详尽的工具来组织生活和工作,详细检查了所有方面,帮助您决定需要什么。 在它的帮助下,我构建了自己的系统,该系统使我能够始终做最重要的事情,而不会忘记其余的事情。
您需要了解仅仅阅读还不够。 您甚至可以每周吞下一本书,但效果会持续几天,然后一切都会恢复原状。 书籍应作为建议的来源,并在实践中立即进行测试。 如果不这样做,那么他们所能提供的只是视野的扩大。