43

这就是我想知道的。每天晚上,当我们 3 个月大的宝宝让我们睡觉时,我都会跳到电脑前,开始编写我的爱好项目。我正在从事大约 20 个不同的项目:不同类型的项目,从 C++ 游戏到 Web 应用程序以及对开源项目的一些贡献。这确实是一种激情,并且已经持续了很多年。

然而,当我回头看时,我发现我还没有完全完成我的一个爱好项目。我一直都在做原型并设置最重要的功能,但随着时间的推移,我最终没有完成我的项目,而是切换到另一个目前看起来“更酷”的项目。因此,我通常会得到没有结局和故事的错误和不完整的游戏,拥有有史以来最快的 PolygonDraw 例程的 3D 引擎,但缺乏实现其他任何东西,等等......这个列表很长。我想我一定已经写了一百多次不同的未完成的乒乓球!

有人告诉我,补救办法是为我的爱好项目编写规范。

一方面,我在工作中写了很多规范。我知道它们对于定义产品的路线图和按时完成是多么重要。另一方面,规格和爱好项目似乎完全不符合!在我看来,构建游戏的学习曲线实际上是让它变得有趣的原因。不是游戏本身。因此,浪费时间重组整个引擎的乐趣,创造最无用功能的乐趣,等等......

那么问题来了:你有没有为你的爱好项目写过规范?他们与工作中的人有何不同?你是如何完成你的爱好项目的?

当我在做我的新项目时,我很高兴知道:钢琴奏鸣曲发生器 :)

4

23 回答 23

16

我不认为编写规范是解决您问题的方法。显然,你的“爱好项目”是你觉得有趣的事情。您编写有趣的部分,然后避免完成某些事情所必需的不有趣的部分。

如果你只是“为了好玩而编程”,那很好,你就成功了。我不认为编写规范很有趣。

如果你真的想“完成”某件事,最好的方法不是写规范,而是当有趣因素下降时不要跳到另一个项目。

于 2009-06-18T20:07:00.570 回答
13

这完全是关于“自我项目管理”......即使是为了好玩。

我对你有感觉……我曾经有很多回购协议都倾向于卡在 200 左右的修订版上。

这是过去发生的事情,因为我没有做足够的计划,在大约 200 次提交之后,事情变得一团糟,需要重写……然后兴趣就消失了,因为这似乎太麻烦了。

我学会了编写自己的规格供个人使用

  1. 让我专注于完成工作,而不是进入功能蠕变通道
  2. 提醒我正在努力的方向
  3. 在我开始编码之前有好的想法
  4. 让事情更有趣更长时间

对我来说,编写自己的规范对于完成任何事情都至关重要!

没有计划就不会创业吧?

对于个人项目,我有大量的 moleskine 书籍,里面充满了粗略的规格和想法。当它们成熟时,它们会从笔记本迁移到真实的文档中,然后开始编码。

大编辑:为了提高个人效率并完成项目。我读过“把事情做好” ……尽管关于“心理”和不同层次的思想(我确信这不是基于任何科学)的所有嬉皮士废话,但这些技巧非常好。

于 2009-06-18T20:05:01.120 回答
7

我不会太复杂,但列出您希望包含在应用程序中的所有功能和要求确实会有所帮助。与大多数爱好项目一样,您通常不只是坐下来直接编写代码 2 个月并完成它们。这里是一个小时,那里是两个小时,等等。基本上,忘记你最后在做什么以及这个应用程序的超级好主意的最初目的是什么是很常见的。

如果您花几个小时写下规格和要求,那么这对您在 6 个月后获得一些空闲时间或您的 ADD 切换到该项目并尝试记住它应该做什么时将非常有价值。

于 2009-06-18T20:05:12.273 回答
6

我最近才发现,编写规范确实是我完成项目所需要的。

我有点像你,有很多项目,从一个跳到另一个,从来没有完成过。直到大约 6 个月前,当我开始实际编写规范并为我的项目制定路线图时。

我只能说,它确实有效,因为您将项目分成更小的步骤,就像与检查点的比赛一样,当您开始将检查点标记为完成时,感觉很好,令人上瘾,您的注意力将集中在终点线。

这样,您只能同时保留 1 或 2 个项目,但实际上完成了它们。当然,即使您大约一个月或更长时间不碰它,您也可以获得额外且非常有价值的奖励来跟上该项目。规范将始终提醒您项目的目标和目的。

这只是我的个人经验,我相信你应该试一试。希望它也能为你锻炼。

于 2009-06-18T20:11:01.747 回答
4

我已经能够做一些爱好项目并完成其中一些。我试图完成所有这些,但有些我无法召集。

