it-swarm.dev

CS-Fächer, die ein Student kennen muss

Im College habe ich mich nie für Theorie interessiert. Ich habe es nie gelesen. Egal wie viel ich versuchte, ich konnte nichts lesen und wusste nicht, was praktisch tatsächlich geschah. Wie zum Beispiel in meinem Kurs über Automatentheorie erzählte mir mein Professor alles, was möglicherweise mit dem mathematischen Aspekt zu tun hat, aber er erwähnte nicht einmal, wo es praktisch verwendet werden würde. Dies ist nur ein Beispiel.

Ich habe mein College bestanden und war auch Praktikant bei einer Firma, wo ich ein Projekt gemacht habe. Zum Glück haben sie sich nicht um meine Noten gekümmert, da sie überdurchschnittlich gut waren.

Jetzt bin ich daran interessiert zu wissen, welche Fächer ein CS-Student unbedingt und positiv kennen muss. Themen, die in der Branche relevant sein können. Dies liegt daran, dass ich etwas Freizeit habe und es mir besser helfen würde, sie gut zu verstehen.

Was sind deine Vorschläge? Wie zum einen sind Algorithmen ein Thema.

34
Karl

Ob Sie es glauben oder nicht, eines der Dinge, die sich im späteren Leben als von entscheidender Bedeutung für mich herausstellten, war Compiler Construction. Nicht die moderne Namby-Pamby-Version mit Lex und Yacc, das ist für Dummies.

ECHTE Compilerkonstruktion, in der Sie Ihren eigenen Symbolscanner und Parser von Grund auf schreiben.

Dies ist etwas, von dem ich dachte, ich würde es nie wieder verwenden. Aber in den letzten 20 Jahren hat sich dieser Kurs viermal in Gold bewährt. Jeder Befehlsprozessor, den ich schreiben musste, jeder Scanner für eingehende Nachrichten, jeder Dispatcher für Benutzer, jeder Skriptinterpreter hat die Prinzipien dieses Kurses verwendet. Tun Sie es so und das Leben ist süß, klar und einfach. UND ich gab sogar alle Informationen an einen Kollegen weiter, der es nicht getan hatte - er musste tatsächlich einen Compiler für eine abstrakte Maschine schreiben. Was ich hinzufügen möchte, hat sich als sehr kommerziell erfolgreich erwiesen.

Wenn ich mich an einen Universitätsdozenten in einem Fach wenden müsste, wäre das alles. Ohne das wäre ich durchgekommen, aber meine Lösungen wären viel hässlicher gewesen.

(Und bevor jemand aufspringt und sagt "Nun, Sie hätten Lex und Yacc verwenden können ...", lautet die Antwort vielleicht - es hängt stark vom System ab. In einigen Fällen waren die Programmiersprachen nicht C (z. B. PL/M und Ada), in einigen Fällen waren weder Lex noch Yacc für die Plattform verfügbar. Wenn Sie die Grundlagen kennen, ist eine Lösung verfügbar, anstatt die Hände zu wringen und herauszufinden, wie ein Werkzeug gebogen werden kann, um das Problem zu lösen.)

42
quickly_now
  1. Datenstrukturen/Algorithmen, insbesondere Diagramme. Die Anzahl der realen Situationen, in denen ich grafische Algorithmen verwenden konnte, hat mich überrascht. Konzentrieren Sie sich darauf, die Eigenschaften zu kennen, wann eine Datenstruktur oder ein Algorithmus geeignet ist. Es ist wichtig, ein Problem zu erkennen und beispielsweise den dynamischen Programmier-/Greedy-Algorithmus zu verwenden, und Sie können viel Zeit sparen.

  2. Kenntnisse über die Komplexität von Berechnungen. Sie müssen nicht genau wissen, was die Untergrenze der Radix-Sortierung ist, aber es ist wichtig zu wissen, wie die schlechteste Laufzeit von etwas, das Sie schreiben, ist, insbesondere für leistungskritische Projekte.

  3. O.S. Konzepte. Speicherverwaltung, Scheduler usw. Jeder Entwickler sollte wirklich ein solides Verständnis der Betriebssysteme haben, da der von Ihnen geschriebene Code ständig mit ihm interagiert.

  4. NetSec. Ich habe nur sehr wenige Entwickler getroffen, die ein solides Verständnis für grundlegende Sicherheitsbedenken bei der Entwicklung haben (Pufferüberläufe, xss, SQLI usw.). Dies ist wirklich ein Muss, wenn Sie in der Industrie erfolgreich sein wollen. Es ist großartig, wenn Sie das nächste große Ding schreiben können, aber Sie werden nicht lange viele Benutzer haben, wenn Sie ihre Daten nicht sichern.

  5. Programmierparadigmen. Kennen Sie die Eigenschaften und Unterschiede zwischen OO/funktionaler/prozeduraler Programmierung. Eine der besten Grundschulklassen, die ich je hatte, war das Schreiben von einfachen 20 Dolmetschern für Fortan, Schema, Prolog usw. in den Sprachen selbst. Allein die Belichtung selbst kann Ihnen wirklich helfen, die grundlegenden Konzepte der Softwareentwicklung zu verstehen.

