Jaka jest najbardziej wpływowa książka, którą powinien przeczytać każdy programista? [Zamknięte]


1439

Gdybyś mógł cofnąć się w czasie i powiedzieć sobie, aby na początku kariery programisty przeczytać konkretną książkę, która to książka?

Oczekuję, że ta lista będzie zróżnicowana i obejmować szeroki zakres rzeczy.

Aby wyszukać: użyj pola wyszukiwania w prawym górnym rogu. Aby wyszukać odpowiedzi na bieżące pytanie, użyj inquestion:this. Na przykład:

inquestion:this "Code Complete"

8
Przeglądając ten wątek, uświadomiłem sobie, jak brzydka jest większość książek związanych z programowaniem. Bardzo dobry wątek!
Carl Bergquist,

23
Interesujące jest to, że chociaż tytuł brzmi „Jaka jest najbardziej wpływowa książka, którą powinien przeczytać każdy programista?”, Sugeruje się sporo książek, które dotyczą konkretnych tematów językowych. Z definicji i na pytanie, jak zostało postawione, sugerowane tutaj książki powinny zajmować się zagadnieniami agnostycznymi z języka, co dowodzi, że większość programistów jeszcze nie nauczyła się czytać.
Rook

19
Gdybym mógł cofnąć się w czasie i powiedzieć sobie, żebym coś przeczytał, lepiej niech to będzie gazeta lub sportowa książka ze sobą. Wszystko inne jest stratą dobrej podróży w czasie. :-)
jmucchiello

32
Wiesz, gdybym nie martwił się, że zagłosuję CAŁĄ partią, trollicznie pójdę i zasugeruję Zmierzch. „Jest TAKŻE o ludziach bladych i unikających słońca!”
Jacob Bellamy

3
Czy ktoś może oczyścić odpowiedzi, usuwając powtarzające się wpisy w książkach? Większość z nich została już odrzucona.
rao

Odpowiedzi:


