Welche Informatikkonzepte sollte ich kennen? [geschlossen]

94

Welche Konzepte in der Informatik haben Sie Ihrer Meinung nach zu einem besseren Programmierer gemacht?

Mein Abschluss war Maschinenbau. Nachdem ich Programmierer geworden bin, fehlen mir die Grundlagen. Es gibt einige Standard-CS-Konzepte, die ich kürzlich gelernt habe und die mir ein viel tieferes Verständnis dafür vermitteln, was ich tue, insbesondere:

Sprachmerkmale

  • Zeiger & Rekursion (Danke Joel!)

Datenstrukturen

  • Verknüpfte Listen
  • Hashtabellen

Algorithmen

  • Bubble Sorts

Offensichtlich ist die Liste im Moment etwas kurz, also hoffte ich auf Vorschläge für:

  1. Welche Konzepte sollte ich verstehen,
  2. Alle guten Ressourcen, um sie richtig zu verstehen (da Wikipedia manchmal etwas dicht und akademisch sein kann).
Jon Artus
quelle
5
Blasensorten? Halte dich so weit wie möglich von ihnen entfernt! Lernen Sie lieber, wie Quicksort / Heapsort funktioniert.
Carra
18
Ja lerne Bubblesort. Erfahren Sie, warum es schrecklich ist. Lernen Sie Quicksort, Mergesort und alles andere, einschließlich ihrer individuellen Schwächen. Schreiben Sie sie jedoch nicht in den Produktionscode: Rufen Sie die Sortierfunktionen auf, die von der Plattform bereitgestellt werden, auf der Sie sich befinden.
Brian Ensink
@ Roger Pate - +1 für Sie sollte man wissen, wofür ein Algorithmus oder eine Datenstruktur gut ist und woran es scheiße ist. Sowohl Quicksort als auch Bubblesort haben die gleiche Worst-Case-Leistung [O (n ^ 2)], jedoch für sehr unterschiedliche Arten von Eingaben, und Bubblesort hat die Best-Case-Leistung von O (n), wobei QS immer noch O (n log n) ist. Wenn Sie Bubblesort in Betracht ziehen, möchten Sie natürlich stattdessen die Einfügesortierung wählen.
Andre Artus

Antworten:

60

Schauen Sie sich diesen Blog-Beitrag von Steve Yegge (früher bei Amazon, jetzt bei Google) an:

Es werden einige Details zu den fünf wichtigsten Konzepten behandelt, die Entwickler kennen sollten:

  1. Grundlegende Programmierung (einschließlich Rekursion, Datei-E / A, formatierte Ausgabe, Schleifen usw.)
  2. Objektorientiertes Design (einschließlich Designmuster usw.). Sie sollten in der Lage sein, sinnvolle OO-Designs zu erstellen und die Konzepte zu verstehen.
  3. Skripte und reguläre Ausdrücke.
  4. Datenstrukturen - Listen, Mengen, Hashtabellen, Bäume, Diagramme usw. - sowie Big O-Notation und algorithmische Komplexität.
  5. Bits, Bytes und Binärzahlen - wie Zahlen im Computer dargestellt werden und wie sie manipuliert werden.
Jammycakes
quelle
Netter Link. Ein bisschen fokussiert auf die Unix-Seite (.NET fehlt komplett), aber trotzdem nett.
Toon Krijthe
Toller Link - es gibt viel zu tun, ich wünschte nur, es hätte einige Links zu guten Seiten, die diese Dinge erklären.
Jon Artus
Der Link wird für mich sehr nützlich sein, um mich selbst zu überprüfen und die Grundlagen einzuholen. Danke ..
rpr
Einverstanden, tolle Verbindung. Während viele der identifizierten möglichen Lösungen Unix-basiert sind, sind die Gesamtkonzepte sehr sprach- / plattformunabhängig. Für die meisten Programmierer sind Dinge wie Rekursion, Schreiben von ADT wie Bäume und bitweise Operationen ziemlich selten, sie sind jedoch eine wichtige Grundlage.
Zach Burlingame
4
Ich würde mit allem einverstanden sein, außer mit regulären Ausdrücken. Das ist ein netter Bonus, aber das meiste sind bodennahe Grundlagen, die Grundlage, auf der alles aufgebaut ist ... Regexes sind großartig, aber ich kenne viele großartige Programmierer, die sie nie benutzen und nie brauchen.
Beska
35

