启动项目的最佳方式

时间:2023-01-16 16:57:24

When you are starting a personal programming project, what is your first step? I'm trying to start a project thats just an idea at the moment. I get lots of these and I dive right into the code and after a while just completely lose interest and or just forget about the project.

当您开始个人编程项目时,您的第一步是什么?我正在尝试启动一个只是一个想法的项目。我得到了很多这些,我直接进入代码,过了一段时间后,我们完全失去了兴趣,或者只是忘记了这个项目。

When you are starting, what is your first step? do you plan out the project? make a diagram? write some code on paper? How do you start a project in a manner that you know you will succeed?

当你开始时,你的第一步是什么?你计划好这个项目吗?制作图表?在纸上写一些代码?你如何以你知道自己会成功的方式开始一个项目?

14 个解决方案

#1


16  

The only thing that works for me: Create the smallest possible implementation of it that's somehow usable and then use it.

唯一对我有用的东西:创建一个可行的最小可能实现,然后使用它。

#2


11  

From 7 Habits of Highly Effective People, Habit 2: Begin with the End In Mind.

从高效人士的7个习惯开始,习惯2:从头脑开始。

With any project you need a clear goal, a point where you can say "I'm finished". A clear outcome will give you direction. Once you have that, you can start planning how to get there. The size and complexity of the project will determine how much detail your plan needs, but in general you'll want to feel your making progress against your plan quite regularly.

对于任何项目,您需要一个明确的目标,一个可以说“我已经完成”的点。明确的结果会给你指路。一旦你有了,你就可以开始计划如何到达那里。项目的规模和复杂程度将决定您的计划需要多少细节,但总的来说,您会希望定期感受到您的计划取得进展。

My next step is to sketch out a design of the modules that will be needed and the APIs between each module. If the APIs are clean then the modules are probably right. Then I start implementing the modules, testing as I go.

我的下一步是草拟出所需模块的设计以及每个模块之间的API。如果API是干净的,那么模块可能是正确的。然后我开始实施模块,随时进行测试。

#3


10  

I spend a lot of time thinking about the various aspects of the project before I even touch a keyboard.

在我触摸键盘之前,我花了很多时间考虑项目的各个方面。

I go through what I've learnt from previous projects and write it down in various categories ('technical', 'promotion', etc)

我将介绍我从以前的项目中学到的知识并将其写成各种类别(“技术”,“促销”等)

Personal project or not, I always set up source code control. Git, Mercurial of Bazaar are examples of source code control tools that are not intrusive because you do not need to set up a master server. Just type a simple command to create the project, check your files in, commit. In the future, when you mess up one of your files, you will be able to 'undo'

个人项目与否,我总是设置源代码控制。 Git,Bacurar的Mercurial是源代码控制工具的示例,它们不是侵入性的,因为您不需要设置主服务器。只需键入一个简单的命令来创建项目,检查您的文件,提交。将来,当你弄乱你的一个文件时,你将能够“撤消”

I also set up a lightweight ticket system to keep track of 1.issues and 2.ideas By "lightweight" I mean that if maintaining two text documents with these lists works for you, that's good enough.

我还设置了一个轻量级的票务系统来跟踪1.issues和2.ideas“轻量级”我的意思是如果用这些列表维护两个文本文档对你有用,那就足够了。

Hope this helps.

希望这可以帮助。

#4


3  

I agree with the already given advice of:

我同意已经给出的建议:

  • Planning a minimal implementation that does something useful as a first complete release.
  • 规划一个最小的实现,作为第一个完整版本做一些有用的事情。

  • Have concrete goals about what you want to achieve to have something to compare your progress with.
  • 针对您想要实现的目标制定具体目标,以便比较您的进度。

I would also recommend beginning with a lightweight design of you overall architecture so you can have a roadmap of how to build your product.

我还建议您从整体架构的轻量级设计开始,这样您就可以制定如何构建产品的路线图。

I find it difficult to start building something when I don't have a clear idea about how it should look at least at a first level of decomposition. Think about what do you need besides functionality: high performance?, extensibility scenarios?, which ones?, usability goals?, high scalability?, ease of deployment and installability?, etc. Ask yourself: What components I will have to build in order to achieve those architectural qualities?.

我发现很难开始构建一些东西,因为我不清楚它应该至少在第一级分解时看起来如何。想想除了功能之外你还需要什么:高性能?,可扩展性场景?,哪些?,可用性目标?,高可扩展性?,易于部署和可安装性等等。问问自己:我将需要构建哪些组件实现那些建筑品质?