1746
  • Code Complete (2. edycja) Steve McConnell
  • Pragmatyczny programista
  • Struktura i interpretacja programów komputerowych
  • Język programowania C autorstwa Kernighana i Ritchie
  • Wprowadzenie do algorytmów autorstwa Cormen, Leiserson, Rivest & Stein
  • Projektuj wzory według Gang of Four
  • Refaktoryzacja: poprawa projektu istniejącego kodu
  • Miesiąc mitycznego człowieka
  • Sztuka programowania komputerowego Donalda Knutha
  • Kompilatory: zasady, techniki i narzędzia autorstwa Alfreda V. Aho, Ravi Sethi i Jeffrey D. Ullman
  • Gödel, Escher, Bach autorstwa Douglasa Hofstadtera
  • Clean Code: A Handbook of Agile Software Craftsmanship autorstwa Roberta C. Martina
  • Skuteczny C ++
  • Bardziej skuteczny C ++
  • KOD Charlesa Petzolda
  • Programowanie pereł Jona Bentleya
  • Skutecznie współpracuje ze starszym kodem Michaela C. Feathersa
  • Peopleware od Demarco i Lister
  • Coders at Work autorstwa Petera Seibela
  • Na pewno żartujesz, panie Feynman!
  • Skuteczna 2. edycja Java
  • Wzory architektury aplikacji korporacyjnych autorstwa Martina Fowlera
  • Mały Schemer
  • Zaprawiony Schemer
  • Dlaczego (wzruszający) przewodnik po Ruby
  • Więźniowie prowadzą azyl: dlaczego produkty high tech doprowadzają nas do szaleństwa i jak przywrócić zdrowie psychiczne
  • Sztuka programowania w Uniksie
  • Rozwój oparty na testach: według przykładu Kent Beck
  • Praktyki zwinnego programisty
  • Nie każ mi myśleć
  • Zwinne tworzenie oprogramowania, zasady, wzorce i praktyki autorstwa Roberta C. Martina
  • Projekty oparte na domenach autorstwa Erica Evansa
  • Projekt codziennych rzeczy autorstwa Donalda Normana
  • Nowoczesny projekt C ++ autorstwa Andrei Alexandrescu
  • Najlepsze pisanie oprogramowania I autorstwa Joela Spolsky'ego
  • Praktyka programowania przez Kernighana i Pike'a
  • Pragmatyczne myślenie i uczenie się: przebuduj swoje wetware autorstwa Andy Hunta
  • Ocena oprogramowania: Demystifying the Black Art autorstwa Steve McConnel
  • The Passionate Programmer (My Job Went To India) Chada Fowlera
  • Hakerzy: Heroes of the Computer Revolution
  • Algorytmy + struktury danych = programy
  • Pisanie kodu stałego
  • JavaScript - dobre części
  • Realizacja przez 37 sygnałów
  • Podstawy programowania Karla Seguina
  • Grafika komputerowa: zasady i praktyka w C (wydanie drugie)
  • Myślenie w Javie przez Bruce'a Eckela
  • Elementy systemów obliczeniowych
  • Refaktoryzacja do wzorów autorstwa Joshua Kerievsky
  • Nowoczesne systemy operacyjne Andrew S. Tanenbaum
  • Adnotacja Turinga
  • Rzeczy, które czynią nas inteligentnymi przez Donalda Normana
  • Ponadczasowy sposób budowania autorstwa Christophera Alexandra
  • The Deadline: A Novel About Project Management autorstwa Toma DeMarco
  • Język programowania C ++ (wydanie trzecie) autorstwa Stroustrup
  • Wzorce architektury aplikacji korporacyjnych
  • Systemy komputerowe - perspektywa programisty
  • Zwinne zasady, wzorce i praktyki w języku C # autorstwa Roberta C. Martina
  • Rosnące oprogramowanie obiektowe oparte na testach
  • Wytyczne dotyczące projektowania ram autorstwa Brada Abramsa
  • Object Thinking autorstwa dr Davida Westa
  • Zaawansowane programowanie w środowisku UNIX autorstwa W. Richarda Stevensa
  • Hakerzy i malarze: wielkie pomysły z epoki komputerów
  • Dusza nowej maszyny autorstwa Tracy Kidder
  • CLR przez C # Jeffrey Richter
  • Ponadczasowy sposób budowania autorstwa Christophera Alexandra
  • Wzory projektowe w języku C # autorstwa Steve'a Metskera
  • Alicja w krainie czarów autorstwa Lewisa Carola
  • Zen i sztuka konserwacji motocykli autorstwa Roberta M. Pirsiga
  • About Face - Essentials of Interaction Design
  • Nadchodzą wszyscy: moc organizowania się bez organizacji Clay Shirky
  • Tao programowania
  • Obliczeniowe piękno przyrody
  • Pisanie Solid Code przez Steve Maguire
  • Przewodnik Philipa i Alexa dotyczący publikacji w Internecie
  • Analiza i projektowanie obiektowe z aplikacjami Grady Booch
  • Effective Java autorstwa Joshua Bloch
  • Obliczalność przez NJ Cutland
  • Masterminds of Programming
  • Tao Te Ching
  • Wydajny programista
  • Sztuka oszustwa Kevina Mitnicka
  • Programista kariery: taktyki partyzanckie dla niedoskonałego świata autorstwa Christophera Duncana
  • Paradygmaty programowania sztucznej inteligencji: studia przypadków w Common Lisp
  • Masters of Doom
  • Pragmatyczne testy jednostkowe w C # z NUnit autorstwa Andy Hunta i Dave'a Thomasa z Mattem Hargettem
  • Jak to rozwiązać George Polya
  • Alchemik Paulo Coelho
  • Smalltalk-80: Język i jego implementacja
  • Writing Secure Code (2nd Edition) autor: Michael Howard
  • Wprowadzenie do programowania funkcjonalnego autorstwa Philipa Wadlera i Richarda Birda
  • Bez błędów! David Thielen
  • Przeróbka : Jason Freid i DHH
  • JUnit w akcji

16
Code Complete to fajna książka, jeśli jesteś na studiach. Jeśli masz co najmniej rok doświadczenia w programowaniu, jest to nudziarz całkowity.
Bogdan Gavril MSFT