Sie sollten auf jeden Fall die Big-O- Notation und die Big-O-Schätzungen von Algorithmen verstehen - was es ist, wie es verwendet wird, warum es wichtig ist, wie Sie zwei Algorithmen anhand ihrer Big-O-Schätzungen vergleichen, wie Sie Big-O-Schätzungen erstellen für die einfachen Algorithmen.

Scharfzahn
quelle
1
Sie können mit einem Wikipedia-Artikel beginnen, auf den ich verlinkt habe - er ist sowohl recht einfach als auch mathematisch korrekt.
Scharfzahn
3
Sie müssen eine ziemlich niedrige Meinung von fortgeschrittener Mathematik haben. Ich habe das in meinem ersten Studienjahr verstanden, als ich nur einen Teil des Kalküls hinter mir hatte.
GoatRider
1
Vergessen Sie nicht das Konzept von NP, und wenn ein Problem darin enthalten ist, ist ein Entwickler, der versucht, einen TSP (Travelling Salesman) für Suchzwecke oder eine andere solche Idiotie in jede Datenbanktransaktion zu codieren, ein großes Problem =]
Ed James
2
Sie sollten auch wissen, dass das große O nicht sagt, welcher Algorithmus weniger Zeit benötigt. Etwas, das die meisten CS-Absolventen nicht verstehen
Martin Beckett
3
Das tut es irgendwie. Es zeigt Ihnen, welcher den besten Worst-Case hat, nicht unbedingt, welcher "schneller" ist, da dies vom Eingabesatz abhängt.
Ed James
30

Ich finde es ein bisschen lustig, dass Sie nach Informatikfächern suchen , aber Wikipedia zu akademisch finden: D.

Wie auch immer, hier geht es in keiner bestimmten Reihenfolge:

Rik
quelle
2
+1, weil Sie Datenbanken erwähnt haben, die in solchen Listen häufig übersehen werden, aber ein sehr wichtiges Konzept sind, das jeder gut abgerundete CS-Absolvent kennen muss.
Brian Ensink
14

Einige Konzepte, die meiner Entwicklung geholfen haben (Intellekt und Code):

  • Lexing, Parsing, String Matching, Regex
  • Auswendiglernen
    • Einkapselung / Umfang / Verschlüsse
    • Caching
  • Rekursion
  • Iteratoren / Generatoren
  • Funktionale Programmierung - John Hughes 'erstaunlicher Artikel brachte mich zum "Warum"

Dies sind ganze Bereiche der diskreten Mathematik, aber für CS ist eine ernsthafte Einführung erforderlich:

  • Matrix / Lineare Algebra
  • Graphentheorie

Obwohl Vorträge und Artikel von Mark Jason-Dominus häufig an Perl-Hacker gerichtet sind, denke ich, dass jeder Programmierer von seiner klaren Präsentation und seinem echten Code profitieren würde, insbesondere in Perl höherer Ordnung .

Bubaker
quelle
10

Ich würde sagen, dass heutzutage ein Verständnis der objektorientierten Programmierung ein Muss ist, auch wenn Sie es nicht täglich verwenden müssen.

Daraus würde ich auch sagen, dass das Verstehen der häufigsten Muster ebenfalls hilfreich sein kann.

Jeremy French
quelle
10

Ich sehe mehrere gute CS-Konzepte identifiziert, aber wenig über Mathematik gesprochen.

Ich schlage vor, dass Sie sich mit diskreter Mathematik befassen . Es gibt eine Vielzahl nützlicher Probleme, beginnend mit logischen Beweisen, mit denen Sie Bedingungen in Code schreiben können. Graphentheorie und Kombinatorik helfen auch bei der komplexen Problemlösung und Algorithmusoptimierung.

Während wir uns mit Mathematik befassen, ist die lineare Algebra in der Regel eine Voraussetzung für fortgeschrittene Computergrafikkurse.

