Чи добре прочитана книга «Структура та інтерпретація комп’ютерних програм» для програмістів Java? [зачинено]


14

Це може бути суб'єктивним і, ймовірно, буде закритим, але я все ж хотів знати, чи справді це корисно для читання Структура та інтерпретація комп'ютерних програм.

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

У книзі не використовується Java. Не те, щоб я хотів вивчити Java. Мені просто цікаво дізнатись, чи стане корисним читання, щоб бути кращим програмістом, і які речі я можу отримати від книги чи чи інші їхні альтернативи цій книзі більше підходять для програмістів Java?


32
Для початку намагайтеся не позиціонувати себе як "програміста Java". Або як "будь-який мовний програміст". Це глухий кут. Натомість будьте просто програмістом. І тоді, SICP буде надзвичайно корисним. Напевно, найкорисніше читання там.
SK-логіка

3
Це дуже важко, ось чому ви це читаєте.
Джонатан Хенсон

4
Почніть з першої глави, переходьте сторінку за сторінкою, робіть усі приклади, не просувайтесь, поки не зрозумієте кожну сторінку та кожен приклад. Клавіша відповіді - онлайн.
Джонатан Хенсон

2
@JonathanHenson, і коли дойдеш до кінця,
зупинись

3
Так, вам потрібно вивчити схему. Однак одна з причин, якою книга використовує схему, полягає в тому, що ви можете дізнатися всю схему приблизно за день, якщо ви ніколи не програмували раніше або приблизно 10 хвилин, якщо у вас є. Зрештою, SICP - це книга для початківців, вона не передбачає абсолютно ніяких знань з програмування.
Йорг W Міттаг

Відповіді:


23

Ну, я не знаю, чи допоможе вам ця книга, але коли я працював над цією книжкою близько 20 років тому, вона, безумовно, покращила мої навички програмування (незалежно від будь-якої мови програмування). І я думаю, що особливо програміст Java отримає нові уявлення, які він / вона не отримає, дотримуючись лише Java.

Joel Spolsky 2005 написав чудову статтю про Java та SICP, яка може зацікавити вас:

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


+1 Найкраща відповідь на те, що майже відповідає питанню рекомендації щодо книги.
Джошуа Дрейк

13

Я думаю, що " Структура та інтерпретація комп'ютерних програм" - це чудова книга для читання. Однак з цим є пара проблем.

Найбільша проблема в моєму досвіді в тому , що, в той час як книга не вимагає абсолютно ніяких знань в області програмування, і спрямована на повні новачок, вона буде спрямована на повні новачок , які навчаються в MIT . І так, в той час як вона не передбачає будь - яких знань в області програмування, він робить припустити , зовсім небагато області знань, наприклад , в області електротехніки, фізики і математики. Зауважте: вони не мають нічого спільного з поняттями, які навчаються, вони просто необхідні для розуміння вправ та прикладів .

Більше людей, ніж я, пояснили це набагато краще, в умілому заголовку "Структура та інтерпретація навчальної програми з інформатики" . На щастя, вони не просто капризи, вони написали натомість свою власну книгу: Як створювати програми . Якщо ви думаєте про читання SICP, ви можете спершу прочитати HtDP: він охоплює майже те саме, що і SICP, але він передбачає лише середнє знання домену середньої школи. (Насправді це написано, щоб його навчали дітям середньої школи.)

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

Примітка: є проект другого видання HtDP , який ви можете прочитати замість першого видання. Матеріал про імперативне програмування вилучено та буде висвітлено у як-то ще неписаному другому томі « Як конструювати компоненти» , але ви можете взяти їх або з першого видання, або з SICP, або з обох.



@Eden: CTM дуже хороший, я згоден. Я не вважаю це книжкою для навчання програмуванню, хоча, як SICP, HtDP та конкретні абстракції. Але це однозначно належить до списку "книг, які роблять тебе кращим програмістом"!
Йорг W Міттаг

5

З мого розуміння SICP , він більше орієнтований на сфери функціонального програмування, включаючи рекурсивне програмування, і сильне введення в CS - що трохи важко зрозуміти новим програмістам. Ще один момент, він підготовлений та проінструктуваний для MIT, і деякі хороші основи в галузі техніки, математики, фізики також потрібні, щоб ця книга була корисною.

