在设计了某些东西之后激发自己去实际编写代码


27

它只会发生在我身上吗?还是您也很熟悉?

就像这样:您必须创建一些东西;模块,功能,整个应用程序……等等。这是您从未有过的有趣的事情,充满挑战。

因此,您开始考虑如何去做。你画一些草图。您编写一些原型来测试您的想法。您将不同的部分放在一起以获得完整的视图。

您最终会得到自己喜欢的设计,它是简单,所有人都清楚,易于维护...的名称。您覆盖了所有基础,想到了所有内容。您知道您将拥有此类,该文件以及该数据库架构。在此处进行配置,在此进行其他配置,等等。

但是现在,一切都解决了之后,您必须坐下来为它编写代码。并且不再具有挑战性。...去那儿了,做到了!现在编写代码只是“形式上的问题”,使它看起来像在重复您刚刚完成的工作。

在我以前的工作中,我有时会放弃它,因为有人根据我的规范进行了编码,但是在我的新工作中,我负责整个过程,所以我也必须这样做(因为我得到报酬做它)。

但是我有一个宠物项目,我下班后正在家里进行工作,只有我一个人,没有人付钱去做。我进行了创造性的工作,然后当需要将其写下来时,我感到不满意(让我们稍微浏览一下网络,看看P.SE上,SO上有什么新内容)。

我只想移至下一个具有挑战性的事物,然后移至下一个,下一个……

这也发生在你身上吗?你如何解决?

您如何说服自己参与编写怪异的代码?

我会回答的。


您对项目规模的估计是多少?你的目标是什么?如果项目成功,谁将从中受益?有什么好处?
rwong 2010年

2
@rwong:我的主要目标是扩展我的知识。为了自我完善,我以不同的想法,技术,自由度等对我的个人项目进行试验。但是我确实想用真实的用例场景构建一些东西,而不仅仅是一些不相关的原型。

1
如果您仅设计而从不编写代码,那么您怎么甚至知道设计是否可行?代码可以验证或反对“设计”的可行性。换句话说,通过模糊的挥手来“设计”是很容易的,但是实际上实施通常是大量的工作。这有时令人沮丧,有时很乏味,但最终至少对我而言是令人满意的。
凯文(Kevin)

我在3年前回答了这个问题,但是当我重新阅读您的问题时,我想知道这是否不是ADHD(我碰巧有这种症状)的迹象。我也对您的问题所描述的内容感到困惑,尽管我的回答确实对我有所帮助,但这仍然非常困难。罗素·巴克利(Russell Barkley)解释了为什么做得很好:youtu.be/LyDliT0GZpE
Mark Freedman

Answers:


6

如果您面临的挑战是设计而不是实施,那么您可能需要一个不同的激励因素:

如果这是一个宠物项目(不适合工作),我实际上很期待看到它的出现,因此设计对我来说还不够。当您提出自己的宠物项目时,目标是什么?它是您需要使用的东西吗?如果是这样,您可以将其用作实现它的动机。看到它的工作。为了提供您想要摆脱的功能。

您是否打算将其提供给其他人?一个激励因素可能是看到他们从最终产品中受益。如果只是在设计模式下,他们就不会从中使用该实用程序。而且,如果您打算进行营销,请使用一个事实,那就是没有人愿意花钱将您的宠物项目停留在设计模式下,以此作为激励因素。

当我处理自己的事情时,我会采取比工作更迭代的方法-在生成某些东西之前,我不必担心所有细节。它可能会花费更长的时间,但是1)因为它仅对我而言(或者对于甚至不知道它以任何形式存在的人而言),所以我可以灵活地尝试并花些时间。2)我花了很多周期来重构和学习更好的做事方法。用我自己的一毛钱,比喻地说。

归根结底,难​​道不是真正的满足于看到凭空而生的东西吗?那就是为我做的。如果那对您没有帮助,除非您的动机是最终的产品,那么我不确定我是否理解您为什么要从事宠物项目。如果设计是您的工作重点,并且在工作中做到了,那么您似乎已经获得了想要的满足感。


6

您需要在家中快速制作原型。

当您在私人个人项目上应用相同级别的专业严谨性时,很容易导致过度设计。

为个人项目设定高标准是完全可以接受的,但是您必须了解,您可能没有足够的资源(除了每天8小时的工作时间,还有编码时间)才能在项目上取得进展。

您的宠物项目中最重要的目标是什么?要证明您的见解之一的有用性?在这种情况下,请缩减项目,直到它成为概念验证项目。然后,使用快速原型制作,以便您可以用更少的编码时间完成更多工作。


5

我想那只是我,但我有相反的问题。在开始编写代码并实际遇到相关问题之前,我通常很难考虑所有细节。实际上,当我开始编写代码时,我通常脑子里只有模糊的设计。我面临的最大挑战是让自己考虑所有细节并预先进行设计。


5
为什么投票如此之高,却没有真正回答主要问题“您如何说服自己去编写怪异的代码?”?
dan_waterworth 2010年

1
@dan_waterworth:我想因为很多人都可以与答案相关。当我还是一个大三学生的时候,我也做了同样的事情,首先没有事先计划就跳入了服装。从那以后,我学会了(艰难的方式)在进入打字阶段之前最好先坐下来思考。

2

我可以肯定地说。我喜欢挑战我从未遇到过的事物,但是我很难开始从事已经解决的任何事情。我要做的最大的事情就是强迫自己坐下来,以完成X并正常工作的目标。通常,一旦我开始运动,我最终会获得乐趣,并且比起初设定的任务要完成的事情多,但如果我不强求目标,那就生病几个小时。

我也和你在一起,因为这种情况更多发生在家里,而不是办公室里。我不知道这是否会更让人分心,被工作烧死还是什么...


