在编程理论的实际应用中是否有任何好的资源?

时间:2009-11-24 02:57:52

标签: language-agnostic

任何人都可以推荐任何寻求在编程理论上提供真实世界视角的好材料吗?作为一名长期的专业软件工程师,我正在从我的角度讲述一名学生。当我说现实世界时,我的意思是“为什么我应该使用接口?这不符合DRY原则吗?它似乎是额外的不必要的元代码。” (这是今天提出的另一个问题的含义。)这个学生班级的教授似乎没有明确的商业理由将它们用作“你使用它,所以你的应用程序的主要部分不依赖根据具体实现,您可以使用一个或多个组件 - 例如,可以更换或升级数据存储而不影响应用程序的其余部分,也可以插入外部设备的插件,当更好的应用程序出现时可以替换它。“ / p>

我注意到学生倾向于达到他们的CS课程的关键点,并开始在各个Q& A网站上询问为什么他们应该使用某种范例,他们了解什么和如何,但他们是对于为什么它实际上有用并且经历其余的课程思考“没关系,那么什么?”课程往往非常学术化,没有任何真实的世界背景。自己去过那里,我希望我在学校时能有像StackOverflow这样的资源。

我希望这个问题能够为学生提供一系列有用的阅读材料,这些材料将有助于为他们在课堂上学习的各种编程范例和模式提供真实的世界背景,并帮助他们掌握何时和为什么在现实世界的情况下应该考虑某些模式。

8 个答案:

答案 0 :(得分:4)

答案 1 :(得分:2)

Pragmatic Programmers很实用,但他们精通CS理论,他们知道何时以及如何应用它。

答案 2 :(得分:1)

可以说自己是一名CS学生:)

我发现Stroustrup的论文非常享受和实用,而不会涉及无用的细节。以他的论文为例Object Oriented Programming,这是我读过的最好的读物之一。它从最基本的编程思想,到模块化编程,通过OOP的思想。他表示,为什么我们需要在短片段示例中使用这些编程范例。这些是他顺序完成的范例:

  • 程序编程数据隐藏
  • 数据抽象ObjectOriented
  • 编程(大部分论文是关于OOP)
  • 参数化类型

另一个精彩的阅读是Sixteen Ways to Stack a Cat。在 C ++ 中编写堆栈的 16 不同方式(实际上语言并不重要)。拿这些,并比较我所知道/听说过的大多数范例的优点/缺点。

答案 3 :(得分:1)

不幸的是,没有经验的程序员经常没有意识到他们遇到问题,直到他们为自己跑来跑去。我认为在现实世界中看到问题的最好方法是让学生产生“真实世界”的问题,这些问题可能最好在教授CS校长的课堂之外找到。 (我想SoftEng在这方面会有所不同)

代码完成+头部优先设计模式是我在毕业前推荐的每本本科生的两本书。

哦,他们应该至少有一个完成(或大部分完成)的课外项目。无论如何,网站,游戏,实用程序应用程序。

答案 4 :(得分:0)

代码完成。 http://cc2e.com/

答案 5 :(得分:0)

我会接受球:

  • 设计模式,由“四位智者”。
  • 代码完成,可以很好地解决问题。

通常,这些模式是由于维护和开发大代码的问题而产生的。程序员总是被时间束缚,他们都没有决定我们需要更多的绒毛。大多数程序员不会在整个软件生命周期中使用相同的代码,因此需要一种方法让程序员无需阅读几百万行代码即可理解彼此的代码。

真实世界建筑类比: 你没有没有关节的建筑物。否则它会因冷/热而裂开并破裂。接口是两个可能是刚性实体之间的关节 你使它模块化,所以可以进行翻新。 你没有制作所有相同的材料。 (管道不是用木头做的) 您可以设计它,以便多个承包商可以同时在建筑物上工作。 使用该建筑物的人只是想使用它而不关心如何使用它 你建造了它。 检查建筑物的人与建造建筑物的人员相同。

答案 6 :(得分:0)

答案 7 :(得分:0)

Bob叔叔关于软件工艺的The Apprentice系列文章。有一个很好的叙事风格,我认为学生可以与他们相关,因为他/她从一个卑微的学徒开始。