当我只有一个大主意时,开始一个大项目的步骤是什么?[关闭]


49

我是计算机工程专业的学生。我一直在思考如何处理一个大项目。以更有效,更有效的方式实现目标的第一步应该是什么?

当我提出一个项目时,我不知道该如何开始工作。很多时候,我只是忽略了它。但是,我不想再忽略我的项目构想了。

现在,我问大家,有人可以分享他/她的经历吗?当我拥有一个主意时,我应该如何开始一个项目?


11
答:第一步,开始使用版本控制。看看他们是如何做到这一点的开源库,如github上,到位桶,CodePlex上,在SourceForge等
Spoike

“版本控制”是什么意思?你能描述更多吗?

请参阅下面的答案。
Spoike 2011年

1
我建议迁移到[productivity.se],但由于NARQ可能要关闭。这实际上与编程或程序员没有太大关系,它是开放式的,而且含糊不清(什么是“大”项目?“比什么更有效率/效果”)。
2011年

6
并不是您问题的真正答案,但:不要害怕失败。不要听别人告诉你不能。您所读到的名人并不出名,因为他们很聪明或才华横溢。他们之所以出名是因为他们坚持不懈。聪明才智的人一角钱。坚持不懈的人很少。
查尔斯·兰伯特

Answers:


64

暂时无需编写代码并建立开发环境。如果您要着手进行一个大型项目,那么您要做的第一件事就是掌握项目的目的范围

我建议打开一个文字处理器,并写出一个“项目目标”文档。描述想法的全部内容,以及您要编写的软件的一般用途。然后列出项目的功能目标。我并不是说要具体说明,而是要描述最终产品应支持的不同功能。因此,如果您正在编写软件来管理学校,则可以将“教师管理”列为一项功能,然后描述该功能将包括哪些内容(跟踪联系人信息,课程表等)。

然后是最困难的部分:这不是您需要立即做的事情,而是随着您的前进。与列出要添加的功能一样重要的每一件事都是查看目标文档中描述的功能,并记下那些无需在程序的第一个版本中即可使用的功能。这是管理范围的关键。
人们在大型项目中失败的主要原因之一是他们不知道何时停止进行该项目。他们不认为这是“完成”的事情,因为想法不断涌现,而且从未发布过。最终,他们失去了兴趣,您又有了另一半完成的杰作。因此,您想确保自己对功能的掌握是正确的,这对于实现目标的基本部分至关重要。那是您的第一个目标。

这就是我现在开始所有重要项目的方式。它有助于我保持专注,并有助于在开发过程中避免范围和目的的“演变”。


为您所说的一切+1。还要读本书
treecoder 2011年

+1-不需要我添加任何内容。
temptar 2011年

这是一个很好的答案。另外,如果您有某种类型的项目管理软件,请尽早开始使用。有一些免费的,当然有限制。我以前使用过CampFire(campfirenow.com/signup,寻找“我们还提供免费计划:4个聊天记录,具有10 MB的存储空间。”)。
m4tt1mus 2011年

1
我宁愿推荐思维导图,而不是文字处理程序(没有经验的人+空白页=项目将永远不会起飞)。
2011年

1
文字处理器?使用笔和纸。:)

41

我认为莱纳斯说得最好

没有人应该开始进行大型项目。您从一个小型琐碎的项目开始,并且永远不要期望它会变大。如果这样做,您只会进行过度设计,并且通常会认为它比该阶段更重要。或更糟糕的是,您所设想的庞大工作量可能会吓到您。因此,从小处着手,并考虑细节。不要考虑一些大图景和精美的设计。如果它不能解决一些迫在眉睫的需求,那么几乎可以肯定它是过度设计的。而且不要期望别人会帮助您。这些不是这样工作的。您首先需要获得一些有用的东西,然后其他人会说“嘿,这几乎对我有用”,他们将参与该项目。莱纳斯·托瓦尔兹(Linus Torvalds)


12

以更有效,更有效的方式实现目标的第一步应该是什么?

我假设您之前已经做过项目,并且您所在的大学/大学不教授版本/源代码控制。如果您想查看一些项目,可以随时访问开源存储库,例如Github(使用Git),Bitbucket(使用Mercurial),Google Code(使用Mercurial,Git和Subversion),CodePlex(Mercurial和Subversion / TFS), SourceForge(很多),等等,看看他们的代码库。他们的共同点是他们使用的是源代码控制软件。

关于如何使用它们有很多信息,因此,我建议您学习如何使用它们,因为这是标准的行业惯例。以下是一些视觉指导,可助您一臂之力:

您知道,当我想到一个项目时,我不知道该怎么办。很多时候,我无视它。