19
Code Complete zawiera wiele przydatnych informacji, ale jest ukryty w hiperbolach, gofrach i powtórzeniach, co czyni go trudnym do odczytania.
Jeff Yates,

76
Czytam Code Complete 3 lata mojej kariery. Nie wziąłem udziału w kursie inżynierii oprogramowania ani kursie tworzenia języka programowania, ale wziąłem udział w kursach CS. To zdecydowanie najlepsza pojedyncza książka, jaką kiedykolwiek czytałem, aby zostać lepszym programistą. Nie uczyni cię specjalistą, ale sprawi, że będziesz dużo więcej niż majstrować.
Shea,

119
Problem z tą książką polega na tym, że dla początkujących nie ma to większego sensu, ponieważ pojęcia są nieco zaawansowane. Do czasu, gdy będziesz gotowy, aby go przeczytać, powinieneś już znać i praktykować 99% pojęć zawartych w książce.
esac

57
To jest kwestia zdrowych rozsądków, takich jak te zawarte w tej książce. Co jakiś czas trzeba im przypominać, aby cofnęli się w kolejce.
JohnFx,

9

K&R

@Juan: Znam Juana, wiem - ale jest kilka rzeczy, których można się nauczyć tylko poprzez zajęcie się danym zadaniem. Mówienie abstrakcyjnymi ideałami przez cały dzień sprawia, że ​​stajesz się akademikiem. Właśnie w zastosowaniu abstraktu naprawdę rozumiemy powód ich istnienia. : P

@Keith: Świetna wzmianka o „Więźniach ucieka azyl” Alana Coopera - na pewno otwieracz do oczu, każdy programista, który ze mną współpracował, odkąd przeczytałem tę książkę, słyszał, jak wspominam pomysły, które popiera. +1


9

Dyskretna matematyka dla informatyków http://ecx.images-amazon.com/images/I/51HCJ5R42KL._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU02_.jpg

Dyskretna matematyka dla informatyków JK Truss.

Chociaż to nie uczy programowania, uczy podstawowej matematyki, którą powinien znać każdy programista. Być może pamiętasz te rzeczy z uniwersytetu, ale tak naprawdę, wykonywanie logiki predykatu poprawi twoje umiejętności programowania, musisz nauczyć się Ustawić Teorię, jeśli chcesz programować przy użyciu kolekcji.

Jest tutaj naprawdę wiele interesujących informacji, które mogą sprawić, że będziesz myśleć o problemach na różne sposoby. Przydaje się, aby od czasu do czasu odebrać i nauczyć się czegoś nowego.


9

Systematyka: jak działają systemy, a zwłaszcza jak zawodzą . Wykorzystaj tanio. Ale możesz nie poczuć humoru, dopóki nie pracujesz nad kilkoma nieudanymi projektami.

Piękno książki to rok chroniony prawem autorskim.

Prawdopodobnie najgłębsze „prawo” na wynos przedstawione w książce:

Twierdzenie o podstawowym trybie awaryjnym (FFT): złożone systemy zwykle działają w trybie awaryjnym.

Chodzi o to, że niektóre elementy oprogramowania zawierają wadliwe elementy, które są maskowane przez awarie w innych częściach lub przez walidacje w innych częściach. Zobacz prawdziwy przykład na urządzeniu do promieniowania Therac-25 , którego wady programowe zostały zamaskowane przez awarie sprzętowe. Kiedy awarie sprzętu zostały usunięte, stan wyścigu oprogramowania, który pozostawał niewykryty przez te wszystkie lata, spowodował, że maszyna zabiła 3 osoby.


1
Zobacz także The Systems Bible tego samego autora (John Gall). To trzecia edycja Systemantics, właśnie zmienił tytuł. To jest książka, którą ukradniesz ze szkoły. To książka, którą dorośli dorośli czytają pod kocem z latarką.
Chris Wenham

9

Jednym z moich ulubionych jest Hacker's Delight , ponieważ czytanie było równie zabawne, co edukacyjne.

Mam nadzieję, że druga edycja ukaże się wkrótce!


