- 我们努力提高我们的技术和软技能。但是我们的性格特征,我们的心态 - 我们认为这是理所当然的。我们与生俱来的固定部分。因此,我们让它自动运行。
- 这种思维方式是有害的。您的心态不仅对于成功的软件开发事业至关重要(甚至可能比您的技能更重要),而且它也在您的控制之下。
- 真正的高级开发人员承认性格特征是可塑的,他们了解自己的心态,并刻意努力。这是使他们脱颖而出并加速他们职业生涯的超能力。
- 在这篇文章中,我将讨论成功开发人员的 10 个最关键的特征,为什么它们很重要,并分享一些关于如何塑造它们的技巧。
专业软件开发是一门复杂的学科,需要具备多种能力才能取得成功。我们可以将它们分为三大类:
这是最明显的一组。要成为一名成功的开发人员,您需要精通您的行业:编程语言和框架、简洁代码原则、体系结构、测试、调试等等。您还需要熟练使用您的工具:版本控制、命令行和 IDE。
但是,单靠技术技能并不能使您在基于团队的专业设置中走得更远。这就是为什么你还需要软技能。
为了能够从事大型商业项目,您需要一套扎实的软技能:团队合作、沟通、项目管理和规划、远程工作、自组织、学习、个人生产力等。
我们中的许多人发现这些技能不如技术技能有趣,因此,我们经常忽视它们——因此它们已经可以将扎实的专业开发人员与人群区分开来。但至少我们承认他们。
不过,还有第三类,它同样重要,但几乎所有开发人员(即使是其他优秀的开发人员)都没有注意到。
心态有点类似于软技能,但它所包含的“技能”是更基本的核心特征:好奇心、耐心、同理心、毅力、适应能力等等。
在某种程度上,我们知道这些特征对于成功的软件开发事业很重要。但因为它们似乎是我们性格中与生俱来的、固定的一部分,所以我们不会像学习项目管理或个人生产力技巧那样刻意学习它们。
这使我们对自己技能组合中的一个巨大而重要的部分视而不见,并可能严重损害我们的进步。
[有关提升您作为专业开发人员的职业生涯的更全面的观点,请查看我在 GitHub 上的“成为真正的高级开发人员的权威指南” ]
软件开发是一个复杂的、有时令人沮丧的、而且发展速度异常快的领域。作为开发人员学习、成长和保持相关性(而不是在此过程中精疲力尽)需要特定的性格特征组合。
同时,这是一场 100% 的团队游戏。独狼黑客在专业软件开发中没有一席之地,无论他们在技术上多么出色。在团队中发挥良好作用需要另一组看似相反的特征。
心态与技能不同。理解敏捷开发原则并不等同于适应和开放频繁的变化。
了解调试技术与拥有好奇心和坚持不懈地真正享受几个小时追逐问题而不感到筋疲力尽或气馁是不同的。
但是,尽管这些特征对于我们的个性来说似乎是固定的和与生俱来的,但它们与技能一样是可以学习的。
如果不了解程序员的关键特征是什么并随着时间的推移刻意磨练它们,您将永远无法发挥全部潜力。真正的高级开发人员知道这一点,能够意识到自己的心态,并不断努力改进它。
这就是差异化因素,是将最优秀的开发人员与人群区分开来的超级力量。
好的,但是哪些特征最重要?让我们更深入地了解细节。
如果一定要用一句话概括什么是软件开发,我会说是学习。您需要与不断发展的技术和软件开发流程保持同步。
您需要了解复杂业务领域的深层细节(在您的职业生涯中有几个)。分析和澄清需求就是学习。研究就是学习。
性能优化和调试——换句话说,深入研究代码的内部工作原理——也是一种学习。
软件开发还涉及与人合作(以及为人服务)。
你将在跨职能团队中工作,团队成员来自不同专业和背景(如今,在远程时代,很可能来自多个国家和文化)。
您必须了解“业务”。您必须了解并解决用户的痛点和问题。
如果没有适度的好奇心,您不仅会在所有这些事情上效率低下,而且您还会很快精疲力尽。
软件开发是一个巨大的谜题——有无穷无尽的问题需要解决。您被聘为开发人员的原因是要解决您公司和客户的问题。
为此,您需要解决组织问题(如何作为一个团队发挥作用、如何组织您的工作、使用什么流程)和技术问题(逻辑、架构、性能等)。
这些问题包括更小的嵌套问题,细化到原子问题,例如如何设计和命名特定功能或单元测试。
如果您不喜欢解决此类难题,如果您没有分解和理清问题的诀窍,那么您的软件开发生涯将是一场斗争。
成为一名真正的高级开发人员需要多年的刻意练习。一路上你也会经历很多挫折。发展你的事业是有益的,但也是一个缓慢且有时痛苦的过程。
要实现卓越并登上顶峰,您必须做好终身奉献的准备。这需要很大的耐心。
耐心对于与我们工作相关的许多事情也很重要:处理技术支持、与不太懂技术的用户一起工作,以及应对组织的官僚作风。此外,它还是解决问题的好帮手。
如果没有耐心,您将无法在技术这样快速发展、不断变化的行业中持续工作。
软件开发需要大量的坚持。寻找错误。破译记录不完整的 API 和库。理清遗留代码。追踪性能瓶颈。甚至只是长时间保持深度专注。
你会挣扎、失败、陷入困境并感到沮丧——无论你的资历如何。而且您将需要大量的勇气才能耕耘而不至于精疲力尽。
但您还需要了解什么是适量的砂砾。连续数小时甚至数天毫无成效地用头撞墙与在路上遇到最小的颠簸时立即请求帮助来不断扰乱您的团队之间的最佳结合点是什么?
软件开发围绕着人和团队。您将在个人层面与您的同事密切合作:配对程序、一起调试并检查他们的代码。
您还将在团队设置中与他们一起工作:集思广益、计划并作为一个团队做出决定。而且这种协作是混乱的:你们的工作会重叠或冲突,你们会有不同的意见。
您将与管理层协商您的路线图。最后,要打造出色的产品,您必须设身处地为用户着想。
最重要的是,所有这些人都来自不同的背景,既有技术背景,也有非技术背景。他们充满激情。他们有强烈的意见。他们有时可能有难相处的性格。
作为开发人员,您的成功取决于您与他们建立融洽关系的程度。没有高情商,这是不可能的。
软件开发(以及一般的团队合作)是一种平衡行为。一方面,你是因为你的专业知识而被录用的。你应该有强烈的意见,并指导不太懂技术的人或更多的初级人员。
另一方面,您将与同样经验丰富且固执己见的队友一起工作,他们会挑战您的观点,并且您必须与他们一起做出集体决策。
在这个过程中,你的自尊心经常会受到伤害。你必须能够控制它——但又不会退缩和脱离。
你必须固执己见但不狂热。有强烈的观点,但持之以弱;敞开心扉去说服别人。你必须准备好捍卫你的观点,但也知道什么时候放手,不要成为一个居高临下的聪明混蛋。
你需要尊重团队、企业和客户。能够不同意但承诺。并优雅地接受建设性的(甚至纯粹是负面的)反馈。否则,您将无法在团队中有效地工作。
软件开发中的一切都发展得如此之快。技术在不断变化。新方法越来越流行。公司枢纽。
在您的整个职业生涯中,您还将改变项目、团队、公司和业务领域。即使是单个项目也是不断检查和调整的行为(尤其是在敏捷方法中)。你的团队也会不断地自我重组。
大多数人对变化过敏。改变很难。这很不舒服。压力很大。适应能力强、乐于接受变化会立即让你与众不同。它不仅可以让你登上资历阶梯的顶端,还可以让你长期留在那里。
我重复了一遍,但是软件开发是一个团队游戏。你的同事、经理和公司——他们都指望你尽自己的一份力量。
没有人会认为你是真正的高级开发人员——无论你的技术专长如何——如果他们不能依靠你来处理你的工作并兑现你的承诺而不必进行微观管理。
这并不意味着你永远不会犯任何错误。失败发生了。最好的公司将它们视为宝贵的学习机会。
但要做到这一点,您需要能够捡起掉落的球,优雅地恢复,并相信您会从失败中吸取教训,不再重蹈覆辙。
专业软件开发是一门权衡的艺术。您经常需要在开发速度和质量之间做出妥协。在新的和有前途的与成熟的和稳定的之间取得平衡。
在设计不足和过度设计之间划清界限。
要在专业软件开发中取得成功,您需要非常务实。您需要明白,没有什么是非黑即白的,没有任何原则或模式在所有情况下都适用。
您必须有很强的直觉才能在不同的方法、技术和解决方案之间进行权衡;感觉偷工减料很舒服,但对偷工减料有很好的了解。
作为一名程序员,你的生活并不全是阳光和彩虹。你会遇到烦人的顾客。面临紧迫的期限。您的项目可能会被取消。你可能不同意你的团队或管理层,但仍然必须承诺和执行。
您还将使用丑陋的代码。 (是的,每个代码库都有好的和坏的部分,即使是像谷歌这样的顶级公司也是如此。)
你会感到疲倦、沮丧和不安。
如果你让消极情绪占据主导地位,如果你开始批评和抱怨,你不仅会让自己失去动力,还会扼杀团队的士气——这不会让你的职业生涯走得太远。
你需要偏向于积极的一面。乐观开朗。始终寻找一线希望。成为团结团队、消除不良情绪并恢复士气的人。它不仅会让你受到关注和晋升,还会让你的职业生涯更加愉快和可持续。
显然,技能是可以训练的——包括软技能和技术技能。您可以在调试和沟通方面做得更好。但是,好奇心或乐观的态度等看似与生俱来的特质又如何呢?你真的可以训练自己变得更乐观或更好奇吗?
是的你可以!这是一个很大的话题,值得好几本书(Carol S. Dweck 的“Mindset”是一个很好的起点)。但让我快速分享一些提示:
我还鼓励您学习一些关于认知偏见和习惯养成的知识。这是一门发达的学科,拥有庞大的知识体系,探索起来非常有趣。
如果你想成为一名真正的高级开发人员,你必须是一个完整的人。你必须拥有技术技能、软技能和性格特征的正确组合,你不能忽视这三者中的任何一部分。
性格特征是最棘手的部分。大多数开发人员忽视它们,因为他们要么不了解它们,不知道哪些是重要的,要么不相信它们是可塑的。
但如果你能克服这种有缺陷的思维方式——如果你能改变你的心态——你就能把它变成一种超能力,提升你的职业生涯,让你真正脱颖而出。