37
Kurtis

Die Erfüllung der Abschlussanforderungen reicht nicht unbedingt aus, um der beste Informatiker zu sein, der Sie sein können. Für einen typischen College-Lehrplan sind hier die zehn wichtigsten Dinge, die Sie unbedingt lernen sollten:

  1. Die Grundlagen der Wirtschaft - Ein Einführungskurs zu Themen wie ergänzt und ersetzt ist für die Arbeit in der Wirtschaft von entscheidender Bedeutung. oder einfach nur verstehen. Während das Konzept eines Giffen-Gutes Ihnen nicht unbedingt hilft, wird das Wissen über externe Effekte Willen. Es könnte Ihnen auch helfen zu erkennen, dass mehr Situationen Win-Win sind, als Sie vielleicht gedacht haben.

  2. Wie man einen Beweis schreibt - Alle Informatik-Majors sollten wissen, wie man einen Beweis schreibt. Und diskrete Mathematik zählt zwar nicht zu einem ausgewogenen Frühstück, zählt aber nicht. [Induktion ist nur eine Beweismethode, und Sie können auskommen, ohne wirklich viel über Beweise zu wissen.] Ein Kurs in Algebra oder realer Analyse ist erforderlich, um wirklich Beweise zu schreiben. Und mit Algebra meine ich Gruppentheorie oder abstrakte Algebra, nicht den Kurs, den Sie in der High School besucht haben. Um den vollen Nutzen zu erzielen, nehmen Sie Algebra und reale Analyse im selben Begriff.

    Warum ist das Schreiben von Korrekturen so wichtig? Weil es programmiert! Denken Sie darüber nach, wann Sie das Programmieren zum ersten Mal gelernt haben: Wenn für eine Aufgabe ein if und eine Schleife erforderlich sind, haben Sie möglicherweise keine Ahnung, wo Sie sie in Beziehung zueinander setzen sollen. Aber jetzt würde sich die gleiche Aufgabe ganz natürlich anfühlen. Das Schreiben eines Beweises ist sehr ähnlich. Es gibt eine Reihe von Tricks, die Sie lernen, und sobald Sie sie gelernt haben, sehen die Dinge ganz anders aus.

  3. Schreiben - Schriftliche Kommunikationsfähigkeiten sind unerlässlich, unabhängig davon, ob Sie in der Industrie oder im akademischen Bereich arbeiten. Es ist am besten, wenn Sie einen Mechanikkurs finden und keinen Schreibkurs, der sich effektiv mit einem anderen Thema befasst. Das heißt, viele Schulen werden versuchen, die Schreibkurse relevanter oder interessanter zu gestalten, indem sie sich mit einem speziellen Thema befassen. Versuchen Sie, die "langweilige" Version des Kurses zu wählen.

  4. Wahrscheinlichkeit und Statistik - Es gibt einige Dinge, die Sie nur durch einen Kurs richtig lernen werden. Zusammen mit den CS-Hauptanforderungen (die Ihnen diskrete Mathematik, Einzelvariablen- und Mehrfachvariablenrechnung sowie lineare Algebra geben sollten) und Algebra und/oder realer Analyse erhalten Sie durch das Aufnehmen von Statistiken wahrscheinlich einen Nebenfach in Mathematik. Mithilfe von Lernstatistiken können Sie mit anderen Wissenschaftlern an ihren Projekten arbeiten.

  5. Das aktuelle heiße Thema - In den vergangenen Jahrzehnten waren es möglicherweise Datenbanken oder objektorientierte Programmierung. Heute kann es sich um Webprogrammierung oder serviceorientierte Architektur handeln. Was auch immer die aktuelle Modeerscheinung ist, stellen Sie sicher, dass Sie einen Kurs darin belegen. Wenn nur um zu sehen, worum es in der Modeerscheinung geht.

  6. Das Halteproblem - Die meisten Probleme können nicht von Maschinen gelöst werden. Dies ist eine ziemlich tiefe Idee, die unsere Kultur so gut aufgenommen hat, dass sie nicht mehr schockierend klingt. Das gleiche gilt für Radio, Goedel und die Atombombe. Erst mit der postmodernen Kunst und dem Kalten Krieg konnten wir diese Konzepte wieder bewältigen. Wenn Sie jedoch einen Kurs in Berechenbarkeitstheorie belegen, können Sie erneut für diesen erstaunlichen Beweis sensibilisiert werden.

  7. Reine funktionale Programmierung - Sie werden höchstwahrscheinlich nicht in die reine funktionale Programmierung einsteigen, es sei denn, Sie recherchieren darin oder arbeiten für einige ausgewählte Unternehmen, wissen es aber Es wird Ihnen helfen, ein besserer Programmierer zu sein. Der Grund dafür ist, dass Sie viele neue Formen der Abstraktion und Konzepte wie Kirchenzahlen und -fortsetzungen und -monaden und, ja, Rekursion lernen und diese Werkzeuge auch auf Ihr nächstes Java -Programm) angewendet werden können.

  8. P und NP - OK, dieser befindet sich bereits auf Ihrem kritischen Pfad, aber achten Sie trotzdem darauf. Sie möchten sicher sein, dass Sie jemanden korrigieren können, wenn er fälschlicherweise NP "nicht polynomisch" aufruft. Als ob!

  9. Die Themen aus dem Kurs, die Sie sicher hassen werden - Dies könnte ein CS-Kurs sein, den Sie als zu niedrig, zu theoretisch oder als zu niedrig empfinden Nicht-CS-Kurs finden Sie zu anstößig, zu hart oder zu langweilig. Wenn ein Kurs wie dieser ein Problem für Sie zu sein scheint und Sie anderen erklären, warum Sie so froh sind, dass Sie nicht so und so teilnehmen müssen, sollte er Ihnen sagen, dass Sie viel lernen werden durch den Kurs! Vielleicht lernen Sie die Materialien des Kurses nicht, aber Sie lernen Ihre eigenen Grenzen und vielleicht mehr die Rechtfertigungen kennen, die Sie sich selbst machen. [Hinweis: Sie sind normalerweise schwach.]

  10. Der Nicht-CS-Kurs, den Sie sicher lieben werden - Am Ende sollten Sie Spaß haben. Dies ist der Kurs, von dem Sie wahrscheinlich am wenigsten profitieren werden, aber nehmen Sie ihn trotzdem. Mach es einmal. Wenn Sie viele Kurse lieben, ist das gut für Sie, aber stellen Sie sicher, dass es den Rest der Kurse auf dieser Liste nicht behindert.