Berkshire
quelle
1
Wenn ich nur eine auswählen müsste, wäre das diskrete Mathematik. Es ist so ziemlich CS 101. Es fällt mir schwer, mir einen Bereich oder ein Paradigma in der allgemeinen Programmierung vorzustellen, das von DM in keiner Weise berührt wird.
Andre Artus
6

Die Programmiererkompetenzmatrix hat dies ausführlich behandelt, aber ich werde ein paar hervorheben:

  • Datenstrukturen
    • Erweiterte Datenstrukturen wie B-Bäume, Binomial- und Fibonacci-Haufen, AVL / Red Black-Bäume, Splay-Bäume, Überspringlisten, Versuche usw.
  • Algorithmen
    • Tree, Graph, einfache Greedy- und Divide and Conquer-Algorithmen können die Relevanz der Ebenen dieser Matrix verstehen.
  • Systemprogrammierung
    • Versteht den gesamten Programmierstapel, Hardware (CPU + Speicher + Cache + Interrupts + Mikrocode), Binärcode, Assembly, statische und dynamische Verknüpfung, Kompilierung, Interpretation, JIT-Kompilierung, Speicherbereinigung, Heap, Stapel, Speicheradressierung…
  • Versionskontrolle des Quellcodes
    • Kenntnisse über verteilte VCS-Systeme. Hat Bzr / Mercurial / Darcs / Git ausprobiert
  • Automatisierung erstellen
    • Kann ein Skript zum Erstellen des Systems sowie Dokumentation und Installationsprogramme einrichten, Versionshinweise generieren und den Code in der Quellcodeverwaltung markieren
  • Automatisiertes Testen
    • Versteht und ist in der Lage, automatisierte Funktions-, Last- / Leistungs- und UI-Tests einzurichten
  • Problemzerlegung
    • Verwendung geeigneter Datenstrukturen und Algorithmen und Entwicklung von generischem / objektorientiertem Code, der Aspekte des Problems zusammenfasst, die Änderungen unterliegen.
  • Systemzerlegung
    • Kann komplexe Systeme mit mehreren Produktlinien und Integrationen mit externen Systemen visualisieren und entwerfen. Sollte auch in der Lage sein, Betriebsunterstützungssysteme wie Überwachung, Berichterstellung, Failover usw. zu entwerfen.
cgp
quelle
5

Ich finde Grafiken und einige angewandte Algorithmen wie Tiefe zuerst, Atem zuerst suchen, kürzeste Wege usw. sehr nützlich. Objektorientierung ist auch ein sehr verbreitetes Konzept.

Mork0075
quelle
4

Regel 1: Software ist Knowledge Capture . Software bedeutet etwas. Wenn Sie sich über die Bedeutung nicht sicher sind, sprechen Sie mehr mit den Benutzern, um zu verstehen, was sie tun.

Algorithmen und Datenstrukturen sind zwei Seiten derselben Medaille. Der Algorithmus hängt von der Datenstruktur ab, die Datenstruktur hängt vom Algorithmus ab.

Verlernen Sie das Sortieren von Blasen so schnell wie möglich. Ernsthaft. Alle modernen Sprachen (Java, Python usw.) verfügen über Sammlungsklassen, die eine bessere Sortierung als die Blasensortierung implementieren. Es gibt absolut keine Umstände, unter denen Sie jemals die Blasensortierung für irgendetwas verwenden sollten. Sie sollten nach einer Sammlungsklasse suchen, die eine Sortiermethode enthält. Besser, Sie sollten nach einem Algorithmus suchen, der das Sortieren vollständig vermeidet.

Sie müssen mehrere Sprachen lernen.

  • Programmiersprache (Java, Python usw.)

  • Shell-Sprache.

  • Datenbanksprache (SQL)

  • Präsentationssprachen (HTML und CSS)

  • Andere Datenrepräsentationssprachen (XML, JSON)

Sie müssen mehrere Datenstrukturen lernen.

  • Sequenzen (Listen, Tupel, Dateien)

  • Hierarchisch (wie XML- und HTML-Dokumente sowie das grundlegende Dateisystem)

  • Relational (wie Datenbanken und das Dateisystem mit eingebauten Hard- und Softlinks)

  • Karten (oder Indizes oder assoziative Arrays), einschließlich Hash-Karten und Baumkarten

  • Sets

