如何成为一个好的团队合作者?[关闭]


19

我从12岁起就开始(一直在痴迷)编程,从汇编,C ++,Javascript,Haskell,Lisp和Qi的各种语言中我都非常了解。但是我所有的项目都是我一个人做的。

我获得了化学工程专业的学位,而不是计算机科学或计算机工程专业的学位,但是今年秋天我第一次与其他人一起从事大型编程项目,而且我不知道如何准备。我一生都在使用Windows,但是这个项目将非常适合Unix,因此我最近购买了一台Mac,希望自己熟悉环境。

去年,我很幸运地与一些朋友(包括CS专业)一起参加了黑客马拉松,令人兴奋的是,我们赢了。但是当我与他们一起工作时,我意识到他们的工作流程与我的非常不同。他们使用Git进行版本控制。当时我从未使用过它,但是从那以后我就学会了所有关于它的知识。他们还使用了很多框架和库。我必须了解Rails在黑客马拉松比赛中几乎是一夜之间(另一方面,他们不知道什么是词法作用域或闭包)。我们所有的代码都运行良好,但是他们不了解我的代码,而我也不了解他们的代码。

我听到了真正的程序员每天做的事情的引用–单元测试,代码审查,但我对这些内容的含糊不清的感觉。我通常在我的小项目中没有很多错误,因此我从来不需要错误跟踪系统或对其进行测试。

最后一件事是,我花了很长时间才能理解其他人的代码。变量命名约定(随每种新语言而异)很困难(__mzkwpSomRidicAbbrev),我发现松散耦合很困难。这并不是说我不会松散地做一些事情-我认为我对自己的工作很擅长,但是当我下载Linux内核或Chromium源代码之类的东西来查看它时,我花了数小时来尝试找出所有这些奇怪命名的目录和文件如何连接。重新发明轮子是编程上的罪过,但是我经常发现,自己写功能要比花费数小时来剖析某些库更快。

显然,以此为生的人没有这些问题,我需要自己解决这一问题。

问题:我可以采取什么步骤与其他人开始“整合”?

谢谢!


我想说的第一步是学习编程,以便您至少可以说相同的语言。
钻机

问题不是更多关于如何将代码集成到比以往更大的项目中的问题吗?
路易·科特曼

3
“ ...这个项目将是非常unix-y,所以我购买了Mac ...”我误会了什么,还是错字?
Stu Pegg

4
@StuartPegg:Mac OS X是* nix,带有内置的shell终端,但是如果您想大量使用* nix的话,我建议在上面安装MacPorts。
Dave Sherohman

1
我记得曾经在《美国派》电影中说过“要得分才算得分”。就像tGilani所说的,成为团队的一员。:)
asakura89 '07年

Answers:


13

我认为您为团队工作感到既焦虑又兴奋。

我们没有人从书本上学习在小组或团队中工作,也没有任何婴儿步骤或“傻瓜式团队合作指南”。

我们只是通过在IN组中学习与组一起工作。

当您在团队中工作时,您所听到的有关专业程序员的所有信息将逐渐逐渐落实。您将逐一了解它们,例如版本控制,单元测试等。

对我来说,最重要的是

成为团队的一部分。


8

我将挑选一些句子,并提出几点要点:

(另一方面,他们不知道什么是词汇范围或闭包)。我们所有的代码都运行良好,但是他们不了解我的代码,我也不了解他们的代码。

...

我听到了真正的程序员每天做的事情的引用–单元测试,代码审查,但我对这些内容的含糊不清的感觉。通常,我的小项目中没有很多错误,因此,我从来不需要一个错误跟踪系统或针对它们的测试。

...

我花了数小时试图弄清楚所有这些奇怪命名的目录和文件是如何连接的……我经常发现,自己写功能要比花数小时剖析某些库更快。

我认为您需要学习的最大的一件事是:

对于开发商的能力给定标准,一个团队的n开发人员确实n倍的工作,一个开发人员可以单独完成-但他们还是做多可以在任何一个人

原因很简单:与其他人一起工作时,您必须花费一些时间与其他人交换信息。而单独工作时,信息交换全在您的脑海中进行。这自然更快。

另一个重要的事情是:

当然,您的某些同事在某些技能上会比您差一些。有些甚至在所有技能上都不如您

考虑到这两个想法,我上面引用的所有内容都是有意义的。很多人都不会“关闭”。测试和代码审查是为了确保质量,并降低一群混血人带来的代码风险。错误跟踪是因为当您生产足够大的系统时,错误是不可避免的。无休止的库及其约定是因为没有约定,每次您需要时,都会有太多代码无法重新学习或编写。

的确,我认为学习团队合作的唯一方法就是切实做到。但希望以上内容可以帮助您进行心理准备。祝好运!


4

最有效的方法是成为团队的一部分。

加入团队似乎很困难,因为据我了解,您像许多学生一样,还不是团队的一员,许多人的工作是与周围的其他开发人员一起工作。

