Czy książka „Struktura i interpretacja programów komputerowych” jest dobrą lekturą dla programistów Java? [Zamknięte]

14

Może to być subiektywne i prawdopodobnie zostanie zamknięte, ale nadal chciałem wiedzieć, czy naprawdę pomaga odczytać strukturę i interpretację programów komputerowych.

Struktura i interpretacja programów komputerowych

Książka nie korzysta z Java. Nie żebym chciał nauczyć się Javy. Jestem ciekawy, czy przydałaby się lektura, aby być lepszym programistą i jakie są rzeczy, które mogę zyskać dzięki książce, czy też są inne alternatywy dla tej książki bardziej odpowiednie dla programistów Java?

ashishjmeshram
źródło
32
Na początek staraj się nie pozycjonować jako „programista Java”. Lub jako „programista w dowolnym języku”. To ślepy zaułek. Zamiast tego zostań tylko programistą. A potem SICP będzie niezwykle przydatny. Prawdopodobnie najbardziej przydatna lektura.
SK-logic
3
To jest bardzo trudne, dlatego to czytasz.
Jonathan Henson
4
Zacznij od rozdziału pierwszego, idź strona po stronie, pracuj ze wszystkimi przykładami, nie rób postępów, dopóki nie zrozumiesz każdej strony i każdego przykładu. Klucz odpowiedzi jest online.
Jonathan Henson
2
@JathanathanHenson i kiedy dojdziesz do końca, przestań
jk.
3
Tak, musisz nauczyć się Schematu. Jednak jednym z powodów, dla których książka używa Schematu, jest to, że możesz nauczyć się całego Schematu w ciągu około jednego dnia, jeśli nigdy wcześniej nie programowałeś lub około 10 minut, jeśli masz. W końcu SICP jest książką dla kompletnych początkujących, nie zakłada absolutnie żadnej wiedzy programistycznej.
Jörg W Mittag

Odpowiedzi:

23

Cóż, nie wiem, czy ta książka ci pomoże, ale kiedy przepracowałem ją około 20 lat temu, zdecydowanie poprawiła moje umiejętności programowania (niezależnie od jakiegokolwiek języka programowania). Wydaje mi się, że szczególnie programista Java uzyska nowe informacje, których nie uzyska, pozostając tylko w Javie.

Joel Spolsky 2005 napisał fajny artykuł o Javie i SICP, który może Cię zainteresować:

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

Doktor Brown
źródło
+1 Najlepsza możliwa odpowiedź na to, co prawie oznacza pytanie o rekomendację książki.
Joshua Drake
13

Myślę, że struktura i interpretacja programów komputerowych to świetna książka do czytania. Jest jednak kilka problemów.

Największym problemem z mojego doświadczenia jest to, że chociaż książka nie wymaga absolutnie żadnej wiedzy programistycznej i jest nastawiona na kompletnych początkujących, jest przeznaczona dla kompletnych początkujących, którzy studiują na MIT . I tak, gdy nie ponoszą żadnej wiedzy programistycznej, to nie zakładamy sporo domeną wiedzy, na przykład w dziedzinie inżynierii elektrycznej, fizyki i matematyki. Uwaga: nie mają one nic wspólnego z nauczanymi pojęciami , są po prostu potrzebne do zrozumienia ćwiczeń i przykładów .

Więksi ludzie niż ja wyjaśnili to znacznie lepiej w sprytnie zatytułowanym artykule Struktura i interpretacja programu nauczania informatyki . Na szczęście nie są to tylko marudzenie, zamiast tego napisali własną książkę: Jak projektować programy . Jeśli myślisz o czytaniu SICP, możesz najpierw przeczytać HtDP: obejmuje on prawie ten sam grunt co SICP, ale zakłada jedynie wiedzę w zakresie średniej domeny średniej. (W rzeczywistości jest napisany, aby go uczyć dzieci w szkole średniej).

Po zakończeniu HtDP nadal możesz wrócić i przeczytać SICP, ponieważ teraz trochę brakującej wiedzy o domenie nie będzie już tak szkodliwy, ponieważ wcześniej widziałeś tę koncepcję.

Uwaga: istnieje wersja robocza drugiej edycji HtDP , którą możesz przeczytać zamiast pierwszej. Materiał dotyczący programowania imperatywnego został usunięty i zostanie omówiony w niepisanym jeszcze drugim tomie How to Design Components , ale możesz wziąć je albo z pierwszego wydania, albo z SICP, albo z obu.

Jörg W Mittag
źródło
Czy mogę zasugerować alternatywę dla SICP: koncepcje, techniki i modele programowania komputerowego
Eden
@Eden: CTM jest bardzo dobry, zgadzam się. Nie uważam tego za książkę do nauczania programowania, jak SICP, HtDP i konkretne abstrakty. Ale zdecydowanie należy do listy „książek, które czynią cię lepszym programistą”!
Jörg W Mittag,
5

Z mojego zrozumienia SICP jest bardziej skoncentrowany na obszarach programowania funkcjonalnego, w tym programowaniu rekurencyjnym i mocnym wprowadzeniu do CS - co jest nieco trudne do zrozumienia dla nowych programistów. Kolejna kwestia: jest ona przygotowana i poinstruowana dla MIT, a także kilka dobrych podstaw inżynierii, matematyki i fizyki, aby ta książka była przydatna.

Poradziłbym dobry zestaw książek, w których każda koncentruje się na różnych aspektach inżynierii oprogramowania:

  • Code Complete 2 - koncentruje się na procesach inżynierii oprogramowania.
  • Clean Code - koncentruje się na kodowaniu w małych. Jak pisać klasy i funkcje.
  • Pragmatic Programmer - koncentruje się na pracy w zespole produkującym oprogramowanie.

