“ Java程序的结构和解释”这本书对Java程序员来说是一本好书吗?[关闭]


14

这可能是主观的,可能已经结束,但是我仍然想知道它对阅读计算机程序的结构和解释是否真的有帮助。

计算机程序的结构和解释

该书不使用Java。并不是说我想学习Java。我只是好奇地想知道,成为一个更好的程序员是否会很有用,并且我可以从本书中学到什么,或者他们对本书的其他选择是否更适合Java程序员?


32
对于初学者,请尽量不要将自己定位为“ java程序员”。或作为“任何语言的程序员”。这是死路一条。只是成为一名程序员。然后,SICP将非常有用。可能是那里最有用的读物​​。
SK-logic

3
很难,这就是为什么要阅读它。
乔纳森·亨森

4
从第一章开始,逐页阅读,处理所有示例,在您理解每个页面和每个示例之前,不要进行进一步的学习。答案键在线。
乔纳森·亨森

2
@JonathanHenson,当您结束时,停止
jk。

3
是的,您确实需要学习Scheme。但是,这本书使用Scheme的原因之一是,如果您之前从未编程过,则可以在一天左右的时间里了解整个Scheme的内容,如果您从未编程过,则可以在10分钟左右的时间里学习。毕竟,SICP是一本面向初学者的书,它假定绝对没有编程知识。
约尔格W¯¯米塔格

Answers:


23

好吧,我不知道这本书对您是否有帮助,但是大约20年前我读完这本书时,它无疑提高了我的编程技能(独立于任何编程语言)。而且我想特别是Java程序员将仅通过坚持Java就能获得一些新见识,而他/她将无法获得这些新见识。

Joel Spolsky 2005撰写了一篇有关Java和SICP​​的不错的文章,您可能会感兴趣:

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html


+1对几乎等于书本推荐问题的最佳答案。
Joshua Drake 2012年

13

我认为计算机程序的结构和解释是一本好书。但是,它有两个问题。

在我的经验,最大的问题是,虽然这本书完全不需要编程知识,并且是面向完整的新手,它面向完全新手在麻省理工学院学习谁。因此,尽管它不具备任何编程知识,但确实具有相当多的领域知识,例如,在电气工程,物理学和数学领域。注意:这些与所讲授的概念无关,仅需理解练习示例即可

比我更大的人在一篇名为《计算机科学课程的结构和解释》的巧妙论文中对此作了更好的解释。值得庆幸的是,他们不仅仅是抱怨,而是写了自己的书:How to Design Programs。如果您考虑阅读SICP,则可能需要先阅读HtDP:它涵盖了与SICP几乎相同的基础,但是仅假设了普通的高中领域知识。(实际上,它是写给高中生教的。)

完成HtDP之后,您仍然可以返回并阅读SICP,因为现在缺少一些领域知识将不再那么有害,因为您之前已经看过该概念。

注意:HtDP的第二版有一个草稿,您可能要阅读而不是第一版。有关命令式编程的材料已被删除,并且将在尚未成文的第二卷“ 如何设计组件”中进行介绍,但是您可以从第一版或SICP或两者中获得。


我可能会建议使用SICP的替代方法:计算机编程的概念,技术和模型
Eden

@伊甸园:CTM很好,我同意。不过,我不认为它像SICP,HtDP和Concrete Abstractions一样是一本用于编程的书。但这绝对属于“使您成为更好的程序员的书”清单!
约尔格W¯¯米塔格

5

根据我对SICP的理解,它更侧重于函数式编程领域,包括递归编程,以及对CS的深入介绍 -这对于新程序员来说有点难掌握。还有一点,它是为MIT准备和指导的,并且还需要一些工程领域,数学,物理学的良好基础知识,以使这本书有用。

我会建议一本书,其中每本书都着眼于软件工程的不同方面:

  • 代码完成2-专注于软件工程过程。
  • 干净的代码 -专注于小型代码。如何编写类和函数。
  • 务实的程序员 -专注于团队合作生产软件。