我建议您参加一个非常活跃的开源项目,并希望在现代的所有人开放渠道(问题跟踪器,邮件列表,Wiki等)上进行频繁的交流。开放式沟通很重要,因为您可能会首先观察其他人的交互方式,因此避免使用依赖核心开发人员或未归档IRC之间的电子邮件的项目。

最好选择一个看起来很受欢迎的项目,该项目有几个非常频繁的贡献者,而不是一个只有一个人做所有事情的项目。另外,更喜欢允许任何人接触所有事物的项目(而不是让每个开发人员都有自己的划定区域),因为它更有趣并且提供了更多的交流机会。

无耻的插头:非常欢迎您在这里


1

我不会重申其他人对的影响"just do it",但是我要补充一点我未曾提及的观点:好的经理会真正帮助您融入团队。

尽管您可能在工作的编程部分拥有适合您的所有东西,但是您可能会缺少一些与人际关系和软件开发相关的东西。一位优秀的经理将指导您进行团队实践(包括软技能和硬技能)以帮助您凝练,并希望告诉您您是否做过或做过与这些做法相反的事情;因为您无法修复不知道的东西坏了。


0

我想给您的另一个提示是,没有两个团队是相同的,而且当一个或多个人加入时,即使是现有的团队也会发生变化。

团队源自彼此了解并尝试了解如何一起工作的个体的互动,直到他们找到共同的方式(例如,参见塔克曼集团发展的各个阶段)。

因此,我的建议不是立即尝试找到问题的答案,而是查看当您真正开始在新团队中工作时会发生什么。您的某些问题可能被您的同事认为不是问题,其他一些问题则被认为是相关的,您将有可能一起讨论这些问题,甚至发表自己的观点。最后,您可能还会处理您未曾想到的方面。

我同意ElYusubov的观点,即您需要很大的耐心,并给自己和新同事一些团队,以学习如何共同合作,直到您成为一个团队。如果您练习一些团队运动,您应该已经经历过。

关于花费大量时间了解他人代码的最后一条评论。在团队中工作意味着您将要处理别人的代码,而其他开发人员将要处理您的代码。有时,代码太复杂而无法从头开始重写。一个典型的解决方案是要求原始开发人员检查您的更改,以使您更有信心不要破坏他们的代码。

对我来说,这是从单人程序员向团队程序员过渡的一大飞跃:您在处理代码时仅能部分理解并且必须习惯。这需要与您的同事进行更多的交流,相互尊重(是的,他们的变量有奇怪的命名约定,所以呢?)和相互信任(即使他们有不同的编码风格,我知道他们提供的是工作代码) 。


0

成为优秀的团队成员意味着无所畏惧地沟通,信任您的大学并克服团队中项目的障碍,deliver project as a team.

它需要时间,需要耐心并且需要学习才能使自己感到舒服和自信。并非每个程序员都是优秀的团队合作伙伴,团队合作伙伴共享成功并从失败中吸取教训,这也是事实。

突出一些好的团队成员的角色会有所帮助。

a)好的团队成员是一个以目标为导向而不是自我导向的人。

b)素质:更多地考虑大局而不是自我满足。这是关键。其他所有品质(例如可靠性,建设性的沟通)都继承自这一品质

c)如何改进: 尝试确定您白天与团队互动的方式,定义好点和坏点,在下一次会议上予以注意。另外,尝试从多个角度审视团队决策。将自己置于他人的角色上,思考如何影响他人的工作。


0

首先,恭喜您是那种真正喜欢编程的人。但是,编程并不是交付有用系统的开始和结束。您将面临面前的挑战,无论您是回到业余爱好课程还是从事可以做自己喜欢的事情并为此获得报酬的职业,这都将取决于您。

您的不利之处在于您没有受过构建软件方面的教育。在该教育中,教给CS毕业生和经验丰富的软件开发人员第二天性(不仅仅是编程)。并不是说它经常在工作场所出现(尽管它对我来说是一次),但是NP-hard是他们可能理解而您可能不理解的一个例子。您可能缺乏计算背后的形式理论背景,但这没关系,只要您愿意学习它即可。将来可能是CS的硕士吗?听起来您的某些代码可能是惯用的,从某种意义上说,您的编程风格对您而言似乎很清晰,但对其他人而言则不清晰。注意代码审查,并愿意接受批评和学习。这将需要工作,您可能会感到沮丧,

您所追求的是无价的。您似乎真的很喜欢编程。我认为您还将喜欢开发系统的其他方面,例如设计,体系结构,测试,优化等。编程是难题的一部分,您必须学习其他技能才能成为软件开发人员。除了黑客马拉松以外,很多业务还涉及交流,彼此学习,倾听和计划。我曾与许多CS毕业生一起工作,他们更喜欢软件开发,而不是出售汽车或油漆房,但并没有真正的兴趣。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.