关于不可知的语言:编写针对业余项目的规范是完成它们的唯一方法吗?

Is writing specifications for hobby projects the only way for them to be finished?

这就是我想知道的。我们三个月大的婴儿每天晚上睡觉时,我都会跳到计算机上并开始为自己的爱好项目编码。我正在从事大约20个不同的项目:不同类型的项目,从C ++游戏到Web应用程序,以及对开源项目的一些贡献。这确实是一种激情,已经存在很多年了。

但是,当我回头看时,我发现我还无法完全完成我的一项爱好项目。我一直都做完原型并设置了最重要的功能,但是随着时间的流逝而不是完成我的项目,我最终切换到了另一个看上去"酷得多"的项目。因此,我通常会遇到无休止的故事车和残缺不全的游戏,没有PolygonDraw例程最快的3D引擎,却缺乏实现其他任何东西的能力,等等??。我想我写的未完成Pong肯定有一百多次不同!

有人告诉我,补救措施是为我的爱好项目编写规格。

一方面,我在工作中编写了许多规范。我知道它们对于定义产品路线图并保持进度至关重要。另一方面,规格和爱好项目似乎并没有实现!在我看来,构建游戏的学习曲线实际上是使游戏变得有趣的原因。不是游戏本身。因此,浪费时间来重组整个引擎的乐趣,创建最无用的功能的乐趣等等……

因此,出现了一个问题:您是否曾经为自己的爱好项目编写规范?他们和上班的人有什么不同?您如何管理自己的爱好项目?

在进行新项目时,我会很高兴知道:钢琴奏鸣曲生成器:)


我认为编写规范不是解决您的问题的方法。显然,您的"爱好项目"是您发现有趣的事情。您编写有趣的部分,但要避免完成某些事情所必需的不有趣的部分。

如果您只是"为了娱乐而编程",那很好,那就成功了。我认为编写规范并不有趣。

如果您真的想"完成"某件事,最好的方法不是编写规范,而是在乐趣系数降低时不要跳到另一个项目。


一切都是关于"自我项目管理"的……甚至很有趣。

