【问题标题】:What do you do when you're suddenly thrown onto a large project? [closed]当你突然被扔到一个大项目上时,你会怎么做? [关闭]
【发布时间】:2010-07-23 06:16:41
【问题描述】:

几年前从 CS 毕业后,我最近开始了软件开发的职业生涯。我目前正在进行的项目是一个正在进行的大型项目,它起源于 90 年代,混合了 C、C++ 和 Java。支持多种平台(UNIX、WIN 等),使用 CVS 等较旧的技术,以及某些领域的一些过时文档。

我的软件开发技能源于上大学,因为我几乎没有实际经验。我觉得我在 CS 方面打下了不错的基础,但我不禁对这一切感到有些不知所措。我很高兴能参与如此庞大的活动,但同时我觉得需要吸收大量信息。

我的同事都是很棒的人,回答了我很多问题。我的雇主知道我是入门级人才雇用我。

我尝试过查看源代码并检查所有内容是如何构建的,但它的规模是我从未见过的。

在加入正在进行的大型项目时,经验丰富的人如何看待自己?在加快速度时,您会执行哪些常见任务?

【问题讨论】:

  • 哈。当我读到“Older technologies in use live CVS”时,我突然觉得自己老了。我在想“这不是那么 - 哦......sigh”:)
  • 应该是社区维基

标签: project-management


【解决方案1】:

好问题。我没有你的确切经验,但在这种情况下,我喜欢想,“你怎么吃鲸鱼?”答案是(可以预见的)“一次一口”。理性的人不会期望你立即掌握整个事情,但他们会希望看到进步。也许较大项目的一些小区域并不太复杂,没有太多的依赖关系。努力理解其中之一,你就更接近于整个项目的专业知识。

【讨论】:

  • 这个建议在很多情况下都有效,实际上几乎适用于任何工作。
【解决方案2】:

熟悉所有现有文档后,我会尝试了解全局。从字面上看。

我会在 Mac 上使用 GrandPerspective 或在 Windows 上使用 WinDirStat。它将为您提供有关项目文件结构的一些见解(有时它会提供有关代码结构的一些提示)。有了这个,您可以向您的同事询问一些集群、它们的作用以及它们之间的关系。

  • 了解如何构建项目

如果您要进行任何更改,那么让它一直编译很重要。在构建时执行测试总是一件好事,所以也要求它。如果有某种continuous integration 服务器就更好了。如果有,请查看其配置 - 了解构建是如何完成的。如果没有 CI 服务器,但您已经了解如何构建项目,在本地计算机上创建这样的服务器,并将其展示给您的同事 - 他们应该会爱上它。

这对于 Java 项目尤其有用。这个工具做得很好。这将为您提供有关代码结构的更多详细信息,有时还会提供有关系统架构的更多详细信息。这种体验有时可能很难,你可以从这个工具中了解到一个代码基本上是一个Big Ball of Mud ;)

  • 寻找测试并探索它们

如果幸运的话,可能会有一些 JUnit 或 CPPUnit 测试。尝试了解这些测试在做什么总是好的。这可能是进一步探索代码的良好起点。

【讨论】:

  • “寻找测试,并探索它们”——是的,写新的,特别是如果还没有的话。这迫使你从低层次开始理解代码,然后你可以从那里开始工作。
【解决方案3】:

我的同事都是很棒的人 并回答很多问题 I. 我的 雇主雇用我知道我是 入门级。

您无需担心,您的雇主知道您的能力,您的同事似乎很乐意帮助您 - 老实说,大多数开发人员都喜欢向他人解释事情......

据我所知,真正掌握一门语言需要 6 年以上的时间,所以不要指望在一年内成为大师……即使是这些所谓的大师最终也会学到新的东西每天了解他们的语言。

学习一个新系统(大型)总是需要时间......这些系统通常不是在 2 周内建成的,而是需要很多年的时间,所以不要指望完全理解它。您最终会发现每个部分的作用。

我知道你的感受,因为我曾经有过这种感觉……

【讨论】:

    【解决方案4】:

    “我参加了速读课程,二十分钟内读完了《战争与和平》。它涉及俄罗斯。” (伍迪艾伦)

    我同意其他人在我之前所说的话。您需要一些工具来概述代码。我个人使用了 inFusion (http://www.intooitus.com/inFusion),因为它还提供了除结构之外的其他有趣数据。

    【讨论】:

      【解决方案5】:

      对我来说最有效的方法是从源代码管理中获取一个副本,目的是丢弃这个版本......

      然后尝试重构代码。如果您可以重构您知道您将在稍后阶段处理的代码,那就更好了。

      之所以有效是因为:

      • 重构为您提供了一个目标。而“玩”和“破解”代码很棒 - 它没有重点。
      • 要重构代码,您必须真正了解代码。
      • 重构的代码留下的代码保留在内存中的概念较少。如果您不了解大型代码库,并不是因为您是毕业生,而是因为没有人可以一次保留超过 7 个(给予或接受几个)概念。
      • 如果您遵循正确的重构指南,则意味着您将编写测试。不过,请确保您将使用正在测试的模块,因为编写测试可能非常耗时(尽管非常有益)

      一定要在某个时候投资购买这本书:

      http://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672

      但是这些链接应该可以帮助您入门:

      表明您的代码需要重构以及使用什么重构(来自 Refactoring - Martin Fowler) http://industriallogic.com/papers/smellstorefactorings.pdf

      代码气味的分类: http://www.soberit.hut.fi/mmantyla/BadCodeSmellsTaxonomy.htm

      祝你好运!!!

      【讨论】:

        【解决方案6】:

        我同意第一条评论,但我也认为您必须以某种方式学习并了解全局。至少要从代码中追踪主流程。

        【讨论】:

          【解决方案7】:

          几年前,当我加入一个软件项目时,我遇到了完全相同的情况,该项目有 50 多个 ClearCase 版本控制 vobs、500 万行代码,其中一些可以追溯到 1980 年代。

          我做的第一件事是查看每个源代码控制目录,并快速总结我对那个文件夹中的软件做了什么以及代码是什么语言的最佳猜测。通过查看这些文件夹中的文件名和任何 cmets 或文档,您可以做出很好的猜测。

          然后,我查看了构建脚本,看看它们是否具有足够的可读性以了解代码不同部分之间的依赖关系。

          最后——我相信这是最有价值的——在代码之上添加一个 Eclipse 或 NetBeans 之类的 IDE,然后开始阅读其中的各个部分。能够使用 IDE 跳转到任何函数或类的定义,让您可以相对轻松地在庞大的软件基线中移动。

          总体而言,有一些信心 - 项目中的其他人不太可能知道所有代码,因此您也不需要。使用其他人所说的来很好地了解整个项目以及接口和需求(如果存在),并浏览代码以了解最常用的类和方法。

          【讨论】:

            猜你喜欢
            • 2013-08-30
            • 2011-05-24
            • 2010-09-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-15
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多