Mein Ansatz hier war praktisch, basierend auf Kursen, die Sie tatsächlich belegen können. Und ich habe mich auf Lernziele konzentriert, die wahrscheinlich gelernt werden. Hinweis: Diese Antwort wurde aus einem Blog-Beitrag von mir über Zehn Dinge, die jeder Informatik-Major lernen sollte angepasst.

21
Macneil

Nach einem Gespräch mit einigen Unternehmensvertretern und Freunden, die viele Interviews hatten:

  • Datenbanken
  • OOP
  • Algorithmen
  • Datenstrukturen

neigen dazu, "musts" für Neueinstellungen (oder, wie sie sagten, "sehr empfohlene" Kurse) zu sein.

Andere Kurse, die nützlich sein können, sind Computersicherheit, Assembly und Maschinenarchitektur. Viele meiner Professoren haben mir auch einen Compilerkurs empfohlen. Wenn Sie Zeit haben, würde ich auch Mathematikkurse wie Graphentheorie, diskrete Mathematik und Kombinatorik empfehlen. In den Klassen, die in den meisten CS-Kursen beschönigt werden, lernen Sie viele Argumentationsfähigkeiten, die jedoch beim Schreiben sehr komplexer Programme sehr nützlich sind.

Ich hoffe, das hilft!

