如何学习计算机程序的构造和解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何学习计算机程序的构造和解释相关的知识,希望对你有一定的参考价值。

参考技术A 英文原版:《Structure and Interpretation of Computer Programs》 简称SICP

我只是围绕这本书,再多说一些与它有关的八卦和资料。

《How to Design Programs》入门比SICP低一些。而且会把Scheme的基本语法讲的更清楚。SICP和HtDP用的都是Scheme,Lisp的一种。

打开How to Design Programs的主页,这本书是免费开放的,而且已经有第二版了。

我建议阅读第二版本,第二版对第一版做了较大的修订。
最主要的是,教学语言从Scheme换成Racket。编程环境也从原来的DrScheme换成了现在的DrRacket。Racket能很好支持我们现在主流的操作系统。

Racket其实就是从Scheme而来,兼容Scheme的语法。

也就是说,如果你想学SICP的话,并且自己写写Lisp程序过把瘾。你需要去Racket主页下载我们需要的编程环境,安装后运行DrRacket。

如果你一开始对Lisp的语法不熟悉,你就可以先读读《How to Design Programs Second Edition》自己写几行Lisp程序过过瘾。

如果你觉得Lisp很cool,你也不想卷入不休止的编程语言的战争,那么你可以看看《黑客与画家》,

在“拒绝平庸”和“书呆子的复仇”两章中,作者大加赞赏Lisp,并且道出了自己用Lisp开发商业软件的经历,

作者认为编程语言是有高低之分的,Lisp可以让你成为更好的程序员,如果这些引起了你的兴趣,那么你是该去读一读。

还有一本《软件随想录》,在"学校只教Java的危险性"一文中,作者认为Java太简单,不足以分辨出优秀的程序员。而且作者极力推荐了SICP这门课,因为这门课很难,

作者认为只有学过这些困难的课程,才能证明你有出色的程序设计能力。同样,作者认为面向对象程序设计太简单,不足以吓跑那些刚刚踏入软件开发的年轻人。而函数式编程(Functional Programing)可以难倒这些年轻人。

《黑客与画家》和《软件随想录》的作者都是出色的程序员,他们的观点或许可以给你学下去这门课的动力。

如果你想知道Lisp的历史,那么《奇思妙想》是一个不错的参考,它的第二章就讲了Lisp的发明人的约翰·麦卡锡的历史和他如何发明Lisp。

最后还有,这里是Berkeley的SICP课程是用Python3教的,也可以参考学习。你也可以先读读阮一峰的《函数式编程初探》。

你会看到其实程序设计有一个更广阔的世界,而不是只在一个面向对象的世界里。

附录:
1.我怎么学习SICP的。刚开始我是用的Racket环境去写代码。后来去看伯克利的SICP课程,用Python。后来就用Python写书上的代码。感觉也很不错。还有,我觉得也可以试试Scala。Scala的函数式编程特性,也足以过瘾。本回答被提问者采纳

如何看待编译原理

     1.随着我进入到大二的学习中我认识到一门叫编译原理的课程,一开始我对这一门课程不是十分的了解,编译原理是什么?所以我看了下书本的前言解释和网上的有关资料,给出的结果是编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。编译原理一直是国内外大学计算机相关专业的重要课程,其知识结构贯穿程序设计语言,系统环境以及体系结构;同时,其理论基础有涉及形式语言与自动机,数据结构与算法等计算机学科的许多重要方面。总体来看编译原理有着承接的作用既联系我们之前所学的知识又让我们深入学习语言的来源。

     2.学习编译原理有什么好处呢?网上的网友给出了我们几点我认为对我们未来学习都十分有用的建议,

     1、可以更加容易的理解在一个语言种哪些写法是等价的,哪些是有差异的
     2、可以更加客观的比较不同语言的差异
     3、更不容易被某个特定语言的宣扬者忽悠
     4、学习新的语言是效率也会更高
     5、其实从语言a转换到语言b是一个通用的需求,学好编译原理处理此类需求时会更加游刃有余
 
     3.不学习编译原理有什么损失?
      不学编译原理,可能永远给各种写编译器的人当奴隶,以为写程序只能按照他们设计的语言哲学来做。学好了编译原理,不一定非要自己写语言,但是至少能把很多其他程序员觉得很酷的东西看得透彻一点。这样子我们连编译语言是如何创造都不知道,只能当用着别人制造的编译语言。
    
     4.如何学好编译原理?
    “
编译原理”一般是本科或者研究生时课程的名字,一般说来这时关注的主要是理论部分,从形式语言和自动机的角度介绍各种文法和自动机的知识,这方面的知识“龙书” [1] 是非常经典的,尤其是前几章。而实践的部分则更推荐看“虎书” ,对现代编译器的结构、词法分析和语法分析实现,代码生成和虚拟机的构造等都有详细的叙述,是非常好的上手指南,我自己写的第一个编译器就是按照虎书做的。多看书是十分重要的,所以有空就去图书馆找有关编译原理的书籍来阅读。

以上是关于如何学习计算机程序的构造和解释的主要内容,如果未能解决你的问题,请参考以下文章

如何学习计算机程序的构造和解释

电子书 算法导论.pdf

与自我的和解

学习TCP/IP

DDD学习笔录——简介DDD的战术模式问题空间和解空间

如何学习编译原理