多年前,我遇到了(可能)相同的问题,这个问题持续了几年,但我克服了。因此,即使我不确定我的方式也将对您适用,也许知道我是如何实现的对您来说会很有趣。
您还应该在这里看看:软件工程专业知识的七个阶段它表明生产力在很大程度上是技能水平的副作用。您可能仍处于当前正在使用的技术的第3阶段和第4阶段之间的某个时间(技能水平取决于技术,您可以掌握某些技术,同时还可以学习其他技术)。
现在,我从传记作证开始。
有点背景。我今年47岁。我从80年代的12岁开始编程。在高中时,我还担任兼职专业游戏程序员。基本上,它没有给我太多钱,仅能买到硬件,但我很喜欢它,学到了很多东西。我从18岁开始对计算机科学进行正式学习。
结果,当我20岁时,无论何时开始任何编程任务,我都知道许多解决给定问题的方法,并且非常了解手头的许多参数和陷阱,以及任何方法的缺点和局限性。
在某些时候(比如说大约26岁),对我来说编写任何程序都变得非常困难。打开的可能性太多了,我再也无法在它们之间进行选择。几年(使之成为6),我什至停止编程,成为一名技术新闻撰稿人。
尽管如此,我从未完全停止尝试编程。在某个时候它又回来了。对我来说,关键是极限编程,更具体地说是简单性原则:“编写可能可行的最简单的东西”。
基本上,我强迫自己不关心代码效率(这是我的主要障碍,避免效率低下的设计),而是走最简单的方法。在编写引发错误的测试(确实是TDD)之后,我还强迫我不太关心错误,并将错误处理延迟到以后。
那是我在写作时学到的东西。当我不知道该写什么,或者我知道我在写什么不好的时候。什么都别管,继续。实际写坏东西。我最终将在以后纠正它。或者,如果确实很糟糕,则将其擦除并重写,但是写两次东西的速度更快,第一次写的东西就完美了。
实际上,您认为一开始擅长的代码很可能需要与真正不好的代码一样多的改进。
如果您遵循“简单性”道路,您还将获得额外的奖励。您很容易接受删除/更改初始设计/编码。您会有更灵活的想法。
我还养成了在代码中添加临时注释的习惯,解释了我现在不打算做的事情,并打算在代码在正常使用情况下可以正常工作时稍后再做。
我还参加了XP Dojo,与其他程序员一起练习了代码集,以内部化XP的实践。它有帮助。它使上述形式方法具有本能。结对编程也有所帮助。与年轻的程序员一起工作会产生一些动力,但是通过经验,您还会看到他们没有的经验。例如,以我为例,我经常看到他们从事过于复杂的设计,并且我知道可能会导致设计梦night。那样走了。做过某事。有问题。
对我来说,最重要的是保持流程顺畅。保持速度确实是成功的关键。
现在,我又回到了专业程序员的状态,我相信对自己正在做的事情有更深入的了解,我会变得越来越好。练习TDD时,我可能仍会比年轻的时候慢一些(并且没有进行任何测试),但是我也没有恐惧的重构,并且肯定会花费更少的时间进行调试(几乎没有时间,将其花费少于10%的时间) )。
总结:我使用敏捷方法(XP)克服了我的代码块,为简化起见然后进行重构,并尝试使这种本能成为可能。它为我工作。不确定是否可以将其推广到其他任何人。
在技能掌握水平方面,我大多数时候学会接受的是,每当我改变技术(学习新语言,新框架等)时,我都会经历一个放慢脚步的阶段。这是正常现象,并将最终克服。我还可以通过良好的方法论和通用编程技能来弥补这一点,这不会成为问题。