HtDP与混凝土抽象相比?

时间:2009-02-09 19:16:32

标签: computer-science sicp

我想自学编程。为了给一点背景知识,我有一个历史学位,我的数学技能是关于大学代数水平的(可能是低端的)。我正在寻找教授如何思考编程的书籍的建议,而不是专注于特定的语言。我已经确定SICP现在不在我的联盟中。

两个主要替代方案似乎是如何设计程序具体抽象。我有兴趣听到任何使用其中一个或两个的人都会详细讨论为什么一个人可能比另一个更好。此外,如果有人可以使用免费提供的材料推荐基础课程,那就太棒了。类似于:从HtDP-> SICP->开始?

感谢您的时间。

9 个答案:

答案 0 :(得分:9)

有许多方法可以学习如何编程。有些人选择目前市场上使用的产品。我更愿意建议一种方法,它将教你如何创建结构化,可塑性和可理解的程序。为此,从SICP开始(获取使用的版本以节省一些钱)。显然你不会在Scheme或Lisp中获得编程,但这不是我推荐的意图。我们的想法是学习有条不紊的思维过程,这个过程可以解决问题并为他们创建可组合和可维护的解决方案。

一旦你完成了本书的大部分内容,就可以获得Python或Ruby的入门书。处理主要概念(程序,控制结构)。同时,搜索Bohm和Jacobini的“结构化程序理论”和杰克逊结构化程序设计。

请注意,我没有提到面向对象。事实上,OO非常适合分析和实施,但在设计阶段很难。程序性,模块化和结构化编程更容易处理,说实话,如果不完全理解结构化,程序化和模块化的编程概念,就很难学习和正确地利用面向对象。

完成后,请深入研究C(使用好的旧Kerninghan和Ritchie的C编程语言书籍。)

完成后,然后根据自己的内容跳转到Java或C#。然后,阅读本文:

http://sdg.csail.mit.edu/pubs/2009/hoare-jsp-3-29-09.pdf

作为一名真实的Java开发人员,我认为建议认真的任何人学习如何编程以开始使用Java或C#是不合情理的。它们是一种很好的工作工具,但不是一种很好的教学语言(除非该人已经拥有丰富的经验或接触程序和结构化编程。)

即使是为休闲而做,编程也不仅仅是用可销售的语言进行编码。您希望开发能够帮助您以任何语言干净,高效地编程的课程和习惯。我强烈建议你按照我在这里提出的大纲。祝你好运。

==编辑 - 2011-11-22 ==

除了上面提到的Hoare的开创性论文之外,我强烈建议你得到Mitchel,McKim和Meyer的"Design by Contracts, by Example"。事实上,我会首先阅读这本书,然后阅读Hoare的论文。

==编辑 - 2013-01-21 == 当我说以下内容时:

  

事实上,OO非常适合分析和实施,但是   设计阶段很难。

我的意思是说,对于 uninitiated ,在使用OO和OO相关技术时,设计阶段更难以理解和掌握。设计阶段包含将“什么”(从分析)映射到具体“如何”(实施)的规定要素,实施最终归结为命令性或功能性要素。

显然,对于非启动,这不成立。

答案 1 :(得分:6)

我无法谈论具体抽象,但我的介绍性CS课程是由其中一位作者在HtDP中讲授的。回想起来,我很重视这段经历。它鼓励一些良好的习惯,作为一名专业的程序员 - 小方法,先测试 - 这是一个相当温和的开始。

您将学习Scheme,这是一个很好的编程和思考工具,如果您开始探索其他高级语言,它将帮助您。如果您想探索像Java这样的语言,它可能在不久的将来对您没什么帮助,但Ruby是一个相对友好的跳跃。

为了正确使用它,你需要下载Racket并使用它的IDE,DrRacket,它将带你通过几本越来越复杂的学习者的编程语言。 / p>

答案 2 :(得分:2)

我认为HTDP教会我递归思考,有效抽象,并将问题分解成更小的部分。这是一本非常棒的初学者编程手册。作为有数学背景的人,你会在早餐时吃它。

答案 3 :(得分:1)

“如何像计算机科学家一样思考”是一本关于python编程的开源书。我觉得HTDP和SICP​​对学术有点小。

答案 4 :(得分:1)

我知道这不会直接回答您的问题,但您可能会发现我的评论很有用。

我有T-SQL,C#和一些perl的背景知识。自1996年以来,我一直担任DBA和数据库开发人员,我很想提高我的编程技能。我可以合理地快速选择任何语言(除了perl和汇编)但我在设计方面很弱。所以我选择了SICP,发现它非常陡峭,过于专注于工程/学术界。我现在正在通过HtDP工作并发现它很棒,因为有许多练习可以遵循,而且速度非常适合我。显然有些书比其他书更适合你,但是当你完成这本书时,你应该准备好学习任何其他语言,无论是python,C,Java等等。

答案 5 :(得分:0)

购买体面的'自学'C ++书。我建议24小时内使用C ++,这是我学习时使用的。

不,你不会在24小时内学习。或24天。可能有点24周,而且24个月肯定会让你走上正轨。

重要的是,您需要一本书,指导您如何编程以及如何使用您的语言编程。我推荐使用C或C ++。 “C编程语言”是关于C的 书;虽然没看过,所以不能再评论......

答案 6 :(得分:0)

在我看来,有三种方法可以成为优秀的程序员:

  1. 通过对书籍和在线资料的奉献和严谨研究;
  2. 做到这一点并一直玩,直到你理解为止;或
  3. 由优秀的程序员教授。
  4. 选项1的作用是因为你有意识地通过解决给你的问题强迫自己像程序员一样思考。选项2的工作原理是因为你潜意识地习惯于通过解决你自己创造的问题来像程序员一样思考。选项3有效,因为真正优秀的程序员知道如何用非编程术语向人们解释编程。

    听起来你喜欢选项1.我小时候选择了Option 2,我认为这是最好的。现在我尽力为人们提供选项3。

    我认为像Ruby,Python和Java这样的高级语言作为入门语言是独一无二的。在最坏的情况下,他们会引导人们完全误解或忽略机器的实际工作方式,最多忘记strings are hard

答案 7 :(得分:-1)

这并不意味着以任何方式表达,但如果你想学习如何骑自行车,你会从一本关于物理基本定律(动量,向心力等)的书开始吗?如果你自己买了一个乐高套件,你会先阅读有关砌体和建筑理论的书吗?

我敢打赌,当你第一次开始学习历史时,你并没有从“如何学习历史”开始 - 你读过有关历史时期的书籍,这些书籍让你着迷,感动了你,让你思考。

而不是理论研究,考虑购买一本关于Ruby的书,下载程序,并首先尝试使用该语言。理解语言的细节,元素如何连接在一起。然后,在你花了一些时间构建简单的程序之后,然后阅读你的理论书籍。在实践和理论之间来回走动。

授予人的不同,并不是每个人都会使用这种技术蓬勃发展。但我认为让你的手弄脏将使概念看起来比首先学习概念更清晰。

答案 8 :(得分:-1)

始终以Hello World开头,并从那里了解更多信息。