And don't get me wrong, I'm a strong proponent of agile software development. You don't need to spend a lot of times designing your architecture (because it surely will have to evolve as you build and get feedback about what works and what doesn't), but having a blueprint of how to build your product based on its architecture should be useful in for planning your progress and setting realistic goals.

并且不要误解我,我是敏捷软件开发的坚定支持者。您不需要花费大量时间来设计您的架构(因为它肯定会随着您构建并获得有关哪些有效和哪些无效的反馈而发展),但有一个基于如何构建产品的蓝图它的架构应该有助于规划您的进度和设定现实的目标。

#5


3  

Define the goal for the project. Sounds like you are looking almost exclusively at the solution rather than the problem.

定义项目的目标。听起来你几乎只关注解决方案而不是问题。

A program isn't useful to you or anyone else unless it addresses some problem. Writing code to get moving is great, but you appear to lose interest and focus after you start -- because you're looking at the code, not the problem.

程序对您或其他任何人都没用,除非它解决了一些问题。编写代码以获得移动是很好的,但是在你开始之后你似乎会失去兴趣和专注 - 因为你在看代码,而不是问题。

Spend some time considering what led you to write this code. Ponder how other people might discover the same need, what path might take them to the same frustration you worked to solve.

花一些时间考虑是什么导致你编写这段代码。思考其他人如何发现同样的需求,他们可能会采取什么样的方式来解决你所解决的同样的挫败感。

Then, find some of those people and offer your (partial) solution, and you'll generate interest and suggestions among them all.

然后,找到其中一些人并提供您的(部分)解决方案,您将在他们之间产生兴趣和建议。

THAT will keep you going on your project. The fellow interest, the sharing, even the disagreements -- it's people who need software! Don't create solutions (software) looking for a problem (people). You started with YOU, with your need or desire, but focused on the code, and lost the impetus for the project.

这会让你继续你的项目。同情,分享,甚至是分歧 - 这是需要软件的人!不要创建寻找问题的解决方案(软件)(人)。你从你的需要或愿望开始,但是专注于代码,并失去了对项目的推动力。

Programming's a lot more fun when you're problem-solving. But you need to keep the problem in front of you. Sharing the problem builds community. That's what this is really all about, isn't it?

当您解决问题时,编程会更有趣。但是你需要把问题摆在你面前。共享问题构建社区。这才是真正的全部,不是吗?

#6


2  

For my own personal projects I just dive right in. Of course, none of these have yet been sufficiently large as to require any sort of pre-planning. If this is going to be a serious project or a relatively large scale, it is always a good idea to flush out at least what each part of the program needs to do and a high level view of how they will do it.

对于我自己的个人项目,我只是潜入。当然,这些都没有足够大,需要任何形式的预先计划。如果这将是一个严肃的项目或相对较大的规模,最好至少清除程序的每个部分需要做的事情以及如何做到这一点的高级别视图。

#7


2  

Like the others, my personal projects always have:

和其他人一样,我的个人项目总是:

  • A Final Goal
  • 最终目标

  • A Task List
  • 任务列表

  • Small usable units
  • 小可用单位

  • Source control

As an additional motivator, I try to use a technology that I have never used before. Learning something new generally becomes the largest motivator for me.

作为额外的动力,我尝试使用我以前从未使用过的技术。学习新东西通常会成为我最大的动力。

#8


2  

Easy - don't start at all projects you're likely to lose interest in. Spend more time to make sure you want to commit yourself to an idea before beginning any work.

容易 - 不要在你可能会失去兴趣的所有项目上开始。花更多的时间来确保你在开始任何工作之前想要自己的想法。

#9


1  

It depends on the project - how big is it?

这取决于项目 - 它有多大?

If I'm writing the next Notepad clone I might just dive in, if I wanted to roll my own operating system it'd take a lot more non-coding work.

如果我正在编写下一个记事本克隆,我可能只是潜入,如果我想推出自己的操作系统,则需要更多的非编码工作。

I like to do a lot of diagrams, the tool I use for most development is clean A4 paper and a pencil. Draw out the UI, workflow, basic classes, and how you're going to store any data - then the coding is just a computer readable way of writing what you drew already.

我喜欢做很多图表,我用于大多数开发的工具是干净的A4纸和铅笔。绘制UI,工作流,基本类以及如何存储任何数据 - 然后编码只是一种计算机可读的方式来编写您已经绘制的内容。

Source control le.g. SVN is a couple of keystrokes/clicks, so the overhead is low and the benefit is high, its handy to try stuff and just revert to an earlier state if they don't work.

来源控制le.g. SVN是几次击键/点击,所以开销很低,效益很高,它可以很方便地尝试一些东西,如果它们不起作用,只需恢复到早期的状态。