8
K-RAN

Es hängt weitgehend davon ab, was Sie mit dem Abschluss vorhaben. Es scheint, dass die meisten CS-Majors als Software-Ingenieure enden. Vor diesem Hintergrund bin ich mir nicht sicher, warum mehr Leute nicht nur Software-Engineering studieren. Ich vermute, dass insbesondere an öffentlichen Einrichtungen nicht genügend Software-Engineering-Programme verfügbar sind.

Ich komme aus einem eingebetteten Hintergrund. Jede einzelne Person, mit der ich zusammenarbeite, hatte entweder einen EE- oder einen CE-Abschluss, und das liegt teilweise daran, dass zu der Zeit, als die "alten Leute" zum College gingen, nicht so viele CE-Programme verfügbar waren. Es ist also ziemlich offensichtlich, dass ein Hardware-Hintergrund wünschenswert ist, wenn Sie im eingebetteten Bereich arbeiten möchten.

Unabhängig davon, in welchem ​​Bereich Sie arbeiten möchten, glaube ich, dass jeder Programmierer einen Kurs in Assembler-Programmierung belegen sollte. Sie werden es vielleicht nie benutzen, aber es wird genau lehren, was während eines Funktionsaufrufs auf Prozessorebene passiert, wie Interrupts behandelt werden, wie der Speicher strukturiert ist oder wie die verschiedenen Adressierungsmodi verwendet werden. Ich glaube, all diese Dinge werden Sie zu einem besseren Programmierer machen.

Auch wenn dies möglicherweise nicht offensichtlich ist, sind einige dieser Themen wichtige Themen, wenn Datenstrukturen und Algorithmen für eine bestimmte Plattform betrachtet werden.

6
Pemdas

Es gibt zwei Möglichkeiten, Ihre Frage zu beantworten. Lassen Sie mich beides versuchen. Der erste Weg besteht darin, die Dinge unter dem Gesichtspunkt eines möglichen Arbeitsmarktes, Codierungsfähigkeiten usw. zu betrachten. Hier ist meine Liste:

  1. Datenstruktur
  2. Algorithmusanalyse
  3. Objekt orientierte Programmierung
  4. Entweder ein bestimmter Kurs in C++ oder Java
  5. Betriebssysteme
  6. UI-Design
  7. Parallele Programmierung

Der zweite Weg besteht darin, die Dinge aus einer etwas abstrakten Perspektive zu betrachten, und wer weiß, kann auch ein bisschen philosophisch sein. Die folgende Liste verfügt möglicherweise nicht über die heißesten Fähigkeiten, die der Arbeitsmarkt verlangt, aber ich bin mir ziemlich sicher, dass Sie zum Zeitpunkt des Abschlusses dieser Kurse die Kunst der Softwareentwicklung besser verstehen werden.

  1. Endliche Sprache und Automatentheorie
  2. Compilerkonstruktion
  3. Graphentheorie
  4. Künstliche Intelligenz
5
Fanatic23

Ich würde der Liste auch Software Engineering oder Design Practices hinzufügen, obwohl deren Inhalt normalerweise von Studenten der Branche aufgegriffen wird.

Meiner Meinung nach (obwohl nicht durch viel Erfahrung gestützt) wollen Unternehmen nicht wirklich, dass die meisten theoretischen Dinge in Kursen wie Datenbanken usw. gelehrt werden. Sie möchten, dass die Leute verstehen und in der Lage sind zu verwenden diese Dinge.

EDIT: Aufgrund der Abwertung möchte ich meine Antwort erklären. Ich bin ein Informatikstudent im letzten Jahr und meine Erfahrung basiert auf meinen Praktika und Vorstellungsgesprächen bei führenden Unternehmen auf diesem Gebiet. Nach meiner Erfahrung müssen Menschen selten komplizierte Algorithmen verwenden oder sehr komplizierte Datenstrukturen in Interviews oder in Jobs codieren.

