Po przeczytaniu pytania o książki, które powinien przeczytać każdy programista , zastanawiam się, czy następujące kwestie należy uznać za przestarzałe:
- Kod ukończony : 1. wydanie w 1993 r .; 2. edycja w maju 2004 r
- Wprowadzenie do algorytmów (Cormen, Leiserson, Rivest, Stein) : 1. wydanie w 1990 r .; 2. edycja we wrześniu 2001 r .; Trzecia edycja w 2009 r
- The Pragmatic Programmer : październik 1999
- Struktura i interpretacja programów komputerowych : 1. wydanie w 1984 r .; 2. edycja we wrześniu 1996 r
- Język programowania C : 1. wydanie w 1978 r .; 2. edycja w kwietniu 1988 r
Wszystkie te książki wydają się bardzo stare. Czy nie ma różnicy między nowoczesnym komputerem a tym, co było aktualne, kiedy powstały te książki?
Na przykład mój 61-letni nauczyciel bardzo ładnie wyjaśnia rzeczy, ale zapomina wziąć pod uwagę wszystko, co zostało zrobione od czasu, gdy zaczął uczyć 25 lat temu i teraz.
Czy to samo nie dotyczy tych książek? Czy nie ma już bardziej nowoczesnych książek, które uczą zasad i technologii bliższych obecnej praktyce? Czy może uważasz je za przydatne i aktualne nawet dzisiaj?
books
software-obsolescence
Olivier Pons
źródło
źródło
Odpowiedzi:
Te książki dotyczą zasad rozwoju. Zasady te są z natury niezależne od języka, a dla niektórych nawet od paradygmatu (OOP, programowanie funkcjonalne, języki imperatywne).
Wyjaśniają teorię i dobre sposoby rozwoju, ponieważ ostatecznie oprogramowanie zawsze polega na uzyskiwaniu danych, przetwarzaniu ich, a następnie wysyłaniu z powrotem. Facebook, Twitter, 3D, wsadowy proces księgowy, zarządzanie ruchem kolejowym, odpalanie rakiet itp.
Książki o języku, na przykład
"How to learn XXXXX in YY days"
gdzie XXXXX jest językiem, a YY to liczba, która w końcu (a czasem nawet bardzo szybko) stanie się przestarzała, ponieważ z natury dotyczą one rzeczy, które ewoluują lub stają się zastępowane i stają się przestarzały.Code Complete autorstwa niesamowitego Steve'a McConnella jest chyba książką, która uświadomiła mi to. A Pragmatic Programmer całkowicie zmienił moją wizję tworzenia oprogramowania. Czytając takie książki, zdajesz sobie sprawę, że 95% problemu, z którym codziennie się zmagasz, zostało już rozwiązane, a 95% z nas wciąż wymyśla koło.
Tak zwana „chmura” nie jest przyszłością rozwoju oprogramowania, to sposób korzystania z opracowanego oprogramowania.
Nie wpadnij w pułapkę modnych haseł / bzdur, skup się na tym, jak możesz poprawić swoje umiejętności rzemieślnika oprogramowania.
Skoncentruj się na uczeniu się na podstawie tego, co inne genialne duchy wymyśliły i nauczyły się przed nami, ponieważ jest to jedyny sposób, aby zostać uznanym programistą.
źródło
"Learn Javascript in 15 seconds"
i tylko połowa bazillion"Learn PHP on 17 secsonds"
Psychologia-programowanie komputerowe (1971) - Przy milionie razy większej liczbie programistów niż w 1970 roku psychologia tego, jak projektują programy i jakie błędy popełniają, i jak ich unikać, jest ważniejsza niż kiedykolwiek.
Software Tools (1976) - Ponieważ sieć jest zbiorem prac ramowych, narzędzi, skryptów i wtyczek - pomysły w Software Tools nigdy nie były bardziej odpowiednie.
EDYCJA: Aby odpowiedzieć na ogólne pytanie - czy stare książki programistyczne są odpowiednie?
Ogólne zasady inżynierii oprogramowania nie zmieniły się aż tak bardzo, istnieją nowe technologie OO, TDD itp. Ale ogólnie użytkownicy i problemy nie uległy zmianie - i myślenie o tym, jak podzielić problem, jest teraz takie samo zawsze był.
Te starsze książki zostały na ogół napisane przez ekspertów w tej dziedzinie. Wiele współczesnych książek o programowaniu ma na celu zepchnięcie progu na 2000 stron do najnowszego modnego hasła, gdy jest ono nadal aktualne.
Książki o językach i technologiach, które nie są już używane, prawdopodobnie nie są istotne - na liście nie ma podręcznika asemblera Vax. Ale „C” jest nadal bardzo często używane, a „Język programowania C” to nie tylko najlepsza książka na temat „C”, to model pisania zwięzłego samouczka i odniesienia do twojego języka.
Czy są nowe algorytmy? Tak. Ale wszystkie stare algorytmy są nadal aktualne, a większość nowych znajduje się w mało znanych obszarach, z którymi trudno się spotkać. Nikt ostatnio nie wymyślił lepszego rodzaju ani FFT. Chociaż inne osoby próbowały je lepiej wyjaśnić, nie ma powodu, aby tegoroczne książki na temat algorytmów były lepsze niż CLRS.
ps. Twój nowy, fajny iWhatsit działa w oparciu o BSD, opracowany w 1977 roku. Teraz dzieci zejdźcie z mojego trawnika!
źródło
IMHO nie jest zaskoczeniem, że bardzo dobre książki pozostają popularne przez dziesięciolecia - to pokazuje, jak dobre są. Ale myślę, że mogę powiedzieć coś dla każdego z wymienionych kandydatów:
W rzeczywistości pierwsza edycja „Code complete” pochodzi z 1993 roku, więc ta naprawdę jest „klasyczna”. Chodzi o podstawowy styl kodowania, z wykorzystaniem przykładów, które dotyczą niemal każdego języka programowania z rodziny C, który zawiera obecnie najpopularniejsze języki (C / C ++ / Java / C # / Objective-C / D / ...). Tak, ta książka jest aktualna.
Cóż, właściwie nie czytałem tej książki (mój podręcznik algorytmów pochodzi z „Sedgewick”), ale nauka algorytmów i konstrukcji algorytmu jest naprawdę niezależna od języka. Oczywiście, to rzemiosło jest trochę niedoceniane w ostatnich latach, ponieważ obecnie znajduje się wiele podstawowych algorytmów w standardowych bibliotekach, ale IMHO każdy profesjonalny programista powinien posiadać podstawową wiedzę w tej dziedzinie.
To bardzo dobra książka o programowaniu jako rzemiośle. Język jest agnostyczny i bardzo, bardzo aktualny, o ile programowanie odbywa się przez programistów jako zadanie ręczne, przy użyciu edytorów tekstu, IDE, kontroli wersji itp.
Jest to mój osobisty faworyt, chociaż (a może dlatego, że) książka wykorzystuje Schemat, aby nauczyć cię różnic między różnymi paradygmatami programowania. Nie znam żadnej innej książki, która tak silnie skupiałaby się na tworzeniu abstrakcji. A budowanie abstrakcji jest kluczową umiejętnością, która czyni różnicę między przeciętnym programistą a najlepszym programistą - która nie zmieniła się w ostatnich dziesięcioleciach, więc tak naprawdę ta książka jest ponadczasowa. Co więcej, języki funkcjonalne i elementy językowe stały się ostatnio bardziej popularne, więc pomysły IMHO przedstawione w tej książce odrodziły się.
Cóż, ta książka może nie być tak ponadczasowa jak pozostałe cztery. Ale ponieważ C jest czymś w rodzaju „matki” wszystkich popularnych języków, które wymieniłem powyżej, dobrym pomysłem może być przeczytanie tej książki - nie sądzę, żeby były jakieś nowoczesne książki „C”, które są naprawdę lepsze. A jeśli musisz programować konserwację kodu C ++ napisanego przez kogoś, kto znał C lepiej niż C ++, to ta książka jest koniecznością.
Wreszcie, prosiliście o książki, które uwzględniają więcej „bieżącej rzeczywistości”, bez zbytniej specyfiki technologicznej. Czym więc jest „aktualna rzeczywistość” i co zmieniło się po stronie „nietechnologicznej”? Oto kilka punktów z ostatniej dekady, nie mówiąc, że ta lista jest kompletna lub ma właściwe priorytety.
(Nie wymieniam tutaj niczego na temat rozwoju sieci lub aplikacji, ponieważ uważam, że ta technologia jest specyficzna).
Istnieją dobre książki na tematy 1 i 2, zwłaszcza „Czysty kod” , który pochodzi z 2008 r., I „Efektywna praca ze starszym kodem” z 2004 r. Być może są to niektóre z „nowszych” książek, których szukasz?
źródło
Spośród tych, o których wspominałeś: „Kod kompletny”, „Pragmatyczny programista” i „SICP” znajdują się na mojej liście polecanych lektur dla wszystkich nowych programistów, którzy zaczynają tutaj w mojej firmie i chcą przejść na wyższy poziom.
Nie są one przestarzałe z długiej perspektywy, ponieważ podstawowa nauka w informatyce się nie zmieniła.
źródło
Nie przeczytałem wszystkich tych książek, ale mam własny Code Complete i The Pragmatic Programmer. Te książki są dalekie od przestarzałych. Mogą mieć kilka akapitów, które są nieco zardzewiałe, ale większość treści jest nadal aktualna.
Postęp w informatyce i programowaniu jest procesem ewolucyjnym . Nowe abstrakcje wprowadzane są na stare, ale te nowe rzeczy nie muszą powodować, że stare stają się przestarzałe.
Analogia ... Niezależnie od tego, czy studiujesz jako chirurg urazowy, czy chirurg specjalizujący się w transplantacji serca, nadal musisz wiedzieć, jak działa ludzkie ciało, chemia komórek, układy narządów, jak otworzyć klatkę piersiową i jak szybko przestań krwawić, jeśli wystąpi itp. Tylko dlatego, że wynalazł sprzęt endoskopowy i mniej inwazyjne techniki, nie oznacza to, że nie masz szans na naukę podstaw. Oznacza to tylko, że musisz nauczyć się więcej.
źródło
„Chmura” nie jest czynnikiem. „Chmura” jest w rzeczywistości znacznie starsza niż większość książek, które wymieniłeś. większość z tych książek dotyczy podstawowych zasad, nie zawsze tak naprawdę zmieniają się. Struktury i biblioteki zmieniają się cały czas, ale sposób, w jaki powinieneś strukturyzować kod, niewiele się zmienia. Podobnie wskaźnik jest nadal wskaźnikiem, nie zaczyna robić różnych rzeczy tylko dlatego, że. Jedyną wymienioną książką dotyczącą języka jest C, w którym to przypadku stara książka jest znacznie bardziej przydatna niż cokolwiek nowego, ponieważ prawdopodobnie została napisana bliżej okresu, w którym opracowano dowolny kod C, z którym będziesz pracować.
źródło
Lista, którą zacytowałeś, nie, nie są przestarzałe. Książka jest przestarzała tylko wtedy, gdy temat zmienił się na tyle, że nie jest przydatny. Natura programowania i język C zmieniły się bardzo niewiele od czasu publikacji
źródło
Jedną z rzeczy, które musisz zdać sobie sprawę, jest istnienie podstawowych zasad, które są zasadniczo ponadczasowe, oraz implementacje, które zwykle przychodzą i odchodzą.
Podstawowymi zasadami są w zasadzie wszystkie nudne teorie, na których Informatyka spędza dużo czasu, i które są aktualne, nawet jeśli świat się wokół zmieni. W przeciwieństwie do rzeczy takich jak „Jak używać Win32s w systemie Windows 3.11”, który jest bardzo stary i nieaktualny.
Mówiąc inaczej - kanoniczny tekst o geometrii ma dwa tysiące lat. Większość matematyki nauczanej do poziomu uczelni ma co najmniej 300 lat. Jedynym powodem, dla którego książki CS nie są starsze, jest to, że pole jest wciąż nowe.
źródło
Niektóre książki są ponadczasowe, ponieważ omawiają pomysły, które są tak fundamentalne w praktyce tworzenia oprogramowania, że zawsze będą miały zastosowanie.
Weźmy na przykład Miesiąc Mitycznego Człowieka , kiedy czytałem tę książkę, ciągle zapominałem, że została napisana w 1975 roku. Kiedy od czasu do czasu pojawia się odniesienie do IBM System 360, zawsze mnie wkurza, ponieważ jest to jedyna treść, która pochodzi z książka. Cała reszta obowiązuje tu i teraz. Nadal przechowuję moją kopię Wzorcowej architektury aplikacji Martina Fowlera , która ma teraz 9 lat, ale znów jest ponadczasowa i nadal ma zastosowanie do pracy, którą dziś wykonuję.
Moją ulubioną książką jest teraz Java Modeling in Color with UML (1999) Petera Coada, mimo że jestem programistą C # i unikam UML, ponieważ techniki i koncepcje sprawiają, że jestem lepszym programistą.
Dobrze byłoby uczyć się od pierwszego pokolenia programistów, ponieważ oni stąpali po ziemi, którą teraz chodzimy, a ich ciężko wypracowana mądrość może pomóc nam w szybkim rozpoczęciu tego, co robimy / uczymy się dzisiaj.
źródło
Podstawowe zasady oprogramowania nie zmieniły się w ciągu ostatnich 20 lat. Stos, drzewo i połączona lista nadal działają tak samo jak wtedy. „XOR” wciąż oznacza to samo. Bajt nadal ma 8 bitów.
Czy poważnie sugerujesz, że „wieloplatformowy rozwój” to nowy pomysł? Jak myślisz, dlaczego wynaleziono C?
„Chmura” to modne hasło marketingowe. Kiedyś oznaczało to coś specyficznego, ale zostało osłabione przez nadmierne użycie. Obecnie, gdy tylko masz coś, co komunikuje się ze zdalnym serwerem za pośrednictwem sieci, marketerzy przyklejają na nim etykietę „chmury”. Więc naprawdę nie ma sensu o tym mówić, ponieważ jest to bezsensowne słowo.
Nie znam twojego 61-letniego profesora, więc nie mogę za niego ręczyć. Z drugiej strony, ty nie jesteś tak mądry, jak ci się wydaje. Posłuchaj profesora, możliwe, że się czegoś nauczysz.
„Nie można się zestarzeć, nie będąc głupcem. Wielu młodych mędrców nie żyje jak skurwysyn”. - Richard Pryor
źródło
Oto kilka bardzo starych i nieaktualnych książek:
The Art of Computer Programming, vol. 1-3 autorstwa D. Knutha. Zostały one opublikowane w latach 1968–1981! Ludzie, już nie używamy lamp próżniowych! Wszystko w tych książkach jest kiepskie. Gdzie jest dyskusja na temat Pythona i Ruby?
Komputery i nienaruszalność: Przewodnik do teorii kompletności NP autorstwa MR Garey i DS Johnsona, 1979. Super lame! Prawdopodobnie wszystkie te problemy zostały już rozwiązane.
Jeśli książka nie była napisana w ciągu ostatnich trzech lat z myślą o Pythonie, nie warto jej czytać.
źródło
Te książki nie są przestarzałe, te książki są klasyką.
Zacytować Kaplansky „ spędzić trochę czasu każdego dnia nauki czegoś nowego, który jest odłączony od problemu, na którym aktualnie pracuje (należy pamiętać, że rozłączności może być tymczasowe) i przeczytać mistrzów . ”
źródło
Wiem, co masz na myśli, gdy mamy postępy (przychodzi na myśl LINQ), które zmieniają czytelność i użycie kodu, ale po prostu dlatego, że te książki są stare, nie oznacza to, że nie oferują one świetnych lekcji dla czytelnika.
Podczas gdy używane przez nich języki programowania mogły przestać być modne, teoria języków programowania wciąż jest aktualna. Większość tych książek sprawia, że warto bardzo dobrze opisać podstawy, a podstawy nie zmieniły się aż tak bardzo.
źródło
Branża informatyczna jest wciąż bardzo młoda. Książki napisane 30 lat temu uważam za wciąż cenne i potrzebne do pełnego zrozumienia. Czasami abstrakcyjne koncepcje zajmują trochę czasu.
źródło
Niektóre drobne części są przestarzałe we wszystkich tych książkach, ale 99% wciąż jest świetna.
Książki z algorytmami będą się powoli starzeć. Algorytmy to matematyka, a matematyka nie zmienia się szybko. Jasne, wciąż są badania nad nowymi algorytmami, które są lepsze w pewnych okolicznościach (np . Algorytm Furera (2007) Schonhage-Strassen do mnożenia ponad 40000 cyfr liczb długich razem), ale wstęp trzeba nauczyć się podstaw (dziel i rządź) / Programowanie dynamiczne / Programowanie liniowe / itp.), Dzięki czemu możesz nauczyć się rozsądnie myśleć o algorytmach.
Uczenie się standardu C od K&R jest nadal najlepszym źródłem; chociaż nie jestem pewien, czy zaufałbym ich sekcjom dotyczącym konfiguracji środowiska.
SICP jest cudowną książką i uczy podstaw współczesnego CS poprzez nauczenie seplenienia, który jest cudownym językiem. Jednak seplenienie nie jest obecnie najbardziej przydatnym językiem; chociaż inni będą argumentować, że seplenienie jest ich tajną bronią, a nauka języków takich jak Java lub Python najpierw sprawia, że bardzo źli programiści, którzy nigdy nie muszą uczyć się, jak implementować sortowanie lub listy połączone, tablice lub notacje Big-O i ostatecznie robią bardzo nieefektywne rzeczy.
Niektóre z Code Complete lub Pragmatic Programmer są mniej przydatne, szczególnie jeśli programujesz w nowszych językach (np. Python / ruby / C ++ 11), ponieważ często koncentruje się na tym, jak zrobić coś w C lub daje zalecane rozwiązania przy użyciu najlepszych narzędzia dostępne w tym czasie (takie jak CVS / RCS do kontroli wersji zamiast nowoczesnego narzędzia, takiego jak git / bzr / hg / svn). Ale nadal dobrze jest myśleć o tym, jak kontrola wersji jest koniecznością i jak musi być bezproblemowa i samo dokumentująca, i przejrzeć logikę, dlaczego jest to absolutna konieczność.
Lub zalecenia PP przeciwko IDE dla podstawowych edytorów unix + narzędzi unixowych - nie mówiąc już, że nie powinieneś uczyć się korzystania z find / awk / locate / grep / sed, ale dobre IDE często pozwala zaoszczędzić dużo czasu. Np. Emacs może wyróżniać składnię lub po prostu uzupełniać kod; ale powiedzmy, że dobre IDE powie podpowiedzi z deklaracjami funkcji podczas ich wpisywania lub analizowania kodu i oznaczania nieużywanych zmiennych, ułatwiając zwijanie części kodu itp.
źródło
Tak, tak i tak.
To nie czyni tych książek przestarzałymi. „Nowoczesne obliczenia” to niezwykle szeroki termin. Jednakże obejmuje programowanie C, więc „C Programming Language” jest wciąż istotne książka. To zawiera algorytmy, więc „Wprowadzenie do algorytmów” jest wciąż istotne książka. Itd. itp.
Większość aplikacji w App Store (na przykład najpopularniejsza platforma mobilna) jest napisana w języku Objective C, języku z początku lat 80., który jest nadzbiorem języka C. Zatem znowu C jest nadal aktualne.
To nasz prezent.
Ale co to znaczy?
Istnieje zbyt wiele języków, interfejsów API, platform, platform, narzędzi, strategii współpracy itp., Aby szkoła mogła przygotować cię do określonej pracy. Szkoła może jedynie położyć fundament, dając ci podstawowy model działania maszyny, na temat algorytmów, struktur danych, budowy kodu, strategii dekompozycji, niektórych narzędzi itp.
„Prawdziwy programista” nie jest kimś, kto wie wszystko, jest osobą zdolną do tego rodzaju pracy, która ma podstawy w teorii i praktyce i która umie się uczyć , ponieważ twoje wykształcenie nigdy się nie kończy.
źródło
Ok, więc zamierzam udzielić odpowiedzi, która jest o wiele bardziej teoretyczna. Zgadzam się z wami wszystkimi, którzy odpowiedzieliście na dość oczywiste, moim zdaniem, te książki są podstawą tego, co robimy jako programiści, i wszystkie te nowe frameworki są zbudowane na tej samej linii starych filarów.
Oto moje dwa centy - niezupełnie moje, nauczyłem się tego od św. Akwinu i od Arystotelesa przed nim.
Mechanika komputera nie zmieniła się od czasu von-neumanna. Podobnie, szczegóły, których musisz nauczyć się, aby być świetnym programistą, będą takie same, dopóki model von-neumanna nie będzie przestarzały. Asembler to język komputerów ... naucz się go, bez wymówek.
C jest językiem ojczystym Windowsa i Uniksa. Naucz się go lub znajdź nowy handel. Jeśli jesteś jednym z tych facetów, którzy poszli prosto na JAVA lub C #, możesz być dobrym programistą, ale byłbyś znacznie lepszym programistą, gdybyś nauczył się kropki C.
Algorytmy i struktury danych są podstawą programów komputerowych. Naucz się ich.
Cała reszta to abstrakcja tych bardzo podstawowych dyscyplin. Abstrakcje są wspaniałe, gdy są właściwie używane - poważnie, używam C # do 75% wszystkich moich projektów. Jednak sprawiają, że jesteś głupi, jeśli nie poświęcisz czasu na zrozumienie, jak działają i jak funkcjonować bez nich. Spędzisz niekończący się czas, tworząc oprogramowanie, które zmieści się w przysłowiowej kwadratowej dziurze, gdy są znacznie lepsze podejścia i będziesz mieć błędy, których można by uniknąć. Rozwój oprogramowania jest rzemiosłem, które należy opanować, a na koniec narzędzia rzadko się zmieniają. Właśnie dlatego te książki są tak ważne.
Wszyscy ci programiści JAVA i C #, tsk, założę się, że większość z nich nigdy nawet nie widziała odcinka Star Trek!
źródło
Usłyszałem powiedzenie mentora:
„Dobra rada ma powód, dla którego wiesz, kiedy nie jest to już dobra rada”. Tak więc w kategoriach książki książka wyjaśniająca, dlaczego warto wykonać X w stosunku do Y, da ci znać, kiedy ta rada przestanie być aktualna. Książka „zawsze rób to, po prostu rób to”, jak niektóre z kursu awaryjnego w języku X, nie jest tak dobra.
Widziałem taką, która nazywa się „ucz się unixa w ciągu 24 godzin”, no cóż, książka miała około 8 cm grubości, wątpię, by wiele osób mogło nawet przeczytać każdą stronę w ciągu 24 godzin :)
Pamiętaj, że to, co jest dziś modne, jutro może zostać wyszydzone. Wszystkie poniższe zostały kiedyś uznane za główny nurt (wczoraj w modzie), ale teraz nie są:
I jest kilka rzeczy, które kiedyś były całkowicie przekleństwem, ale teraz są akceptowane:
Wiedz dlaczego, a będziesz wiedział, kiedy stare założenia zostały zastąpione nową rzeczywistością, podobnie jak porady.
źródło