Nachdem ich eine Frage zu Büchern gelesen habe , die jeder Programmierer lesen sollte , frage ich mich, ob Folgendes als veraltet angesehen werden sollte:
- Code komplett : 1. Auflage 1993; 2. Auflage im Mai 2004
- Einführung in Algorithmen (Cormen, Leiserson, Rivest, Stein) : 1. Auflage 1990; 2. Auflage im September 2001; 3. Auflage 2009
- Der Pragmatische Programmierer : Oktober 1999
- Struktur und Interpretation von Computerprogrammen : 1. Auflage 1984; 2. Auflage im September 1996
- Die Programmiersprache C : 1. Auflage 1978; 2. Auflage im April 1988
Alle diese Bücher scheinen sehr alt zu sein. Gibt es keinen Unterschied zwischen modernem Computing und dem, was aktuell war, als das Buch geschrieben wurde?
Zum Beispiel erklärt mein 61-jähriger Lehrer die Dinge sehr gut, vergisst aber alles, was zwischen seinem Beginn vor 25 Jahren und jetzt getan wurde.
Gilt das nicht auch für diese Bücher? Gibt es keine moderneren Bücher, die Prinzipien und Technologien vermitteln, die der gegenwärtigen Praxis näher kommen? Oder halten Sie sie auch heute noch für nützlich und relevant?
books
software-obsolescence
Olivier Pons
quelle
quelle
Antworten:
In diesem Buch geht es um die Prinzipien der Entwicklung. Diese Prinzipien sind von Natur aus sprachunabhängig und für einige sogar paradigmenunabhängig (OOP, funktionale Programmierung, imperative Sprachen).
Sie erklären die Theorie und die guten Wege der Entwicklung, weil es bei Software letztendlich immer darum geht, Daten zu erhalten, zu verarbeiten und dann wieder auszugeben. Facebook, Twitter, 3D, Batch-Prozess der Buchhaltung, Eisenbahnverkehrsmanagement, Raketen starten, etc.
Bücher, in denen es um eine Sprache geht
"How to learn XXXXX in YY days"
, bei denen XXXXX eine Sprache und YY eine Zahl ist, die irgendwann (und manchmal sogar sehr schnell) veraltet sein wird, weil es sich von Natur aus um Dinge handelt, die sich entweder weiterentwickeln oder ersetzt und ersetzt werden veraltet.Code Complete , von dem großartigen Steve McConnell, ist vielleicht das Buch, das mich dazu gebracht hat, dies zu realisieren. Und der Pragmatic Programmer hat meine Vision von Softwareentwicklung grundlegend verändert. Wenn Sie solche Bücher lesen, stellen Sie fest, dass 95% der Probleme, mit denen Sie täglich konfrontiert sind, bereits gelöst sind und dass 95% von uns das Rad immer noch neu erfinden.
Die sogenannte "Cloud" ist nicht die Zukunft der Softwareentwicklung, sondern ein Weg, entwickelte Software zu nutzen.
Fallen Sie nicht in die Falle von Hype / Bullshit-Modewörtern, sondern konzentrieren Sie sich darauf, wie Sie Ihre Fähigkeiten als Software-Entwickler verbessern können.
Konzentrieren Sie sich darauf, von dem zu lernen, was andere brillante Geister vor uns erfunden und gelernt haben, denn nur so können Sie ein versierter Entwickler werden.
quelle
"Learn Javascript in 15 seconds"
und nur eine halbe Bazillion"Learn PHP on 17 secsonds"
Psychologie-Computer-Programmierung (1971) - Bei einer Million Programmierer wie 1970 ist die Psychologie, wie sie Programme entwerfen und welche Fehler sie machen und wie sie vermieden werden, wichtiger denn je.
Software Tools (1976) - Da das Web eine Sammlung von Frames, Dienstprogrammen, Skripten und Plugins ist, waren die Ideen in Software Tools noch nie so relevant.
EDIT: Um die allgemeine Frage zu beantworten - sind alte Programmbücher relevant?
Die allgemeinen Prinzipien des Software-Engineerings haben sich nicht allzu sehr geändert, es gibt neue Technologien, OO, TDD usw. Aber im Allgemeinen haben sich die Benutzer und die Probleme nicht geändert - und darüber nachzudenken, wie ein Problem aufgeteilt werden kann, ist dasselbe wie jetzt war immer.
Diese älteren Bücher wurden in der Regel von Fachleuten verfasst. Viele moderne Programmierbücher zielen darauf ab, einen 2000-seitigen Türstopper nach dem neuesten Schlagwort zu durchsuchen, solange es noch aktuell ist.
Bücher über Sprachen und Technologien, die nicht mehr verwendet werden, sind wahrscheinlich nicht relevant - es ist kein Vax-Assembler-Handbuch auf der Liste. "C" wird jedoch nach wie vor sehr häufig verwendet und "Die Programmiersprache C" ist nicht nur das beste Buch zu "C", sondern auch ein Modell für das Schreiben eines kurzen Tutorials und die Bezugnahme auf Ihre Sprache.
Gibt es neue Algorithmen? Ja. Aber alle alten Algorithmen sind immer noch relevant und die meisten neuen befinden sich in dunklen Bereichen, denen Sie wahrscheinlich nicht begegnen werden. Niemand hat sich in letzter Zeit eine bessere Sorte oder FFT ausgedacht. Obwohl andere versucht haben, sie besser zu erklären, gibt es keinen Grund, warum die diesjährigen Algorithmenbücher besser sind als CLRS.
ps. Ihr cooler neuer iWhatsit läuft mit BSD, der 1977 entwickelt wurde. Jetzt steigen Sie Kinder von meinem Rasen!
quelle
IMHO ist es keine Überraschung, dass sehr gute Bücher über Jahrzehnte populär bleiben - das zeigt, wie gut sie sind. Aber ich denke, ich kann Ihnen für jeden der Kandidaten, die Sie aufgelistet haben, etwas sagen:
Eigentlich war die erste Ausgabe von "Code complete" aus dem Jahr 1993, also ist diese Ausgabe wirklich ein "Klassiker". Es geht um den grundlegenden Codierungsstil anhand von Beispielen, die für fast alle Programmiersprachen der C-Familie gelten, die heutzutage die beliebtesten Sprachen enthalten (C / C ++ / Java / C # / Objective-C / D / ...). Also ja, dieses Buch ist aktuell.
Nun, ich habe dieses Buch eigentlich nicht gelesen (mein Algorithmus-Lehrbuch war von "Sedgewick"), aber Lernalgorithmen und Algorithmenkonstruktionen sind wirklich sprachunabhängig. Natürlich wird dieses Handwerk in den letzten Jahren etwas unterschätzt, da man heutzutage in Standardbibliotheken viele grundlegende Algorithmen findet, aber IMHO sollte jeder professionelle Programmierer über einige Grundkenntnisse auf diesem Gebiet verfügen.
Dies ist ein sehr gutes Buch über das Programmieren als Handwerkskunst. Sprachunabhängig und sehr, sehr aktuell, solange die Programmierung von Programmierern als manuelle Aufgabe mit Texteditoren, IDEs, Versionskontrolle usw. durchgeführt wird.
Dies ist mein persönlicher Favorit, obwohl (oder vielleicht weil) das Buch Schema verwendet, um Ihnen die Unterschiede zwischen verschiedenen Programmierparadigmen beizubringen. Ich kenne kein anderes Buch, das so stark auf das Bauen von Abstraktionen ausgerichtet ist. Und Abstraktionen zu erstellen ist eine Schlüsselfähigkeit, die den Unterschied zwischen einem mittelmäßigen Programmierer und einem Spitzenprogrammierer ausmacht - das hat sich in den letzten Jahrzehnten nicht geändert, so dass dieses Buch wirklich zeitlos ist. Darüber hinaus sind funktionale Sprachen und Sprachelemente in letzter Zeit immer beliebter geworden, sodass die in diesem Buch vorgestellten Ideen meiner Meinung nach eine Renaissance erlebten.
Nun, dieses Buch ist vielleicht nicht so zeitlos wie die anderen vier. Aber da C so etwas wie die "Mutter" all der populären Sprachen ist, die ich oben aufgelistet habe, ist es möglicherweise eine gute Idee, dieses Buch zu lesen - ich denke nicht, dass es einige moderne "C" -Bücher gibt, die wirklich besser sind. Und wenn Sie C ++ - Code warten müssen, der von jemandem geschrieben wurde, der C besser kennt als C ++, dann ist dieses Buch ein Muss.
Schließlich haben Sie nach Büchern gefragt, die die "aktuelle Realität" stärker berücksichtigen, ohne zu technologiebezogen zu sein. Was ist also die "aktuelle Realität" und was hat sich auf der "Nicht-Technologie" -Seite geändert? Hier sind einige Punkte aus dem letzten Jahrzehnt, ohne zu erwähnen, dass diese Liste vollständig ist oder die richtigen Prioritäten hat.
(Ich führe hier nichts über Web- oder App-Entwicklung auf, weil ich diese Technologie für spezifisch halte).
Es gibt gute Bücher zu den Themen 1 und 2, insbesondere "Clean Code" aus dem Jahr 2008 und "Effektiv mit altem Code arbeiten" aus dem Jahr 2004. Vielleicht sind dies einige der "neueren" Bücher, nach denen Sie suchen?
quelle
Von denen, die Sie "Code complete", "The pragmatic programmer" und "SICP" genannt haben, standen alle neuen Entwickler, die hier in meinem Unternehmen anfangen und auf eine höhere Ebene gelangen möchten, auf meiner Liste der empfohlenen Bücher.
Sie sind bei weitem nicht überholt, da sich die Grundlagenforschung in der Informatik nicht geändert hat.
quelle
Ich habe nicht alle diese Bücher gelesen, aber ich besitze Code Complete und The Pragmatic Programmer. Diese Bücher sind alles andere als veraltet. Sie haben vielleicht ein paar Absätze, die ein bisschen verrostet sind, aber der größte Teil des Inhalts ist noch heute relevant.
Der Fortschritt in der Informatik und Programmierung ist ein evolutionärer Prozess. Neue Abstraktionen werden zusätzlich zu alten eingeführt, aber diese neuen Dinge machen die alten nicht unbedingt überholt.
Eine Analogie ... Ob Sie studieren, um ein Unfallchirurg zu sein, oder ein Chirurg, der sich auf Herztransplantation spezialisiert hat, Sie müssen immer noch wissen, wie der menschliche Körper funktioniert, wie die Zellchemie funktioniert, wie man die Brust öffnet und wie man schnell Hören Sie auf zu bluten, wenn es auftritt, etc ... Nur weil sie endoskopische Geräte und weniger invasive Techniken erfunden haben, heißt das nicht, dass Sie nicht bereit sind, die Grundlagen zu erlernen. Es bedeutet nur, dass Sie mehr lernen müssen.
quelle
Die "Wolke" ist kein Faktor. Die "Wolke" ist tatsächlich viel älter als die meisten Bücher, die Sie aufgelistet haben. Die meisten dieser Bücher handeln von Grundprinzipien, sie ändern sich jedoch nie zu oft. Frameworks und Bibliotheken ändern sich ständig, aber wie Sie Ihren Code strukturieren sollten, ändert sich nicht wesentlich. In ähnlicher Weise ist ein Zeiger immer noch ein Zeiger, der keine anderen Aufgaben ausführt, nur weil. Das einzige sprachspezifische Buch, das Sie aufgelistet haben, befasst sich mit C. In diesem Fall ist dieses alte Buch viel nützlicher als alles Neue, da es wahrscheinlich näher an dem Zeitraum geschrieben wurde, in dem jeder C-Code entwickelt wurde, mit dem Sie arbeiten würden.
quelle
Die Liste, die Sie zitiert haben, ist nicht veraltet. Ein Buch ist nur dann überholt, wenn sich das Thema so verändert hat, dass es nicht mehr nützlich ist. Sowohl die Programmiersprache als auch die Programmiersprache C haben sich seit der Veröffentlichung kaum verändert
quelle
Eines der Dinge, die Sie erkennen müssen, ist, dass es zugrunde liegende Prinzipien gibt, die im Wesentlichen zeitlos sind, und Implementierungen, die dazu neigen, zu kommen und zu gehen.
Die zugrunde liegenden Prinzipien sind im Wesentlichen alle langweiligen Theorien, mit denen die Informatik viel Zeit verbringt, und die auch dann gültig bleiben, wenn sich die Welt um sie herum verändert. Dies im Gegensatz zu Dingen wie „Wie Win32s unter Windows 3.11 verwenden“ , das ist sehr alt und überholt.
Um die Dinge in die richtige Perspektive zu rücken - der kanonische Text zur Geometrie ist zweitausend Jahre alt. Die meisten Mathematiklehrer sind mindestens 300 Jahre alt. Der einzige Grund, warum die CS-Bücher nicht älter sind, ist, dass das Feld noch neu ist.
quelle
Einige Bücher sind zeitlos, weil sie Ideen diskutieren, die für die Praxis der Softwareentwicklung so grundlegend sind, dass sie immer zutreffen.
Nehmen wir zum Beispiel den Monat des mythischen Mannes , als ich dieses Buch las, und ich vergaß immer wieder, dass es 1975 geschrieben wurde Buch. Alles andere gilt hier und jetzt. Ich behalte immer noch meine Kopie von Martin Fowlers Patterns of Enterprise Application Architecture , jetzt 9 Jahre alt, aber wieder zeitlos und immer noch auf die Arbeit anwendbar, die ich heute mache.
Mein aktuelles Lieblingsbuch ist Peter Coads Java-Modellierung in Farbe mit UML (1999), obwohl ich C # -Entwickler bin und UML meide, weil mich die Techniken und Konzepte zu einem besseren Codierer machen.
Wir tun gut daran, von der ersten Generation von Entwicklern zu lernen, weil sie den Boden betreten haben, den wir gerade betreten, und ihre hart erarbeitete Weisheit uns dabei helfen kann, einen Startschuss für das zu bekommen, was wir heute tun / lernen.
quelle
Die Grundprinzipien von Software haben sich in den letzten 20 Jahren nicht geändert. Ein Stapel, ein Baum und eine verknüpfte Liste funktionieren immer noch so wie damals. "XOR" bedeutet immer noch dasselbe. Ein Byte hat noch 8 Bits.
Schlagen Sie ernsthaft vor, dass "Multiplattform-Entwicklung" eine neue Idee ist? Warum wurde C erfunden?
"Cloud" ist ein Marketing-Schlagwort. Früher bedeutete es etwas Besonderes, wurde aber durch Überbeanspruchung geschwächt. Heutzutage kleben die Vermarkter jedes Mal, wenn Sie etwas haben, das über ein Netzwerk mit einem Remote-Server kommuniziert, das "Cloud" -Label darauf. Es hat also wirklich keinen Sinn, darüber zu sprechen, weil es ein bedeutungsloses Wort ist.
Ich kenne Ihren 61-jährigen Professor nicht, deshalb kann ich nicht für ihn bürgen. Auf der anderen Seite sind Sie eindeutig nicht so schlau, wie Sie denken. Hör dem Professor zu, es ist möglich, dass du etwas lernst.
"Du wirst nicht alt, wenn du kein Dummkopf bist. Viele junge Weise sind tot wie ein Arschloch." - Richard Pryor
quelle
Hier sind einige sehr alte und veraltete Bücher:
Die Kunst der Computerprogrammierung, vol. 1-3 von D. Knuth. Diese wurden zwischen 1968 und 1981 veröffentlicht! Wir benutzen keine Vakuumröhren mehr, Leute! Alles in diesen Büchern ist lahm. Wo ist die Diskussion über Python und Ruby?
Computer und Intraktabilität: Ein Leitfaden zur Theorie der NP-Vollständigkeit von MR Garey und DS Johnson, 1979. Super lahm! All diese Probleme sind wahrscheinlich inzwischen gelöst.
Wenn ein Buch in den letzten drei Jahren nicht mit dem Schwerpunkt Python geschrieben wurde, ist es nicht lesenswert.
quelle
Diese Bücher sind nicht veraltet, diese Bücher sind Klassiker.
Um Kaplansky zu zitieren : " Nehmen Sie sich jeden Tag etwas Zeit, um etwas Neues zu lernen, das nicht mit dem Problem zu tun hat, an dem Sie gerade arbeiten (denken Sie daran, dass die Disjunktion vorübergehend sein kann), und lesen Sie die Meister . "
quelle
Ich weiß, was Sie meinen, wenn wir Fortschritte (LINQ kommt in den Sinn) haben, die die Lesbarkeit und Verwendung von Code ändern, aber nur, weil diese Bücher alt sind, heißt das nicht, dass sie dem Leser keine großartigen Lektionen bieten.
Während die verwendeten Programmiersprachen möglicherweise aus der Mode gekommen sind, stimmt die Theorie hinter den Programmiersprachen auch heute noch. Die meisten dieser Bücher legen Wert darauf, die Grundlagen sehr gut zu behandeln, und die Grundlagen haben sich nicht allzu sehr geändert.
quelle
Die Informatikbranche ist noch sehr jung. Bücher, die vor 30 Jahren geschrieben wurden, halte ich immer noch für wertvoll und notwendig, um alles zu verstehen. Abstrakte Konzepte brauchen manchmal eine Weile, um zu verdauen.
quelle
Einige kleinere Teile sind in all diesen Büchern veraltet, aber 99% sind immer noch großartig.
Algorithmenbücher werden langsam altern. Algorithmen sind Mathematik und die Mathematik ändert sich nicht schnell. Sicher, es gibt immer noch Forschungen zu neuen Algorithmen, die unter bestimmten Umständen überlegen sind (z. B. Furer-Algorithmus (2007) Schonhage-Strassen zum Multiplizieren von mehr als 40000 Ziffern langen Zahlen), aber in der Einführung müssen Sie die Grundlagen lernen (Teilen und Erobern) / Dynamische Programmierung / Lineare Programmierung / etc), damit Sie lernen, über Algorithmen sinnvoll nachzudenken.
Das Erlernen von Standard C von K & R ist immer noch die beste Quelle. Ich bin mir jedoch nicht sicher, ob ich ihren Abschnitten zur Einrichtung Ihrer Umgebung vertrauen würde.
SICP ist ein wundervolles Buch und lehrt die Grundlagen des modernen CS durch das Unterrichten von Lispeln, das eine wundervolle Sprache ist. Lisp ist heutzutage wohl nicht die nützlichste Sprache; obwohl andere argumentieren werden, dass lisp ihre Geheimwaffe ist und dass das Lernen von Sprachen wie Java oder Python zuerst sehr schlechte Programmierer macht, die nie lernen müssen, wie man Sortier- oder verknüpfte Listen oder Arrays oder Big-O-Notation implementiert, und am Ende sehr ineffiziente Dinge tun.
Einige Funktionen von Code Complete oder Pragmatic Programmer sind weniger relevant, insbesondere, wenn Sie in neueren Sprachen programmieren (z. B. Python / Ruby / C ++ 11), da sie sich häufig darauf konzentrieren, wie man etwas in C macht, oder empfohlene Lösungen unter Verwendung der besten Zu diesem Zeitpunkt verfügbare Tools (wie CVS / RCS für die Versionskontrolle anstelle eines modernen Tools wie git / bzr / hg / svn). Aber es ist immer noch gut darüber nachzudenken, wie Versionskontrolle ein Muss ist und wie sie nahtlos und selbstdokumentierend sein muss, und die Logik durchzugehen, warum sie ein absolutes Muss ist.
Oder die Empfehlungen von PP gegen IDEs für grundlegende Unix-Editoren und Unix-Tools - ganz zu schweigen davon, dass Sie nicht lernen sollten, wie man find / awk / locate / grep / sed verwendet, aber eine gute IDE kann oft viel Zeit sparen. Emacs kann z. B. Syntaxhervorhebungen oder einfache Code-Vervollständigung durchführen. Angenommen, eine gute IDE gibt Tooltipps mit Funktionsdeklarationen, wenn Sie sie eingeben, oder analysiert Code und markiert nicht verwendete Variablen, um Codeabschnitte zu minimieren usw.
quelle
Ja ja und ja
Das macht diese Bücher nicht überflüssig. "Modernes Computing" ist ein unglaublich weit gefasster Begriff. Es enthält jedoch C-Programmierung, sodass "The C Programming Language" immer noch ein relevantes Buch ist. Es enthält Algorithmen, daher ist "Introduction to Algorithms" immer noch ein relevantes Buch. Und so weiter und so fort.
Die meisten Apps im App Store (um die beliebteste mobile Plattform als Beispiel zu verwenden) sind in Objective C geschrieben, einer Sprache aus den frühen 80ern, die eine Obermenge von C darstellt. Daher ist C auch weiterhin relevant.
Es ist unser Geschenk.
Aber was heißt das?
Die Schule verfügt über zu viele Sprachen, APIs, Frameworks, Plattformen, Tools, Strategien für die Zusammenarbeit usw., um Sie auf einen bestimmten Job vorzubereiten . Die Schule kann nur den Grundstein legen und Ihnen ein grundlegendes Arbeitsmodell geben, wie die Maschine funktioniert, über Algorithmen, Datenstrukturen, Codekonstruktion, Zerlegungsstrategien, einige Werkzeuge usw.
Ein "echter Entwickler" ist nicht jemand, der alles weiß, es ist jemand mit der Fähigkeit zu dieser Art von Arbeit, der eine Grundlage in Theorie und Praxis hat und der weiß, wie man lernt , weil Ihre Ausbildung niemals endet.
quelle
Ok, also werde ich eine Antwort anbieten, die viel theoretischer ist. Ich stimme Ihnen allen zu, die auf die meiner Meinung nach naheliegende Frage geantwortet haben: Diese Bücher bilden die Grundlage für das, was wir als Programmierer tun, und all diese neuen Frameworks basieren auf denselben alten Säulen.
Hier sind meine zwei Cent - nicht wirklich meine, ich habe es von St. Aquinas und von Aristoteles vor ihm gelernt.
Die Mechanik eines Computers hat sich seit Von-Neumann nicht verändert. Ebenso sind die Details, die Sie benötigen, um ein großartiger Programmierer zu sein, dieselben, bis das von-Neumann-Modell veraltet ist. Versammlung, ist die Sprache der Computer ... lernen Sie es, keine Ausreden.
C ist die Muttersprache von Windows und Unix. Lerne es oder finde einen neuen Beruf. Wenn Sie einer der Typen sind, die direkt zu JAVA oder C # gewechselt sind, sind Sie vielleicht ein guter Programmierer, aber Sie wären ein viel besserer Programmierer, wenn Sie C-- lernen würden.
Algorithmen und Datenstrukturen sind die Grundlage von Computerprogrammen, lernen sie.
Alles andere ist eine Abstraktion dieser Kerndisziplinen. Abstraktionen sind wunderbar, wenn sie richtig eingesetzt werden. Ernsthaft, ich benutze C # für 75% aller meiner Projekte. Sie machen Sie jedoch dumm, wenn Sie sich nicht die Zeit nehmen, zu verstehen, wie sie funktionieren und wie Sie ohne sie funktionieren. Sie werden endlose Zeit damit verbringen, Software zu entwickeln, die durch das sprichwörtliche quadratische Loch passt, wenn es viel bessere Ansätze und Fehler gibt, die vermieden werden könnten. Softwareentwicklung ist ein Handwerk, das gemeistert werden muss, und am Ende des Tages ändern sich die Tools nur selten. Deshalb sind diese Bücher so wichtig.
All diese JAVA- und C # -Programmierer, tsk, ich wette, die meisten von ihnen haben noch nie eine Episode von Star Trek gesehen!
quelle
Ich hörte ein Sprichwort von einem Mentor:
"Guter Rat hat einen Grund, warum Sie wissen, wann er nicht mehr gut ist." Ein Buch, in dem erklärt wird, warum man X über Y macht, wird Sie wissen lassen, wenn dieser Rat nicht mehr gültig ist. Ein "Mach es immer so, mach es einfach" -Buch wie ein Teil des Crashkurses in Sprache X ist nicht so gut.
Ich sah ein Buch mit dem Titel "Unix in 24 Stunden lernen". Das Buch war ungefähr 8 cm dick. Ich bezweifle, dass viele Leute sogar jede Seite in 24 Stunden lesen konnten :)
Denken Sie daran, dass das, was heute angesagt ist, morgen verspottet werden könnte. Alle der folgenden Dinge galten einst als Mainstream (gestern in Mode), sind es jetzt aber nicht mehr:
Und es gibt ein paar Dinge, die einst völlig verblüffend waren, jetzt aber akzeptiert werden:
Wenn Sie wissen, warum und wann alte Annahmen durch eine neue Realität ersetzt wurden, sollten Sie auch den Ratschlag befolgen.
quelle