我认为的原因是完成一个项目所需的细节太多,以至于它从一个热情的项目变成了一个杂务。

帮助我完成大部分工作的是,他们一直保持热情,直到最后的润色结束。所以我只是穿过它们。

规范会有所帮助吗,在某种程度上是的。他们让你更深入地了解项目,但几乎总是会有激情消退的时候,你会寻找下一个闪亮的对象。

于 2009-06-18T20:17:27.397 回答
4

它对我不起作用!事实上,每当我编写规范时,我通常都会让项目变得更大,并且不太可能完成。

有时最好的方法就是去做。

泽弗兰克对此的解释比我好得多: http ://www.zefrank.com/theshow/archives/2006/07/071106.html (带有脏话的视频链接)

编辑:只是补充。如果你发现你想离开你半成品的项目去寻找一个新的、伟大的想法......去做吧!不要回头!

完成不是您自己的宠物项目的要求。没有人会责怪你没有完成几乎没有人会费心开始的事情。

你开始的原因是因为热情。这是非常重要的。你不应该强迫自己在空闲时间“坚持到底”。你会耗尽你的激情,这是你最重要的资源。

于 2009-06-18T20:37:26.360 回答
2

完成它们吗?

我认为永远不会完成一个爱好项目是合理的。只要你活着,你就可以继续努力。Aciddose 多年来一直在研究他的虚拟乐器xhip ,但一直没有达到 1.0,这使得人们编写的乐器补丁从一个版本到下一个版本都毫无价值。然而,他和他的软合成器的用户似乎玩得很开心。

也许如果你只瞄准“发布”而不是“完成”,你会更满意。Beta让你继续梦想。

于 2009-06-18T21:18:38.773 回答
2

我所发现的帮助完成的最好的事情就是让其他人与您一起完成该项目。找一个(或两个)对相同事物感兴趣的朋友并与他们一起设计/编码。你不仅有人可以提出想法,而且还有人可以激励你,更不用说进步速度是两倍,所以你希望在放弃之前完成:)

当然,它需要源代码控制,但您已经在项目中使用它,对吧?:)

于 2009-06-18T21:10:17.743 回答
2

我通常在开始时编写第一组规范。

我也是纸质思维的忠实粉丝,所以我会画屏幕、UML、图表、流程图、设计元素……这只是定义你的项目范围并能够看到你所拥有的东西的问题头脑。它真的帮助我思考。

这些文件将是我对整个项目的规范。我会在我去的时候添加其他的,但我并没有像我希望的那样去维护旧的,这是一个工作项目:我知道我要去哪里,我可以跟踪我的变化代码。

当然,我的一些爱好项目是合作完成的。在这些情况下,我会写下更多规范,以便与我的团队进行更好的沟通,并尝试使数据库图等文档保持最新。

于 2009-06-18T20:06:11.837 回答
2

我还有几个爱好项目还没有完成。我有大约 10 个,并且已经为其中一个编写了规范,范围最大(也是一个游戏)。

我还没有完成没有规格的,也没有完成的。我认为这是因为我从不发布作品或向任何人展示它,所以它仍然充满错误并且从未“完成”。

我想这意味着不管你有没有规范,它不会像其他因素那样影响项目的成功,比如有时间、有动力、有帮助和有信心。

于 2009-06-18T20:06:56.467 回答
1

是和不是。我一边思考一边在笔记本上写笔记,并在实施时添加笔记。这与其他人可能必须查看规范的工作项目有些不同。

我完成了大约一半的开始。

于 2009-06-18T20:04:36.160 回答
1

我帮助开发了一系列系统,从安全关键的航空电子设备到像数独求解器这样的一次性个人项目。显然,对于航空电子系统,规范对于系统的安全运行和防止杀人至关重要,但我从不为我的个人项目而烦恼。

我认为这是因为规范通常读起来很无聊。Joel 写了一篇关于这个的有趣文章,以及如果你写它们如何让它们变得更好:

无痛功能规格

不幸的是,我还没有勇气尝试让我的规范在工作中阅读起来更有趣。

也许除了编写规范之外,您应该尝试为其他人或与其他人一起做一些项目?这可以提供一些外部动力。我为表弟在剧院里开车做一些网络开发,如果他们需要一个功能,他们会在我完成之前不停地询问我。

于 2009-06-18T20:39:44.530 回答
1

我能给你的最大的一条建议就是拿出一些东西——让你的第一个版本的规范足够小,以至于你真的觉得你可以完成它,即使它几乎没有你想要的所有功能。