Plus einige algorithmische Komplexitätsanalyse. Manchmal auch "Big O" genannt. Warum eine Blasensortierung schlecht ist, ist, dass es O ( n ^ 2) ist, wobei eine Quicksortierung O ( n log n ) ist.

S.Lott
quelle
Für die Aufzeichnung würde ich nie wirklich eine Blasensorte verwenden! Ich fand es einfach interessant zu lernen, wie es funktioniert, und stellte fest, dass es einige andere solche Algorithmen gibt, die die Leute gut genug verstehen sollten, um in der Sprache ihrer Wahl zu schreiben.
Jon Artus
Es gibt unzählige Algorithmen. Die meisten von ihnen schlecht. Einige von ihnen gut. Bubble Sort ist einfach schlecht. Kaufen Sie ein Buch über Algorithmen und fahren Sie fort.
S.Lott
Nur keine Auswahl, aber Quicksort ist der schlimmste Fall O (n ^ 2). Ich weise nur darauf hin, weil ich denke, dass das Verstehen, warum dies wahr ist, eine wertvolle pädagogische Übung beim Studium grundlegender Algorithmen ist.
Brian Ensink
Für Quicksort ja - eine wichtige Übung. Bei der Blasensortierung muss man nur sehen, wie schlecht ein Algorithmus wirklich ist. Im Allgemeinen ist es wichtig, den typischen oder den schlimmsten Fall zu verstehen.
S.Lott
4

Nun, die Dose mit Würmern ist jetzt offen! :)
Ich habe in der Elektrotechnik angefangen.

Relationales Datenbankdesign: Das Verfolgen von Daten ist wie bei Arnold in "Kindergarden Cop".
Es kann totales Chaos sein. Es muss kontrolliert werden.
So bewahren Sie Ihre Daten an den wenigsten Orten mit den wenigsten doppelten Informationen auf. So halten Sie Ihre Daten leicht und leicht zugänglich. So steuern Sie das Datenwachstum und die Integrität.

Design der Benutzeroberfläche : Auf diese Weise muss der Benutzer auf die Daten zugreifen, die wir verfolgen.
Die meisten Benutzeroberflächen werden von Entwicklern entworfen. Daher entsprechen die meisten Benutzeroberflächen leider dem Datenbankdesign. Benutzer interessieren sich überhaupt nicht für das Daten-Design. Sie wollen einfach, was sie wollen. Sie wollen es leicht bekommen. In der Regel erfordert dies eine starke Trennung vom Datenentwurf und der Benutzeroberfläche. Lernen Sie, das "Engineering" von der "südlichen Gastfreundschaft" zu trennen.

Objektorientierte Programmierung: Viele Sprachen beschränken sich auf dieses Format.

Parallele Verarbeitung - Multithreading: Viele Prozessoren machen die Arbeit schnell!
Parallele Computer gibt es schon seit Jahrzehnten. Sie sind schon seit einiger Zeit auf unseren Desktops. Beim "Cloud Computing" ist eine massive Parallelverarbeitung nicht nur obligatorisch, sondern auch vorzuziehen. Es ist unglaublich mächtig! Parallelentwickler haben viel Jobpotential.

Grundlegendes zu Geschäftsregeln: Auf diese Weise können Sie einen Großteil Ihrer Logik tabellenbasiert gestalten.
Viele IFblock-Bedingungen können in Geschäftsregel-Tabellen enthalten sein. Um die Logik zu ändern, ändern Sie einfach die Informationen in einer Tabelle. Wenig / keine Neukodierung. Wenig / kein Neukompilieren.

Events Supervise ... Methoden erledigen die Arbeit:
Halten Sie die Dinge in Ihrem Code getrennt. Es erleichtert anderen, in Zukunft Aktualisierungen vorzunehmen. Es ist auch etwas parallel zum Model / View / Controller (MVC) Framework.

PJ

PJ
quelle
3

