В настоящее время этот вопрос не очень подходит для нашего формата вопросов и ответов. Мы ожидаем, что ответы будут подтверждены фактами, ссылками или опытом, но этот вопрос, скорее всего, вызовет дебаты, споры, опрос или расширенное обсуждение. Если вы считаете, что этот вопрос можно улучшить и, возможно, вновь открыть, обратитесь за помощью в справочный центр .
Закрыто 7 лет назад .
Это может быть субъективно и, вероятно, будет закрыто, но я все еще хотел знать, действительно ли полезно читать «Структура и интерпретация компьютерных программ».
Книга не использует Java. Не то чтобы я хотел изучать Java. Мне просто любопытно узнать, будет ли полезно читать, чтобы стать лучшим программистом, и что я могу извлечь из этой книги или какие другие альтернативы этой книге больше подходят для программистов на Java?
Для начала, постарайтесь не позиционировать себя как «Java-программист». Или как «программист на любом языке». Это тупик. Будь просто программистом. И потом, SICP будет чрезвычайно полезным.
Слушать книгу Структура и интерпретация компьютерных программ 3.5
Наверное, самое полезное чтение там.
Это очень сложно, поэтому ты читаешь это.
Начните с первой главы, переходите по страницам, работайте со всеми примерами, не продвигайтесь, пока не разберетесь с каждой страницей и каждым примером. Ключ ответа онлайн.
Да, вам нужно изучить схему. Однако одна из причин, по которой книга использует Схему, состоит в том, что вы можете изучить всю Схему за день, если вы никогда не программировали ранее, или около 10 минут, если у вас есть. В конце концов, SICP — это книга для начинающих, она не предполагает абсолютно никаких знаний в области программирования.
Ну, я не знаю, поможет ли эта книга вам, но когда я проработал эту книгу около 20 лет назад, это определенно улучшило мои навыки программирования (независимо от любого языка программирования). И я предполагаю, что особенно программист на Java получит некоторые новые идеи, которых он / она не получит, придерживаясь только Java.
Джоэл Спольски 2005 написал хорошую статью о Java и SICP, которая может вас заинтересовать:
+1 Лучший возможный ответ на то, что почти равнозначно вопросу рекомендации книги.
Я думаю, что « Структура и интерпретация компьютерных программ» — отличная книга для чтения. Тем не менее, есть несколько проблем с этим.
Самая большая проблема в моем опыте в том , что, в то время как книга не требует абсолютно никаких знаний в области программирования, и направлена на полные новичок, она будет направлена на полные новичок , которые учатся в MIT . И так, в то время как она не предполагает каких — либо знаний в области программирования, он делает предположить , совсем немного области знаний, например , в области электротехники, физики и математики. Примечание: они не имеют никакого отношения к изучаемым концепциям , они просто необходимы для понимания упражнений и примеров .
Более великие люди, чем я, объяснили это намного лучше в умно озаглавленной статье «Структура и интерпретация учебного плана по информатике» . К счастью, они не просто нытики, они вместо этого написали свою собственную книгу: Как разрабатывать программы . Если вы думаете о чтении SICP, вы можете сначала прочитать HtDP: он охватывает практически то же основание, что и SICP, но предполагает только знание предметной области среднего школьного уровня. (На самом деле, это написано, чтобы учить детей средней школы.)
Слушать книгу Структура и интерпретация компьютерных программ 3.6
После того, как вы закончили HtDP, вы все еще можете вернуться и прочитать SICP, поскольку теперь некоторые недостающие знания предметной области больше не будут столь вредными, потому что вы уже видели эту концепцию раньше.
Примечание: есть черновик для второго издания HtDP , который вы можете прочитать вместо первого издания. Материал об императивном программировании был удален и будет описан во еще не написанном втором томе « Как проектировать компоненты» , но вы можете взять их либо из первого издания, либо из SICP, либо из обоих.
Могу ли я предложить альтернативу SICP: концепции, методы и модели компьютерного программирования
Исходя из моего понимания SICP , он более сфокусирован на областях функционального программирования, включая рекурсивное программирование и сильное введение в CS — что довольно трудно понять новым программистам. Другой момент, он подготовлен и проинструктирован для Массачусетского технологического института, и некоторые хорошие основы в области инженерии, математики, физики также необходимы, чтобы найти эту книгу полезной.
Я бы посоветовал хороший набор книг, каждый из которых посвящен различным аспектам разработки программного обеспечения:
- Code Complete 2 — фокусируется на процессах разработки программного обеспечения.
- Чистый код — ориентирован на кодирование в малом. Как писать классы и функции.
- Прагматичный программист — фокусируется на работе в команде, производящей программное обеспечение.
Более подробное описание упомянутых книг выше и других раз можно найти по следующим ссылкам:
- Как стать программистом с 10 простыми книгами
- Лучшие книги для начинающих программистов
Пожалуйста, не стесняйтесь добавлять в список, так как он не идеален 🙂
Редактировать: при выборе вышеупомянутых книг и определении приоритета того, как их читать, это действительно сводится к цели того, что вы изначально пытаетесь делать или изучать.
Я согласен с предложениями в (подразумеваемом) контексте — но ваш ответ был бы еще лучше, если бы в нем действительно упоминалось, что вам не нравится (или не нравится) в SICP.
Сравнение яблок и апельсинов — все упомянутые вами книги — отличные книги по разработке программного обеспечения. SICP больше о компьютерных науках — что такое компьютерное программирование концептуально.
Этот ответ слишком похож на ответ на рекомендуемый вопрос списка чтения. Который, я не верю, хорошо вписывается в цели сайтов Stack Exchange: meta.stackexchange.com/questions/113678/…
Я собираюсь выйти на конечности здесь и сказать — вероятно, не очень хорошее чтение для большинства людей — на любом языке.
Как Кнут, это хорошая книга для чтения. Однако даже если предположить, что вы горячо работаете в MIT ugrad, правильное чтение все равно займет лучшую часть года, и это поможет лекторам и ТП.
Есть ли другие книги по программной инженерии, которые вы могли бы прочитать за это время, которые были бы более ценными? Есть ли другие языки, которые вы могли бы изучить за это время?
Просто для того, чтобы немного расширить:
разработка программного обеспечения — это разработка, все дело в оптимизации. Ваша задача — максимизировать свои знания в течение определенного времени и затрат.
SICP — это введение в программирование высокого уровня через функциональный язык. Причина, по которой он использует функциональный язык, заключается в том, что на математических языках проще описать множество математических концепций программирования, чем на процедурных, и его гораздо легче читать, чем формальную логику.
Существует также определенное количество позы, т.е. «Вы на самом деле не программист, если вы не читаете SICP», или Кнут, или можете программировать на Лиспе, C или ассемблере x86. Это обычно легко опровергнуть; то есть. Вы не можете быть настоящим программистом, если не знаете работы Кантора по теории множеств и уравнениям Максвелла и не знакомы с подвижностью дырок в полупроводниках.
В моем списке пожеланий были и другие книги, такие как Code Complete 2, Чистый код, Программисты Pragamatic, Рефакторинг и т. Д. Но они были больше на java или, по крайней мере, ориентированы на ООП, в отличие от SICP.
Вот почему я прочитал бы их первым
Я спорил об отрицании этого ответа, но решил, что просто комментарий был лучше: я согласен, что SICP не является хорошим чтением для большинства людей, особенно на ранних этапах, но я верю, что великий разработчик должен быть в состоянии справиться с этой книгой и научится многое из этого. Великие разработчики не «большинство людей». Это хорошая книга фильтров.
Я не согласен (в какой-то степени) — разносторонний разработчик, у которого SICP за плечами, всегда может узнать о среде Unix и т. Д. Я бы предпочел нанять разработчика без опыта работы с платформой, кроме SICP, и переобучить его, чем кого-то, кто этого не делает. получите SICP.
Вы планируете стать «программистом JAVA» на всю оставшуюся жизнь? Тогда, вероятно, есть лучшие книги для чтения. Если вы хотите быть хорошим программистом в целом, тогда это отличное чтение. Вот почему. В наборе инструментов есть определенные инструменты, которые нужны каждому хорошему программисту.
Одним из них является глубокое знание структур данных и алгоритмов (если вы мне не верите, сходите на собеседование в Microsoft, Google, Amazon и т. Д.), Сопутствующие алгоритмы — это анализ сложности, рекурсия, а хорошее понимание указателей — нет. причинить боль. Когда речь заходит об анализе алгоритмов, рекурсивных процессах и функциональной парадигме в целом, я не могу придумать лучшую или более сложную книгу, чем SICP.
Источник: qastack.ru
Итоги двух лет изучения «Structure and Interpretation of Computer Programs»
Я считаю, что разработка ПО в значительной степени заключается в программировании на псевдокоде. Если ты представил псевдокод, то перевести его на Python, C, что угодно — не проблема. Основная сложность заключается вот в этой концептуальной деятельности, а не в кодировании. Нужно знать, как подходить к тем или иным вопросам. Модульность, абстракция.
Гибкость, надёжность, простота. Шаблоны проектирования. Юнит-тестирование. Ю ноу.
Есть на свете курс «Структура и Интерпретация Компьютерных Программ» (далее СИКП), который позиционируется как введение в Computer Science и ранее использовался в MIT для обучения первокурсников. Два года назад я с удовольствием одолел курс лекций по нему и взялся за книгу.
Сначала расскажу о хорошем. Текст повествует о штуках весьма далёких от моей ежедневной работы и позволил мне по-новому взглянуть на программирование. Функциональщина — это целый мир, живущий по своим законам.
Язык Лисп очень отличается от привычного мне языка Си бешеной гибкостью за счёт динамической типизации, автоматического управления памятью, возможности переопределения чего угодно во время выполнения. У меня сформировалась более разностороннее представление о том, как в принципе можно решать разные задачи.
Говоря шахматным языком, я сильно пополнил свой репертуар домашних заготовок, которые пригождаются в работе (пусть и не каждый день). Упражнения заставляли мой мозг работать (временами очень интенсивно), переосмысливать и систематизировать ранее полученные знания. В общем и целом изучение СИКП сделало меня более хорошим разработчиком, расширило мой кругозор. Уверен, я стал смотреть на разные вещи более системным и зрелым взглядом.
Книга постоянно толкала на размышления, за это ей низкий поклон. Я глубоко осознал вещи, которые вроде бы всем известны, но которые поэтому все ленятся упоминать. Например, что всё ПО сначала делается простым, а потом неизбежно усложняется ради повышения производительности. Пользователю-то плевать, сколько строк исходного кода внутри, а вот скорость имеет значение.
А что там насчёт конкретных эффектов для работы? Я стал лучше видеть недочёты во время code review (в первую очередь, своего же кода). Полюбил маленькие функции, желательно как можно более общего вида. Стал практиковать аккуратное и уместное использование макросов — иногда на Си можно осторожно сделать что-то не по правилам, и от этого все только победят. Опыт, полученный при решении упражнений из книги, помог мне в некоторых задачах по работе.
Но это одна сторона медали. Другая заключается в том, что подход этого курса к обучению можно выразить английским фразеологизмом «sink or swim». Перед тобой стоит перекладина, рядом с ней задание: подтянуться 10 раз. В принципе, этого достаточно для выполнения задачи, но нельзя сказать, что такой подход приятен. Я бы сказал, он весьма выматывает!
Тебя бросают в бой полуподготовленного, и часть материала ты познаёшь не на объяснениях, а на своих ошибках. Наверное, это допустимый способ обучения высокомотивированных людей, но меня-лентяя он порядком выжал. Я с трудом терпел его на протяжении 3 глав из 5 (порой я делал паузы на несколько месяцев!), сделал упражнения в них от начала и до конца, но кажется, моё терпение исчерпано.
Например, в книге нет ни слова о том, как организовать свой рабочий процесс. Нет даже приблизительного рассмотрения таких понятий, как «отладка» (она здесь специфическая), «IDE» (они здесь специфические), «юнит-тесты», «разбиение на файлы для повторного использования».
Имеются фрагменты, где разрабатывается некая сложная система, которая будет целиком готова лишь к концу главы, а задания появляются после каждого пункта текста. Т.е. строго говоря, прочитав до страницы N, ты в ряде случаев не можешь решить задачу с этой страницы, не утащив код с последующих страниц.
Код нужно тащить аккуратно, ибо в примечаниях могут обсуждаться неочевидные тонкости, а порой какой-то код приводится в качестве примера неработающей идеи. Это раздражает! Да, это прям как в реальной жизни — надо самому доопределять задачу, искать что-то в интернетах, но блин… Этожучебник! Я наедаюсь непростыми задачами на работе, и может, авторам стоило более педантично подойти к тексту? Ладно я, профессиональный погромист с быстрым доступом в интернеты, а как было первокурснику MIT в восьмидесятых? Уверен, несладко…
Подчеркну главные плюсы книги: она позволяет получить личный опыт, набить свои шишки, подумать над сложными проблемами в общем виде. С ними непосредственно связаны минусы: она сложная и зачастую даёт тебе мало подсказок для понимания чего-то. Например, если ты имеешь какой-то боевой опыт, то знаешь, что код без юнит-тестов нельзя назвать решением, но книга тебе об этом не скажет.
Надо самому до этого дойти! А как ты думал? Ну или вру, книга об этом скажет, но максимально садистским способом. У тебя будет следующее задание, опирающееся на предыдущее (такое там сплошь и рядом). Если у тебя раньше заработал один тестовый кейс и ты решил «Отлично, едем дальше!», то за поворотом тебя ждёт счастливая отладка решений сразу двух заданий.
Наверное, когда это произойдёт несколько раз, ты поймёшь, что делаешь что-то не так. Главное, чтобы в такие моменты ты не бросал курс, а разбирался, тогда всё будет хорошо!
Ещё одна раздражающая черта текста: задания (опять же, как и в реальной жизни) порой недостаточно хорошо определены. Я на днях делал упражнение, за полчаса набросал решение, стал перечитывать формулировку задачи. Оказалось, что если рассуждать педантично, то я выполнил его на 95%, затратив примерно 40% усилий. Большинство чуваков, с которыми я сверялся, сделали так же.
Один сделал полноценно, но использовал хак из другого интерпретатора Лиспа. Я огорчился и плюнул, потеряв мотивацию продолжать в ближайшее время. Ещё раз проговорю суть проблемы: есть задания, в которых всё решается просто и логично, но только если не быть к себе строгим. Так и в реальной жизни, я понимаю, но у меня были другие ожидания от учебника. Когда делаешь упражнение в свободное время и сам себя проверяешь, то хочется решить проблему на 100%, а не «достаточно хорошо для текущей итерации».
Проблема с юнит-тестами вообще-то того же рода. Иногда нужно неслабо запотеть и подумать, чтобы просто внедрить их в систему. Я-то знаю, что без них никуда, но более простые ребята просто набрасывают решения без проверки и идут дальше! Чем ты строже, внимательнее, опытнее, тем сложнее для тебя становятся задания. Иногда просто в разы!
Это демотивирует, потому что тут, в отличие от работы, за это не хвалят и не платят, а итеративный подход плохо применим. Знания и умения, полезные в реальной жизни, больно бьют по рукам при решении студенческих задачек!
Стоит сказать, что в книге много математики. Решая упражнения, я понял красоту и силу этой науки, но порой мне было тяжело именно из-за этих специфических вопросов, лишь косвенно касающихся решаемых задач. Просто авторы решили что-то показать на примере скажем интегрирования, вот ты и вспоминай да ботай!
В общем и целом, я не жалею, что вписался в эту авантюру, она была для меня полезной. Тем не менее, другим людям я рекомендую поискать что-то получше. Например, на основе СИКП с учётом его ошибок (так говорят, я не проверял) недавно был сделан курс «How to Design Programs». Полагаю, стоило и мне на него позариться, но время уже не отмотаешь.
- рецензия
- SICP
- Lisp
- функциональное программирование
- самообразование
Источник: habr.com
Структура и интерпретация компьютерных программ
Джули Сассман , Харольд Абельсон , Джеральд Джей Сассман
- Написать рецензию
- Добавить цитату
- Рассказать историю
- Создать подборку
нет оценки
Все уведомления Рецензии Цитаты
Издательство: | Добросвет |
Лучшая цитата на книгу
18 сентября 2021 г., 03:37
Содержание
Дополнительная информация об издании
Год издания: 2006
Жанры и теги
Цитаты
18 сентября 2021 г., 03:37
18 сентября 2021 г., 03:32
Источник: www.livelib.ru