我几年前在CS毕业后,最近开始从事软件开发工作。我目前正在进行的项目是一个大型的正在进行的项目,它起源于90年代,混合了C,C ++和Java。支持多种平台(UNIX,WIN等),使用的旧技术如CVS,以及某些领域的一些日期文档。
我的软件开发技能的范围源于上大学,因为我没有真正的世界经验。我觉得我在CS中有一个不错的基础,但我不得不感到有点不知所措。我很高兴能成为如此巨大的事物的一部分,但与此同时我觉得要吸收很多信息。
我的同事一直都是很棒的人并回答了很多问题。我的雇主雇佣我知道我是入门级的。
我尝试了解源代码并检查所有内容是如何构建的,但它的规模是我以前从未见过的。
在加入正在进行的大型项目时,更多有经验的人如何定位自己?在让自己加快速度时,你做了哪些常见的任务?
答案 0 :(得分:8)
好问题。我没有你的确切经验,但在这种情况下,我喜欢思考,“你怎么吃鲸鱼?”答案是(可预见地)“一次咬一口”。合理的人不会指望你立即掌握整个事情,但他们希望看到进步。也许大项目的某些小区域不太复杂,没有太多依赖项。努力理解其中一个,你就是一个'咬'(和/或'字节'),更接近整个项目的专业知识。
答案 1 :(得分:6)
熟悉所有现有文档,我会尝试全局了解。字面上。
我会在Mac上使用GrandPerspective或在Windows上使用WinDirStat。它将为您提供有关项目文件结构的一些见解(有时它会提供有关代码结构的一些提示)。有了这个,你可以向你的同事询问一些集群,它们做了什么,它们之间的关系如何。
如果您要进行任何更改,请务必始终进行编译。在构建时执行测试总是一件好事,所以也要求它。如果有某种continuous integration服务器,那就更好了。如果有,请查看其配置 - 弄清楚构建是如何完成的。如果没有CI服务器,但您已经掌握了如何构建项目的知识,请在本地计算机上创建这样的服务器,并将其显示给您的同事 - 他们应该爱上它。
这对Java项目尤其有用。这个工具做得很好。这将为您提供有关代码结构的更多详细信息,有时还会提供有关系统体系结这种体验有时很难,您可以从这个工具中学习代码基本上是Big Ball of Mud;)
如果你很幸运,可能会有一些JUnit或CPPUnit测试。尝试理解这些测试正在做什么总是好的。这可能是进一步探索代码的良好起点。
答案 2 :(得分:1)
我的同事一直都是伟大的人 并回答了很多问题。我的 雇主雇用我知道我 入门级。
你几乎不用担心,你的雇主知道你的能力,你的同事似乎渴望帮助你 - 说实话,大多数开发人员喜欢向别人解释事情......
从我所看到的情况来看,真正花了6年多的时间才能完全掌握一门语言知识,所以不要指望在一年内成为一名大师......甚至这些所谓的大师最终都会学到新东西关于他们每天的语言。
学习一个新系统(大型)总是需要时间......系统通常不是在2周内构建,而是多年,所以不要期望完全理解它。你最终会发现每个部分的作用。
我知道你的感受,因为我曾经觉得这样......
答案 3 :(得分:1)
我同意其他人在我面前所说的话。您需要一些工具来概述代码。我个人使用了inFusion(http://www.intooitus.com/inFusion)因为它在结构旁边还提供了其他有趣的数据。
答案 4 :(得分:0)
我同意第一条评论,但我也认为你必须以某种方式学习并看到大局。您必须至少从代码中跟踪主流。
答案 5 :(得分:0)
最适合我的方法是从源代码控制中获取一个副本,目的是抛弃此版本...
然后尝试重构代码。如果您可以重构您知道将在稍后阶段工作的代码,那就更好了。
这有效的原因是:
在某些时候投资购买这本书:
http://www.amazon.co.uk/Refactoring-Improving-Design-Existing-Technology/dp/0201485672
但是这些链接应该让你开始:
表明你的代码需要重构以及使用什么refasoring(来自Refactoring - Martin Fowler) http://industriallogic.com/papers/smellstorefactorings.pdf
代码分类气味: http://www.soberit.hut.fi/mmantyla/BadCodeSmellsTaxonomy.htm
祝你好运!!!答案 6 :(得分:0)
几年前,当我加入一个包含50多个ClearCase版本控制存储区,500万行代码,其中一些可以追溯到20世纪80年代的软件项目时,情况完全相同。
我做的第一件事就是查看每个源控制目录,并快速总结一下我对该文件夹中的软件做了什么以及代码是什么语言的最佳猜测。您可以通过查看文件名以及这些文件夹中的任何注释或文档来做出相当不错的猜测。
然后我查看了构建脚本,看看它们是否足够可读,以了解代码不同部分之间的依赖关系。
最后 - 我相信这是最有价值的 - 在代码之上抛出像Eclipse或NetBeans这样的IDE并开始阅读它的各个部分。能够使用IDE跳转到任何函数或类的定义,您可以相对轻松地移动大量软件基线。
总的来说,有一点信心 - 项目中的其他任何人都不可能知道所有代码,所以你也不需要。使用其他人所说的内容来了解整个项目,接口和需求(如果存在),并通过代码来了解最常用的类和方法。