详细地说,我很想知道人们在一个人的项目中需要采取什么措施(团队源代码控制,文档,构建等),以及直到第二个人来时才需要做的事情进入项目。
任何有过这种情况经验的人,他们的见解将不胜感激。
详细地说,我很想知道人们在一个人的项目中需要采取什么措施(团队源代码控制,文档,构建等),以及直到第二个人来时才需要做的事情进入项目。
任何有过这种情况经验的人,他们的见解将不胜感激。
Answers:
我学到了什么。(我尝试了不同的顺序。我错了。这是事物相关的顺序。)
将所有内容放入源代码控制中。使用的东西,每个人都可以访问,并开始现在。没有例外。没有延迟。没有理由。
创建一个与您的个人“工作”或“开发”环境完全分开的质量检查/测试区域。至少一个单独的用户ID。理想情况下是在单独的VM上。
完全分开。与您当前的工作环境不可能重叠。
在您自己的工作环境中,停止超出单元测试的测试。代码和单元测试使您“像您自己一样”。您在单独的VM上执行的所有其他测试(集成,性能等)。永远不要自己测试。始终以单独的质量检查用户身份进行测试。理想情况下是在单独的VM上。
必须对您的团队成员说“为我工作”是一件坏事。很坏。您需要弄清楚他们在做什么错。一天几次。
计划写下一切。使用纯文本标记工具(RST或Markdown或其他工具),以便所有文档在版本控制存储库中均为纯文本。一个工具可以创建HTML页面(例如,用于RST的Docutils)或PDF页面,或看起来最好的页面。不要使用专有文档格式(即MS-Word)。它们在某些源代码控制系统中可能无法很好地发挥作用。
您需要写下的第一件事是以下内容。
如何创建一个工作的开发环境。如有疑问,请创建虚拟机并在该虚拟机上执行整个操作。确保步骤确实有效并且文档清晰。实际的行以实际的命令行键入的清晰度。
如何运行单元测试套件。再次。确保说明有效并且不需要思考。“输入以下内容:”“确认:”这类内容。不是您的团队成员很愚蠢。除非您将所有内容写下来,否则您将不记得自己的假设。
如何运行集成测试套件。
不要浪费很多时间来描述架构或设计原则。您需要首先让某人启动并运行。您可以稍后再解释。
接下来要记录的是用户故事。还有支持这些故事的测试用例。以及支持这些用户案例的测试用例所需的数据夹具。
您将分享这个。它受源代码控制。
最终,您可以记录其他4个视图。
逻辑视图对文档很有帮助。图片在这里可以接受。这往往会迅速发展,因此不要花时间捕获旧信息。找出与您的团队成员合作的方式。
流程视图通常很有帮助。具体取决于整个应用程序的重要性。
开发视图(模块,库,框架等)通常是非正式描述的。一张照片可能会有所帮助,但是要使其完整到足以使人可以拿起文档并使其正反两面都很难。即使是历史悠久的非常公开的项目,其图书馆文档也被忽略了。(导致很多堆栈溢出问题。)
除了可以接受非正式之外,这种趋势还会迅速改变。
部署信息。服务器。IP地址。数据库凭证。所有这些东西都必须写下来。最终。
成功合作和提高生产力需要什么?
...或人际关系层面上的其他任何事物
我将列出一些我实际上已经阅读并且通常认为值得一读的书籍,以获取更详细的描述或更多书籍,您可能想要检查一些有关SO的问题,例如这个或这个问题。
关于团队,组织和编程项目,这些书确实值得一读:
这些都不是有关如何实施方法X的实用指南(软件估算除外,这本书可帮助您选择适当的估算过程)。当然,更着重于编程本身的书籍(如Code Complete)也非常丰富。
我将根据经验谈谈,但请记住,每个人都是不同的。这些事情不是普遍的。
一件事就是让它个人化。这个项目与您一起生活了18个月,您自然希望每个更改都像您所做的那样。为同事犯错误,学习提供缓冲。为他们创建一个有用的房间。请记住,它可能不会立即发生。如果他们能感觉到他们在改进或创建方面成功的代码中的某些部分,那感觉很短,那么这也很棒。耐心和宽容在这里有良好的回报率。不要试图进行微观管理,如果要批评,说“你错了”,请确保自己有功绩,可以证明这一点,这不是一场“宗教”斗争。
另一个关键问题是找到适合您的人。理想情况下,找到比自己聪明的人会更好。它是主观的和相对的,但是如果您觉得一个人拥有一些您没有的知识和技能,那是最好的。这将是一个互惠互利的合作。
可以通过两种方法进行操作-同事会很累,您最终将重做他或她所做的事情,或者你们两个人的技能将成倍增加,而不仅仅是累加,并且您将非常喜欢一起工作。
关于“干净,快速,可重用的代码”主题-我建议在一次采访中,要求写一个小的微内核/服务经理和/或工作执行者。查看如何指定和配置可插拔组件。不一定要完成,这是很重要的想法。而且,您还将很快学习到知道如何做的人,他们会想要像样的钱;-)祝您好运!
我的观点:首先为不了解它的人记录您的内部项目的体系结构。尝试解释哪些假设是正确的,何时/何地偏离常规做法以及原因。
构建自动化:好主意,我可以为开发机器添加配置自动化。最容易的是构建更多的东西(这样可以更快/更快地部署测试)。
另一个想法(曾经对我有很大帮助):让新开发人员在代码库的不同区域进行一些清理小规模的任务,以便他习惯于布局工具等。一个好主意是删除遮盖区域,这些区域以后可能会增加混乱(例如:如果您在某处的外壳脚本的两行中使用了emmm python,并且您的项目基于Java,请要求用Java重写这两行,以便开发人员#3需要为了工作而少知道)
我将专注于使需要人工工作的所有事情自动化,因此可能会被经验不足的人弄糟。根据您上面的简短评论,其中包括以下内容:
如果您不做这些,或者您将被束缚永远做这些任务,或者(某些)新员工迟早会不可避免地搞砸了。
正如@dimitris指出的,另一个重要任务是文档。@S。洛特为此增加了更多细节,因此他只给+1而不是重复:-)
以下是部分基于个人经验的想法:
记录您的项目。设计规范,图表,手册和注释将帮助新员工快速入门。仅用口头解释一个复杂的系统会证明缓慢而令人沮丧。单人项目中经常忽略文档。确保您的例外。
首先,自己专注于API /核心级别的代码,同时为新员工提供一些“应用程序层”工作或bug修复,以使他们逐渐熟悉代码。通常,从更轻松,更有意义,因此有意义的任务开始。
沟通很重要。对新员工的问题,评论和想法做出回应。解释为什么您认为一个主意不好的原因。一双新鲜的眼睛可以令人惊奇地发现改善的空间。如果您的新员工是一个体面的员工,他可以同行审查您的代码并最终参与架构决策。互相讨论,互相讨论。这是在您的项目中拥有同事的最大好处之一。
一旦知道新团队成员要完成的任务,就可以清楚地定义职责。建立文档惯例和编码约定,以使事情顺利进行。
使用修订控制系统。保持逻辑的源文件布局并建立纪律。
至于面试-我不喜欢人工编码测试或技巧性问题,除非您希望尝试考生的压力承受能力。即使最聪明的问题解决者也可以锁定这种情况。您要寻找的特质包括:诚实,专业能力,技术知识/洞察力,热情和相互兼容。工作氛围可能意味着很多;建议您选择不喜欢的队友。将您的问题放在正确的位置,并进行一些非正式的讨论,以对候选人有所了解。祝好运!
技术
如果您邀请其他人作为开发人员,那么在他们开始之前,我建议您进行三项关键工作。
如果这三件事正常运行,您将消除约75%的新团队成员出现的常见问题。这些技术的要点是仅将很多正在发生的事情带到您的脑海中,并将其带到您的团队成员可以与之交互的位置。
源代码控制可确保您都在做同一件事。问题跟踪不仅可以帮助您跟踪需要完成的工作,还可以使您更轻松地了解他们的工作和完成情况。持续的集成和测试将有助于确保您具有可重复的构建过程,并且新的改进不会破坏代码的其他部分。
实用程序员对此有一些不错的书。这是我推荐的一些。根据您使用的编程语言或要使用的版本控制,它们还有其他相似的标题:
http://www.pragprog.com/titles/tpp/the-pragmatic-programmer http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git http://www.pragprog。 com / titles / auto / pragmatic-project-automation
个人
通常,您将面临的困难不在技术方面,而在学习放手方面则更多。很难让其他人控制项目的各个方面-特别是如果您习惯于自己做所有事情并做出每个决定的话。如果您可以找到一个可以让新员工在开始时以合理的自由度工作的区域,从而为您建立信任的基础,那么您会为自己省下一些痛苦。如果您雇用一个好人,那么您可能会学到的主要事情是,如何信任另一个人做得好的工作,即使他们的所有个人决定与您所做的决定都不一样。
您希望给新员工以解决问题的自由,同时确保安全措施到位,以便您尽早发现问题。
我认为以下几点最重要:
最后但并非最不重要的一点:获取版本控制系统。Subversion很好。但是请确保不要添加特定于用户的Eclipse文件(或其他文件),因此会不断更改。它们使您浪费时间。如果您有任何问题,请随时询问Stackoverflow。