Является ли книга «Структура и интерпретация компьютерных программ» полезной для программистов на Java? [закрыто]

14

Это может быть субъективно и, вероятно, будет закрыто, но я все еще хотел знать, действительно ли полезно читать «Структура и интерпретация компьютерных программ».

Структура и интерпретация компьютерных программ

Книга не использует Java. Не то чтобы я хотел изучать Java. Мне просто любопытно узнать, будет ли полезно читать, чтобы стать лучшим программистом, и что я могу извлечь из этой книги или какие другие альтернативы этой книге больше подходят для программистов на Java?

ashishjmeshram
источник
32
Для начала, постарайтесь не позиционировать себя как «Java-программист». Или как «программист на любом языке». Это тупик. Будь просто программистом. И потом, SICP будет чрезвычайно полезным. Наверное, самое полезное чтение там.
SK-logic
3
Это очень сложно, поэтому ты читаешь это.
Джонатан Хенсон
4
Начните с первой главы, переходите по страницам, работайте со всеми примерами, не продвигайтесь, пока не разберетесь с каждой страницей и каждым примером. Ключ ответа онлайн.
Джонатан Хенсон
2
@JonathanHenson и когда ты доберешься до конца, остановись
jk.
3
Да, вам нужно изучить схему. Однако одна из причин, по которой книга использует Схему, состоит в том, что вы можете изучить всю Схему за день, если вы никогда не программировали ранее, или около 10 минут, если у вас есть. В конце концов, SICP - это книга для начинающих, она не предполагает абсолютно никаких знаний в области программирования.
Йорг Миттаг

Ответы:

23

Ну, я не знаю, поможет ли эта книга вам, но когда я проработал эту книгу около 20 лет назад, это определенно улучшило мои навыки программирования (независимо от любого языка программирования). И я предполагаю, что особенно программист на Java получит некоторые новые идеи, которых он / она не получит, придерживаясь только Java.

Джоэл Спольски 2005 написал хорошую статью о Java и SICP, которая может вас заинтересовать:

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

Док Браун
источник
+1 Лучший возможный ответ на то, что почти равнозначно вопросу рекомендации книги.
Джошуа Дрейк
13

Я думаю, что « Структура и интерпретация компьютерных программ» - отличная книга для чтения. Тем не менее, есть несколько проблем с этим.

Самая большая проблема в моем опыте в том , что, в то время как книга не требует абсолютно никаких знаний в области программирования, и направлена на полные новичок, она будет направлена на полные новичок , которые учатся в MIT . И так, в то время как она не предполагает каких - либо знаний в области программирования, он делает предположить , совсем немного области знаний, например , в области электротехники, физики и математики. Примечание: они не имеют никакого отношения к изучаемым концепциям , они просто необходимы для понимания упражнений и примеров .

Более великие люди, чем я, объяснили это намного лучше в умно озаглавленной статье «Структура и интерпретация учебного плана по информатике» . К счастью, они не просто нытики, они вместо этого написали свою собственную книгу: Как разрабатывать программы . Если вы думаете о чтении SICP, вы можете сначала прочитать HtDP: он охватывает практически то же основание, что и SICP, но предполагает только знание предметной области среднего школьного уровня. (На самом деле, это написано, чтобы учить детей средней школы.)

После того, как вы закончили HtDP, вы все еще можете вернуться и прочитать SICP, поскольку теперь некоторые недостающие знания предметной области больше не будут столь вредными, потому что вы уже видели эту концепцию раньше.

Примечание: есть черновик для второго издания HtDP , который вы можете прочитать вместо первого издания. Материал об императивном программировании был удален и будет описан во еще не написанном втором томе « Как проектировать компоненты» , но вы можете взять их либо из первого издания, либо из SICP, либо из обоих.

Йорг Миттаг
источник
Могу ли я предложить альтернативу SICP: концепции, методы и модели компьютерного программирования
Eden
@Eden: CTM очень хорош, я согласен. Я не думаю, что это книга для обучения программированию, как, например, SICP, HtDP и Concrete Abstractions. Но он определенно входит в список «книг, которые делают тебя лучшим программистом»!
Йорг Миттаг
5

Исходя из моего понимания SICP , он более сфокусирован на областях функционального программирования, включая рекурсивное программирование и сильное введение в CS - что довольно трудно понять новым программистам. Другой момент, он подготовлен и проинструктирован для Массачусетского технологического института, и некоторые хорошие основы в области инженерии, математики, физики также необходимы, чтобы найти эту книгу полезной.

Я бы посоветовал хороший набор книг, каждый из которых посвящен различным аспектам разработки программного обеспечения:

  • Code Complete 2 - фокусируется на процессах разработки программного обеспечения.
  • Чистый код - ориентирован на кодирование в малом. Как писать классы и функции.
  • Прагматичный программист - фокусируется на работе в команде, производящей программное обеспечение.

