我在哪里可以找到设计练习?[关闭]


16

我觉得继续练习解决问题的技能很重要。编写自己的微型项目是一种方法,但另一种方法是尝试解决在线发布的问题。在线查找有趣的编程测验很容易,这些测验需要应用聪明的算法来解决- 欧拉计画是一个著名的例子。

但是,在许多现实生活中的项目中,软件的设计(尤其是在初始阶段)具有很大的影响力,在后期阶段,它不能像普通算法那样容易地进行调整。为了提高这些技能,我正在寻找设计问题的任何集合。

当我说“设计”时,我指的是软件解决方案的抽象设计-例如,将存在哪些模块以及它们之间的依赖关系是什么,数据如何在程序中流动,什么样的数据需要保存在程序中?设计问题是那些在任何项目的早期阶段都必须解决的关键问题,但解决方案是没有一行代码的白板图。

当然,这类问题没有一个正确的解决方案,但是我对在任何地方都能显示出可用于解决问题的典型解决方案的利弊的地方感到特别满意。


Answers:


7

卡塔码怎么样?我已经完成了其中的一些操作,它们很有趣,并且充满挑战性,因此总有一些东西需要学习。

通常,每个kata的注释都具有足够的信息,可以帮助您回答遇到的任何问题。


首先肯定是一个设计问题,但我有一个感觉,其他所有问题都更加面向代码。我会再看一下,谢谢!
橡树

3

开始经典设计问题:KWIC。

David Parnas在其有关模块化的经典论文中以KWIC为例:关于将系统分解为模块的准则,每个人大概应该每十年读一次。

对于上下文中的关键字,KWIC 是一个简单的索引和排序问题,您在其中读取文本行,然后根据关键字旋转每行(例如,排除“ the”,“ with”),将每个移位添加到列出您然后排序。这个想法是,使用KWIC对生成书籍索引很有用。帕纳斯(Parnas)在发表经典论文时说,有经验的程序员可以在一到两个星期内解决它,但是扬尼斯定律指出,现在可以在一到两个小时内完成。[操作系统和标准库已经变得更好。

通读Parnas的论文,一旦您可以理解KWIC程序应该做什么,就去编写自己的设计练习。然后,阅读本文的其余部分,其中讨论了两种不同的设计:两者都是模块化的,但是一种实现了信息隐藏,而另一种则没有。

了解了KWIC示例之后,您将可以欣赏使用该示例的其他软件设计论文。例如,迈克尔·范·希尔斯特(Michael VanHilst)的论文《从设计中解耦更改》使用它来展示一种使用C ++模板的非常有趣的设计技术。而且,只要我们谈论C ++模板和设计,请阅读Czarnecki和Eisenecker的Synthesizing Objects论文。

从KWIC继续发展的还有其他经典示例,例如Spacewar示例,它已经以多种语言移植/重新设计,例如Python和AspectJ

当然,任何程序都可以用作设计练习,但是KWIC和Spacewar是示例,您可以在其中查看几种选择。


回复:您的澄清...我主要是在这里谈论白板设计。但是,也有必要深入到代码级别,因为您可以意识到许多设计解决方案都存在缺陷,使其难以表达。
Macneil 2010年

1

我听说过这种被称为“编程katas”的事情。卡塔(Kata)是一种武术术语,指的是一种运动形式或一系列动作,一遍又一遍地练习以达到完美。用您选择的语言搜索katas,我敢打赌,您会发现一些东西。:)


1

我同意Katas和Euler在设计算法和实践编码方面很出色-也许您可以扩展它们,并有所创造力,并针对其中一个问题设计系统。

例如,我不仅在解决Euler的问题以找到最快,最短的答案,而且还在以分布式方式解决这些问题-我想建立一系列的Erlang节点来解决其中一个问题。当然,这意味着我必须弄清楚如何将问题分为多个独立的部分,并让他们报告其进度并将结果汇​​总在一起(所有这些都是我不擅长的功能语言)。

也许您可以围绕解决其中一个问题作为业务解决方案来设计一个系统-如何做到这一点,以便多个“客户”可以一次访问您的问题,因此可以设计一个客户端和服务层交互等

这都是关于创造力和乐趣。

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.