这可能是主观的,可能已经结束,但是我仍然想知道它对阅读计算机程序的结构和解释是否真的有帮助。
该书不使用Java。并不是说我想学习Java。我只是好奇地想知道,成为一个更好的程序员是否会很有用,并且我可以从本书中学到什么,或者他们对本书的其他选择是否更适合Java程序员?
这可能是主观的,可能已经结束,但是我仍然想知道它对阅读计算机程序的结构和解释是否真的有帮助。
该书不使用Java。并不是说我想学习Java。我只是好奇地想知道,成为一个更好的程序员是否会很有用,并且我可以从本书中学到什么,或者他们对本书的其他选择是否更适合Java程序员?
Answers:
好吧,我不知道这本书对您是否有帮助,但是大约20年前我读完这本书时,它无疑提高了我的编程技能(独立于任何编程语言)。而且我想特别是Java程序员将仅通过坚持Java就能获得一些新见识,而他/她将无法获得这些新见识。
Joel Spolsky 2005撰写了一篇有关Java和SICP的不错的文章,您可能会感兴趣:
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
我认为计算机程序的结构和解释是一本好书。但是,它有两个问题。
在我的经验,最大的问题是,虽然这本书完全不需要编程知识,并且是面向完整的新手,它是面向完全新手在麻省理工学院学习谁。因此,尽管它不具备任何编程知识,但确实具有相当多的领域知识,例如,在电气工程,物理学和数学领域。注意:这些与所讲授的概念无关,仅需理解练习和示例即可。
比我更大的人在一篇名为《计算机科学课程的结构和解释》的巧妙论文中对此作了更好的解释。值得庆幸的是,他们不仅仅是抱怨,而是写了自己的书:How to Design Programs。如果您考虑阅读SICP,则可能需要先阅读HtDP:它涵盖了与SICP几乎相同的基础,但是仅假设了普通的高中领域知识。(实际上,它是写给高中生教的。)
完成HtDP之后,您仍然可以返回并阅读SICP,因为现在缺少一些领域知识将不再那么有害,因为您之前已经看过该概念。
注意:HtDP的第二版有一个草稿,您可能要阅读而不是第一版。有关命令式编程的材料已被删除,并且将在尚未成文的第二卷“ 如何设计组件”中进行介绍,但是您可以从第一版或SICP或两者中获得。
根据我对SICP的理解,它更侧重于函数式编程领域,包括递归编程,以及对CS的深入介绍 -这对于新程序员来说有点难掌握。还有一点,它是为MIT准备和指导的,并且还需要一些工程领域,数学,物理学的良好基础知识,以使这本书有用。
我会建议一本书,其中每本书都着眼于软件工程的不同方面:
可以从以下参考文献中找到上述和其他书籍的详细描述:
请随意添加到列表中,因为它不理想:)
编辑:在选择上述书籍并确定阅读方式的优先级时,这实际上取决于您主要尝试做的事情或学习的目的。
我要走到这里,说什么语言-对大多数人来说可能不是一个好书。
像Knuth一样,这是一本好书。但是,即使假设您是麻省理工学院的热门人物,它仍然需要一年中的大部分时间才能正确阅读,而且在老师和助教的帮助下可以了。
那时您还可以阅读其他有关软件工程的书籍吗?您还可以学习其他语言吗?
编辑只是为了扩展一点:
软件工程就是工程,这全都在于优化。您的任务是在给定的时间和成本预算下最大化您的知识。
SICP是通过功能语言进行编程的高级介绍。它使用功能语言的原因是,与在程序语言中描述的语言相比,用功能语言描述编程的许多数学概念更容易,并且比形式逻辑更易于阅读。
也有一定的姿势,即。“除非您阅读SICP,否则您不是真正的程序员”,或者是Knuth,或者可以使用Lisp,C或x86汇编程序进行编程。通常这很容易反驳。即。除非您了解Cantor在集合论和Maxwell方程上的工作,并且熟悉半导体中的空穴迁移率,否则您不可能成为真正的程序员。