Für mich hat der folgende Kurs an der Uni viel gebracht

  • Projektmanagement
  • Mensch-Computer-Interaktion (Hilft uns Freaks, benutzerfreundlichere Bildschirme zu erstellen)
  • Datenbankdesign (einschließlich Funktionsweise von Datenbanken, Transaktionsprotokollen, Sperren usw.)
  • Data Warehousing
  • Grafik (OpenGL)
  • Erweiterte Algorithmen
  • Datenstrukturen

Dinge, die ich gerne an der Uni getan hätte

  • Compilerkonstruktion
  • Designmuster
  • Automatentheorie
UriDium
quelle
3

LOGIK - Ich übertreibe nur die Bedeutung der Logik bei der Programmierung. Sie sagten, Sie haben Maschinenbau gemacht, also müssen Sie wissen, wie viel Mathematik Ihnen das Leben erleichtern kann.

Aussagenlogik , Logik erster Ordnung , zweiter Ordnung Logic : Das sind sehr mächtige Werkzeuge. Wahrscheinlich die wichtigsten (und einzigen) Dinge, die ich an der Universität gelernt habe. Logik ist wie die schwere Artillerie eines Programmierers - viele sehr komplexe Probleme (sowie die weniger komplexen) werden viel einfacher, wenn Sie sie in eine organisierte, logische Form gebracht haben. Es ist wie die lineare Algebra für Maschinenbauingenieure.

Tamas Czinege
quelle
3

Ich denke, ein gutes Verständnis der Funktionsweise eines Compilers ist gut zu wissen. Aho hat das klassische Buch über Konzepte, die beim Erstellen eines Compilers verwendet werden. Der Titel lautet Compiler: Prinzipien, Techniken und Werkzeuge. Sein Spitzname ist das Drachenbuch. Um dieses Buch wirklich zu verstehen, sollten Sie die formalen Sprachen verstehen. Hopcroft hat ein gutes Buch darüber - Einführung in die Automatentheorie, Sprachen und Berechnung.

zooropa
quelle
2

Viele gute Antworten wurden hier bereits erwähnt, aber ich wollte eine Teilmenge dessen hinzufügen, was wichtig ist, wurde aber bisher nicht behandelt.

Nach 15 Jahren professioneller Softwareentwicklung nach dem Studium stelle ich fest, dass ich regelmäßig einige der folgenden Konzepte aus der Schule verwende:

  • Allgemeine OO-Konzepte und moderne Programmiersprachenfunktionen (Klassen, Verstecken von Daten usw.).
  • Leistungsmetriken des Algorithmus (Big O-Notation). Führen Sie beim Entwerfen eines Algorithmus eine Big O-Analyse durch, um die Kosten des Algorithmus zu ermitteln, und suchen Sie nach effizienteren Alternativen in Engpassbereichen.
  • Verknüpfte Listen und andere komplexe Datenstrukturen.
  • Schnelle Sortierung und verschiedene Sortierkonzepte.
  • Bäume und schnelle Baummanipulation.

Wenn Ihre Sprache / Plattform Garbage Collection nicht unterstützt, sind Speicherzuweisung und Bereinigung von entscheidender Bedeutung und werden der Liste hinzugefügt.

pearcewg
quelle
2

Ich stimme diskreter Mathematik zu. Informatik ist Abstraktion. Es ist sehr hilfreich zu lernen, wie ein Mathematiker zu denken.

Ich wollte auch hinzufügen, was S.Lott über Sprachen sagte. Es ist auch wichtig, eine Reihe von Arten von Sprachen zu lernen. Nicht nur kompiliert gegen Scripting. Aber funktionaler (ML, Lisp, Haskell) logischer (Prolog) objektorientierter (C ++, Java, Smalltalk) Imperativ (C, Pascal, FORTRAN sogar).

Je mehr Programmierparadigmen Sie kennen, desto einfacher ist es, neue Sprachen zu lernen, wenn die heiße neue Sprache kommt!

Brian Postow
quelle
2

Einige der Betriebssystemkonzepte

 ( memory, IO, Scheduling, process\Threads, multithreading )

[ein gutes Buch " Moderne Betriebssysteme , 2. Auflage, Andrew S. Tanenbaum"]

Grundkenntnisse in Computernetzwerken

