10

我很忙!我的大部分时间都花在使用分析技术或课程作业上,当我切换到编程模式时,我需要快速生成代码。因为,只要我能快速获得结果,我所在实验室的主要研究者并不关心我使用的是 TDD 还是算盘。

我读过“TDD by example”,发现它很有帮助。我随后买了《重构:改进现有代码的设计》、《设计模式:可重用的面向对象软件的元素》和《有效地使用遗留代码》,但这些书很大,现在跳入它们的前景令人生畏!

“TDD by example”的对话风格和流程使其很容易融入我的日程安排。但是,我不知道如何在这些其他书中工作以及按什么顺序工作;似乎每个都是相关的(我处于一种餐饮哲学家的僵局 - 我正在等待我的编程工具包的各个方面得到改进,但它们的相互依赖性让我要么陷入僵局,要么浪费时间进行上下文切换 - 抱歉类比:))。例如,我有需要重构和覆盖测试的遗留代码,我需要使用 TDD 推进(但我从不这样做),我需要使用设计模式进行编码,所以我停止重新发明轮子。

有没有一种好方法可以将这些所需的读取分解为字节大小的块,以及在将他们的技术应用于当前项目时这样做的方法(就个人而言,如果我不能立即应用它,我会丢失信息)?我是否专注于一本书并完成它?我是否首先需要 TDD,然后是重构和设计模式技能(但是“鸡和蛋”所有这些单元测试书籍都在谈论设计模式和重构,就好像我前后了解它们一样)?

我已经阅读了针对初学者的最佳教程,但它没有解释我如何将其整合到繁忙的日程中。而且,我在科学环境中阅读编程,但它再次错过了当你已经落后于时间时如何添加这些技术的标记。

4

3 回答 3

2

鉴于您所做的事情的描述,我首先要质疑这个假设。我对您的程序的复杂性一无所知,但是如果您的编码严格包含生成计算并且它是一种“脚本级别”,这意味着对于给定的代码段,您可以轻松地将其丢弃并将其重写为保持它,那么很多这些技术都是矫枉过正的。我认为 TDD(也许是在集成测试中结合的配对向下版本)总是有价值的,但除此之外,不一定。

但是,如果您真的在设计软件系统(并且至少您可能正在做的一些事情可能符合要求,即使所有这些都不符合要求,例如数据库模型、输入屏幕、结果分布),那么我会说这些书读得够多了开始,不要担心初学者总是做不好,只要确保你每周都取得可衡量的进步。

顺便说一句,设计模式有助于阅读有关如何解决类似问题的信息,但不要“使用它们进行设计”而不是其他东西。您的设计本身可能并不好,但模式来自现实世界的设计,而不是相反。因此,您当然可以看到更多您可能正在做的面向对象的解决方案,但不要担心您所做的是否符合设计模式。确保您所做的事情是按照自己的条件进行良好的可维护设计,并且模式将由此产生。

于 2009-07-24T16:53:07.927 回答
2

我将从 Refactoring 这本书开始(因为您提到被遗留代码淹没)并尝试一次阅读一个小时。然后下次你在编程时,寻找应用你所读内容的方法。

一旦你开始觉得你正在腾出一些时间,看看其他的书。我还推荐一本书 Code Complete 来提高你的技能。

于 2009-07-24T17:18:43.257 回答
1

您不能一次全部完成(您知道这一点)。一些技术可以节省您的时间,而 TDD 和重构在该列表中排名靠前。尤其是 TDD——不要担心什么时候做,是否做,如何把它融入你的日程安排;去做就对了。越早开始,就越能节省您的时间。一旦你掌握了这项技能,那么当你处理遗留代码的任务时,围绕它编写测试以保护你(不,这不是 TDD,但你用 TDD 磨练的测试编写技能将适用)。当您对需要更改的模块有了很好的覆盖后,您就可以自由地重构它,频繁地运行您的测试。在你提到的书中,在你描述的情况下,我推荐阅读的下一本是迈克尔·费瑟斯的

不过,就目前而言:TDD 一切。它会比你想象的更快地节省你的时间,你可以把时间花在学习更多更好的技术上。

于 2009-07-24T16:55:04.553 回答