Then just make the most basic protoype that will work - once something is actually going it is much easier to get enthused and add more. If it is overwhelming I'll find I think the problem is solved in my head, and thats enough.

然后只需制作最基本的原型 - 一旦实际发生了事情,就会更容易激发并添加更多内容。如果它是压倒性的,我会发现我认为问题在我脑海中解决了,这就足够了。

#10


0  

First plan out the basic outline of the final application. Most important features, basic GUI, program flow, etc. Then refine that so that you don't take on too much at first, remove unnecessary features, and add what else you want in the first version. Then use that outline to start a task list to create the smallest possible working version of your application. Then it's much easier to add extra features and make it fully functioning.

首先计划最终申请的基本纲要。最重要的功能,基本的GUI,程序流程等。然后进行优化,以便您不会过多地使用,删除不必要的功能,并在第一个版本中添加您想要的其他内容。然后使用该大纲启动任务列表,以创建应用程序的最小可能工作版本。然后,添加额外功能并使其完全正常运行要容易得多。

#11


0  

I like Maximillian's answer.. to expand a little, my person projects are developed to solve something I'm working on already. So when I get tired of repeat work I'll prototype a solution. and then use it. If Its similar enough to one of my earlier projects I'll borrow as much code as I can and try to improve the level of my work, make it more professional.

我喜欢马克西米利安的答案......为了扩展一点,我的人员项目的开发是为了解决我正在研究的问题。因此,当我厌倦了重复工作时,我将为解决方案制作原型。然后使用它。如果它与我早期的一个项目相似,我将尽可能多地借用代码并尝试提高我的工作水平,使其更专业。

Fusion's use of Source Control is important too. Takes 2 minutes to install SVN.

Fusion使用源代码控制也很重要。安装SVN需要2分钟。

#12


0  

If you want to turn it into a public open source project, Producing Open Source Software is supposed to be a good read (available both online and in print).

如果你想把它变成一个公共开源项目,那么生产开源软件应该是一个很好的阅读(在线和印刷都可用)。

#13


0  

If your personal project is similar to an existing open source project, you should consider contributing to that project instead. A couple of small contributions (bug fixes etc.) are more valuable than a half finished project.

如果您的个人项目与现有的开源项目类似,则应考虑为该项目做出贡献。一些小的贡献(错误修复等)比半完成的项目更有价值。

#14


0  

All of the above, but start to cement the plan in place.....

所有这些,但开始巩固计划.....

Go for some tools SmartSheet - even if you are working on your own you should set out some stages and dates yEd - and Graphity from www.yworks.com

寻找一些工具SmartSheet - 即使你自己工作,你应该设置一些阶段和日期yEd - 和图形来自www.yworks.com

#1


16  

The only thing that works for me: Create the smallest possible implementation of it that's somehow usable and then use it.

唯一对我有用的东西:创建一个可行的最小可能实现,然后使用它。

#2


11  

From 7 Habits of Highly Effective People, Habit 2: Begin with the End In Mind.

从高效人士的7个习惯开始,习惯2:从头脑开始。

With any project you need a clear goal, a point where you can say "I'm finished". A clear outcome will give you direction. Once you have that, you can start planning how to get there. The size and complexity of the project will determine how much detail your plan needs, but in general you'll want to feel your making progress against your plan quite regularly.

对于任何项目,您需要一个明确的目标,一个可以说“我已经完成”的点。明确的结果会给你指路。一旦你有了,你就可以开始计划如何到达那里。项目的规模和复杂程度将决定您的计划需要多少细节,但总的来说,您会希望定期感受到您的计划取得进展。

My next step is to sketch out a design of the modules that will be needed and the APIs between each module. If the APIs are clean then the modules are probably right. Then I start implementing the modules, testing as I go.

我的下一步是草拟出所需模块的设计以及每个模块之间的API。如果API是干净的,那么模块可能是正确的。然后我开始实施模块,随时进行测试。

#3


10  

I spend a lot of time thinking about the various aspects of the project before I even touch a keyboard.

在我触摸键盘之前,我花了很多时间考虑项目的各个方面。

I go through what I've learnt from previous projects and write it down in various categories ('technical', 'promotion', etc)

我将介绍我从以前的项目中学到的知识并将其写成各种类别(“技术”,“促销”等)

Personal project or not, I always set up source code control. Git, Mercurial of Bazaar are examples of source code control tools that are not intrusive because you do not need to set up a master server. Just type a simple command to create the project, check your files in, commit. In the future, when you mess up one of your files, you will be able to 'undo'