2

我确实了解您的挫败感,就像我以前亲自经历过的那样。

尽管我担心这不是一个好方法,但尽管担心会引起社区的抨击,但我将与您分享我的副项目方法。请注意,这种方法对我有用,我在中/长期项目中使用它,我不会在很小的事情上使用它(因为我通常会一口气完成它)。

抓紧整个项目并将其分解为“程序包”,每个程序包都包含彼此经常交互的部分。然后将每个程序包分成几小块(最多几个小时),您可以进行设计和编码。

理想情况下,您可以在为副项目分配的一天中的任何时间完成每一部分,但这不是必需的(取决于人)。

就我个人而言,我不会为每个作品设定一个估计的时间范围,因为一旦我未能达到预期,我就会感到失望和沮丧,因此,我不建议这样做。花些时间,但也不要花太长时间。

现在,每个小步骤都将涵盖正常开发过程,设计,测试,实施以及您需要执行的其他所有阶段。这样做的想法是给每个作品一个好的开始,但是还没有一个完整的完成效果。

这使我保持了动力,因为我知道经过几个小时的实际编码无聊的工作之后,我将有更多的工作要做(好吃)。不要让自己偏离目标,只要继续执行这个可怕的任务,它很快就会结束并完成。

在完成所有步骤之后,请查看包装。看看它是如何工作的,它在做什么,再次查看整个程序包。我敢肯定会有变化和调整,现在就做。将最重要的信息牢记在心,因为在处理所有其他软件包时将需要它们。还要记笔记,它们有很大帮助。

仔细检查每个程序包,并记住您之前做过的所有其他程序包,您正在编写的新代码将如何与一周前编写的内容交互?不要害怕查找您已经写过并且可能忘记的内容。

最后,当您一无所获时,我通常会放几天,让自己休息一下,然后专注于其他事情。

通常,我很想回去开始打包软件包,并进行一些有趣的测试,没有太多的代码可写,而且目标已经接近,这对我来说是足够的动力。

希望这对您有所帮助。


2

总是发现原始的假设并不能完全成立,必须根据在实际实施过程中收集到的经验来对原始设计进行或多或少的更改​​。

如果您在绘制一些盒子之后认为您的设计是绝对可靠且完美的,但是在实际尝试之前,我会认为您是某些项目实现的理想人选。

送货是一项功能。如果您不全力以赴,那么您只是一名建筑师。


1
+1总的来说,建筑师在其中占有一席之地,“只是一名建筑师”听起来有点贬低,这当然是无意的。
2010年

@Orbling:Thorbjørn避免从事(贬低)建筑宇航员。
rwong 2010年

@Orbing,很可能是。您将如何表述您无法做到自己告诉别人做的事情呢?

1

我认为问题出在不正确的目标上。看起来您设置了目标“设计系统”。然后您将其做好,就可以达到目标。因此,一个建议是设置另一个目标“实施系统”,但这与动机以及您的实现方式更多相关。

还有一种对我有效的方法:将初始目标设置为“将系统交付给特定用户”,而不是“设计系统”或“ make系统”。这样,您将不满意,直到用户获得有价值的东西为止。而且您从一开始就做得很好(包括测试和其他现代风格的东西)。


1

除了确实是一个动机问题之外,我认为解决方案的一部分可以在结合设计和编码过程中找到。这就是我主要的做法。从根本上讲,考虑到实现设计的基础后,就可以进行下一步了。

例如:如果我已经设计了基本类,则将它们写出来并对其进行一些测试。然后,我设计了一个基础数据库,对其进行设置和测试。接下来,我介绍了将所有数据放入数据库或从数据库中取出所需的方法和功能,然后继续。由于我已经准备好了基础课,因此测试变得更加容易。当我最终设计用户界面时,我已经准备好了一套完整的代码。

现在,假设您还设计了通过接口链接的块。我不知道这个词很昂贵,因为我不是受过教育的程序员,但是您知道我的意思。

希望这可以帮助。


1

然后,只需写下您的设计想法,然后将其发布(在博客中),尽力向他人解释问题和解决方案。

一个诀窍:将您对设计的解释写成一个识字程序!:)然后,您将获得有趣的部分(您的设计思想),但实际上可以使用提供的真实代码来证明它们合理。

然后将识字程序发布给他人,以向您介绍您的新想法!


1

这听起来很陈旧,但只是开始。您可能需要打开您的开发环境,所以要这样做。您可能需要定义设计中的每个类,并写出它们的方法签名,然后这样做。您需要开始实施最重要的方法,然后执行。

通常在这个时候左右,我已经忘记了开始时遇到的麻烦,而且我在区域中。

大约80%的时间有效。其余的还有俄罗斯方块。


0

绝对不只是你!我实际上正在推迟一个项目。

除了你自己,没有人能激励你。

创建一个现实的时间表,并挑战自己,准时完成每个部分。如果项目从未通过设计阶段,则没有任何可显示的项目。


0

从您的问题来看,您的问题是您似乎正在重新发明轮子。如果您已经完成所有这些操作,为什么还要再次执行?没有适合您的框架吗?如果不是(尽管这不太可能),为什么不写一个呢?

编程中的关键任务不是重新做无聊的事情,而是做一次,正确地做然后再使用。甚至更好:找到已经正确执行一次的人。


0

我完全了解您来自哪里。这是您感兴趣的问题,一旦您弄清楚了,实现就可以了。

您为什么不只是设计解决方案,而让其他人实施呢?


-1

我要做的事情:

  • 在我面前放个大大的计时器(可以在反向模式下,以1小时为单位)
  • 强迫我熬夜直到达到某个目标(有时候喝啤酒,我发现喝一点酒会有所帮助)

虽然并非总是有效

PS。我在家工作

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.