可以从以下参考文献中找到上述和其他书籍的详细描述:

  1. 如何成为拥有10本简单书籍的程序员
  2. 初级程序员的最佳书籍

请随意添加到列表中,因为它不理想:)

编辑:在选择上述书籍并确定阅读方式的优先级时,这实际上取决于您主要尝试做的事情或学习的目的。


7
我同意(暗示)上下文中的建议-但是,如果实际上提到您不喜欢(或喜欢)有关SICP的内容,您的答案会更好。
Joris Timmermans 2012年

4
苹果和桔子的比较-您提到的所有书籍都是有关软件工程的优秀书籍。SICP的主题更多是关于计算机科学的概念。
Nate 2012年

1
这个答案感觉太像是推荐阅读清单问题的答案。我认为这与Stack Exchange网站的目标不太吻合:meta.stackexchange.com/questions/113678/…–
Joshua Drake

@Nate,不是要比较的苹果和橘子,这全是关于CS的。即使,每本书都有一些共同的主题。
尤苏波夫2012年

2
@MadKeithV,我同意你的意见。我在第一行中就SICP提出了自己的想法。
尤苏波夫2012年

4

我要走到这里,说什么语言-对大多数人来说可能不是一个好书。

像Knuth一样,这是一本好书。但是,即使假设您是麻省理工学院的热门人物,它仍然需要一年中的大部分时间才能正确阅读,而且在老师和助教的帮助下可以了。

那时您还可以阅读其他有关软件工程的书籍吗?您还可以学习其他语言吗?

编辑只是为了扩展一点:
软件工程就是工程,这全都在于优化。您的任务是在给定的时间和成本预算下最大化您的知识。
SICP是通过功能语言进行编程的高级介绍。它使用功能语言的原因是,与在程序语言中描述的语言相比,用功能语言描述编程的许多数学概念更容易,并且比形式逻辑更易于阅读。

也有一定的姿势,即。“除非您阅读SICP,否则您不是真正的程序员”,或者是Knuth,或者可以使用Lisp,C或x86汇编程序进行编程。通常这很容易反驳。即。除非您了解Cantor在集合论和Maxwell方程上的工作,并且熟悉半导体中的空穴迁移率,否则您不可能成为真正的程序员。


在我的愿望清单上还有其他书籍,例如《代码完成2》,《清洁代码》,《实用程序员》,《重构》等。但是这些书籍更多地以Java或至少以OOP为中心,与SICP不同。
ashishjmeshram 2012年

5
这就是为什么我会首先阅读它们
马丁·贝克特

7
我辩论过否决该答案的问题,但决定只发表一个更好的评论:我同意SICP对大多数人来说不是一本好书,特别是在早期,但我确实相信一个优秀的开发人员应该能够处理这本书,并且会学习从中得到很多。优秀的开发人员不是“大多数人”。这是一本好书。
Joris Timmermans 2012年

4
我不同意(在某种程度上)-一个全面掌握SICP的开发人员仍然可以始终了解Unix环境等。我宁愿雇用没有平台经验但只有SICP并重新培训他们的开发人员,而不愿意无法获得SICP。
Joris Timmermans 2012年

1
@MadKeithV-是的,出于同样的原因,我雇用了没有编码经验的数学/物理学博士。但是,如果您全职以程序员的身份工作,尤其是初学者,那么比起Knuth或SICP或阅读Turing的论文,更简单的书(价值/时间)可能会更好。
马丁·贝克特

1

您是否打算在余生中成为一名“ JAVA程序员”?然后可能有更好的书籍可供阅读。一般而言,如果您想成为一名优秀的程序员,那么这是一本不错的书。这就是为什么。每个好的程序员都需要在其工具箱中使用某些工具。一个是对数据结构和算法的全面了解(如果您不相信我,请去Microsoft,Google,Amazon等采访),伴随的算法是复杂性分析,递归,并且对指针的全面了解不会伤害。当涉及到算法分析,递归过程和一般的功能范例时,我想不到一本比SICP更好或更具有挑战性的书。

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.