闲暇时,您只能做很多事情。从小开始:从头开始创建一个项目,并将其放入源代码存储库。每当您想向小型项目中添加内容时,就对源代码存储库进行更改。随着时间的流逝,它会变得很大,如果您想返回,则可以随时还原或回滚对版本控制系统所做的更改。


9
从小处开始+1,这是大型项目的基本方法:将其分解成较小的部分,然后一次处理一次。
Joel C

5

被“白纸”综合症击中是完全正常的。

您的脑子里有个很棒的项目,看起来很棒,但是当您坐在办公桌前尝试做某事时,您突然变得阻塞而无能为力。然后打开单人纸牌并创造新记录。

实际上,您需要开始做一些与项目相关的事情,以便您感觉它像是天生的。

您可能不希望立即编写代码。您可以从编写项目实际必须执行的操作或您希望执行的操作开始。拿笔和纸开始写作。您可以从细节开始,也可以从更大的角度出发。两者都尝试,看看什么是最好的。

您可以尝试定义项目的功能,不同部分以及这些部分之间的通信方式。我对发布便利贴感到满意,它们很有趣,您可以随着进度进行更改。让他们跟随您的思想和想法。

或者,您可以启动一些函数或类的原型。您可以使用自己喜欢的任何语言,甚至是不存在而您刚刚发明的语言。

一段时间后,您将有一些工作要做,并且您的项目不仅会在您的脑海中。您实际上做了些什么。

当您真正开始开发过程感到自在时,就该进行仔细的计划,记录,原型设计,收集所有必需的技术和软件,等等。

但是,直到您真正感觉到正确的时机,才开始!


4

大型项目由许多较小的项目或部分组成。您可能有一个很大的想法或项目需求-例如,一个管理联系人的应用程序。

分解;问自己:“要做这些,我需要小的零件是什么?”

一旦定义了较小的部分,请重复;您可能会发现某些部分需要进一步细分。想法是为每个较小的部分定义最易于管理的目标。学习在设计和开发中使用纪律性原则(例如Agile-TDD),将实现较小的,更易于管理的目标。


2

创建大纲

您有一个很大的想法,但不知道如何完成任务。创建要执行的操作的大纲。写下您将要执行的步骤,所需的内容,使用的语言等。确保您已将所有内容整理妥当,否则该项目将成为一个沉船。

安排您的步骤

我之前提到过,但这确实很重要。如果有时间安排,则可以估算项目的完成日期以及该项目的任何步骤将花费多长时间。同样,这是组织,它将使您保持运行状态。

查找工作所需的工具

如果您要开始一个大型项目,则需要一些帮助。对于代码组织和良好的版本控制系统,Git很棒,因为它可以将所有代码保存在单个存储库中。有关Git的更多信息,请参阅我给您的链接。

您还需要确保您使用的语言可以帮助您完成尝试做的事情。在开始之前,请确保您能够创建项目。我并不是说不要学习任何新知识,而是要在开始之前学习。

得到帮助

大型项目通常不是一个人完成。在开始之前,请与同学,社区中可以编程的人以及您认为可以帮助您的其他任何人联系。不要害怕问。

开始吧!

不要闲逛,等别人开始您的项目,然后说“我有这个主意!”。它将永远困扰着你...


1

也许充满了陈词滥调,但是...我会提交。

为了能够处理一个大型项目,您主要需要做一件事:经验。经验为您提供所需的一切:

  • 知识:您在项目上花费的时间越多,您获得的一般知识和具体知识就越多
  • 信心:管理大型项目需要信心,信心来自于知识,并且通常来自以下事实:工作的每一部分都是您以前做过的,或者您看到有人在做
  • 专业网络:如果项目规模很大,您将必须意识到自己无法完成该项目,因此请准备好知道要问谁或在哪里可以找到所需的关键信息

因此,您可以做两件事:

  • 潜入水中,看看情况如何。可能您会犯很多错误,但是关键是要从中吸取教训。
  • 找到一份工作,让您可以特别观察他们处理大型项目的人

希望对您有所帮助。


1

我对“大项目”的定义是“一个主要问题是参与者之间的协调和他们之间的沟通的项目”(中等项目是当管理和技术问题一样困难时,小项目是当技术问题和技术问题一样困难时。比管理层更重要;请注意,一个人的长期项目可能是一个大项目-与将来的自我进行协调和沟通与与他人进行自我协调并没有太大不同)。

能够(以“具有领导作用”)处理大型项目的第一步是在没有领导作用的情况下参与某个大型项目。第二步是在有经验的人的指导下达到领导角色的水平。

另一种方法是逐渐增加项目的规模并从您的经验中学习...


1