个人项目与否,我总是设置源代码控制。 Git,Bacurar的Mercurial是源代码控制工具的示例,它们不是侵入性的,因为您不需要设置主服务器。只需键入一个简单的命令来创建项目,检查您的文件,提交。将来,当你弄乱你的一个文件时,你将能够“撤消”

I also set up a lightweight ticket system to keep track of 1.issues and 2.ideas By "lightweight" I mean that if maintaining two text documents with these lists works for you, that's good enough.

我还设置了一个轻量级的票务系统来跟踪1.issues和2.ideas“轻量级”我的意思是如果用这些列表维护两个文本文档对你有用,那就足够了。

Hope this helps.

希望这可以帮助。

#4


3  

I agree with the already given advice of:

我同意已经给出的建议:

  • Planning a minimal implementation that does something useful as a first complete release.
  • 规划一个最小的实现,作为第一个完整版本做一些有用的事情。

  • Have concrete goals about what you want to achieve to have something to compare your progress with.
  • 针对您想要实现的目标制定具体目标,以便比较您的进度。

I would also recommend beginning with a lightweight design of you overall architecture so you can have a roadmap of how to build your product.

我还建议您从整体架构的轻量级设计开始,这样您就可以制定如何构建产品的路线图。

I find it difficult to start building something when I don't have a clear idea about how it should look at least at a first level of decomposition. Think about what do you need besides functionality: high performance?, extensibility scenarios?, which ones?, usability goals?, high scalability?, ease of deployment and installability?, etc. Ask yourself: What components I will have to build in order to achieve those architectural qualities?.

我发现很难开始构建一些东西,因为我不清楚它应该至少在第一级分解时看起来如何。想想除了功能之外你还需要什么:高性能?,可扩展性场景?,哪些?,可用性目标?,高可扩展性?,易于部署和可安装性等等。问问自己:我将需要构建哪些组件实现那些建筑品质?

And don't get me wrong, I'm a strong proponent of agile software development. You don't need to spend a lot of times designing your architecture (because it surely will have to evolve as you build and get feedback about what works and what doesn't), but having a blueprint of how to build your product based on its architecture should be useful in for planning your progress and setting realistic goals.

并且不要误解我,我是敏捷软件开发的坚定支持者。您不需要花费大量时间来设计您的架构(因为它肯定会随着您构建并获得有关哪些有效和哪些无效的反馈而发展),但有一个基于如何构建产品的蓝图它的架构应该有助于规划您的进度和设定现实的目标。

#5


3  

Define the goal for the project. Sounds like you are looking almost exclusively at the solution rather than the problem.

定义项目的目标。听起来你几乎只关注解决方案而不是问题。

A program isn't useful to you or anyone else unless it addresses some problem. Writing code to get moving is great, but you appear to lose interest and focus after you start -- because you're looking at the code, not the problem.

程序对您或其他任何人都没用,除非它解决了一些问题。编写代码以获得移动是很好的,但是在你开始之后你似乎会失去兴趣和专注 - 因为你在看代码,而不是问题。

Spend some time considering what led you to write this code. Ponder how other people might discover the same need, what path might take them to the same frustration you worked to solve.

花一些时间考虑是什么导致你编写这段代码。思考其他人如何发现同样的需求,他们可能会采取什么样的方式来解决你所解决的同样的挫败感。

Then, find some of those people and offer your (partial) solution, and you'll generate interest and suggestions among them all.

然后,找到其中一些人并提供您的(部分)解决方案,您将在他们之间产生兴趣和建议。

THAT will keep you going on your project. The fellow interest, the sharing, even the disagreements -- it's people who need software! Don't create solutions (software) looking for a problem (people). You started with YOU, with your need or desire, but focused on the code, and lost the impetus for the project.

这会让你继续你的项目。同情,分享,甚至是分歧 - 这是需要软件的人!不要创建寻找问题的解决方案(软件)(人)。你从你的需要或愿望开始,但是专注于代码,并失去了对项目的推动力。

Programming's a lot more fun when you're problem-solving. But you need to keep the problem in front of you. Sharing the problem builds community. That's what this is really all about, isn't it?

当您解决问题时,编程会更有趣。但是你需要把问题摆在你面前。共享问题构建社区。这才是真正的全部,不是吗?

#6


2  

For my own personal projects I just dive right in. Of course, none of these have yet been sufficiently large as to require any sort of pre-planning. If this is going to be a serious project or a relatively large scale, it is always a good idea to flush out at least what each part of the program needs to do and a high level view of how they will do it.

对于我自己的个人项目,我只是潜入。当然,这些都没有足够大,需要任何形式的预先计划。如果这将是一个严肃的项目或相对较大的规模,最好至少清除程序的每个部分需要做的事情以及如何做到这一点的高级别视图。