+1 za „Hacker's Delight” Henry'ego S. Warrena Jr - nie chodzi o hakowanie w popularnym tego słowa znaczeniu, ale o hakowanie jak w bitach z niskim poziomem i innych „hacków” w prawdziwym i oryginalnym tego słowa znaczeniu. Nie dla wszystkich, ale jeśli zajmujesz się optymalizacją kodu, kompilatorami itp. Lub jesteś zwykłym kujonem zainteresowanym rzeczami niskiego poziomu, jest to świetna książka.
Paul R


9

Wyjaśnienie programowania ekstremalnego: Embrace Change autorstwa Kent Beck. Chociaż nie opowiadam się za hardkorowym podejściem do tworzenia oprogramowania opartym na XP lub autostradzie, żałuję, że nie zapoznałem się z zasadami tej książki znacznie wcześniej w mojej karierze. Testy jednostkowe, refaktoryzacja, prostota, ciągła integracja, koszt / czas / jakość / zakres - to zmieniło moje spojrzenie na rozwój. Przed Agile chodziło o debugger i lęk przed prośbami o zmianę. Po Agile demony te nie pojawiły się tak duże.








9

Zdecydowanie kunszt oprogramowania

tekst alternatywny http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg

Ta książka wyjaśnia wiele rzeczy na temat inżynierii oprogramowania, rozwoju systemu. Niezwykle przydatne jest również zrozumienie różnicy między różnymi rodzajami rozwoju produktu: web VS shrinkwrap VS framework IBM. Co ludzie mieli na myśli, gdy wymyślili model wodospadu? Przeczytaj to i wszystko stanie się jasne (miejmy nadzieję)


Ta książka musi zostać przepisana od nowa. Temat jest bardzo interesujący, ale książka jest całkiem szalona.
Chris Mountford

Chris, trudno mi zrozumieć twój komentarz ... Czy możesz wyjaśnić więcej? Dlaczego „szalony”?
dario minonne

Po pierwsze jest pełen błędów typograficznych. Zwykle najwyższej klasy redakcja Addisona Wesleya jest dziwnie nieobecna w tym tomie.
Chris Mountford

... kontynuuje, a tutaj nie ma wystarczającej ilości miejsca, ale: 2. nigdy nie jest jasne, w którym autor przełącza się między faktem a opinią, anegdotą i podstawową zasadą itp. 3. kunszt oprogramowania to metafora i strategia radzenia sobie z kilkoma trudne aspekty tworzenia oprogramowania. Ma szczególne zalety w porównaniu z alternatywami i przypuszczalnie wady. Uważam, że to rozsądne podejście. Nie ma sensu mówić, że oprogramowanie jest z natury rzemiosłem. Bardzo irytująca lektura, ale szczerze mówiąc to było dawno temu i wiele szczegółów zapomniałem. Wciąż jednak odczuwam obrzydzenie.
Chris Mountford

8

@Peter Coulton - nie czytasz Knutha, uczysz się go.

Dla mnie i mojej pracy ... Struktury danych o czysto funkcjonalnym charakterze są świetne do myślenia i rozwijania z myślą o językach funkcjonalnych.


8

„Świat jest płaski” Thomasa Friedmana.

Doskonałość w programowaniu wymaga inwestycji energii mentalnej i poświęcenia na rzecz ciągłego uczenia się porównywalnego do zawodów medycznych lub prawa. Opłaca się ułamek tego, co płacą te zawody, a tym bardziej płace wypłacane matematycznie wytrawnym osobom, które kierują się do sektora finansowego. Płace za konstruowanie kodu ulegają erozji, ponieważ jest to zawód względnie względny łatwy dla inteligentnych i samodyscyplinowanych w większości gospodarek.

Programowanie już uległo erozji do tego stopnia, że ​​płaci mniej niż, powiedzmy, hydraulika. Instalacji hydraulicznej nie można „offshorować”. Nie musisz płacić 2395 $, aby co dwa lata uczestniczyć w Konferencji Profesjonalnych Hydraulików, aby otrzymać przywilej otrzymania zupełnie nowego zestawu technologii hydraulicznych, których nauka zajmie ci rok.