Nützlicher, wenn Sie Datenbanken erstellen und verwenden, die Quellcodeverwaltung verwenden, richtig debuggen, Entwurfsmuster verwenden usw. Wie ich bereits sagte, werden diese Fähigkeiten jedoch in der Regel in der Branche erworben und nicht in Kursen behandelt. Software Engineering/Design Practices beinhalten normalerweise das Erstellen eines mittelgroßen Projekts, das sehr nützlich ist, um alle diese Fähigkeiten zu erlernen.

2
apoorv020

Es gibt viele wichtige Kurse, je nachdem, in welche Richtung Sie gehen möchten. Vorausgesetzt, Sie können überhaupt programmieren, muss der wichtigste Kurs jedoch sein:

  • Datenstrukturen und Algorithmen

    Praktisch alles in der Datenverarbeitung kommt auf den Umgang mit Daten mithilfe von Algorithmen zurück. Achten Sie besonders auf Arrays und Hashtabellen, da diese bei weitem die nützlichsten Datenstrukturen sind, die häufig verwendet werden. Listen und Bäume und Diagramme (Listen sind jedoch eingeschränkte Baumtypen und Bäume sind eingeschränkte Diagrammtypen) werden verwendet auch wichtig sein. Darüber hinaus ist das Verständnis von Algorithmen entscheidend für die Erstellung von Code, der nicht schrecklich ist. (Andernfalls tun Sie Dinge, die einfach schrecklich sind, wie die Verwendung eines O (n3) Algorithmus wo ein O (n Logn) wird man tun.) Wenn Ihr CS-Abschluss keinen obligatorisch DS + A-Kurs hat, ist es kein CS. Oder Softwareentwicklung. Oder einfach nur programmieren.

Abgesehen davon war der Kurs, den ich im Laufe der Jahre in mehreren Bereichen am nützlichsten fand, folgender:

  • Parallelität

    Parallelität hat viele Aspekte, aber ich würde ein Verständnis für den Unterschied zwischen Shared Memory und Message-Passing erwarten. Ich möchte auch eine starke Abdeckung von Sperrstrategien (Mutexen, Semaphoren usw.) und Transaktionen.

    Dies ist natürlich wichtig für das Verständnis der Parallelisierung, aber es ist auch wichtig für alles, was verteilt wird (z. B. das Schreiben eines Dienstes, der dem Internet ausgesetzt ist, auch wenn es sich um einen Single-Thread handelt, da dies die Clients sein werden sowieso asynchron). Ich verstehe, dass es auch nützlich ist, um Spiele (die normalerweise Multithreading sind) zu schreiben und mit eingebetteten Geräten zu arbeiten.

Abgesehen davon denke ich, dass es im besten Interesse der meisten Studenten ist, möglichst vielen verschiedenen Ideen ausgesetzt zu sein. Viele Programmiersprachen und Paradigmen. Viele verschiedene Anwendungsbereiche. Eine angemessene Menge an Mathematik (wieder, weil es so oft nützlich ist) und auch eine gewisse Exposition gegenüber menschlichen Faktoren und Psychologie (weil jede Software, die mit Benutzern interagiert, mit Menschen zu tun hat). Schließlich wissen Sie nie genau, was Sie in Zukunft tun werden. Daher ist die Planung von Flexibilität eine großartige Lebensstrategie.

2
Donal Fellows

Dinge, die ich im College gelernt habe und die ich jeden Tag benutze:

  • Objektorientierte Entwurfsmethodik
  • Designmuster
  • Reguläre Ausdrücke
  • Grundlegende Algorithmen und Analysen
  • Datenstrukturen

Ich wünschte, ich hätte einen Datenbankkurs belegt. (Ich habe seit meinem Abschluss genug gelernt, um durchzukommen, aber ich wünschte, ich wüsste mehr.) Ich wünschte auch, die Versionskontrolle würde unterrichtet - sie ist allgegenwärtig, äußerst nützlich und wurde im Lehrplan meiner Schule völlig ignoriert.