Я б порадив гарний набір книг, де кожен фокусується на різних аспектах інженерії програмного забезпечення:

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

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

  1. Як бути програмістом з 10 простих книг
  2. Найкращі книги для початківців програмістів

Будь ласка, не соромтеся додавати до списку, оскільки він не ідеальний :)

Редагувати: Вибираючи вищезгадані книги та визначаючи пріоритет того, як їх читати, це дійсно зводиться до мети того, що ви в першу чергу намагаєтеся зробити чи навчитися.


7
Я погоджуюся з пропозиціями в (мається на увазі) контексті - але ваша відповідь була б ще кращою, якби вона насправді згадувала те, що вам не подобається (або ви хочете) щодо програми SICP.
Joris Timmermans

4
Порівняння яблук і апельсинів - усі згадувані вами книги - це чудові книги про інженерію програмного забезпечення. SICP більше стосується інформатики - що таке концептуальне програмування.
Нейт

1
Ця відповідь занадто схожа на відповідь на рекомендоване запитання зі списку для читання. Я не вважаю, що це добре відповідає цілі сайтів обміну стеками
Джошуа Дрейк

@Nate, це не яблука та апельсини для порівняння, це все про CS. Незважаючи на те, що кожна з книг поділяє деякі загальні теми.
Юсубов

2
@MadKeithV, я згоден з вашими коментарями. Я поставив свої думки щодо SICP в першому рядку.
Юсубов

4

Я збираюся вийти на кінцівку тут і сказати - напевно, не дуже добре читають для більшості людей - незалежно від мови.

Як і Кнут, це хороша книга, яку треба прочитати. Однак навіть якщо припустити, що ви гарячий кадр MIT ugrad, все одно знадобиться найкраща частина року, щоб прочитати належним чином, і це з викладачами та ТА.

Чи є інші книги з інженерії програмного забезпечення, які ви могли прочитати в той час, які були б більш корисними? Чи є інші мови, яких ви могли вивчити в той час?

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

Існує також певна кількість позу, тобто. "Ви насправді не програміст, якщо ви не читаєте SICP", або Knuth, або можете програмувати в Lisp, або C, або асемблері x86. Це, як правило, легко спростувати; тобто. Ви не можете бути справжнім програмістом, якщо не знаєте роботи Кантора над теорією множин та рівняннями Максвелла і не знайомі з рухливістю отворів у напівпровідниках.


У моєму списку побажань були й інші книги, такі як Code Complete 2, Clean code, Pragamatic programer, Refactoring і т. Д. Але вони були більше на Java або принаймні орієнтовані на OOP на відміну від SICP.
ashishjmeshram

5
Тому я прочитав би їх першим
Мартін Бекетт

7
Я обговорював це рішення, але вирішив, що коментар був кращим: я погоджуюся, що SICP не дуже добре читається для більшості людей, особливо на початку, але я вважаю, що великий розробник повинен вміти обробляти цю книгу і навчиться багато з цього. Чудові розробники - це не "більшість людей". Це гарна книга фільтрів.
Joris Timmermans

4
Я не погоджуюсь (до певної точки) - добре розвинений розробник, який має SICP під поясом, завжди може дізнатися про середовище Unix тощо. Я б швидше найняв розробника, який не має досвіду роботи на платформі, окрім SICP та перекваліфікувати їх, ніж хтось, хто не не отримаю SICP.
Joris Timmermans

1
@MadKeithV - Так, і з тієї ж причини я наймаю кандидатів з математики / фізики без досвіду кодування. Але якщо ви працюєте повний робочий день як програміст, і особливо початківець, є більш прості книги, які, можливо, кращі (ціна / час), ніж Кнут чи SICP, або читаєте документи Тьюрінга.
Мартін Бекетт

1

Чи плануєте ви бути програмістом JAVA все життя? Тоді, мабуть, краще читати книги. Якщо ви хочете бути хорошим програмістом взагалі, то це відмінне читання. Ось чому. Є певні інструменти, які потребує кожен хороший програміст у своїй панелі інструментів. Перше - це ґрунтовне знання структур даних та алгоритмів (якщо ви мені не вірите, пройдіть співбесіду в Microsoft, Google, Amazon тощо), супровідні алгоритми - це аналіз складності, рекурсія, і чітке розуміння покажчиків не означає боляче. Що стосується аналізу алгоритмів, рекурсивних процесів та функціональної парадигми загалом, я не можу придумати кращу чи складнішу книгу, ніж SICP.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.