Более подробное описание упомянутых книг выше и других раз можно найти по следующим ссылкам:

  1. Как стать программистом с 10 простыми книгами
  2. Лучшие книги для начинающих программистов

Пожалуйста, не стесняйтесь добавлять в список, так как он не идеален :)

Редактировать: при выборе вышеупомянутых книг и определении приоритета того, как их читать, это действительно сводится к цели того, что вы изначально пытаетесь делать или изучать.

Юсубы
источник
7
Я согласен с предложениями в (подразумеваемом) контексте - но ваш ответ был бы еще лучше, если бы в нем действительно упоминалось, что вам не нравится (или не нравится) в SICP.
Йорис Тиммерманс
4
Сравнение яблок и апельсинов - все упомянутые вами книги - отличные книги по разработке программного обеспечения. SICP больше о компьютерных науках - что такое компьютерное программирование концептуально.
Нат
1
Этот ответ слишком похож на ответ на рекомендуемый вопрос списка чтения. Который, я не верю, хорошо вписывается в цели сайтов Stack Exchange: meta.stackexchange.com/questions/113678/…
Джошуа Дрейк,
@Nate, это не яблоки и апельсины для сравнения, это все о CS. Тем не менее, каждая из книг имеет общие темы.
Юсубов
2
@MadKeithV, я согласен с твоими комментариями. Я положил свои мысли на SICP в первой строке.
Юсубов
4

Я собираюсь выйти на конечности здесь и сказать - вероятно, не очень хорошее чтение для большинства людей - на любом языке.

Как Кнут, это хорошая книга для чтения. Однако даже если предположить, что вы горячо работаете в MIT ugrad, правильное чтение все равно займет лучшую часть года, и это поможет лекторам и ТП.

Есть ли другие книги по программной инженерии, которые вы могли бы прочитать за это время, которые были бы более ценными? Есть ли другие языки, которые вы могли бы изучить за это время?

Просто для того, чтобы немного расширить:
разработка программного обеспечения - это разработка, все дело в оптимизации. Ваша задача - максимизировать свои знания в течение определенного времени и затрат.
SICP - это введение в программирование высокого уровня через функциональный язык. Причина, по которой он использует функциональный язык, заключается в том, что на математических языках проще описать множество математических концепций программирования, чем на процедурных, и его гораздо легче читать, чем формальную логику.

Существует также определенное количество позы, т.е. «Вы на самом деле не программист, если вы не читаете SICP», или Кнут, или можете программировать на Лиспе, C или ассемблере x86. Это обычно легко опровергнуть; то есть. Вы не можете быть настоящим программистом, если не знаете работы Кантора по теории множеств и уравнениям Максвелла и не знакомы с подвижностью дырок в полупроводниках.

Мартин Беккет
источник
В моем списке пожеланий были и другие книги, такие как Code Complete 2, Чистый код, Программисты Pragamatic, Рефакторинг и т. Д. Но они были больше на java или, по крайней мере, ориентированы на ООП, в отличие от SICP.
Ашишмешмеш
5
Вот почему я прочитал бы их первым
Мартин Беккет
7
Я спорил об отрицании этого ответа, но решил, что просто комментарий был лучше: я согласен, что SICP не является хорошим чтением для большинства людей, особенно на ранних этапах, но я верю, что великий разработчик должен быть в состоянии справиться с этой книгой и научится многое из этого. Великие разработчики не "большинство людей". Это хорошая книга фильтров.
Йорис Тиммерманс
4
Я не согласен (в какой-то степени) - разносторонний разработчик, у которого SICP за плечами, всегда может узнать о среде Unix и т. Д. Я бы предпочел нанять разработчика без опыта работы с платформой, кроме SICP, и переобучить его, чем кого-то, кто этого не делает. получите SICP.
Йорис Тиммерманс
1
@MadKeithV - Да, и по той же причине я нанимаю докторов математики и физики без опыта программирования. Но если вы работаете полный рабочий день программистом, и особенно новичком, есть более простые книги, которые, возможно, лучше (ценность / время), чем Кнут или SICP или читают статьи Тьюринга.
Мартин Беккет
1

Вы планируете стать «программистом JAVA» на всю оставшуюся жизнь? Тогда, вероятно, есть лучшие книги для чтения. Если вы хотите быть хорошим программистом в целом, тогда это отличное чтение. Вот почему. В наборе инструментов есть определенные инструменты, которые нужны каждому хорошему программисту. Одним из них является глубокое знание структур данных и алгоритмов (если вы мне не верите, сходите на собеседование в Microsoft, Google, Amazon и т. Д.), Сопутствующие алгоритмы - это анализ сложности, рекурсия, а хорошее понимание указателей - нет. причинить боль. Когда речь заходит об анализе алгоритмов, рекурсивных процессах и функциональной парадигме в целом, я не могу придумать лучшую или более сложную книгу, чем SICP.

Джонатан Хенсон
источник