一旦你得到了一些东西,来自你的软件用户的压力将足以让你继续坚持下去。它还确保您在开发中采用的方向与您的用户希望您走的方向相同。

如果您实际上没有获得任何用户,那么放弃该项目也不要太难过——如果没有人感兴趣,那么它可能不值得追求。

如果来自用户的压力不足以让你保持专注,那就开源吧。如果对它有足够的兴趣,其他人会从你停下来的地方继续它,你可以自由地继续做更大更好的事情。

于 2009-06-18T20:47:07.633 回答
0

Short answer: developing specifications for a hobby project is neither necessary nor sufficient to guarantee completion.

That being said...

I keep an engineering notebook for all of my personal projects. I use the notebook to capture all sorts of things about the projects on which I work. This includes project motivation, valuable resources leveraged during the project, things developed over the course of the project that might potentially be reused later, key insights gained, etc. etc. It also includes, more to your question, specifications for most of the projects. I employ an agile/lean approach to creating these specifications which, for me, is compelling from a cost/benefit perspective.

btw...I have many, many personal projects that did not culminate in a complete working system. Some of these I might get around to completing 'someday maybe'. I consciously chose to stop working on some of the others because they had served their purpose (e.g. introduced me to a new technology, helped me better understand a language feature, etc.) Continuing to crank away at projects like these would have led to diminishing returns so I chose to reallocate my time to projects I felt were higher leverage.

于 2009-06-18T20:21:14.643 回答
0

Unfortunately, after writing specs for the core of the DIFL engine (don't bother looking it up, as there's no trace of it outside my home systems), I still didn't finish it up.

于 2009-06-18T20:31:13.983 回答
0

我不确定编写规范是否可以解决您的问题(或我的问题似乎相似),但是在我想做的不仅仅是一次性实验的情况下,有一些事情可以稍微帮助我而不会带来乐趣其中。

规格确实非常严格,应该是技术性的,但对于一种爱好方法,你可以写一些类似的更宽松的东西,概述你想要展示的一些东西,并展示它们如何在某种设计草案中组合在一起. 尽管不像适当的规范那样详细或限制性强,但它可能有助于使修补工作朝着正确的方向发展。

其次,您可以将其分解并根据您的时间余量添加一些目标。如果您专注于构建项目的一部分,将其分解为最终可以链接在一起的子项目,它给人一种感觉当你从一个部分移动到另一个部分时取得进步,而不是感觉你多年来一直在做同样的事情并且不能再被打扰了。如果您在清单上勾选它,它就会起作用,因为通常它至少必须在精神上发生。

这么说,如果您的目标是玩某些概念而不是实际创建最终产品,那么您可能不会这样做,因为您没有朝着它努力。一种方法可能是采用上述想法,将其分解,然后找到一种方法,在每个让您感到厌烦的部分中添加一些个人有趣的东西,也许尝试在其中添加挑战之类的东西。

我仍然没有特别的学习经验,但这就是我保持修补的方式(有时除非我因缺乏经验而完全陷入困境),以及在过去几年中,我如何以业余爱好接触许多多媒体和网络项目。虽然当你感到无聊时说开源它并让其他人接受它的人,但如果你想看到你的代码被使用但满足你的个人目标,那是一个好主意。

于 2009-06-18T22:38:36.707 回答
0

Joel 关于基于证据的调度的文章对我有用。虽然我以不同的方式实现它。

这个想法是将项目分解为小任务并给出估计,然后根据完成的任务完成它们所花费的时间来预测你的项目何时完成。

您可能认为您的项目需要数年才能完成,但实际上估计只需两个月或更短的时间。如果您工作更多并快速完成任务,您会看到完成日期提前。

我认为最能激励你前进的事情就是看到你跑向的目标越来越近。

另外:创造一些你以后会用到的东西。使用东西可以激励你以后改进它。

于 2013-04-15T16:01:46.663 回答
0

真正的问题是:你的爱好是什么?是完成一个项目,还是修修补补。如果最后十码是一件苦差事,你必须决定这对你来说是否值得。编写详细的规格将起作用;如果你喜欢这种自律,那么自责也会如此。如果它不利于你的化妆,没有什么能让事情变得容易,所以你必须决定最终目标对你来说是否值得。

而且,只是为了证明这一点与编程无关,您可能真的很喜欢这个人。他作品中的一个要点是,毕加索和达芬奇等概念艺术家从不真正关心最终的执行——想法就是一切,而且,在断言它之后,他们奇怪地满足于其他人完成实际工作或留下未完成和未发表的草图。

于 2009-06-18T21:29:15.943 回答
0