对于工程师来说,刚进入并开始编写代码的一些想法已经成熟。这些项目可能很大,也可能很小,但是它们都有一个共同点:一个明确定义的问题要解决。我已经无数次地开始了这样的项目,而这只是我要围绕着预先编写好的文档并遵循有关源代码控制,通信和协作的最佳实践来建立学科的问题。

我所拥有的只是一个想法萌芽的大型项目,需要我做一些准备。我要做的第一件事是开始与他人谈论我的想法,以查看是否有人对我要解决的问题有我的理解,并验证我计划解决问题的方法。因此,带一两个朋友出去喝啤酒,或邀请他们到您的Cheetos宿舍。但是请乐于享受此过程,因为您可以通过此过程更好地了解您要解决的问题,找到在解决问题时可以带给您的其他好主意,练习将您的主意卖给他人,甚至可能开始构筑一个一群人来帮助您解决问题。


1

将大事分解成小事。

您不能致力于“实现世界和平”。相反,您致力于禁止大规模毁灭性武器,鼓励民主,提供发展援助,鼓励文化和科学交流等。


1

我认为这些答案中很多都没有涉及到的事情是要切实地完成工作,并迫使自己去完成它。

有时,您陷入“思维领域”,觉得剩下的只是乏味的打字工作,但实际上是从项目的一小部分开始,实现既有趣又充满挑战。

我认识很多这样的人,包括我在内,直到我真正出发之前,我什么都做不了,我不能-只是-想和计划开始一个项目。我必须选择一个我可以轻松实现的部分,然后逐步开始。


1

没有理由没有目的去做任何事情。您需要显示需要编写代码的用户故事。您应该采用以下格式来构架这些用户故事:

作为[X],
我想要[Y],
以便[Z]

这看起来似乎过于简单,但是它为您提供了一个框架,它不仅可以定义用户,还可以指定需求以及最终结果。您将有许多这样的人。随着时间的推移,您将提出更多建议。掌握了一些知识之后,就可以开始开发代码了。当您有更多想法或想出其他办法时。您回去写更多的用户故事,以免忘记他们。那是最好的起点。

行为驱动开发使用这种方法,链接的站点上有几个使用这种格式表达用户故事的示例。

我认为这将是从构思到代码的最快,最有条理的方式。


1

我会拿一叠黄色的便签纸和一个魔术笔,坐在一个有大白板的房间里,这样我就可以集思广益。

我只是开始写下想到的简单短语,例如“主菜单”,“报告”,“数据库”,“身份验证”等。我将其粘贴在白板上,然后凝视并获得更多想法,例如主菜单的外观:

将文件打开,文件保存,文件另存为,打印等,然后将其粘贴在主菜单下的白板上。

当想法浮现在脑海中时,请将它们写下来……好,坏,愚蠢的东西,只要让人信服。将它们粘在板上。当您查看董事会时,将会浮现出更多的想法并出现各种模式。在某个时候,您将开始对自己的开发计划有所了解。

黄色胶粘物很棒,它们可以很快移动。

一旦事情开始融合在一起,就可以将这些思想分成几组。然后,您可以在单个小组级别上集思广益。我会在各个阶段为白板拍照,以防您想知道二十分钟前情况如何,然后才改变。

最终,您将对必须完成的主要工作有一个很好的了解。您可以为每个这些块获得一个文件夹,并在它们出现时将它们不断地扔进去。


0

既然您是学生,我将假设您是指大学生而不是专业大学生。后者需要其他业务和协作注意事项。我上周刚开始一个新项目,所以这个过程让我记忆犹新。

我要做的第一件事是研究现有的解决方案和库。我不喜欢在任何可能的情况下重新发明轮子。这项研究也是为项目选择语言的重要因素。有些语言为某些任务提供了更好的现有代码。

接下来,我要做的是创建一个文件夹并将其置于源代码管理之下。这就像git init .现在一样简单。

接下来,使“ hello world”工作。这使我知道我的开发环境已正确设置。

接下来,我将获得第三方图书馆的“ hello world”。这是显示我正确链接和正确使用该库所必需的最低要求。例如,对于数据库库,它正在连接并运行一个简单的查询。对于GUI工具包,它显示一个窗口。

接下来,我建立构建脚本和测试框架。这是ant或makefiles或其他任何东西,当您的项目仍然很小时,它更容易设置。

接下来,我创建数据结构。也称为“模型”层。这是存储程序需要记住的所有内容以完成其​​工作的部分。我在纸上做了很多设计,然后在其中添加了存根。设计的这一部分通常是最简单的。例如,一个国际象棋程序将需要一些对象来存储游戏网格,玩家,棋子,移动顺序等。

在这一点上,我为程序奠定了良好的基础,对于该特定项目,下一步通常是很明显的。然后,我每次只迈出一小步,而在整个过程中代码在某种程度上都可以正常工作。


0

