我已经在我的个人项目上工作了多年,这是一个从零开始制作的操作系统。你可能认为它是相当复杂的东西。问题是我多次从头开始工作。这意味着在某些时候(非常先进,我有硬盘读/写和一些基本的网络),事情太混乱了,我决定把它扔到窗口再试一次。 多年来,我学会了如何使代码看起来更好,我读了罗伯特·马丁的“清洁代码 - 敏捷软件工艺手册”,它帮助了很多。我学会了使函数变小,在类中组织事物(我使用C,现在是C ++)和命名空间,使用异常和测试进行适当的错误处理。 然而,这种新方法让我陷入困境,我花了大部分时间来检查一切进展顺利,代码读得好,这很容易,评论和测试都很好。基本上我几个月没有做任何相关的步骤。当我看到编写良好的代码时,很难添加新的功能并想“我应该把它放在哪里?我已经使用过这段代码吗?最好的方法是什么?”我经常推迟工作。
所以,这就是问题所在。您是否知道任何代码编写策略可以让您编写工作,测试,优秀的代码而不花费90%的时间来思考如何使其工作,测试和更好?
提前致谢。
答案 0 :(得分:9)
您是否知道任何代码编写策略可以让您编写工作,测试,优秀的代码而无需花费90%的时间来思考如何使其工作,测试和更好?
是的,here。
说真的,没有。没有思考就不可能编写好的代码。
当我看到编写良好的代码时,很难添加新功能并想“我应该把它放在哪里?我已经使用过这段代码吗?最好的方法是什么?”我经常推迟工作。
这称为“分析瘫痪”。您可能有兴趣阅读The Pragmatic Programmer的“足够好的软件”部分。您的代码不一定非常完美。
答案 1 :(得分:4)
这些事情被广泛讨论。对我来说this legendary blog entry是乔尔·斯波尔斯基和后续讨论(罗伯特·马丁answered this)到处都是网络包含所有的赞成和缺点,并且阅读仍然很有趣。
想知道这里是Jamie Zawinski的一句话,它出现在上面链接的帖子中:
“在一天结束时,发货了!重写代码并使其更清晰,并且第三次它实际上很漂亮是很棒的。但这不是重点 - 你不是在这里编写代码;你来这里运送产品。“
答案 2 :(得分:1)
我建议你给TDD(测试驱动开发)一个运行。 在此上下文中,您将在实现每个功能之前编写自动化测试,然后在完成功能后运行测试。
如果测试通过,那么您就完成了,并且可以启动另一个功能。作为奖励,测试将随着时间的推移而收集,您很快就会有一个测试套件可用于回归测试(以确保您在新编码时没有破坏任何东西);这解决了你对“好的代码”中破坏事物的恐惧。
此外,TDD将让您专注于准确开发您需要的内容,而不是更多内容,因此它往往会带来更好更简单的设计(特别是在界面中,因为您必须在开始编码之前考虑接口,所以“想到“驱动接口,而不是”当我编码它时,无论发生什么变得更加方便“。)
但是,请注意,将自动化测试应用于操作系统可能会带来一些技术挑战!