Ich musste mehrere Mathematikkurse belegen. Ich habe seit meinem Abschluss keinen Kalkül mehr verwendet. Ich wünschte, ich hätte einen Statistikkurs belegt. (Wieder habe ich seit meinem Abschluss genug gelernt, um durchzukommen, aber ich wünschte, ich wüsste mehr.)

Nehmen Sie über die CS-Abteilung hinaus an einem Schreibkurs teil. Gute schriftliche Kommunikationsfähigkeiten sind entscheidend für den Erfolg.

2
pwc

Als ich am College war, gab es einige Themen, für die ich in meinem wirklichen Leben keine Verwendung sehen konnte, und manchmal hat sich die Intuition als richtig erwiesen (formale Methoden sind in den meisten Fällen nur für triviale Probleme praktisch) und manchmal auch war völlig falsch (Big-O-Notation ist sehr nützlich), also denke ich, dass mein jüngeres Ich im Großen und Ganzen teilweise richtig war.

Wenn Sie sich auf die reale Welt vorbereiten möchten, empfehle ich zusätzlich zu den oben von @ K-Ran empfohlenen Dingen, Code Complete zu lesen und dies als Grundlage für eine eingehendere Untersuchung aller Themen zu verwenden, die Ihnen schwer fallen oder fühlen Sie sich nicht ausreichend abgedeckt.

1
glenatron

Als jemand, der regelmäßig Kandidaten für Programmierjobs interviewt und sich nach mehr als 12 Jahren in der Branche einigermaßen erfolgreich fühlt, würde ich Folgendes vorschlagen

  • Datenbankdesign & SQL: Es ist erstaunlich, wie viele Programmierer einfaches SQL nicht kennen und diejenigen mit guten SQL-Kenntnissen von unschätzbarem Wert sind. In einem Unternehmen mit einer festgelegten Datenbankstruktur ist es möglicherweise nicht sinnvoll, eine gute Datenbank zu entwerfen. Für Start-ups und Unternehmen, die Veränderungen durchlaufen, ist dies ein MUSS!
  • Designmuster. Sie helfen Ihnen einfach dabei, bessere Entscheidungen über gutes Design zu treffen
  • OOP: Dies ist normalerweise eine Voraussetzung für die meisten Kurse, aber es wird helfen.
  • Algorithmen: Weil so wenige Menschen wissen, was Rekursion ist, geschweige denn verstehen, wann sie viel komplexe Codierung sparen könnten
  • Datenstrukturen: Die meisten modernen Sprachen beschäftigen sich mit diesen Dingen für Sie, aber ihr Verständnis ist der Schlüssel zu gutem Design.

Dann lesen Sie einige außerschulische Arbeiten:

  • Zertifizierungsbücher. Sie bringen Ihnen oft die Syntax und die Operatoren bei, die sich unter der Decke befinden. Es ist weitaus wichtiger zu WISSEN, warum Sie etwas tun, als "weil es funktioniert", was so alltäglich ist.
1
Codemwnci

ES IST ABHÄNGIG , es gibt keine gute Antwort auf diese Frage.

Programmierer ist eine allgemeine Welt, um jemanden zu identifizieren, der Computersoftware schreibt.

Jetzt gibt es Software aller Art. Wenn wir beispielsweise Wikipedia als Quelle für die Verallgemeinerung verwenden, können wir 3 großartige Verallgemeinerungen treffen :

  • systemprogrammierung
  • programmiersoftware
  • anwendungssoftware

Entwickeln Sie im ersten Feld Systemprogrammierung Gerätetreiber, Betriebssystem, Server, damit Sie beispielsweise einem Betriebssystemkurs folgen können.

aber was ist mit Programmiersoftware ? Wie Wikipedia geschrieben hat, können Sie hier Compiler, Debugger, Interpreter, Linker und Texteditoren codieren. Daher kann ein Kurs in Automatisierungstheorie, Sprachtheorie, Sprache und Compilern hilfreich sein.

Wir können nicht über Anwendungssoftware jeglicher Art sprechen:
- Videospiele: Algebra, Physik, objektorientierte Kurse?
- mathematische Software: Mathematikkurse?
- Bildbearbeitung: Mathematik-, Physik-, Algorithmuskurse?
- Industrielle Automatisierung: Mathematik, Physik, Algorithmus, Roboterkurse?
- Medizinische Software: Biologie, Medizin, was sonst noch?
- viele Sachen hier: viele Kurse hier.