我有很多同样的问题。我注意到的一件事有帮助,就是降低了我的野心。像WAY WAY一样低。如果您对规范有某种限制规则,例如“规范只能是一页”,或者“规范不能超过 300 字”,那么编写规范是实现抱负的一种方式,或者“只指定我可以在一天的编码中完成的事情”。保持平衡可能需要一些练习。如果您使用最后一个限制,如果您无法在一天内完成,您可以强制执行该项目的强制解雇规则。

这样做的好处是,它将您限制在可实现的目标上。起初这听起来可能很愚蠢或错误。又或许这听起来很合理,但你就是忍不住,你想做惊人的事情,而不是平凡的事情!不小的事情,你只能在几个小时内完成!

但请记住这一点:

“一个有效的复杂系统总是被发现是从一个有效的简单系统演变而来的。相反的命题似乎也是正确的:从零开始设计的复杂系统永远不会工作,也不能让它工作。你必须重新开始,从一个工作简单的系统开始。”</p>

——约翰·加尔

如果您已经有一个 FINISHED 和 WORKING 项目可以作为它的基础,那么制作这个雄心勃勃的项目会容易得多。那么“更复杂的事情”可以是一个适合一天的项目。这是我正在努力的理想和理念,因为我认为它最有可能成功。回顾过去成功的项目,无论是有意还是无意,绝大多数都是以这种方式发展的。

于 2009-06-19T00:37:36.203 回答
0

我的大多数爱好项目也没有真正完成。只要我在做某事并学习,尽管我认为那不是问题。目前我没有写规范,但我正在练习/培训 TDD。我在编写规范的测试时提出了它。有时我会坐下来创建一堆测试,概述软件应该做什么。有时我会让这些测试通过。令人愉快的是,我不必将所有代码都记在脑海中,并且在任何时候我都可以坐下来通过修复损坏的测试来取得进一步的进展。一切正常,有点超现实。

于 2009-07-23T16:48:16.297 回答
0

在工作、大学和业余时间,我不断为我的项目编写规范。程序员最大的弱点是他/她的记忆力,所以我发现通过将我的每一个想法写成某种结构化文档来让自己在思考时间保持忙碌是件好事。在不知不觉中,您已经编写了完整的数据库模式或拥有需求规范。

目前,我正在努力提高我的 SQL 技能,并且在写下我的经验的查询之间花费了很多空闲时间。经过几次调整后,我得到了一份体面的文件,概述了需要做的事情。

于 2009-06-24T10:21:15.117 回答
0

我认为核心问题不是缺乏规范,而是完成某件事(任何事情)都很难

这是一项艰苦的工作。看起来你的程序已经完成了 90%。但是完成最后 10%(消除所有错误、让应用程序发布质量、编写文档等)需要与前 90% 一样多的工作。如果你想认真地营销你的程序,回复支持电子邮件,修复其他人的错误,那还有更多的工作。也许不是你最感兴趣的工作。

精神上也很辛苦。未完成的项目具有无限的潜力。这是一块空白的画布,你可以在其中投射出你肆无忌惮的野心、崇高的理想和革命思想。一旦它完成并成为现实,你必须看看它是什么。有限的。有缺陷的。从来没有像产生它的想法那样漂亮。

也就是说,完成某事也可以是非常有益的。你学到很多东西,对你的想法进行现实检查,完成某件事的满足感,你可以看到其他人对你的工作的看法。

一些忠告:

  • 确保你真的想要完成这个项目。即,奖励是值得所有辛勤工作的。(如果不是,那么接受这个事实并保持一个快乐的修补匠。)

  • 通过“无聊”的部分找到激励自己的方法。规格,也许,如果它让你专注。但是找到适合你的东西,无论是待办事项的滴答声、用饼干犒赏自己还是梦想成名和财富。

  • 尽早发布,经常发布。您为“大版本”保存的越多,该版本永远不会发生的机会就越大。

  • 先发布,再重写。当您有进行重大重写的冲动时,请先发布,然后再进行重写(如果您仍然准备好的话)。软件从来都不是完美的。如果您在没有任何压力发布半生不熟(但现有)的代码的情况下力求完美,那么您将永远不会完成。

于 2009-06-30T11:38:37.513 回答
0

对我有很大帮助的是将新功能拆分为小任务,每个小任务都可以在晚上的黑客会议中完成。因此,如果我有时间,我只需从列表中选择一项任务并完成它。这通常足以“融入其中”并“再做一次”。

我一次只为一个功能这样做,这样我就不会被我可以添加到我的应用程序中的所有其他很酷的东西分散注意力。

于 2009-06-19T09:52:17.940 回答