[ein gutes Buch von Tanenbaum

OOPS-Konzepte

Endliche Autometa

Eine Programmiersprache (ich habe zuerst C gelernt, dann C ++)

Algorithmen (Zeit \ Raum Komplexität, Sortieren, Suchen, Bäume, verknüpfte Liste, Stapel, Warteschlange)

[ein gutes Buch Einführung in Algorithmen ]

aJ.
quelle
Auto Meta? - sicherlich "Automaten" nach der ersten Bearbeitung.
Tom Duckering
Hoppla! Ich schätze, ich bin festgefahren, um die Rechtschreibprüfung durchzuführen. Ich werde es korrigieren. Vielen Dank.
aJ.
1

Versuchen Sie, alle Programmierebenen zu verstehen. Von der untersten Ebene (Montage) zur höchsten Ebene.

Nehmen Sie zum Beispiel die Rekursion, die eine einfache Funktion ist :) Versuchen Sie, die Assemblierung zu lernen und ein Programm zu erstellen, das die Rekursion in der Assemblierung verwendet.

Chrys
quelle
1

Algorithmen.

Das Erlernen des absteigenden Gebrauchs einer Programmiersprache können Sie im Laufe der Zeit lernen, aber es ist praktisch unmöglich, alle weit verbreiteten Algorithmen selbst zu erfinden. Man sollte sich zumindest bewusst sein, was getan werden kann und was nicht mit einigen Problemen.

Zum Beispiel kann man einige Programme mit Bubble-Sort einfach nicht schreiben und erwartet, dass sie als gut angesehen werden, egal wie fein der Code ist.

Um es zusammenzufassen - werfen Sie einen Blick auf Einführung in Algorithmen

Keine Notwendigkeit, es zu meistern, nur wissen, was los ist ...

Liran Orevi
quelle
1

Als Absolvent eines Informatikstudiums würde ich Folgendes empfehlen:

CodeMonkey
quelle
1

Es ist eindeutig ein gutes Verständnis der objektorientierten Programmierung, guter Leitprinzipien wie SOLID-Prinzipien und der Befolgung etablierter Muster und Praktiken.

Wenn Sie sich SOA oder DDD ansehen, greifen alle letztendlich auf irgendeine Form von OOP-Konzepten zurück.

Ich würde Ihnen empfehlen, sich ein paar gute OOP-Bücher zu besorgen und sich zunächst eine reichhaltige Sprache wie C # oder Java auszusuchen

OOP von Grady Booch

(PHP, Ruby Jungs, bitte stimmen Sie mich nicht ab, ich gebe nur einige Beispiele für ihn, Sie können hier Ihre eigenen Antworten und Vorschläge geben)

Srikar Doddi
quelle
1

Struktur und Interpretation von Computerprogrammen . Wenn Sie dieses Buch verstehen, kann alles andere leicht auf dieser Grundlage aufgebaut werden. Wenn Sie Probleme mit den Konzepten in diesem Buch haben, sind Sie möglicherweise ein Softwareentwickler, aber kein Informatiker.

Lambdabunny
quelle
1

Ich werde Ihnen keine spezifischen Konzepte zum Lernen nennen, sondern würde Ihnen stattdessen empfehlen, viel Licht über eine Vielzahl von Themen zu lesen. Machen Sie sich keine Sorgen um ein tiefgreifendes Verständnis der einzelnen Themen, über die Sie gelesen haben. An dieser Stelle ist es wichtiger, dass Sie erkennen können, um welche Art von Problem es sich handelt, damit Sie einige Probleme lösen können. In-Time-Lernen, wenn Sie tatsächlich damit konfrontiert sind. Mit anderen Worten, es ist in Ordnung, wenn Sie nicht wissen, wie Sie ein Kombinatorikproblem lösen können, solange Sie genug wissen, um nach "Kombinatorik" zu suchen, wenn Sie sehen möchten, auf wie viele Arten Sie eine Gruppe von Objekten anordnen oder eine Teilmenge auswählen können .

Wikipedia ist eine ziemlich gute Ressource für diese Art des umfassenden Browsens, insbesondere wenn Sie zunächst nur überfliegen. Ein noch besseres ist das C2-Wiki , insbesondere wenn Sie Wikipedia als zu akademisch oder unzugänglich empfinden . (Dies ist interessanterweise das ursprüngliche Wiki, das von Ward Cunningham erfunden wurde).