#7


2  

Like the others, my personal projects always have:

和其他人一样,我的个人项目总是:

  • A Final Goal
  • 最终目标

  • A Task List
  • 任务列表

  • Small usable units
  • 小可用单位

  • Source control

As an additional motivator, I try to use a technology that I have never used before. Learning something new generally becomes the largest motivator for me.

作为额外的动力,我尝试使用我以前从未使用过的技术。学习新东西通常会成为我最大的动力。

#8


2  

Easy - don't start at all projects you're likely to lose interest in. Spend more time to make sure you want to commit yourself to an idea before beginning any work.

容易 - 不要在你可能会失去兴趣的所有项目上开始。花更多的时间来确保你在开始任何工作之前想要自己的想法。

#9


1  

It depends on the project - how big is it?

这取决于项目 - 它有多大?

If I'm writing the next Notepad clone I might just dive in, if I wanted to roll my own operating system it'd take a lot more non-coding work.

如果我正在编写下一个记事本克隆,我可能只是潜入,如果我想推出自己的操作系统,则需要更多的非编码工作。

I like to do a lot of diagrams, the tool I use for most development is clean A4 paper and a pencil. Draw out the UI, workflow, basic classes, and how you're going to store any data - then the coding is just a computer readable way of writing what you drew already.

我喜欢做很多图表,我用于大多数开发的工具是干净的A4纸和铅笔。绘制UI,工作流,基本类以及如何存储任何数据 - 然后编码只是一种计算机可读的方式来编写您已经绘制的内容。

Source control le.g. SVN is a couple of keystrokes/clicks, so the overhead is low and the benefit is high, its handy to try stuff and just revert to an earlier state if they don't work.

来源控制le.g. SVN是几次击键/点击,所以开销很低,效益很高,它可以很方便地尝试一些东西,如果它们不起作用,只需恢复到早期的状态。

Then just make the most basic protoype that will work - once something is actually going it is much easier to get enthused and add more. If it is overwhelming I'll find I think the problem is solved in my head, and thats enough.

然后只需制作最基本的原型 - 一旦实际发生了事情,就会更容易激发并添加更多内容。如果它是压倒性的,我会发现我认为问题在我脑海中解决了,这就足够了。

#10


0  

First plan out the basic outline of the final application. Most important features, basic GUI, program flow, etc. Then refine that so that you don't take on too much at first, remove unnecessary features, and add what else you want in the first version. Then use that outline to start a task list to create the smallest possible working version of your application. Then it's much easier to add extra features and make it fully functioning.

首先计划最终申请的基本纲要。最重要的功能,基本的GUI,程序流程等。然后进行优化,以便您不会过多地使用,删除不必要的功能,并在第一个版本中添加您想要的其他内容。然后使用该大纲启动任务列表,以创建应用程序的最小可能工作版本。然后,添加额外功能并使其完全正常运行要容易得多。

#11


0  

I like Maximillian's answer.. to expand a little, my person projects are developed to solve something I'm working on already. So when I get tired of repeat work I'll prototype a solution. and then use it. If Its similar enough to one of my earlier projects I'll borrow as much code as I can and try to improve the level of my work, make it more professional.

我喜欢马克西米利安的答案......为了扩展一点,我的人员项目的开发是为了解决我正在研究的问题。因此,当我厌倦了重复工作时,我将为解决方案制作原型。然后使用它。如果它与我早期的一个项目相似,我将尽可能多地借用代码并尝试提高我的工作水平,使其更专业。

Fusion's use of Source Control is important too. Takes 2 minutes to install SVN.

Fusion使用源代码控制也很重要。安装SVN需要2分钟。

#12


0  

If you want to turn it into a public open source project, Producing Open Source Software is supposed to be a good read (available both online and in print).

如果你想把它变成一个公共开源项目,那么生产开源软件应该是一个很好的阅读(在线和印刷都可用)。

#13


0  

If your personal project is similar to an existing open source project, you should consider contributing to that project instead. A couple of small contributions (bug fixes etc.) are more valuable than a half finished project.

如果您的个人项目与现有的开源项目类似,则应考虑为该项目做出贡献。一些小的贡献(错误修复等)比半完成的项目更有价值。

#14


0  

All of the above, but start to cement the plan in place.....

所有这些,但开始巩固计划.....

Go for some tools SmartSheet - even if you are working on your own you should set out some stages and dates yEd - and Graphity from www.yworks.com

寻找一些工具SmartSheet - 即使你自己工作,你应该设置一些阶段和日期yEd - 和图形来自www.yworks.com