我为您感到...我以前有很多回购,这些回购往往都卡在200左右的修订版中。

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

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

  • 让我专注于完成工作,而不要进入功能蠕变通道
  • 提醒我我正在努力
  • 在获得编码之前先有好主意
  • 让事情变得更有趣更长的时间
  • 对我来说,编写自己的规范对于完成任何事情都至关重要!

    如果没有计划,您将不会创业?

    对于个人项目,我有一堆充满粗糙规范和想法的moleskine书。当他们成熟时,他们便从便笺簿迁移到真实文档中,并开始编码。

    大编辑:着力提高个人效率并完成项目。我读了"做完事情"……尽管关于"心理"和各种心理水平的嬉皮话都令人讨厌(我确信这不是任何科学基础),但这些技巧还是非常好的。


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

    如果您花几个小时写下规格和要求,那么在您获得一些空闲时间或您的ADD切换到该项目并试图记住要执行的操作的六个月后,这对您来说非常有价值。


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

    我有点像您,进行了大量项目,从一个项目跳到另一个项目,却从未完成。直到大约6个月前,当我开始编写规范并为我的项目制定路线图时。

    我能说的是,它实际上是有效的,因为您将项目分成较小的步骤,就像与检查点赛跑一样,并且当您开始将检查点标记为完成时,它会感觉很好,令人上瘾,并且您将专注于终点线。

    这样,您只能同时保留1个或2个项目,但实际上可以完成它们。当然,即使您大约一个月或更长时间没有接触该项目,您也可以获得与项目保持同步的额外而宝贵的奖金。规格将始终存在,以提醒您项目的目标和目的。

    这只是我的个人经历,我相信您应该尝试一下。希望它也会为您锻炼。


    它对我不起作用!实际上,每当编写规范时,我通常都会使项目变得更大,并且完成的可能性也较小。

    有时,最好的方法就是做到。

    Ze Frank比我解释得更好:
    http://www.zefrank.com/theshow/archives/2006/07/071106.html(带有咒骂的视频链接)

    编辑:只是添加。如果您发现要离开半完成的项目以寻求新的宏伟构想,那就去做吧!不要回头!

    您自己的宠物项目不需要完成。没有人会责怪您没有完成几乎没有其他人会开始的工作。

    您开始的原因是因为热情。那很重要。您不应强迫自己在闲暇时间"穿梭"。您将耗尽激情,这是您最重要的资源。


    我已经能够做一些业余爱好项目并完成其中一些。我尽力完成所有任务,但有些任务我不能召集。

    我认为这是因为完成一个项目所需的详细信息如此之多,以至于它从热情的项目到繁琐的项目。

    让我完成大部分任务的是,他们保持了热情直到剩下最后的修饰。所以我只是耕种他们。

    规范会有所帮助,某种程度上是可以的。它们使您更进一步地进入该项目,但几乎总会在某个地方消逝激情,然后寻找下一个闪亮的对象。


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

    我也是纸上思维的忠实拥护者,因此我将绘制屏幕,??UML,图表,流程图,设计元素...这仅是定义项目范围并能够查看您所拥有的内容的问题心神。它确实帮助我思考。

    这些文档将是我对整个项目的要求。我会随时添加其他人,但是我并没有尽力维护旧的东西,因为那是一个工作项目:我知道我要去的地方,并且可以跟踪我的更改码。

    当然,我的一些业余项目是协作完成的。在这些情况下,我会写下更多的规范,以便与团队更好地沟通,并尝试使诸如DB Diagrams之类的文档保持最新。


    我还有几个尚未完成的爱好项目。我大约有10个人,并为其中的一个撰写了规范,范围最大(也是游戏)。

    我没有完成没有规格的产品,也没有完成。我认为这是因为我从未发布过作品或向任何人展示它,因此它仍然充满错误且从未完成。

    我想这意味着,无论您是否有规格,它对项目成功的影响不会像其他因素那样多,例如拥有时间,动力,帮助和信心。


    你想完成他们吗?

    我认为永远不要完成一个业余项目是合理的。只要您活着,就可以继续努力。 Aciddose多年来一直致力于他的虚拟仪器Xhip的开发,固执地从未达到1.0,这使得人们从一次发行到下一次发行所编写的仪器补丁一文不值。然而,他和他的软合成器用户似乎过得很愉快。

    也许如果您只是希望"发布"而不是"完成",您会更加满意。 Beta版让您不断梦想。


    我找到的最有助于完成工作的最好的事情就是让其他人与您一起工作。找一个(或两个)对同一事物感兴趣的朋友,并与他们一起设计/编码。您不仅可以激发别人的想法,而且还可以激发别人的动力,更不用说进步的速度快一倍,因此希望您在放弃之前能完成:)

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


    是的,没有。我在考虑时在笔记本中写笔记,并在实现时将其添加到笔记本中。这与工作项目有些不同,在工作项目中,其他人可能必须查看规范。

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


    我可以给您的最大建议是,使您的产品物有所值-使第一个版本的规格足够小,即使您几乎没有想要的所有功能,也可以实际完成。

    一旦您找到了解决方案,来自软件用户的压力将足以使您继续前进。它还可以确保您进行开发的方向与用户希望您去的方向相同。

    如果您实际上没有得到任何用户,那么对于放弃该项目就不会感到那么难-如果没有人感兴趣,那么可能就不值得追求。

    如果来自用户的压力不足以吸引您的注意力,请开放源代码。如果对它有足够的兴趣,那么其他人会在您中断的地方继续使用它,您可以自由地去做更大更好的事情。


    从安全关键的航空电子设备到诸如Sudoku求解器这样的一次性个人项目,我都曾协助开发各种系统。显然,对于航空电子系统而言,规格对于系统的安全运行和防止他人丧命至关重要,但是我从来没有理会自己的个人项目。

    我认为这是因为规范通常无聊阅读和编写。乔尔(Joel)写了一篇有趣的文章,介绍了如何使它们变得更好:

    无痛功能规格

    不幸的是,我还没有胆量尝试使我的规范在工作中更有趣。

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


    Joel的有关基于证据的计划的文章对我有用。虽然我实施的方式有所不同。

    想法是将项目分解为小任务并给出估计,然后根据完成的任务完成项目的时间来预测项目的完成时间。

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

    我认为前进的最有动力的方法就是看到目标越来越接近您的目标。

    加:创建一些您以后将使用的东西。使用东西可以激励您以后进行改进。


    不幸的是,在为DIFL引擎的核心编写了规范之后(不要费心查找它,因为在我的家庭系统之外没有它的踪迹),我仍然没有完成它。


    简短的回答:既没有必要也不足以为一项爱好项目制定规格以保证其完成。

    话虽如此...

    我为所有个人项目保留了一个工程笔记本。我使用笔记本来捕获有关我所从事的项目的各种事情。这包括项目动机,在项目过程中利用的宝贵资源,在项目过程中开发的,可能在以后重用的东西,获得的重要见解等。它还包括(对于您的问题而言)大多数项目的规范。我采用敏捷/精益方法来创建这些规范,这对我来说,从成本/收益的角度来看很有吸引力。

    顺便说一句...我有很多个人项目,最终都没有一个完整的工作系统。其中一些我可能会完成"也许有一天"。我有意识地选择停止研究其他一些项目,因为它们已经达到了目的(例如,向我介绍了一项新技术,帮助我更好地理解了语言功能,等等。)继续推进此类项目可能会减少回报,所以我选择将时间重新分配给我觉得杠杆率更高的项目。


    真正的问题是:您的爱好是什么?是完成项目还是修补。如果最后十码很麻烦,那么您就必须决定是否值得。编写详细的规范将起作用;如果您喜欢这种自律,那么自我鞭will也将如此。如果不利于您的化妆,没有任何事情会变得容易,因此您必须确定最终目标对您是否有价值。

    而且,仅为了说明这一点没有针对特定编程的知识,您可能真的很喜欢这个人。他作品的主要观点之一是像毕加索和达·芬奇这样的概念艺术家从来没有真正关心过最终的执行过程-想法就是一切,并且断言,他们对完成实际工作的其他人感到满意或保留未完成和未发布的草图。


    我不确定编写规范是否可以解决您的问题(或者我的看起来很相似),但是在我想做的事情不只是一次性实验的情况下,有些事情可以对我有所帮助,而不会带来很多乐趣它的。

    规格确实很严格,应该是技术性的,但是对于一种业余爱好的方法,您可以写一些更宽松的类似内容,概述您要介绍的一些内容,并展示它们如何在某种设计草案中融合在一起。尽管不如适当的规范那么详细或严格,但可能有助于使修补工作保持正确的方向。

    其次,您可以分解它,并根据您的时间余量来添加一些目标。如果您专注于构建项目的一部分,而将其分解为可以最终链接在一起的子项目,则可以给人一种当您从一个部分移到另一个部分时会有所进步,而不是觉得自己已经从事相同的工作已有很长时间了,因此不再被打扰。如果您在列表上打勾,它会起作用,因为通常无论如何它至少必须在心理上发生。

    说这句话的时候,如果您的目标是运用某些概念而不是实际创建最终产品,那么您可能不会这样做,因为您没有为此而努力。一种方法可能是采用上面提到的分解方法,然后找到一种方法在每个让您感到厌烦的部分中添加一些个人感兴趣的东西,或者尝试向其中添加挑战。

    我并不是特别有经验的人仍然在学习,但这是我如何保持修补的技巧(有时,除非我因经验不足而完全陷入困境),以及过去几年我是如何以兴趣为基础来处理许多多媒体和Web项目的。尽管当您无聊时说开放源代码并让其他人捡起它的人,但是如果您想看到自己的代码已使用但已满足您的个人目标,那是个好主意。


    我有同样的问题。我注意到HAS有所帮助的一件事是降低了我的野心。像WAY WAY低。如果您对规范有某种限制规则,例如"规范只能是一页"或"规范不能超过300个字",那么编写规范是雄心勃勃的一种方式。"仅指定我可以在一天的编码中完成的工作"。保持平衡可能需要一些练习。如果您使用了最后一个限制,则可以在一天之内无法完成的情况下强制执行该项目。

    这样做的好处是,它将您限制在可以实现的目标之内。一开始听起来可能很愚蠢或错误。也许这听起来很合理,但是您无能为力,您想做的事情很棒,而不是普通的事情!不小的事情,您只能在几个小时内完成!

    但请记住:

    "A complex system that works is
    invariably found to have evolved from
    a simple system that worked. The
    inverse proposition also appears to be
    true: A complex system designed from
    scratch never works and cannot be made
    to work. You have to start over,
    beginning with a working simple
    system."

    约翰·加尔

    如果您已经有一个基于FINISHED AND WORKING的项目,那么进行这个雄心勃勃的项目非常容易。这样,"更复杂的事情"就可以成为一天之内的项目。这是我正在努力追求的理想和理念,因为我认为它有最大的成功机会。回顾过去的成功项目,无论是否有意,它们中的绝大多数都是以这种方式发展的。


    对我有很大帮助的是将一项新功能拆分为一些小任务,每个小任务都可以在晚上的hacksession中完成。因此,如果我有时间,我只需从列表中选择一项任务即可完成。这通常足以"顺其自然"并"再做一次"。

    我一次只针对一项功能执行此操作,因此我不会为我可以添加到应用程序中的所有其他出色功能而分心。


    我会在业余时间不停地为我的项目编写规范,无论是在工作,在大学还是在校外。程序员的最大弱点是他/她的记忆力,所以我觉得可以将自己的所有想法写下来成为某种结构化文档,从而使自己在思考期间保持忙碌状态。在您知道它之前,您已经编写了完整的数据库架构或具有需求规范。

    目前,我正在努力提高SQL技能,并且在写查询和写下经验之间花费了大量的空闲时间。经过几次调整后,我得到了一个不错的文档,概述了需要做的事情。


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

    这是艰苦的工作。您的程序似乎完成了90%。但是,执行最后10%的工作(消除所有错误,使应用程序具有更高的发布质量,编写文档等)需要和前90%的工作一样多。而且,如果您想认真对待程序的营销,回复支持电子邮件,修复其他人的错误,那么还有更多工作要做。也许不是您最感兴趣的工作。

    精神上也很难。一个未完成的项目具有无限的潜力。它是一块空的画布,您可以在其中表达自己的野心,崇高的理想和革命思想。完成并实现后,您必须查看它的实质。有限。有瑕疵。从来没有它产生的想法那么漂亮。

    话虽如此,完成某些工作也可能会非常有益。您将学到很多东西,对自己的想法进行现实检查,完成某件事的满意度,然后才能看到其他人对您的工作有何看法。

    一些忠告:

    • 确保您确实要完成该项目。也就是说,这些回报值得所有辛勤的工作。 (如果没有,请接受这一事实,并保持开心的状态。)

    • 通过"无聊的"部分找到激励自己的方法。规格,也许,如果它使您专注。但是,找到适合您的方法,无论是待办事项的打勾,用饼干奖励自己还是梦想成名和财富。

    • 提前发布,经常发布。您为"大版本"保存的内容越多,该版本就永远不会发生的可能性就越大。

    • 首先发布,然后重写。当您想进行主要重写的冲动时,请先发布,然后再进行重写(如果仍然需要这样做)。软件永远不会完美。如果您在追求完美的过程中没有任何压力发布半熟的(但现有的)代码,那么您将永远无法完成。


    我的大多数爱好项目也没有真正完成。只要我在做某事并学习,尽管我认为那不是问题。目前,我尚未编写规范,但正在练习/培训TDD。我在编写符合规范的测试时提出来。有时候,我会坐下来,创建一系列测试,概述该软件应该做什么。有几天我使那些测试通过了。它的乐趣在于,我不必全神贯注于代码,而且在任何时候我都可以坐下来,通过修复损坏的测试来取得进一步的进步。事情就是这样,超现实。