本文原文链接为:7 Key Skills You’ll Develop Working in a Technical Team
考虑一下您在日常生活中使用的所有不同类型的软件:使用Facebook查看您的朋友的工作状况,使用Google Chrome浏览器浏览互联网,使用Skype与朋友和家人联系以及使用Spotify收听音乐。尽管实现了截然不同的目的,但所有这些软件都有哪些共同点?答案是,所有这些都是由技术团队共同编写的,以构建最佳程序。
如果您想帮助构建供所有人使用的一流软件,那么掌握的 最关键的事情之一就是如何成为技术团队中富有成效的成员。在开始作为Web开发人员的职业生涯时,您将被其他初级和高级开发人员组成的团队,并希望能够从一开始就增加价值。
作为团队一部分开发软件对于初级开发人员来说具有巨大的优势。团队中的其他成员有兴趣为您提供指导并帮助您成为更好的开发人员。通过对代码的不断反馈,您可以期望每天不断改进和学习新知识。但是,与团队合作需要的技能与您自己工作需要的技能不同。
成为一个富有成效的团队成员,您只有在处于支持性的环境中时,才能真正将自己置于一个真正的小组项目中,经历反复实验的过程,才能学到一些东西。这意味着您需要与其他人一起在一个项目上一起编码,这些人会像看到该项目成功一样投入大量精力。
在正确的团队环境中工作将帮助您成为其他开发人员希望与之合作的快乐而富有成效的团队成员。除此之外,它还将教您7种关键技能,这些技能对于被聘为网络开发人员至关重要。
独自工作时,您自己应对代码的质量负责。这意味着,如果您采用草率的捷径或编写质量较差的代码,则您将是唯一需要为此付出代价的人。作为技术团队的一部分时,整个团队的责任是确保仅将高质量,经过良好测试且无错误的代码接受到项目中。
最好的团队需要在代码更改被接受到项目中之前对代码进行审查,以确保代码质量达到其高标准。当另一个未参与编写代码的团队成员审查提议的代码添加并逐行更改并查找可能导致意外问题的内容时,便会进行代码审查。
由于代码审查经常发生,因此GitHub带有高级功能,使团队可以轻松执行代码审查。
在新代码被接受到主分支之前请求代码审查被称为发出请求请求,并且最好的技术团队不允许任何代码未经此请求请求过程进入他们的项目。
在此过程中,您将提出建议的代码更改,并允许其他开发人员查看这些更改。
以下是来自我们的Firehose Project学生之一的GitHub拉取请求示例。删除的代码行以红色显示,添加的代码行以绿色显示。
您可以看到指导者如何在特定代码行上使用内联代码注释功能,以帮助学生更好地组织其代码
无论您是要为开源项目做出贡献还是要在技术团队中工作,都应该具备以下技能:
每个团队成员在团队可以产生的代码数量上都成倍增加。为了获得让许多人参与同一项目的收益,需要将大型任务分解为可以并行处理的小型任务。
例如,如果您要独自开发BlackJack游戏,则要做以下事情:
建立一个二十一点游戏
但是,如果您有一群人在开发相同的BlackJack游戏,则同一项目可能会分解成较小的块,每个成员可以并行执行。
构建Web应用程序的登录页面
为选择加入MailChimp帐户的用户存储电子邮件
在代码中构建一副纸牌的表示
支持用户登录和注销
使页面在Mobile上看起来很棒
通过将大任务分解成小块,团队将能够朝着完成的应用程序的最终目标迈出许多小步。
大多数项目,即使是在专业领域,也永远无法完全完成,因为总有其他功能可以添加到任何现有应用程序中。对于产品积压(需要但尚未构建的功能列表),估计需要一年或更长时间才能完成,这并不少见!
由于技术团队通常需要做大量工作,因此,软件开发是通过朝着正确的方向不断走一步来构建的,将大型功能分解为较小的功能在每次到达终点时都发挥着巨大作用。
在团队中工作时,拥有强大的测试套件比起您是牛仔编码员或自己编写全部编码更为重要。这是因为项目可以聚集大量代码,认为需要10,000行或更多行,并且很快会变得非常复杂。有了这么多的代码,就无法期望以前从未直接与应用程序的特定部分合作的人知道应用程序如何工作的每一个细微差别。
通过在构建功能时编写测试,可以防止其他团队成员(或将来的自己)无意间以无法在构建软件时预测的方式破坏应用程序。
让整个测试套件花费10到20分钟以上的时间来运行一个复杂的项目是很正常的。专业的Web开发人员经常使用“持续集成”工具来帮助他们运行测试服。这些持续集成工具会针对每个请求请求自动运行测试,并有助于防止成员将残破的测试接受到代码中。
当两个团队成员试图进行矛盾或冲突的更改时,就会发生合并冲突。团队之间的良好沟通可以帮助避免可避免的冲突,但是有时它们只是由于将软件作为技术团队的一部分而产生的。
这是一种可能导致合并冲突的方案:
说马可(Marco)和我正在同一个项目,即Firehose Project登陆页面。现在,页面标题显示:“您的软件职业从这里开始”。
如果我将标题更改为“今天开始您的软件职业生涯”,而Marco同时将标题更改为“从这里开始您的软件职业生涯”,那么我们将发生合并冲突。简而言之,在我们处理试图同时以两种不同且相互矛盾的方式更改一行代码这一事实之前,不允许我们中的一个将代码更改发送到GitHub。
在此示例中,如果我和Marco能够更好地交流有关更改标题的信息,那么我们可以避免这种合并冲突。在许多情况下,尤其是在处理复杂项目时,会出现冲突。学习如何保持镇定,与其他团队成员进行交流以充分理解他们对所做的更改的思考过程,并解决冲突以实现您的目标和团队成员在进行更改时所达到的目标,这是您只能使用的技能通过团队合作共同学习。
由于技术团队成员之间的沟通非常关键,因此大多数团队将举行频繁的会议,俗称“站起来”。
在会议期间,要求技术团队成员快速更新团队其他成员的以下详细信息:
站立会议的时间为10至15分钟,团队中的每个人都必须在会议期间参加会议。在会议过程中站立会加快会议速度,并使人们专注于最重要的主题。
有时,当您从事项目工作时,会发现自己正在处理非常复杂的问题。有时,您会发现自己正在从事更直接的任务。当您负责要完成的任务时,与另一个团队成员一起工作非常有价值。
您和另一个队友之间用来解决编码难题的协作过程称为结对编程。在结对编程期间,团队中的一名成员将坐在键盘后面,编写代码并“推动”交互。另一个人将坐在该人后面,观察编码过程并提供实时反馈。
掌握领导编写的代码并以有效方式提供实时反馈的技能是一项重要的技能。一开始,在别人面前编码可能会很吓人,因为他们知道您会在编码时给您反馈。以协作的方式指出他人代码中的潜在问题也是一项需要时间学习的技能。
作为技术团队的一部分,要适应的最大挑战之一是在许多人正在编写复杂的代码且不被流程淹没的环境中适应工作。
当以团队的方式构建功能,并且每天都有许多行代码快速变化时,务必始终专注于已分配的任务,这一点很重要。尽管代码始终围绕着您发展,但是您需要信任您的团队和流程。
由于代码在不断变化,因此经常更新正在使用的代码并确保使用最新的代码非常重要。此过程称为“提取”由其他团队成员提供的代码,并且养成每天提取多次的习惯可以使您免于处理不最新的代码。
作为技术团队的一部分来构建项目时,学习如何协作,交流和使用正确的工具非常重要。话虽如此,所有小组项目的经验并不能平等地创造出来。
在现实世界中,团队合作并不总是很顺利,每个人都知道这一点。重要的是如何解决团队合作中遇到的挑战。
在技术面试过程中经常会出现有关团队合作的问题。招聘经理对团队合作时面临的挑战以及如何克服这些挑战特别感兴趣。您的答案和经验使他们成为开发人员和技术团队成员时解决问题的技能的真实世界和宝贵观点。
当要求您描述一个挑战时,您克服了在团队中的工作,每个人都会学到一些东西。另一方面,如果您表示您在协作编码方面从未遇到任何问题,那么正在评估您作为候选人的团队可能会认为您要么经验不足,要么不说实话。无论哪种方式,您都不太可能得到这份工作。
取而代之的是,从特定的经验中了解与其他团队成员进行清晰沟通的重要性以及在出现沟通问题时如何克服沟通问题,这将使正在将您与该职位其他候选人进行比较的团队印象深刻。
如果您想换工作,那么拥有团队经验的复杂应用程序至关重要。这是因为在现实世界中,即使当您与“仅”其他4-8个开发人员的团队一起工作时,项目也会很快变得复杂。
如果您构建了简单的应用程序,以团队的形式在屏幕上简单地显示数据库中的信息,那么招聘经理将不会留下深刻的印象。另一方面,构建象棋牌游戏这样的项目非常复杂,而且处理逻辑激烈,将给人留下深刻的印象。
尽管从表面上看象棋游戏听起来可能并不十分复杂,但是它具有许多复杂的功能。例如:
您应该确保牢记一个小组项目的目标。这都是关于构建复杂的应用程序的;不一定有成千上万的用户使用它。与其尝试提出具有最大潜力的想法,不如在小组项目中全力以赴学习。