Wie Sie sehen, gibt es eine Menge, denen Sie folgen können und die für Ihre Arbeit nützlich sein werden.

Nach meiner Erfahrung bin ich eine Systemsoftware-Engineering- und Anwendungssoftware im Bereich Sicherheit (Sie möchten einen Sicherheitskurs absolvieren?), Beginnend mit einem kleinen Sehr viel Erfahrung in der Programmierung Ich werde immer interessanter für Algorithmen und verteilte Systeme und wieder fühle ich mich unwohl in der Einfachheit der von mir geschriebenen Allzweckanwendung (Sniffer, Netzwerk-Intrusion-Detection-System, Protokoll-Dissektor und Detektor usw.).

Wie Sie in der theoretischen Informatik sauer gelernt haben! Haben Sie diese Kurse absolviert? : P.

Sie haben zum Beispiel gelernt, dass alle Computersprachen in eine Reihe berechenbarer mathematischer Funktionen eingepasst werden können, und wenn Ihre Erfahrung zum Beispiel denselben Weg geht, fühlen Sie sich bald in dieser kleinen Reihe von Berechnungen unwohl und können wie ich beginnen, zu sehen, wie sich diese entwickelt Software ist nicht so ansprechend und erstaunlich, weil das gleiche DESIGNMUSTER immer wieder zurückkommt (haben Sie Designmusterkurse absolviert?) und Sie beispielsweise mehr Interesse daran bekommen können, WARUM und WIE Sprache in mathematische Funktionen übersetzt werden kann und anfängt lerne, dass die Computersprache nicht so komplex ist! Sie können zum Beispiel bald mehr über Person und Psychologie überrascht sein, und Sie können mehr Interesse daran bekommen und ein guter Projektmanager werden! Haben Sie die Kurse zum Software-Lebenszyklus absolviert?

Was ist nun der MUSS-Kurs in Ihrer CS-Karriere?

Ich schlage vor, so viel wie möglich in allen Bereichen zu lernen, insbesondere im theoretischen Bereich, da Sie sich im gemeinsamen Arbeitsbereich schnell über die geringe Komplexität in Ihrer Umgebung langweilen und als Vollzeitbeschäftigter weniger Zeit zum Lernen haben Wie die Dinge wirklich funktionieren und viel mehr Zeit, um zu sehen, wie Menschen mit ausgeprägten theoretischen Kenntnissen die Arbeit projiziert haben, und Ihnen die Möglichkeit zu geben, zu codieren, um Essen zu Hause zu bekommen.

in der Informatik gibt es einen falschen Realitätssinn. Informatiker zum Beispiel sind manchmal wirklich weit weg von Softwareentwicklern.

schauen Sie sich die Wikipedia-Erklärung an.

viel Spaß mit dem Leben :)

meine 2 Cent.

entschuldigung für mein wirklich schlechtes Englisch.

1
boos

Ich denke, Sie sollten Folgendes studieren:

Betriebssystem: - Auch wenn Sie es möglicherweise nicht benötigen, um als Programmierer zu arbeiten, lohnt es sich zu wissen, wie ein Betriebssystem funktioniert, und es wird von einem CS-Absolventen erwartet. Jedes gute Buch kann helfen.

OOP: - Das ist Brot und Butter. Ein Muss. Bücher, wenn Sie fragen möchten: Ihr erstes Buch sollte sein: - Kopf zuerst OOAD, dann können Sie sich für Grady Booch und Ivar Jacobsons Buch entscheiden

Datenstrukturen und Algorithmen: - Sehr wichtig für die Entwicklung des logischen Denkens und Denkens.

Für mich ist so viel genug. Es ist niemals zu spät. :) :)

1
Abhi

Ich komme dazu aus einer etwas anderen Perspektive, da ich nicht in CS, sondern in Elektrotechnik (mit einem Nebenfach in Business) studiert habe.

Auf dieser Grundlage denke ich, dass eine Liste von Dingen, die Sie müssen verstehen, relativ kurz ist, da ich (und viele andere CS-Absolventen) glücklich überleben, ohne etwas über Compiler-Design oder ähnliches zu wissen.