Jeśli mieszkasz w Ameryce Północnej lub Europie, jesteś młody i inteligentny, programowanie nie jest racjonalnym wyborem kariery. Firmy, które wymagają programowania, absolutnie. Studiuj biznes, posiadaj wystarczającą wiedzę na temat programowania, aby ulepszyć detektor BS: genialny. Ale poświęcenie lwiej części twojej energii mentalnej na opanowanie bibliotek, struktur danych i algorytmów? Ma to sens tylko wtedy, gdy programowanie jest dla Ciebie czymś więcej niż wyborem ekonomicznym.

Jeśli kochasz programowania i dlatego zamierza uczynić go swoją karierę, to wypada Ci rozwijać zrozumienie zimne oczy sił, które są i będą kontynuowane, aby to trudniej zawodu, w którym się utrzymać . „Świat jest płaski” nie nauczy cię, jak nazwać zmienne, ale zanurzy cię na 6-8 godzin w realiach ekonomicznych, które już przybyły. Jeśli możesz to przeczytać, a nie wystraszyli, następnie wyjść i kupić „Code Complete”.


To jedna dobra odpowiedź!
Avi

8

alternatywny tekst

W zeszłym roku wziąłem udział w kilku zajęciach. czytam

Dylemat innowatora (przełomowa technologia)
Miesiąc mitycznego człowieka (oprogramowanie do zarządzania)
Przekraczanie przepaści (start- up )
Systemy zarządzania bazami danych,
Programowanie książki COW C #, Książka OSTRICH
Począwszy od programistów iPhone, Książka GRAPEFRUIT

Każda książka była niesamowita, ale dylemat Innovatora autorstwa Claytona Christensena (1997 !!!) jest naprawdę fantastyczną książką i naprawdę przyszło mi do głowy myśleć o współczesnym świecie oprogramowania. Wyzwaniem jest przełomowa technologia oraz to, w jaki sposób firmy zajmujące się napędami dysków i firmy nietechniczne są zawsze zakłócane przez nową, zmieniającą grę technologię. Daje to nowe spojrzenie na Google, prawdopodobnie największą firmę internetową. Dlaczego oni mają swoje ręce WSZYSTKO? To dlatego, że nie chcą, aby ich pozycja została zakłócona przez coś nowego. Podgląd w Google jest wystarczający, aby uzyskać pomysł. Przeczytaj to!


Myślę, że ta książka jest dość powtarzalna. Polecam przeczytać pierwszą 1/4.
Ben Haley

8

hakerzy, Steven Levy.

Osobowość i sposób życia muszą być na pierwszym miejscu. Wszystko inne można się nauczyć.



8

Język Python był dla mnie bardzo wpływowy, chciałbym przeczytać tę książkę wiele lat temu. Piękno i prostota języka Python naprawdę wpłynęły na sposób pisania kodu w innych językach.

alternatywny tekst alternatywny tekst


2
Myślę, że uruchomienie nowych programistów w Pythonie zmniejszyłoby ilość brzydkiego kodu na świecie. Pracuję z kimś, kto losowo wcina linie - ta osoba nie zrobiłaby tego, gdyby pracowała z Pythonem przez kilka miesięcy.
xnine

6
Myślę, że uruchomienie nowych programistów z Pythonem zmniejszyłoby liczbę innych języków.
Marco Mariani,

2
Czy to obejmuje przypadek?
Kelly S. French




7

Myślę, że „The Art of Unix Programming” to doskonała książka autorstwa doskonałego hakera / genialnego umysłu, jakim jest Eric S. Raymond, który próbuje nam pomóc zrozumieć kilka zasad projektowania oprogramowania (głównie prostota). Ta książka jest obowiązkowa dla każdego programisty, który zamierza rozpocząć projekt na platformie Unix.


6
to jest duplikat.
Christopher Mahan

7

Chociaż zgadzam się, że wiele z powyższych książek to lektura obowiązkowa (Pragmatic Programmer, Mythical Man-Month, Art of Computer Programming i SICP od razu przychodzą mi do głowy), chciałbym pójść w nieco innym kierunku i polecić A Discipline programowania przez Edsger Dijkstra. Mimo że ma 32 lata, nacisk na „projektowanie pod kątem weryfikowalności” jest bardzo istotny (nawet jeśli „weryfikowalność” oznacza „dowód” zamiast „testów jednostkowych”).