Bardziej szczegółowy opis wspomnianych książek powyżej i innych można znaleźć w następujących źródłach:

  1. Jak zostać programistą z 10 prostymi książkami
  2. Najlepsze książki dla początkujących programistów

Nie krępuj się, dodając do listy, bo nie jest idealna :)

Edycja: Przy wyborze wyżej wymienionych książek i określaniu priorytetu sposobu ich czytania, tak naprawdę sprowadza się to do tego, na czym przede wszystkim próbujesz się zajmować .

Jusubow
źródło
7
Zgadzam się z sugestiami w (domniemanym) kontekście - ale twoja odpowiedź byłaby jeszcze lepsza, gdyby faktycznie wspomniała o tym, czego nie lubisz (lub lubisz) w SICP.
Joris Timmermans
4
Porównanie jabłek i pomarańczy - wszystkie wspomniane książki są doskonałymi książkami o inżynierii oprogramowania. SICP bardziej dotyczy informatyki - czym jest programowanie komputerowe w sensie koncepcyjnym.
Nate
1
Ta odpowiedź wydaje się zbyt podobna do odpowiedzi na zalecane pytanie z listy lektur. Co, moim zdaniem, nie pasuje dobrze do celu stron Stack Exchange: meta.stackexchange.com/questions/113678/...
Joshua Drake
@Nate, to nie jabłka i pomarańcze do porównania, chodzi tylko o CS. Mimo to każda z książek ma kilka wspólnych tematów.
Yusubov
2
@MadKeithV, zgadzam się z twoimi komentarzami. W pierwszej linii umieściłem swoje przemyślenia na temat SICP.
Yusubov
4

Wychodzę na kończynę i mówię - prawdopodobnie nie jest to dobra lektura dla większości ludzi - w jakimkolwiek języku.

Podobnie jak Knuth to dobra książka do przeczytania. Jednak nawet zakładając, że jesteś gorącym ugradem MIT, nadal zajmie to najlepszą część roku, aby poprawnie czytać, i to z pomocą wykładowców i asystentów technicznych.

Czy są jeszcze inne książki o inżynierii oprogramowania, które można by przeczytać w tym czasie, które byłyby bardziej wartościowe? Czy są jeszcze inne języki, których możesz się uczyć w tym czasie?

edytuj Po prostu rozwinąć:
inżynieria oprogramowania to inżynieria, to wszystko dotyczy optymalizacji. Twoim zadaniem jest zmaksymalizowanie wiedzy w określonym czasie + budżet.
SICP to wprowadzenie do programowania na wysokim poziomie za pomocą funkcjonalnego języka. Używa języka funkcjonalnego, ponieważ łatwiej jest opisać wiele matematycznych pojęć programowania w językach funkcjonalnych niż w proceduralnych i jest dużo łatwiejszy do odczytania niż logika formalna.

Istnieje również pewna ilość postawy, tj. „Tak naprawdę nie jesteś programistą, chyba że czytasz SICP” lub Knuth, lub nie możesz programować w asemblerze Lisp, C lub x86. Zwykle łatwo to obalić; to znaczy. nie możesz być prawdziwym programistą, jeśli nie znasz pracy Cantora nad teorią mnożenia i równań Maxwella i nie znasz się na ruchliwości dziur w półprzewodnikach.

Martin Beckett
źródło
Na mojej liście życzeń były inne książki, takie jak Code Complete 2, Clean code, Pragamatic programiści, Refaktoryzacja itp. Ale były one bardziej na java lub przynajmniej OOP centric w przeciwieństwie do SICP.
ashishjmeshram
5
Właśnie dlatego najpierw je przeczytam
Martin Beckett,
7
Zastanawiałem się nad odrzuceniem tej odpowiedzi, ale zdecydowałem, że tylko komentarz jest lepszy: Zgadzam się, że SICP nie jest dobrą lekturą dla większości ludzi, szczególnie na początku, ale uważam, że świetny programista powinien być w stanie poradzić sobie z tą książką i nauczy się świetna okazja. Wielcy programiści nie są „większością ludzi”. To dobra książka z filtrem.
Joris Timmermans
4
Nie zgadzam się (do pewnego stopnia) - dobrze rozwinięty programista, który ma SICP na swoim koncie, zawsze może dowiedzieć się o środowisku Unix itp. Wolę zatrudnić programistę bez doświadczenia na platformie oprócz SICP i przekwalifikować go, niż kogoś, kto nie dostać SICP.
Joris Timmermans
1
@MadKeithV - Tak i z tego samego powodu wynajmuję matematykę / fizykę, bez doświadczenia w programowaniu. Ale jeśli pracujesz w pełnym wymiarze godzin jako programista, a zwłaszcza początkujący, istnieją prostsze książki, które są prawdopodobnie lepsze (wartość / czas) niż Knuth lub SICP lub czytając dokumenty Turinga.
Martin Beckett,
1

Czy zamierzasz być „programistą JAVA” do końca życia? Są prawdopodobnie lepsze książki do przeczytania. Jeśli chcesz być ogólnie dobrym programistą, to jest to doskonała lektura. Oto dlaczego. Istnieją pewne narzędzia, których każdy dobry programista potrzebuje w swoim zestawie narzędzi. Jednym z nich jest dogłębna znajomość struktur danych i algorytmów (jeśli mi nie wierzysz, przejdź do wywiadu w Microsoft, Google, Amazon itp.), Algorytmami towarzyszącymi jest analiza złożoności, rekurencja i dobre zrozumienie wskaźników nie ból. Jeśli chodzi o analizę algorytmów, procesy rekurencyjne i ogólnie paradygmat funkcjonalny, nie mogę wymyślić lepszej lub bardziej wymagającej książki niż SICP.

Jonathan Henson
źródło