如果您拥有的只是一个“大创意”,那么您将需要很多东西(在其他答案中对此有很好的描述),尤其是以下两项:时间动力

当您一个人从事个人项目时,最大的困难是,通常您每周没有太多时间花在项目上,因此您看不到太多进展并很快失去动力。

正如已经说过的那样,请采取一些小步骤,这就是关键。

但这还不是全部,您必须采取小而有益的步骤!也就是说,这些步骤将带给您最大的价值,并展示您的大创意的关键概念。

例如,如果您正在与新的超级待办事项列表软件进行工作,并且具有出色的用户交互性。在真正需要存储和数据库之前,请不要先进行介绍。从创新的用户界面开始:这既有趣又有价值。这会让您感到骄傲,保持动力并让您很快检查一下您的想法是否真的很不错。


0

您需要做的第一件事就是坐下来,用书面形式描述这个想法。直到那时它才成为一个项目,即使到那时,您也需要做一些工作,以使它从像想法一样短暂到像项目一样切实。

一旦达到目标,就可以开始将其变成一个项目,确定如何将其分解为可以以逻辑方式实现的离散步骤。

然后概述实施这些步骤的时间表。以给定的时间间隔重新访问进度,以便您保留对该过程的一些控制权-而不是拥有一开始从未想到的令人毛骨悚然的想法,并将其添加到组合中。

确定最初的终点线并为此而努力。坚持得越少,该项目就越有可能陷入其他想法的压制之下,而随着它似乎永远存在,您就越会沮丧地完成它。


0

代码工作量通常约为项目预算的20%(+ -10%)。专注于使代码正确是没有意义的,您有80%的工作尚未解决,因此获得完美的代码管理仍然只剩下20项工作。

如果您的项目没有用户怎么办?如果它是完美的,但是在“ Acme Patent Trolls”申请该想法的专利后一个星期发布,又证明是下一个Facebook,该怎么办?

查看以下标准项目生命周期问题:需求,设计,代码,测试,集成,部署,缺陷跟踪和纠正,需求变更管理(增强请求)。发布计划,资源分配(您计划一天多少小时,以及您实际上将在项目上进行多少小时),法律(Freedon操作)等。

如果以上所有步骤都正确,那么即使非常糟糕的代码也将成功。如果以上都不存在,则最佳代码将失败。

我不是一个赌徒,但我会花钱在上面,您的第一个“大项目”将以您无法想象的多种方式失败。别担心,继续前进,失败,向它学习,然后再做。不开始就是真正的犯罪。如果您确实第一次成功,那么您将在业务管理方面拥有扎实的职业,而不是编程。

因此,要回答您的问题,请收起软件工具,然后拔出您的“业务计划”工具。弄清楚为什么要这么做,因为世卫组织然后为什么以及何时需要。(您可以成为自己的客户,但还是要进行练习)。将其写在“业务计划”中,并以此为基础。


0
  1. 成功是什么样的?
  2. 项目中有哪些未知数?
  3. 该项目有哪些已知信息?
  4. 您该怎么做才能消除/发现未知数,将其转换为已知数?
  5. 您该怎么做才能集合成功的秘诀?
  6. 使该项目前进的下一步具体步骤是什么?

重复最后一步,直到项目完成;接受可能要花几年的时间,并继续前进


0

这里的所有答案都很不错,但是老实说,您进行多少版本控制,gitting,流程图和标记都没有关系,重要的是您拥有一个功能性应用程序,一个功能性应用程序定义为解决它自以为是的问题的方法,其他所有事情都没有关系。

开始编码,将其编码到功能阶段,运行一些测试,调试,启动并使用新特性和功能再次迭代(如果您认为必要的话),这很像精益启动(这是一种灵活的管理方法)开发以减少浪费(或定义为:半成品)。


-1

开始新项目时要做的事情清单:

  1. 建立新目录
  2. 通过复制一些现有的makefile模板来创建makefile
  3. 创建一些头文件和实现文件
  4. 确保它可以编译
  5. 开始使用版本控制
  6. 决定类,函数,数据成员,变量的命名约定
  7. 写你的第一堂课
  8. 确保您的类是独立的,并且每个成员函数均独立于其他成员函数
  9. 通过创建像main()这样的函数来创建多个对象
  10. 重复步骤7-10,直到您的程序准备好
  11. 编译它
  12. 运送给最终用户

那是关于编码的,但这不是工程,也无法超出一定规模。相反,您需要从用户故事或需求或某种规范开始做一些事情;这些将帮助您从一开始就选择实施技术。“写一些故事”,“订购故事”是前两个步骤,版本控制先于任何代码,而第一个故事始终是“研究实现技术”(比“选择一种语言”要多得多)。
Andrew McGregor
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.