7

Martin Fowler Refaktoryzacja : poprawa projektu istniejącego kodu została już wymieniona. Ale opiszę, dlaczego to na mnie wpłynęło.

Istotą całej książki jest takie ustrukturyzowanie kodu, aby ludzie mogli łatwiej go czytać i rozumieć . Mocno uczy mnie, że kod, który piszę, jest przeznaczony dla moich współpracowników i następców, aby mogli z niego skorzystać i prawdopodobnie nauczyć się czegoś dobrego . Inspiruje mnie do świadomego programowania w sposób, który pozostawia ludzi chwalących moje imię i nie przeklinających mnie na wieczne potępienie .



7

Oto doskonała książka, która nie jest tak oklaskiwana, ale pełna głębokiego wglądu: Agile Software Development: The Cooperative Game , autor: Alistair Cockburn.

Co jest w tym takiego specjalnego? Cóż, wyraźnie wszyscy słyszeli termin „zwinny” i wydaje się, że większość jest obecnie wierzącymi. Niezależnie od tego, czy wierzysz, czy nie, istnieją pewne głębokie zasady, dlaczego istnieje ruch Agile. Ta książka odkrywa i wyraża te zasady w precyzyjny, naukowy sposób. Niektóre zasady są następujące (przy okazji, to moje słowa, nie Alistaira):

  1. Najtrudniejszą rzeczą w tworzeniu oprogramowania zespołowego jest takie samo zrozumienie każdego mózgu. Budujemy ogromne, skomplikowane, złożone systemy, które są niewidoczne w materialnym świecie. Im lepsza umiejętność zdobywania rozumu przez większą liczbę ludzi, tym bardziej efektywny będzie Twój zespół w tworzeniu oprogramowania.To jest podstawowy powód, dla którego programowanie par ma sens. Większość ludzi to odrzuca (i ja też początkowo to zrobiłem), ale mając na uwadze tę zasadę, zdecydowanie zalecam, aby dać jej jeszcze jedną szansę. Skończysz z DWÓCH osobami, które głęboko rozumieją właśnie zbudowany podsystem ... nie ma wielu innych sposobów na uzyskanie tak głębokiego transferu informacji tak szybko. To jest jak połączenie umysłu Vulcan.
  2. Nie zawsze potrzebujesz słów, aby szybko przekazać głębokie zrozumienie. I następstwo: zbyt wiele słów, a przekroczysz możliwości słuchacza / czytelnika, co oznacza, że ​​próba przeniesienia zrozumienia nie nastąpi. Pomyśl, że dzieci uczą się mówić językiem, będąc „zanurzone” i „absorbujące”. Nie tylko język ... podaje przykład dzieci bawiących się pociągami na podłodze. Wraz z nim pojawia się kolejne dziecko, które nigdy wcześniej NIE WIDZIŁO pociągu ... ale obserwując inne dzieci, podnosi istotę gry i gra od razu. Dzieje się tak przez cały czas między ludźmi. To wraz z następstwem zbyt wielu słów pomaga zobaczyć, jak błędnie było w czasach „wodospadu”, aby spróbować napisać 700 specyfikacji szczegółowych wymagań strony.

Tam też jest o wiele więcej. Zamknę się teraz, ale WYSOCE polecam tę książkę!


2
Wyjątkowy wkład, a Ty poświęciłeś czas, aby jasno wyjaśnić, dlaczego warto go przeczytać. +1 za oryginalność i wysiłek! Z niecierpliwością czekam na przeczytanie tego wkrótce ...
Avery Payne

Dobrze. Nie sądzę, że będziesz rozczarowany.
Charlie Flowers

7

Masters of Doom. Jeśli chodzi o motywację i miłość do swojego zawodu: nie będzie nic lepszego niż to, co opisano w tej książce, prawdziwie inspirująca historia!


+1 za dokładną recenzję w jednym wierszu
rubayeet
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.