Ich mochte Physik schon immer und Codierung schon immer. Als ich das Angebot für eine Doktorandenstelle in numerischer Physik (Details sind nicht relevant, es handelt sich meistens um parallele Programmierung für einen Cluster) an einer Universität erhielt, war es ein Nein -Schlau für mich.
Wie die meisten Physiker bin ich jedoch Autodidakt. Ich habe kein breites Hintergrundwissen darüber, wie man objektorientiert codiert, oder den Namen dieses spezifischen Algorithmus, der die Suche in einem kD-Baum optimiert.
Da sich meine ganze Arbeit bisher mehr um die Physik und die wissenschaftlichen Ergebnisse gekümmert hat, habe ich zweifellos einige schlechte Gewohnheiten - vor allem, weil ich selbst programmiere und nicht wirklich im Team arbeite. Ich habe meistens C verwendet, da es sehr einfach ist und "was Sie schreiben, ist was Sie bekommen" - keine Notwendigkeit für ausgefallene Abstraktionen. Ich bin jedoch kürzlich zu C ++ gewechselt, da ich mehr über die Leistungsfähigkeit der Abstraktion erfahren möchte, und sie ist ziemlich C-artig (zumindest in Bezug auf die Syntax).
Wie bringe ich mir selbst bei, wie ein Absolvent der Informatik auf eine gute, abstrakte Art und Weise zu kodieren?
Ich weiß, dass mein Code effizient ist, aber ich möchte, dass er auch elegant und lesbar ist. Denken Sie daran, dass ich keine Zeit habe, mehrere 1000-Seiten-Bände über abstrakte Programmierung zu lesen. Ich muss Zeit für aktuelle physikalische Forschung aufwenden (mein Vorgesetzter würde mich auslachen, wenn er wüsste, dass ich Zeit damit verbringe, über elegantes Programmieren nachzudenken). Wie bewerte ich, ob meine Arbeit auch aus Sicht eines Programmierers gut ist?
quelle
Antworten:
Bitten Sie also jemanden, Ihnen eine Checkliste mit fünf Schritten zu geben, die Sie zu einem erfahrenen Programmierer macht? Das wird nicht passieren !
Wie in jeder anderen Disziplin müssen Sie Zeit und Mühe aufwenden, um gute Programmierkenntnisse zu erlangen. Sie lernen, klaren, eleganten Code zu schreiben, indem Sie viel Code schreiben und den Code anderer sorgfältig lesen. Einige dieser 1000-Seiten-Bücher werden Ihnen Zeit sparen, indem sie die schwierigen Lektionen zusammenfassen, die andere Leute gelernt haben. Es ist eine Wahnvorstellung zu glauben, dass man als schmerzloser Nebeneffekt eines Physik-Doktortitels ein erfahrener Programmierer werden kann. Mit verrückten Programmierkenntnissen kostet es Sie nur Zeit und Mühe.
Code Complete ist eine gute Einführung in die Mechanik der Softwareentwicklung, einschließlich Ratschlägen zum Schreiben und Strukturieren von klarem, wartbarem Code. Ja, es ist ein riesiger Band, aber sicherlich nicht so dicht wie Diracs "Principles of Quantum Mechanics" oder MTWs "Gravitation". Code Complete ist so nah wie möglich an einer Checkliste mit fünf Schritten, um bessere Software zu schreiben.
Matlab, VIM, C, MPI und Valgrind sind hervorragende Werkzeuge. Sie erwähnen nicht die Verwendung eines Versionskontrollsystems. Wenn Sie durch einen Zufall noch kein Versionskontrollsystem verwenden, müssen Sie sofort damit beginnen. Die Versionskontrolle ist auch ein Geschenk für das Verfassen Ihrer Abschlussarbeit. Weitere grundlegende Tools, die Sie kennen sollten, sind ein Debugger, ein Ausführungsprofiler, ein Protokollierungsframework und ein Unit-Testing-Framework. Sie müssen nicht für jedes Buch ein Buch mit 1000 Seiten lesen. Durcharbeiten Sie die Online-Tutorials, um die Grundlagen zu erlernen, und beginnen Sie dann, mit ihnen zu arbeiten. Tauchen Sie tiefer in die Dokumentation ein, wenn Ihre Anforderungen komplexer werden.
Es ist schwieriger, Sie über das Erlernen der Grundlagen der Informatik zu beraten (im Gegensatz zu den Grundlagen des Software-Aufbaus). Sie geben nicht an, an welchem Problem Sie arbeiten, ob Sie neue Algorithmen entwickeln oder vorhandene Algorithmen anwenden. Abhängig von Ihrem Forschungsproblem kann ein Überblick über die grundlegenden Datenstrukturen und Standardalgorithmen hilfreich sein. Andere Probleme würden eher von einem soliden Hintergrund in der numerischen Analyse profitieren. Wenn Sie die Grundlagen der Algorithmusanalyse erlernen möchten, gibt es mehrere gute Texte. Das Algorithm Design Manual und die Einführung in Algorithmen fallen mir ein. Es gibt auch ein paar gute Einführungskurse, die jetzt online verfügbar sind: Entwurf und Analyse von Algorithmen und Algorithmen .
quelle
Mein Hintergrund ist Ihrem ein wenig ähnlich - ich war ein Physik-Absolvent, der sich das Programmieren selbst beigebracht hat. Nachdem ich meinen Abschluss gemacht hatte, nahm ich einige IT-Jobs an und wurde schließlich Software-Ingenieur. Einschließlich ein wenig Zeit für OpenGDA (Software, die zum Ausführen von Experimenten an verschiedenen Synchrotron-Standorten verwendet wird).
Das Wichtigste, was ich über Ihre Fragen gelernt habe, als ich hier war, ist, dass es viel einfacher ist, diese Fähigkeiten von anderen Leuten zu bekommen, als sie selbst zu erlernen. Ein erfahrener Mentor kann Ihnen leicht dabei helfen, herauszufinden, wo Ihr Code schwach ist oder wo Ihnen gängige Muster und Praktiken helfen können. Während ich selbst gelernt habe, C und Objective-C zu schreiben, wusste ich nicht genau, was ich nicht wusste (wenn Sie verstehen, was ich meine), bis ich mit anderen Leuten am selben Code arbeitete. Die Tatsache, dass du hier um Rat fragst, bedeutet, dass es dir besser geht als mir :-).
Wo finden Sie einen zahmen professionellen Softwareentwickler? Ich bin kürzlich zu MentorNet gekommen , einem System, das erfahrene Programmierer mit Schützlingen zusammenbringt.
Aber Sie müssen sich nicht für ein solches formales System entscheiden. Die Suche nach einer lokalen Programmierer-Meet-up-Gruppe (oder einer Stelle, an der die Software-Engineering-Abteilung Ihrer Universität am Freitag nach der Arbeit ist) ist ein guter Anfang.
quelle
Kein Königsweg zur Software
In der Antike wurde Euklid von seinem Schüler, König Ptolemaios, eine Frage wie Ihre gestellt. Seine Antwort: "Es gibt keinen Königsweg zur Geometrie."
Sie erwähnen, dass Ihr Vorgesetzter lachen würde, wenn er wüsste, wie viel Zeit Sie damit verbringen, Code wie einen professionellen Entwickler zu schreiben. Andere beantworteten Ihre Fragen mit einer Liste von Lerninhalten, die von der Quellcodeverwaltung bis zum Entwurf und zur Analyse von Algorithmen reichen.
Sie verfehlen Ihr Ziel:
Konzertpianist oder One Man Band?
Die Welt bewegt sich zu schnell, als dass sich Menschen damit beschäftigen könnten. Wenn Sie Konzertpianist werden möchten, teilen Sie Ihre Zeit nicht mit dem Erlernen von Instrumenten, um eine Ein-Mann-Band zu werden.
Mein Konzept für die Rolle eines Doktors in Physik bei mittleren bis großen Projekten ist, als Ideenführer für die Systemdefinition, theoretischer Experte, Fachexperte bei der Erstellung von Anwendungsfällen und Endbenutzer / Beurteiler für die durch Software-Artefakte erzeugten Ergebnisse zu fungieren. Arbeiten Sie eng mit den besten Software-Ingenieuren zusammen, die Sie können.
Wie bewerte ich, ob meine Arbeit auch aus Sicht eines Programmierers gut ist?
Wenn Sie die Messlatte hoch legen möchten, beginnen Sie hier:
Software-Architektur in der Praxis, Len Bass, Paul Clements, Rick Kazman
Suchen Sie nach dem Kapitel "Qualitätsmerkmale verstehen". Über den Code hinaus werden Benutzerfreundlichkeit, Änderbarkeit, Leistung, Sicherheit, Verfügbarkeit, Zuverlässigkeit, Testbarkeit, Wartbarkeit und Portabilität berücksichtigt (nicht Sie können es mit sich führen, aber Sie können das Design von einer Plattform auf eine andere portieren). Alle brauchen spezifische messbare Ziele. Ähnliche Referenzen beinhalten:
http://msdn.microsoft.com/en-us/library/ee658094.aspx
http://www.sei.cmu.edu/reports/95tr021.pdf
Deine Ziele gegen C und C ++
Dies sind wie bei FORTRAN harte und alte Sprachen. Positive Indikatoren für C / C ++ sind:
Es gibt viele Leute, die Webentwicklung, Datenvisualisierung und Big Data betreiben. Viele sind motiviert, andere Sprachen zu finden oder zu machen. Zum Beispiel machte der Physiker Sir Tim Berners-Lee seinen Erfolg mit HTML (aber für Physik ist wenig bekannt). Bewerten Sie Ihr Ziel im Vergleich zu Ihrer Programmiersprache.
Erwägen Sie die Verwendung von Matlab
Matlab hat eine großartige installierte Basis und ist auf Mathematik und Naturwissenschaften spezialisiert. Es verfügt über Tools zur Datenvisualisierung. Es ermöglicht Wissenschaftlern und Mathematikern, Probleme eher in der Problemdomäne als in der Lösungsdomäne auszudrücken. Matlab stellt eine Parallel Computing Toolbox und Distributed Computing Server-Produkte her.
Ich gehe davon aus, dass der Erfolg von Matlab darauf zurückzuführen ist, dass multidisziplinäre Teams mit Experten aus den Bereichen Physik, Mathematik, Elektronik und Instrumentierung, Betriebssysteme, Programmiersprachen, Softwareentwicklung, Softwaretests, Softwarearchitektur und -design zusammenarbeiten. Die Analogie mag eine Strecke sein, aber warum würden Sie sich allein da draußen aufhalten und mit Hammer, Meißel und Raspel anfangen, um etwas zu machen, wenn Sie einen 3D-Drucker zur Verfügung haben? Wie Newton fragen könnte, warum nicht auf den Schultern von jemandem stehen?
quelle
Sie werden einen langen Weg in der Physik zurücklegen können, ohne etwas über den "professionellen" Stil zu wissen (aus Erfahrung). Aber ich habe viele Leute gesehen, die endlose Zeit verschwenden, weil sie den Überblick verloren haben, was sie tun oder nachdem sie ihren Code für ein paar Jahre erweitert haben, sind sie nur in seiner Komplexität verloren gegangen (selbst in der Wissenschaft gibt es keinen "Wegwerf" -Code, sondern Dinge bleiben Sie viel länger als Sie anfänglich denken).
Ich würde vorschlagen, dass Sie einen Vorsprung in Algorithmen und Datenstrukturen haben, z . B. mit diesem Kurs . Danach sollten Sie in der Lage sein, produktiver über Leistung nachzudenken und beispielsweise Artikel auf Wikipedia nachzuschlagen.
Danach gewöhnen Sie sich an das, was im Kern Ihrer Sprache verfügbar ist, z. B. für C ++ cppreference.com . Ich würde Ihnen auch dringend empfehlen, die Effective C ++ - Reihe von Scott Meyers und Accelerated C ++ von Koenig & Moe zu lesen . Zumindest für C ++ bietet dies eine solide Grundlage für die Sprache.
Parallel sollten Sie versuchen, sich mit Ihren Werkzeugen vertraut zu machen. Es ist nicht unwahrscheinlich, dass Sie Ihren Code unter Linux entwickeln werden. Versuchen Sie also, zu erfahren, wie Sie mehr Diagnosen (Warnungen) von Ihren Compilern erhalten (zumindest von gcc und clang). Informieren Sie sich auch über statische Analysetools wie cppcheck oder clangs Scan-Build . Erfahren Sie, wie Sie diese Tools zu einem integralen Bestandteil Ihres Entwicklungsprozesses machen, z. B. indem Sie sie in Ihr Build-Setup integrieren (ja, Sie sollten mindestens GNU make verwenden, oder noch besser etwas wie GNU autotools / cmake / ...). Sie sollten Ihrem Toolset auch Profilerstellungs-Tools hinzufügen. Für C ++ würde ich Ihnen dringend empfehlen, alles über valgrind zu lernen, das sich auf einem sehr niedrigen Niveau profilieren kann (es kann Ihnen auch dabei helfen, Ressourcenlecks zu finden).
All dies hilft Ihnen, sich auf das zu konzentrieren, was Ihnen am wichtigsten ist (Ihre Forschung), anstatt Zeit damit zu verschwenden, Fehler zu finden oder nutzlose Optimierungen vorzunehmen. Natürlich ist es fast unmöglich, dies an einen Berater zu verkaufen, aber sie (und Sie) werden beeindruckt sein, aber die Geschwindigkeit, mit der Sie zuverlässige Ergebnisse erzielen können.
Sie haben C und C ++ erwähnt, aber für numerische Berechnungen kann ich Python nicht mit genug numpy und scipy empfehlen . Es ermöglicht Ihnen, in einer sauberen, ziemlich sauberen Sprache auf einem sehr hohen Niveau zu schreiben (Sie können sogar interaktiv arbeiten), während Sie dennoch die in C, C ++ und FORTRAN implementierten, extrem optimierten Routinen nutzen. Außerdem ist die Anbindung Ihres eigenen C- oder C ++ - Codes an Python fast trivial.
quelle
Ist es richtig? Produziert es in allen Fällen korrekte Ergebnisse?
Können andere Ihren Code lesen und leicht verstehen?
Wenn Ihr Vorgesetzter sagt "Großartig, jetzt machen Sie es auch mit X ...", müssen Sie viel Code umschreiben?
Wenn Sie ein Programm geschrieben haben, wird es zu einem Werkzeug, das Sie immer wieder verwenden können, oder wird es einmal verwendet und weggeworfen?
Wenn Sie mit "Ja", "Ja", "Nein" und "Ja" antworten können, versuche ich, Werkzeuge und keine einmaligen Berechnungen anzufertigen, dann geht es Ihnen schon ziemlich gut. Vieles, was wir als Programmierer tun, soll bei den oben aufgeführten Dingen helfen.
quelle
Ihre Programme unterscheiden sich grundlegend von kommerziellem Quellcode, weshalb viele bewährte Methoden und Ansätze für die tägliche Entwicklung von Quellcode nicht gelten. Aber es gibt eine gute Möglichkeit, ein paar Tipps und Tricks zu lernen.
Lassen Sie einen guten Softwareentwickler Ihren Code überprüfen und gemeinsam optimieren. Es wird Ihnen viel mehr Erfahrung geben und Ihnen gute Praktiken beibringen. Überprüfen Sie auch den Quellcode, der von anderen Personen geschrieben wurde. Suchen Sie auf sourceforge oder github nach Open Source-Projekten und lesen Sie deren Quellcode.
Überlegen Sie sich aber vor allem, ob Sie tatsächlich etwas Neues lernen müssen, um Ihre Ziele zu erreichen. Wenn Sie unnötige Dinge tun, um den Code ansprechender zu gestalten, erhalten Ihre Anwendungen keinen Mehrwert.
quelle
Wenn es darum geht, ein besserer Programmierer zu werden, gibt es keine magische Kugel. Wenn Sie Autodidakt sind, ist der Schlüssel die Selbsterkenntnis, wie es sich anhört. Das Erlernen des Codierens hängt jedoch hauptsächlich vom Lesen und Üben ab.
Sich kritisch gegenüber seinem eigenen Code zu verhalten, ist eine der besten Möglichkeiten, besser zu werden. Fragen Sie sich immer:
Mein anderer Vorschlag wäre, sich nicht an C / C ++ zu binden. Das sind zwar gute Sprachen, die aus einem bestimmten Grund verwendet werden, aber Sie müssen eine Menge Dinge tun, die nicht mit dem Thema zusammenhängen. Schauen Sie sich Matlab an, ich wäre überrascht, wenn die Universität das nicht für Sie bereit hält. Betrachten Sie eine Skriptsprache wie Python. Überlegen Sie nachdrücklich, eine funktionale Sprache wie Haskell aufzugreifen - das Paradigma ist sehr mathematisch und würde wahrscheinlich wie angegossen zu Ihren Problemen passen. Kurz gesagt, erforschen Sie einige andere Sprachen / Paradigmen. Auch wenn sie nicht zu einem dauerhaften Werkzeug in Ihrem Gürtel werden, machen sie Sie zu einem besseren Programmierer.
Möglicherweise möchten Sie auch einen Blick auf das Algorithmus-Design werfen. Ich vermute, dass Sie den Job bekommen haben, Sie sind schon relativ weit fortgeschritten, aber Algorithmen sind unglaublich wichtig, wenn Sie numerische Analysen durchführen. Ich vermute sogar, dass es Ressourcen gibt, die speziell auf numerische Analysealgorithmen ausgerichtet sind.
Verlieren Sie niemals Ihren Hauptzweck beim Schreiben des Codes aus den Augen. Sie müssen die Dinge erledigen. Ein besserer Programmierer zu werden, ist eine Methode, um das zu tun. Die Auswahl der richtigen Werkzeuge für den Job ist eine andere.
quelle
Erstens ist "elegant" ein relativer Begriff. Abstraktion mag Ihnen elegant erscheinen, aber für einen anderen C-Aficionado mag sie unnötig erscheinen. Um Ihre Frage zu beantworten, sollten Sie auf jeden Fall versuchen, Ihren Code zur Überprüfung auf http://codereview.stackexchange.com zu veröffentlichen .
Vom Hauptpunkt abschweifen, einige unaufgeforderte Ratschläge, die auf meinen eigenen Erfahrungen beruhen. Wenn Sie Ihre gesamte Arbeit mit nur C erledigen können, warum möchten Sie sie dann abstrakt codieren? Möchten Sie damit anderen Benutzern ermöglichen, Ihren Code wiederzuverwenden? Wenn Sie wirklich gute Gründe haben, auf C ++ umzusteigen, entscheiden Sie sich für die Abstraktion und das Erlernen von C ++ - und OO-Konzepten. Ansonsten lass die Idee fallen. Sollten Sie meiner bescheidenen Meinung nach nicht darauf abzielen, dass Ihr Code besser lesbar und Ihre wissenschaftlichen Ergebnisse reproduzierbar sind, als dass Sie ihm OO-Abstraktionen geben? Ich selbst hatte diese Art von Obsession, OOPS zu lernen und "elegant" zu codieren. C ++ wird jedoch einige Zeit in Anspruch nehmen. Sie müssen das Speichermanagement erlernen, da die Garbage Collection in C ++ nicht automatisch erfolgt. Nehmen Sie meinen Rat an, da ich selbst für ein Forschungslabor gearbeitet habe und viel Zeit damit verloren habe, C ++ und OO zu lernen.
quelle
In Anbetracht Ihrer Erwähnung von Zeitmangel zum Studium der Theorie.
Wenn Sie sich nach ein paar Monaten noch einmal Ihren alten Code angesehen haben und sich gefragt haben, "was für ein Idiot hat dieser Code geschrieben", dann sind Sie auf dem besten Weg.
Wie sind Sie vorangekommen? Indem wir besseren Code sehen, den andere geschrieben haben. Eine Person kennt den Wert von "Eleganz" oder "gutem" Code nur dann, wenn sie sieht, dass er ihrer Arbeit einen Mehrwert verleiht. Anstatt Theorie zu lesen, möchte ich Sie ermutigen, die Augen offen zu halten für Code, der von anderen in Ihrem Arbeitsbereich geschrieben wurde. Halten Sie Ihre Augen offen für Konzepte, die im Stackoverflow (C ++ - Tag) diskutiert werden. Wenn Sie nur fünfzehn Minuten pro Tag mit einer solchen Suche verbringen, können Sie zufällig Konzepten ausgesetzt werden, die Ihnen helfen können. Es kann Ihnen Code anzeigen, der besser geschrieben ist als Ihr Code. Dann folgen Sie Wikipedia und erfahren mehr darüber. Solches Lernen, das aus Neugier entsteht, wird für Sie viel länger dauern und nützlicher sein als die Theorie, die Sie vergessen werden, wenn Sie am nächsten Tag aufwachen.
Probieren Sie auch Sprachen wie MATLAB oder Python aus.
quelle
Als selbst zum Programmierer gewordener Physiker fand ich meinen physikalischen Hintergrund am hilfreichsten, um die richtigen Metaphern für das Verständnis von Softwarekonzepten zu finden. Diese Perspektive machte mir auch das Programmierenlernen mehr Spaß und half mir, das Gefühl für "Eleganz" in Software zu entwickeln, nach dem Sie zu streben scheinen.
Ich habe die wichtige und unterschätzte Rolle von Metaphern und Analogien in Software in meiner CUJ-Kolumne "Denkmuster - Namen, Metaphern, bessere Programmierung und die Politik der Sprache" beschrieben . Beispielsweise werden die OO-Konzepte der Klassenvererbung häufig mit der Weitergabe von Merkmalen von Eltern an Nachkommen in einer Familie verglichen. Dies ist eine falsche Analogie. Die korrekte Analogie für die Klassenvererbung ist die biologische Klassifizierung von Organismen (z. B. ist eine Klasse RedRose eine Art Blume und eine Blume eine Art Pflanze).
Oder nehmen Sie zum Beispiel das Softwarekonzept einer hierarchischen Zustandsmaschine. Eine gute Metapher ist hier das Konzept eines gebundenen Quantensystems wie des Wasserstoffatoms. Wie Sie sich erinnern, werden die Zustände eines Atoms durch drei Quantenzahlen | n, l, m> nummeriert, genau weil sie "verschachtelt" (hierarchisch) sind. Diese Metapher zeigt Ihnen, wie Sie verstehen, dass Zustände in Zuständen verschachteln (genau wie Drehimpulszustände (l) in den Energiezuständen (n) verschachteln) und dass Zustandsverschachtelung immer eine gewisse Symmetrie des Systems widerspiegelt .
Eine weitere interessante Analogie aus der Physik ist das "Akteurmodell der Berechnung", das aufgrund von Mehrkern-CPUs und des verteilten Rechnens in der "Cloud" in letzter Zeit wiederentdeckt wurde. Ich fand es hilfreich und unterhaltsam, Ereignisse, die von staatlichen Schauspielern (auch als aktive Objekte bezeichnet) ausgetauscht wurden, als virtuelle Bosonen wie Photonen in QED oder Gluonen in QCD zu betrachten. Diese Metapher erklärt die grundlegende asynchrone Natur der Kommunikation, die vollständige Ereignisverarbeitung (Quantensprung) und die strikte Einkapselung von aktiven Objekten, die nur über die expliziten Zwischenartefakte miteinander interagieren können.
Wie auch immer, die Entwicklung einer Systemmetapher wird in XP (eXtreme Programming) empfohlen, und als Physiker haben Sie einen Vorteil darin, gute Metapher zu finden. Sie werden auch ein Gespür für "Eleganz" entwickeln, da Ihre Software die konzeptionelle Integrität von guten Metaphern erbt, die Sie anwenden.
quelle
Ich kann Ihnen sagen, dass die größten Fortschritte, die ich beim Lösen von Problemen erzielt habe, alle durch das Erlernen funktionaler Sprachen und Parser erzielt wurden. Beide Entdeckungen wurden zufällig gemacht. Wenn Sie es also wirklich ernst meinen, ein besserer Programmierer zu werden, müssen Sie die verschiedenen Techniken kennenlernen, die beim Schreiben eines Compilers zum Einsatz kommen, z. B. Parser und Parsergeneratoren. Außerdem müssen Sie lernen, wie Sie Berechnungen mit höherer Ordnung erstellen funktionen.
Eine ausgezeichnete Ressource für Parser und Compiler ist PL101: Create Your Own Programming Language . Ich habe immer noch keine gute Einführung in die funktionale Programmierung gefunden, aber ich höre wirklich gute Dinge über SICP .
quelle
Ein Absolvent der Informatik weiß nicht, wie man gut codiert, wenn er seinen Abschluss macht. Sie sind nicht so gefragt, wenn sie die Universität verlassen. Nur wenn sie die Erfahrung machen.
Die Antwort auf Ihre Frage ist, dass Sie Design Patterns lernen müssen. Ich habe in Java, .NET programmiert und arbeite jetzt als PHP-, Javascript- und MySQL-Programmierer. .NET hat übrigens einen sehr hohen Abstraktionsgrad, zB ASP.NET. Dies bedeutet, dass Sie das Lernen der Abstraktion überspringen können. Sprachen wie Perl, PHP usw. weisen einen geringen Abstraktionsgrad auf.
Lesen Sie Head First Design Patterns, es ist ein gutes Buch. Es ist ein ziemlich umfassendes Buch. Das ist alles was Sie brauchen.
quelle