John Hyland
quelle
0

Ich denke, es ist wichtig, die grundlegende Theorie hinter Multithreading zu verstehen. Ohne diese Theorie kann es schwierig sein zu erkennen, dass es ein Problem geben kann, bis Sie an einem Sonntagmorgen um 4 Uhr auf einem Live-Server debuggen.

Semaphoren, kritische Abschnitte und Ereignisse.

Jim T.
quelle
0

Nein, keine Blasensortierung, Quicksort. Es ist die Big-O-Ding-Blasensortierung im Durchschnitt O (n ^ 2), Quicksort ist O (n * log (n)).

GoatRider
quelle
0

Ich würde sagen, unten sind die wichtigsten Dinge

  • Objekt orientierte Programmierung
  • Betriebssystemkonzepte
    • Prozess und Thread
    • Planungsalgorithmen
  • Datenstruktur
    • Art der Datenspeicherung und -erfassung, Typen (verknüpfte Liste, Hash, Array usw.)
    • Sortieralgorithmen
    • Komplexität von Algorithmen

Gehen Sie dann zu bestimmten sprachbezogenen Themen. Ich hoffe das ist hilfreich !!

Mutant
quelle
0

Ich würde mit dem Zitat beginnen:

"Wenn das einzige Werkzeug, das Sie haben, ein Hammer ist, behandeln Sie alles wie einen Nagel." (Abraham Maslow)

Das wichtigste Prinzip, IMO, ist es, viele verschiedene Programmierparadigmen und -sprachen zu kennen und sich gut über die Tools zu informieren, die Ihnen zur Verfügung stehen. Jedes Problem kann in fast jeder Sprache gelöst werden, die Sie wählen, sei es in der Mainstream-Sprache mit ihrer riesigen Standardbibliothek oder in einer kleinen Spezialsprache wie AutoHotKey. Die erste Aufgabe des Programmierers besteht darin, zu bestimmen, was gemäß der Spezifikation des Problems verwendet werden soll. Einige Konzepte bieten eine bessere Herangehensweise an das Thema, unabhängig von Ihrem Hauptziel - Raffinesse, Verschleierung, Leistung, Portabilität, Wartung, kleine Codegröße ...

Andernfalls werden Sie wie einige Programmierer fertig, die verzweifelt versuchen, etwas in einer von ihnen spezialisierten Sprache zu tun, während das Problem in einem anderen Programmierkontext trivial zu lösen sein könnte.

Dieser Rat geht mit der heutigen Tendenz zu mehrsprachigen Projekten einher (z. B. Webanwendungen, die mehrere Sprachen in einer einzigen Anwendung umfassen können, z. B. C #, JS, CSS, XPath, SQL, XML, HMTL, RegExp ... und sogar verschiedene Programmierparadigmen (zum Beispiel hat C # kürzlich einige Konzepte aus funktionalen Programmierparadigmen, Lambdas, eingeführt).

Das Grundlegende ist also ständiges Lernen für immer :)

Majkinetor
quelle
0

Ich denke, 3D-Grafik sollte jeder lernen. Oder zumindest, wie man homogene Vektoren und Matrixtransformationen richtig einsetzt.

Es kann nicht nur beim Erstellen von 3D-Anwendungen hilfreich sein, sondern auch in mechanischen Bereichen wie der inversen Kinematik von Robotern, dem Berechnen von Momenten und vielen anderen Dingen.

Ich habe die lineare Algebra erst vollständig verstanden, als ich 3D-Grafiken gelesen hatte, einen der besten Kurse, die ich je besucht habe, obwohl unser Lehrer schlecht war.

TheDude
quelle
0

Da Maschinen mit mehreren Kernen (sowohl CPU als auch GPU) zum Standard werden, würde ich sagen, verteilte Algorithmen (von mehreren Threads zu mehreren Maschinen) einzuschließen. Es ist wichtig, Multithreading und verteilte Verarbeitung zu verstehen. Entschuldigung, dass der Link nicht wirklich viel Hilfe bietet.

Erich Mirabal
quelle