Was ich sagen würde, habe ich aufgegriffen, das ich nützlich finde:

  • RDBMS-Design - RDBMS befinden sich hinter den meisten Systemen und Standorten, und Sie sollten zumindest die Grundlagen der Vorgänge verstehen (das habe ich bei der Arbeit gelernt).
  • Grundlegendes UI-Design - Die besten Programmierer, mit denen ich zusammengearbeitet habe, konnten eine brauchbare Anwendung erstellen, die nicht hässlich war. Außer einem, aber er ist die Ausnahme, die die Regel bestätigt.
  • Einige grundlegende Programmierungen - und ich meine grundlegende. Ich lernte etwas C (für Bildverarbeitung und eingebettete Systeme), Assemblersprache (die ich innerhalb von Wochen nach Abschluss des Kurses vergessen hatte) und Pascal (ein grundlegender Computerkurs war Standard für alle Ingenieure). Beim Vorstellungsgespräch bin ich verblüfft, wie wenige CS-Absolventen wirklich in irgendeiner Weise programmieren können, die kommerzielle Organisationen als nützlich erachten, sodass ich nicht viel erwarte, aber ich erwarte, dass sie die Grundlagen kennen.
  • Logik - Ich habe es durch digitale Elektronik gelernt, Mathematiker durch Theorie, CS-Absolventen durch Programmierung, aber wie auch immer Sie es lernen, Sie sollten es gut verstehen, da so viel darauf ankommt.
  • Kommunikationsfähigkeiten - Ich habe einige Kurse an der Universität außerhalb meines tatsächlichen Abschlusses, meiner Präsentationsfähigkeiten und meines Durchsetzungsvermögens absolviert. Viel gesunder Menschenverstand, aber es tut nie weh, ein paar Mal vernünftige Dinge zu erfahren.
  • Die Grundlagen von Business und Buchhaltung. Einige Programmierer tun so, als wäre es egal, aber meiner Meinung nach ist es für jeden wichtig, der in einem Unternehmen arbeitet - so funktioniert das Spiel und es wird Ihr Leben kontrollieren. Warum sollten Sie nicht zumindest die Grundlagen von wissen wollen? Wie und warum passieren die Dinge?

Und wenn Sie die Möglichkeit haben, überhaupt etwas über Projektmanagement zu lernen, würde das wirklich nicht schaden, aber das wird an der Universität in vielen Fällen ziemlich schlecht gelehrt, und Sie werden etwas über die Arbeit lernen, wenn Sie nur an Projekten arbeiten.

1
Jon Hopkins

Zweifellos ist Englisch die Nummer eins, die CS-Studenten fließend sprechen sollten.

Ohne ein Verständnis von gesprochenem und geschriebenem Englisch werden Sie für immer im Nachteil sein.

Schauen Sie sich einfach die unzähligen Fragen an, die auf den Stack-Websites eingehen. Viel zu viele von ihnen sind schwer zu entziffern. Einige Leute verwenden eine Mischung aus l33t, SMS (nicht sicher, der richtige Begriff). Andere geben eine Erklärung ab und fügen einfach ein Fragezeichen hinzu, während wichtige kleine Gedanken wie Verben oder Adjektive fehlen.

Wenn Sie nicht kommunizieren können, können Sie sich nicht verständlich machen, geschweige denn verstehen, was andere sagen.

Alles andere sind nur Details. Wenn Sie kommunizieren können, mindestens über eine durchschnittliche Intelligenz verfügen und verstehen, was Sie lesen, können auch Sie eine erfolgreiche Karriereprogrammierung durchführen.

1
NotMe

Ich würde der Liste auch einige grundlegende Kurse in Personalwesen/Psychologie hinzufügen.

Dies mag seltsam erscheinen, aber ein Teil der beruflichen Arbeit besteht darin, zu lernen, wie man sich selbst verkauft und verhandelt. Das Betreten Ihres ersten „echten“ Interviews ohne fundierte Kenntnis der Motivationen der HR-Drohne ist ein Rezept für eine Katastrophe und endet wahrscheinlich damit, dass der Student in ein niedriges Gehalt verwickelt wird.

Kennen Sie Ihren Feind, damit Sie sich schützen können.

0
Peter Bernier