Wie man ein erfolgreicher Programmierer ohne CS-Abschluss ist


46

Haftungsausschluss (Bitte vor dem Antworten lesen):

Ich habe eine Reihe von Fragen gesehen, die denen ähneln, die ich stellen möchte. Deshalb hier einige ähnliche Fragen.

IMHO Sie sind weder vollständig das, was ich frage, noch so gründlich, wie ich es mir erhoffe (ich will die Antworten auf die folgenden Fragen nicht streichen, noch diskreditiere ich die Fragesteller, ich möchte einfach nur eine sein) etwas gründlicher):

Kann ein CS-Abschluss einem älteren Programmierer zugute kommen?

https://softwareengineering.stackexchange.com/questions/80024/importance-of-certifications-for-java-programmer-without-bs-degree

https://softwareengineering.stackexchange.com/questions/81591/in-the-absense-of-a-degree-how-can-i-fill-in-the-gaps-so-to-speak

Bedeutung des CS-Abschlusses bei der Bewerbung für Entwicklungsjobs?

Lassen Sie mich klar sein, ich frage nicht das Folgende:

  • Wie ich mir selbst das Programmieren von Grund auf beibringe (ohne einen Abschluss in CS)
  • Wie ich mich als guter Softwareentwickler vermarkten kann (ohne einen Abschluss in CS)
  • Wie bekomme ich einen großartigen, hochbezahlten Job als Softwareentwickler (ohne einen Abschluss in CS)?

Ein kleiner Kontext:

Lassen Sie mich nun, da mir Haftungsausschlüsse im Weg stehen, meine Frage konkretisieren und mit einer kurzen Geschichte meiner Erfahrung als Softwareentwickler beginnen.

Zunächst einmal hatte ich unglaublich viel Glück. Ich habe mehrere Stellenangebote bekommen (ein paar schwere Backend-PHP / MySQL-Projekte und mehrere WP7-Apps in XAML / C #), durch die ich wirklich alles gelernt habe, was ich über Softwareentwicklung weiß. Fast alle Softwareentwicklungsjobs, die ich hatte, waren solche, für die ich nicht zu Recht qualifiziert war (und das habe ich meinen Arbeitgebern deutlich gemacht, bevor sie mich eingestellt haben). Ich möchte mir keine Ehre machen, wenn es nicht fällig ist, aber ich würde sagen, dass vollkommene Demut Bescheidenheit überflüssig macht .

In fast jeder meiner Entwicklungsjobs habe ich die Erwartungen meines Arbeitgebers übertroffen und mich als wertvolles Kapital erwiesen. Es gibt natürlich Ausnahmen 1 . Mein Punkt ist jedoch, dass ich ziemlich intelligent bin und mir beibringen konnte, was ich wissen musste, um in meinem Job erfolgreich zu sein. Mit jedem Job, den ich hatte, wurde ich mehr und mehr gedehnt.

Ich besuche den Campus der Universität von Washington in Seattle und bin derzeit in meinem vierten Jahr, mit zwei verbleibenden Jahren, und arbeite an einem Mathematik-Abschluss. Während der verschiedenen Jobs, die ich hatte (siehe meinen Lebenslauf, wenn Sie diese Liste wollen), habe ich auch als Vollzeitstudent die Schule besucht.

Wie ich glaube, stimmen die meisten Entwickler darin überein, die typischen Kurse für Grundstudenten zu studieren, einschließlich Einführungskursen für Programmierer ABSOLUT PALES im Vergleich zum Schreiben von echtem Code, Erstellen von echten 2 Produkten, Arbeiten mit tollen Leuten und positiven Auswirkungen auf das Leben der Benutzer 3 .

Also ... im Laufe der Zeit ... habe ich viel mehr Zeit und Energie in die Arbeit gesteckt, anstatt mich auf mein Studium zu konzentrieren. Manchmal habe ich sehr schreckliche Leistungen erbracht , aber zum größten Teil konnte ich mit meinen Noten über Wasser bleiben.

Doch das Informatik - Programm an der UW ist sehr , sehr , sehr , sehr wettbewerbsfähig.

Es war also keine Überraschung für mich, als ich vom Programm abgelehnt wurde. Zweimal. Ironischerweise erhielt ich in derselben halben Stunde, in der ich die immer höfliche, wenn auch entmutigende Ablehnungsnachricht per E-Mail erhielt, einen Anruf von Amazon, der mir ein Sommerpraktikum 4 als SDE anbot .

Wenn ich mich nach anderen Herren in meinem Alter umschaue (21), die die gleichen Ziele wie ich in der Softwareentwicklung verfolgen, fühle ich mich ziemlich gut darin, wo ich bin, was ich lerne, wer ich bin und was Ich kann. Es gibt natürlich viel, viel, viel brillantere 21-Jährige als ich, ich möchte nicht sagen, dass ich in einer Menschenmenge auffalle, nur weil ich das Gefühl habe, nicht miserabel hinter den Fortschritten meiner durchschnittlichen Altersgenossen zu stehen .

Ich bin zuversichtlich, dass ich in der Welt der Software erfolgreich sein kann. Noch wichtiger ist, dass ich von meiner Fähigkeit und meinem Wunsch überzeugt bin, weiter zu wachsen, zu lernen und peinlich demütig zu sein, wenn ich es wirklich brauche.

Math Degree

Ich stelle fest, dass ich einen Mathematik-Abschluss mit dem einzigen Zweck anstrebe, einen Abschluss zu haben. Es gibt Leute, die sagen, ich sollte jetzt abbrechen und anfangen zu arbeiten (da ich die Gelegenheit dazu hatte), und es gibt Leute, die sagen, ich sollte mein Studium wirklich beenden. Ich habe mich aus ganz anderen Gründen entschlossen, mein Studium fortzusetzen, als es in einem der beiden Camps der Fall ist. Bitte ermutigen Sie mich in dieser Angelegenheit nicht auf die eine oder andere Weise. Betrachten Sie das Problem "geschlossen" :)

* DEEP BREATH * ... sorry das ist länger als ich erwartet hatte.

Dies ist im Wesentlichen meine Frage:

  • Wie bestimme ich objektiv, welche Studienbereiche, allgemeinen Kenntnisse und sonstigen Fähigkeiten ich durch einen CS-Abschluss erlangt hätte, an denen es mir jetzt vielleicht mangelt oder nicht?
  • Wie sortiere ich diese Fähigkeiten in der Reihenfolge ihrer Wichtigkeit?

  • Was ist der beste Weg (in den nächsten zwei Jahren), meine Ausbildung zu ergänzen, um diese Eigenschaften so zu erreichen, dass sie mit dem Niveau eines CS-Studenten einer Spitzenuniversität übereinstimmen oder dieses sogar übertreffen?

Hier sind die Schritte, die ich bereits unternehme:

  1. Fragen Sie die Entwickler-Community (dieser Beitrag)
  2. Verfolgen Sie Patenschaften mit erfahrenen Entwicklern, die mit mir einen ähnlichen Karriereweg eingeschlagen haben
  3. Definieren Sie kurz- und langfristige Lernziele und die folgenden Lehrpläne, in denen die Studienthemen beschrieben werden
  4. Schreiben Sie weiterhin Code und arbeiten Sie an Projekten, für die ich eine Leidenschaft habe

Wenn du so weit gekommen bist, verdienst du einen Keks :) Ich weiß es zu schätzen, dass du mit mir trägst.

Also ... Entwicklergemeinschaft, erfahrene Entwickler, Kommilitonen, die mit mir im selben Boot sitzen, welchen Rat hätten Sie?

Also ... bitte beachte meine Haftungsausschlüsse oben in diesem Beitrag darüber, wonach ich NICHT frage.

Aktualisieren:

Mir ist klar, dass ich keine sehr konkreten Parameter für eine meiner Meinung nach erfolgreiche "Antwort" auf meine Frage (n) angegeben habe. Ich denke, die Frage ist sehr vage und könnte eine Reihe von "richtigen" Antworten rechtfertigen.

Nach einer angemessenen Zeitspanne werde ich die Antwort auswählen, die den folgenden Attributen entspricht:

  • Erklärt das Warum hinter ihrer Antwort
  • Kann aus einer gewissen Erfahrung sprechen (sei es Einstellung / Interaktion mit oder jemand sein, der in meinen Schuhen steht / steht)
  • Ist prägnant, aber gründlich, gibt breite Prinzipien, vorzugsweise in Verbindung mit spezifischen Beispielen
  • In Anbetracht der Länge, die für das oben Genannte erforderlich zu sein scheint, machen Sie es bitte zu einer gut kommunizierten Antwort, die angenehm zu lesen ist. Andere, die sich vielleicht in Zukunft dafür interessieren, würden hoffentlich von der Antwort unterhalten und erzogen.

Es gibt also einige Parameter für "richtig". Ich denke, sie sind sehr hoch, aber ich habe sie als eine Art Umriss für das entworfen, was ich mir als die "beste" Antwort vorstellen würde. Wenn ich genügend Zeit habe, wähle ich die am besten passende Antwort als "Antwort".


(1) - Ich habe an einer früheren Version dieser Website gearbeitet, und wir hatten keine explizite 
      Englisch: www.mjfriendship.de/en/index.php?op...41&Itemid=32 Nach einem Gespräch hatte ich das Gefühl, dass ich überhaupt nicht in der Lage war (das kann sein) 
      belegt durch die Tatsache, dass sie ihre Website seitdem komplett geändert haben)
(2) - Erstens, ja, es ist ein echtes Produkt (obwohl ich diesen Beitrag in Chrome schreibe ...) und
      es tritt den Arsch. Zweitens war ich ein Entwicklerpraktikant in der High School im Test, schrieb der Beweis
      Konzeptcode für einige der neuen Funktionen für IE8 ... so war es vor einiger Zeit.
(3) - Zum Zeitpunkt dieses Postings bin ich der Entwickler, der diese App geschrieben hat. Ich bin es nicht mehr
      verantwortlich für die Codebasis
(4) - Mein Praktikum beginnt im Juni 2012 und ich werde im Web Store arbeiten 
      Mannschaft.

17
Die Welt braucht mehr Programmierer mit einem mathematischen Abschluss. Sagte Nuff.
Pieter B

1
Der Markt für Psychologen und andere individuelle Beratungs- oder Beratungsdienste muss riesig sein. Ich überlege mir einen Jobwechsel ....
Ingo

16
Beginnen Sie mit der Bearbeitung dieser Frage und schneiden Sie sie in zwei Hälften.
JeffO

8
@PaulHazen Sobald Sie Ihren äußerst ausführlichen Hintergrund und den Inhalt des Haftungsausschlusses entfernt und Ihre tatsächlichen Fragen beantwortet haben, stellen Sie drei Fragen: Wie ermitteln Sie, was Ihnen fehlt, wenn Sie keinen CS-Abschluss haben, und wie Sie das bekommen, was Ihnen fehlt und wie man Prioritäten setzt, was man vermisst. Alle drei Fragen werden vollständig von der duplizierten Frage abgedeckt. Wenn Ihnen die Antworten nicht gefallen, bieten Sie ein Kopfgeld an : Dafür sind sie da.

7
@PaulHazen Wenn Sie alternativ nicht an den von Ihnen aufgeführten Fragen interessiert sind (die Duplikate der früheren Frage sind), überarbeiten Sie Ihre Frage, um speziell nur nach etwas Neuem zu fragen. Ihre Frage enthält viel zu viele Informationen, von denen die meisten für Ihr Problem wahrscheinlich unnötig sind. Sie sollte zu einem bestimmten Problem zusammengefasst werden, das nicht bereits in anderen Fragen behandelt wird.

Antworten:


17

OK, ich finde es zu verlockend, deine Frage nicht zu beantworten, also bin ich hier ...


Ein paar Dinge über mich zuerst


Ich bin 26 Jahre alt und dank meines Vaters (übrigens Mathematiker und derzeit Professor) hatte ich schon in einem frühen Stadium meines Lebens die Chance, mit Computern zu arbeiten. (1986, als ich geboren wurde, hatten wir immer einen oder zwei Computer zu Hause, obwohl das damals nicht das üblichste war). Davon abgesehen und - offensichtlich aufgrund meiner neugierigen und mathematisch veranlagten / problemlösungsorientierten Natur - fand ich mich bald in das Programmieren verliebt. Zuerst mit Pascal, im Alter von 7-8 Jahren und dann folgte so ziemlich alles andere.

Lassen Sie mich zunächst einmal sagen, dass ich in der Schule immer eine herausragende Leistung in Bezug auf Mathematik erbracht habe, einfach weil es mir gefallen hat, und ehrlich gesagt, ich konnte dem Beispiel meines Vaters leicht folgen und auch Mathematiker werden. Aber das ist nicht passiert.

Was passiert ist, war wahrscheinlich der größte Fehler meines Lebens (bisher): Wie würden Sie es nennen, wenn jemand, der sich in Code verliebt , mehr als 15 Sprachen spricht und Tausende von Codezeilen geschrieben hat (von Compilern über Mikrokerne bis hin zu Web Frameworks) im Alter von 18 Jahren plötzlich (die Gründe sind mir immer noch zu dunkel, aber der allgemeine, wenn auch subtile Einfluss Ihres Umfelds ist nie zu vernachlässigbar), eine Karriere in der Medizin anzustreben ? Ich denke ein "Fehler".

Das Ergebnis? 5 Jahre später (mit 23) und 1 Jahr vor Abschluss meines Medizinstudiums (ich arbeite immer noch an persönlichen Open-Source-Programmierprojekten als Hobby) habe ich beschlossen, genug zu haben und aufzuhören. Und es war nicht nur so, dass ich dieses neue Gebiet (Medizin) so sehr hasste, sondern auch, dass es in dieser ganzen Situation etwas Beunruhigendes gab, einen unersättlichen Juckreiz, der tief im Inneren verborgen war ... ( Was wäre es gewesen, wenn ...? ) Außerdem hatte ich gerade gemerkt, dass mein Hobby , das ich als großartig empfand , das ich mir aber nicht einmal als richtigen Job vorgestellt hatte, nicht nur etwas Geld einbringen konnte, sondern mir viel davon einbrachte + mich als Individuum glücklich zu machen. Also beschloss ich aufzuhören. (= die beste Wahl, auch wenn ich mich etwas verspätet habe).

Also, hier bin ich jetzt, ein ehemaliger Arzt (am Rande eines Nervenzusammenbruchs, um genau zu sein; ich bin dumm!), Der einen CS-Abschluss anstrebt (in meinem dritten Jahr tatsächlich; und ehrlich gesagt, sie zu verfolgen, um nicht an den gefürchteten typischen Qualifikationen zu fehlen ...) und ein überglücklicher Fachmann, der an etwas arbeitet, das ich liebe und auf jeden Fall das Thema, zu dem ich am meisten zu bieten habe.


Einige Beobachtungen (aus eigener Erfahrung)


  • Das Programmieren ist eines der wenigen Gebiete, in denen die wirklich Guten immer ihren Weg finden, egal was passiert. Und das ist definitiv KEINE Frage typischer Qualifikationen (ehrlich gesagt, wenn ich eine Firma hätte und Programmierer rekrutieren wollte, kann ich in wenigen Minuten leicht erkennen, wer gut ist - unabhängig davon, ob er überhaupt einen Abschluss hat oder nicht).

  • Was es braucht, um ein guter Programmierer zu sein, ist: mathematisch orientierte Intelligenz (aber NICHT Mathematik selbst) und Leidenschaft (die die endlosen Stunden des Lernens zu einem Vergnügen und nicht zu einer Last werden lassen), und selbst wenn ich das nicht realisiert habe, Vertrauen Ich habe Tonnen von Material zu diesem Thema in meinem Leben studiert, allein . Formale Bildung ist eine nette Sache, aber ein bisschen überbewertet. Die Kernbestandteile des Erfolgs sind die ersten beiden.

  • Mathe ist definitiv der Geburtsort von CS. Aber CS ist nicht mehr nur Mathe. Ich hatte immer ein starkes mathematisch orientiertes Gehirn, aber ich bin keineswegs ein Mathe-Guru. Und ehrlich gesagt, werden Sie in der täglichen Programmierung (es sei denn, Sie bauen eine Grafik-Engine oder etwas zu Lokalisiertes) höchstwahrscheinlich nie etwas anderes als einfache Arithmetik (Addition, Subtraktion, Multiplikation, Division, Modulo) und ein paar Dinge benötigen über Arrays. (Viele werden mit mir nicht einverstanden sein, wahrscheinlich Mathematiker oder zu akademisch orientierte Programmierer, aber auf jeden Fall ist es NICHT das, was man braucht, um ein guter Programmierer zu sein). Ein guter mathematischer Hintergrund wird Ihnen vielleicht helfen, aber NICHT wegen der Mathematik selbst; Es wird Ihnen helfen, wenn Sie nur eines gemeinsam haben: die Fähigkeit, Probleme zu lösen.

  • Mathematik ist eine Wissenschaft (und eine Wissenschaft, die ich respektiere).

  • Programmieren ist eine Kunst. (Und eine angewandte Wissenschaft, wenn Sie darauf bestehen) Aber denken Sie daran: eine Kunst - und so habe ich es immer behandelt. Und wie bei allen Künsten kann es nicht gelehrt werden. Ich kann dir die formale Art des Zeichnens eines Gesichts beibringen und dich überdurchschnittlich gut machen, aber das macht dich weder zu einem Da Vinci noch zu einem Klimt. Mona Lisas werden von Da Vincis und nicht von sorgfältig ausgebildeten Malern gemalt. Großartiger Code wird von großartigen Code-Künstlern geschrieben. Und Kompetenz und Hingabe können die formale Bildung leicht aus dem Gleichgewicht bringen.


Also, was braucht es, um ein * wirklich * guter Programmierer zu werden?


  • Klug sein, großartige Fähigkeiten zum Lösen von Problemen und eine Leidenschaft für das Thema (wenn Sie es nicht haben, lassen Sie es einfach; mittelmäßig sein ist keine Entschuldigung)
  • Viel Zeit, um sich dem Thema zu widmen
  • Die ganze Zeit studieren (weil Sie es einfach nie wissen werden; und beachten Sie: Warum muss das Studieren in gewisser Weise zusammenhängen? Ich fand es immer viel lustiger, Dinge in meinem eigenen Tempo zu tun ... )
  • Ständiges Schreiben von Code (unabhängig davon, wie viele Bücher Sie gelesen haben; Ihre Codierungsstufe entspricht direkt der Menge des von Ihnen geschriebenen Codes)
  • Und noch einmal, LIEBE für das Thema (wenn du es nicht genug liebst und ich meine es wirklich liebst, wird all das früher oder später unerträglich; für mich ist das Kodieren als Job immer noch so, als würde man dafür bezahlt werden). filme gucken: absolut absurd aber doch einfach spitze

Auf deine Fragen


  • Wie bestimme ich objektiv, welche Studienbereiche, allgemeinen Kenntnisse und sonstigen Fähigkeiten ich durch einen CS-Abschluss erlangt hätte, an denen es mir jetzt vielleicht mangelt oder nicht?

Obwohl ich wirklich wissen muss, was ein Mathematik-Abschluss beinhaltet, möchte ich zusammenfassen, was Ihnen bei einem CS-Abschluss höchstwahrscheinlich fehlt (als Kurse / Fächer / usw. - inspiriert durch das Studienprogramm meiner Uni ), und zwar in keiner bestimmten Reihenfolge :

  • Logikentwurf digitaler Systeme (einige Schaltkreise auf niedriger Ebene und / oder / xors / etc - anscheinend nicht zu verwandt, aber immer noch sehr lehrreich)
  • Computerarchitektur (zusammen mit etwas Assembly-Code; Sie werden ihn höchstwahrscheinlich nie verwenden, aber Sie können nicht sagen, wie sehr er Ihre Einstellung als Programmierer beeinflussen könnte)
  • Datenstrukturen (von verknüpften Listen bis hin zu komplexen Bäumen usw.) So einfach sie auch erscheinen mögen, früher oder später benötigen Sie einige gute Hintergrundinformationen. Die Verwendung von vorgefertigten Lösungen, die Sie nicht verstehen, ist kein guter Programmierer würdest du)
  • Compiler (yep, Compiler , die Sie jemals einen Compiler schreiben wahrscheinlich nicht;!? , Aber es sei denn , man kann man schreiben, werden Sie nie wirklich wissen , wie die Dinge funktionieren ...)
  • Betriebssysteme (wie oben)
  • Computernetzwerke
  • Künstliche Intelligenz und Expertensysteme (Sie werden höchstwahrscheinlich niemals auch in Prolog codieren; es ist jedoch immer noch eines der Dinge, die Ihr codierendes Gehirn formen und es dazu bringen könnten, Dinge aus einer radikal anderen Perspektive zu sehen.)
  • Wie sortiere ich diese Fähigkeiten in der Reihenfolge ihrer Wichtigkeit?

Zu wissen, was in einem sich ständig verändernden Bereich als CS zu priorisieren ist, wird immer ein Glücksspiel sein - ein Ratespiel .

Erfahren Sie, was Sie tun möchten, und vertrauen Sie Ihrem Instinkt. Natürlich sind solide Grundkenntnisse ein Muss. Aber worauf Sie sich einlassen, liegt ganz bei Ihnen. Planen Sie Ihre Karriere auch sorgfältig: Wenn Sie angestellt sein möchten, wählen Sie Ihr Ziel und seien Sie gut darin (z. B. möchten Sie bei Google angestellt sein und wissen nicht, wie man ein einfaches Python-Skript liest, ist wahrscheinlich eine dieser Situationen, in denen Sie nicht weiterkommen ) . Wenn Sie selbst etwas anfangen (eine Firma), dann haben Sie keinen "Chef", den Sie befriedigen könnten. Wählen Sie einfach, was am besten zu Ihnen passt.

Wenn Sie beispielsweise etwas mit dem Internet zu tun haben möchten, empfehle ich Ihnen auf jeden Fall: PHP / MySQL / HTML / CSS / JavaScript (+ jQuery / AJAX) . Aber das bin nur ich. Jemand mag Ruby / Rails (oder sieht mehr Zukunft in ihm) als PHP.

Ich codiere jetzt zum Beispiel hauptsächlich in Objective-C / Cocoa . Würde ich Ihnen raten, das weiter zu verfolgen? Definitiv nicht. Das heißt, es sei denn, Sie stehen auf Macs oder möchten Karriere als Verkäufer von Software für Mac / iPhone. Wenn Sie sich für die Windows-Entwicklung interessieren, ist C # / .NET Framework wahrscheinlich die beste Wahl. (Wenn Sie eine Vorstellung davon bekommen möchten, worauf ich mich hauptsächlich einlasse, schauen Sie einfach in mein StackOverflow-Profil. )

  • Was ist der beste Weg (in den nächsten zwei Jahren), meine Ausbildung zu ergänzen, um diese Eigenschaften so zu erreichen, dass sie mit dem Niveau eines CS-Studenten einer Spitzenuniversität übereinstimmen oder dieses sogar übertreffen?

Lerne viel (Bücher, Internet, Code anderer Leute, was auch immer) und schreibe so viel Code wie möglich.

Ah, und versuchen Sie, einen Job in irgendetwas zu bekommen, das mit Code zu tun hat. (Ich habe als Freiberufler angefangen und es war eine wirklich wertvolle Erfahrung, nur um zu sehen, wie die Dinge in der realen Welt wirklich funktionieren).


Nur meine .2 freundliche Cent ... :-)

Nebenbemerkung: Ich weiß, dass einige meiner Punkte kontrovers erscheinen können, und ich bin sicher, dass es viele geben wird, die mit mir nicht einverstanden sind. Das ist akzeptabel. Aber das ändert nichts an der Art und Weise, wie ich Dinge sehe - und besonders an den Dingen, die ich liebe.


Genau das habe ich gesucht. Vielen Dank! Fast jede andere Antwort war auch gut, nur sehr wenige enthielten etwas, das falsch oder nicht hilfreich war. Ich werde die Frage so aktualisieren, dass sie einen kleinen Abschnitt darüber enthält, warum ich dies gewählt habe, und einen Link zu einem Blog-Post, der die Frage ausführlicher erläutert (der Grund dafür, eine solche Erklärung in meinem Blog anstelle von Programmierern zu veröffentlichen, liegt in der bereits RIESIGE Länge des Beitrags sowie die wachsende Anzahl der betroffenen Moderatoren, die die Frage bereits für schlecht geeignet halten, für diese Site). Bleiben Sie auf dem Laufenden. Und nochmals vielen Dank.
Paul Hazen

@PaulHazen Gern geschehen! Ich bin froh, geholfen zu haben (WENN ich das getan habe) ... (Nun, was die RIESIGE Länge meiner Antwort betrifft ...) Das System hat es automatisch als "Community-Wiki" -Post erkannt und ich versuche es zu bekommen Die Moderatoren setzen es auf den ursprünglichen Zustand zurück: eine einfache - wenn auch etwas überarbeitete - Antwort.
Dr.Kameleon

Drüben bei meta ( meta.programmers.stackexchange.com/questions/3513/… ) ermutige ich sie tatsächlich, es an ein geeigneteres Ziel zu verschieben. Laut den offiziellen FAQ ist die Frage für dieses Forum nicht geeignet. Um jedoch die Beobachtung de facto Verwendung Programmierer, ich glaube , dass es sinnvoll ist , hier zu sein. Die Moderatoren können sich entscheiden, wo es am besten passt. Um meine Gedanken über das Verschieben zusammenzufassen: Nach dem, was Programmierer sein sollen, gehört es nicht hierher, aber nach dem, was Programmierer sind , passt es perfekt.
Paul Hazen

@PaulHazen Nun, zumindest für mich (obwohl ich kein Experte für SO-Sachen bin), scheint es absolut angemessen zu sein.
Dr.Kameleon

Ja, ich werfe einfach meine Hände in die Luft. Solange Leute Google oder Stack Exchange verwenden können, um zumindest die Antworten zu finden, bin ich glücklich. Der Inhalt muss in Zukunft für Personen mit derselben Frage leicht auffindbar sein.
Paul Hazen

18

Wie bestimme ich objektiv, welche Studienbereiche, allgemeinen Kenntnisse und sonstigen Fähigkeiten ich durch einen CS-Abschluss erlangt hätte, an denen es mir jetzt vielleicht mangelt oder nicht?

Durchsuchen Sie den Lehrplan der CS-Abteilung an der UW, leihen Sie sich die gewünschte Lektüre aus und schauen Sie sich frühere Prüfungen und Laborübungen (Hausaufgaben) an. Wenn Sie keine Ahnung haben, wie Sie das Problem angehen würden, haben Sie ein Loch in Ihrem Wissen.

Wie sortiere ich diese Fähigkeiten in der Reihenfolge ihrer Wichtigkeit?

Überlegen Sie, welche Art von Programmierung Sie in Zukunft durchführen möchten. Wenn Sie gerne Websites und CRUD-Anwendungen erstellen, verfügen Sie anscheinend bereits über alle erforderlichen Kenntnisse.

CS-Schulungen kommen ins Spiel, wenn Sie wissen möchten, wie [verteilte] Datenbanken, Webserver, Compiler und Interpreter, Betriebssysteme, Netzwerkprotokolle usw. unter der Haube funktionieren , und wenn Sie daran interessiert sind, solche Systeme selbst zu erstellen.

Was ist der beste Weg (in den nächsten zwei Jahren), meine Ausbildung zu ergänzen, um diese Eigenschaften so zu erreichen, dass sie mit dem Niveau eines CS-Studenten einer Spitzenuniversität übereinstimmen oder dieses sogar übertreffen?

Ich weiß es nicht. Für mich war der größte Vorteil der Universität, 1) meinen Horizont zu erweitern (ich habe 90% der Details vergessen, die ich an der Uni gelernt habe, aber ich erinnere mich an Konzepte und Ideen), und 2) meine eigentliche Motivation für das Lernen des Stoffes beizubehalten Abnehmen: Es ist einfacher, die Motivation aufrechtzuerhalten, wenn Sie auf ein Ziel hinarbeiten - eine Prüfung, eine weitere Prüfung usw., bis Sie Ihren Abschluss gemacht haben. (Auch die Strukturierung der Selbsterziehung ist keine leichte Aufgabe.)

[Hinzugefügt: Wählen Sie eine Universität, an deren CS-Programm Sie teilnehmen möchten, wählen Sie Kurse in Themen, die Sie interessieren, und durchlaufen Sie den Lehrplan selbst: Hausaufgaben, Prüfungen usw. Die meisten Kurse veröffentlichen Vorlesungsfolien und Aufgaben / Prüfungen aus früheren Jahren .]

Ein Tipp: Geben Sie Ihren Mathematik-Abschluss NICHT auf. Jede gute Person kann sich das Programmieren selbst beibringen, aber Mathematik verschafft Ihnen Wettbewerbsvorteile, wenn Sie jemals mit anderen Anwendungen als CRUD / Frontend arbeiten möchten, z. B. Anwendungen für flüssige und mechanische Simulationen, Computergrafik, Bildverarbeitung, Erkennung und maschinelles Lernen. (auch finanzieren!) etc.

UPDATE 2 - Erfahrung [lang]: Ich habe einen Master-Abschluss an der EE-Fakultät erworben: Die ersten zwei Jahre waren allgemeiner Lehrplan (Physik, Elektrotechnik, analoge und digitale Elektronik und viel Mathematik - lineare Algebra, diskrete Mathematik, Real-, Vektor- und komplexe angewandte Analyse.) Dies war sehr wertvoll, insb. Der EE- und der Elektronikteil - es ermöglichte mir, an gemischten HW-SW-Projekten zu arbeiten, und die Zusammenarbeit mit HW-Designern war sehr aufregend. Ich habe nichts zum HW-Design beigetragen, aber ich konnte dem HW-Designer beim "Debuggen" seines Schaltplans folgen und vernünftige Fragen stellen [wir waren unsicher, ob der Fehler in SW oder HW war - es stellte sich heraus, dass es in HW war: -)].

Dann verzweigten sich die Leitungen und ich wählte die CS-Leitung. Einige der "Details" trugen zur Verankerung der Konzepte bei (z. B. "Ausführen" des Dijkstra-Algorithmus von Hand). Außerdem habe ich Details über die Funktionsweise von CPUs (Bussignale, Interpretation von Busdiagrammen, Ausführung usw.) am Beispiel des veralteten Motorola 68000 gelernt, aber die durch Details erlernten Konzepte unterscheiden sich auch bei modernen CPUs nicht wesentlich.

Andere Details, insb. SW-Implementierungen (z. B. die Implementierung von Dijkstra) waren für mich (da ich in der Highschool ziemlich gut programmiert habe) eine sinnlose Übung beim Debuggen und trugen zu einem NULL-Verständnis von Konzepten bei.

Und dann schrieb ich mich in das Doktorandenprogramm ein, wo ich obligatorische Kurse belegen musste. Ich war von der Wahl der Kurse enttäuscht, da sich viele eher an den Anforderungen der Industrie zu orientieren schienen (z. B. Verwendung von Python für die wissenschaftliche Datenanalyse - danke, ich kann programmieren und bin sehr gut in der Lage, mir das beizubringen - - was wiederum viel sinnloses Programmieren bedeutete) als das Unterrichten grundlegender Konzepte (glücklicherweise habe ich mit Promela Kurse zu diskreter Optimierung, statischer Analyse von Programmen und formaler Analyse ausgearbeitet).

Einige Details waren also hilfreich, um Konzepte zu verinnerlichen, und einige stellten eine unnötige Belastung dar (ein weiteres Beispiel: Programmierung der seriellen Schnittstellenkommunikation zwischen zwei Computern. Damals war ich bereits daran gewöhnt, HW-Spezifikationen zu lesen und zu interpretieren und HW über Register zu programmieren. Vielleicht gehe ich naiv davon aus, dass durchschnittliche angehende CS-Ingenieure nicht über das Lesen von HW-Dokumenten unterrichtet werden müssen.

Fazit: Setzen Sie sich mit vielen verschiedenen Konzepten (hochrangigen Ideen) auseinander und gehen Sie auf diejenigen ein, die Sie priorisieren und in denen Sie sich auszeichnen möchten. [Sie können nicht in allem sehr gut sein!]


+1 sicher. Trotz der Tatsache, dass Sie 90% der Details vergessen haben, würden Sie sagen, dass die Erfahrung mit dem Erlernen dieser Details die Konzepte und Ideen geprägt hat, oder wäre es wertvoller, Zeit in das Erlernen von weniger Details und mehr konzeptuellen / übergeordneten Ideen zu investieren ?
Paul Hazen

@ PaulHazen Siehe die neue Bearbeitung (ab UPDATE2 - es passte nicht in das Kommentarfeld;))
ZVRBA

Sehr bejahend zu den Schritten, die ich gerade unternehme. Der hinzugefügte Abschnitt ist von unschätzbarem Wert. Ich bin der Meinung, dass die Liste der Dinge, über die ich Details erfahren möchte, viel zu lang ist, um vernünftig zu sein. In dieser Hinsicht habe ich historisch gesehen ein Problem mit dem Umfang. Gibt es eine gute Möglichkeit, einen Blick auf die Branche zu werfen und zu ermitteln, welche Themen in den Bereichen, die mich interessieren, am nützlichsten sind, um Details zu erfahren? Oder würdest du sagen, dass es nicht wirklich wichtig ist, welche ich lerne, solange ich tief in einen kleineren Satz von ihnen eintauche? Es scheint, dass die Branche in dieser Hinsicht schwierig zu prognostizieren ist.
Paul Hazen

1
Der Versuch, die Branche vorherzusagen, ist ein Spiel, das im Vorfeld verloren gegangen ist. Ich bin mir zB nicht sicher, ob jemand ahnen konnte, dass Twitter - (fast) ein IRC-Klon für das Web - zu einer solchen Modeerscheinung werden würde. Es ist mir immer noch ein Rätsel, wie sie auf lange Sicht Geld verdienen wollen.]. Sie müssen eine proaktive Entscheidung treffen, welche Art von Arbeit Sie machen möchten, und herausfinden, was erforderlich ist, um dies zu erreichen. Wie? Finden Sie jemanden, der bereits in Ihrer Zielbranche arbeitet, und sprechen Sie mit ihm.
Zvrba

1
@Paul Die Konzepte sind entscheidend, die Details (normalerweise) nicht. Sie können die Details nachschlagen, wenn Sie sie benötigen, aber Sie müssen das große Ganze lernen, um zu wissen, dass es in der Gegend etwas gibt, das es wert ist, nachgeschlagen zu werden.
Donal Fellows

7

Ich interviewe und rekrutiere viele junge Leute, die gerade ihr Studium beendet haben. Ich habe noch niemanden eingestellt, der auf den Fachkenntnissen basiert, die er aus dem jeweiligen Programm gelernt hat. Der Grund dafür ist einfach: Kein CS-Programm (oder ein anderes Programm), auf das ich gestoßen bin, vermittelt konkrete Fähigkeiten im Zusammenhang mit Programmierung oder Softwareentwicklung auf professioneller, kommerzieller Ebene. Modelle und Lösungen für komplexe Differentialgleichungen entwickeln zu können und optimierte Spezialsortieralgorithmen zu schreiben, mag akademischen und / oder wissenschaftlichen Wert haben, hat jedoch keinen Einfluss auf die allgemeine Softwareentwicklung.

Wonach suche ich dann? Nun, ich erwarte von einem College-Absolventen, dass er die Kunst des Lernens perfektioniert hat. Das ist schließlich, was ein gutes College sein sollte, um seine Studenten zu unterrichten. Analysieren und Aufteilen allgemeiner Probleme in logische, diskrete Komponenten, die vorhersehbar lösbar sind. Ein methodischer Ansatz zum Finden, Bewerten, Organisieren und Anwenden von Wissen und Informationen für eine Lösung.

Außerdem suche ich nach Menschen, die verstehen, dass eine Gruppe von Menschen, die zusammenarbeitet und kommuniziert, viel mehr wert ist als die Summe ihrer Einzelpersonen. Das erfordert Reife und Demut und die Fähigkeit, Hilfe zu geben und um Hilfe zu bitten.

Um noch einmal auf den Umfang Ihrer Frage zurückzukommen: Während ein CS-Abschluss Ihre Chancen auf ein erstes Bewerbungsgespräch am College verbessert, hat er meines Erachtens wenig bis gar nichts mit Ihrem Erfolg oder Ihren Fähigkeiten als Entwickler zu tun. Ich habe immer der Philosophie "Einstellung einstellen, Geschicklichkeit trainieren" gefolgt und es hat sich gut ausgezahlt.

Mein Rat: Fahren Sie mit Ihrem Mathematikstudium fort, wenn Sie daran interessiert sind. Jede wissenschaftliche Ausbildung wird Sie gut unterstützen, wählen Sie also diejenige aus, die Ihnen am besten gefällt, da dies diejenige ist, in der Sie sich am wahrscheinlichsten auszeichnen. Konzentrieren Sie sich dann darauf, die wichtigen Dinge zu lernen: wie man lernt, wie man eine Problemlösung analysiert und an sie herangeht eine strukturierte Art und Weise, wie Sie mit anderen Menschen interagieren und zusammenarbeiten, wie Sie Führung und Verantwortung für die Leistung Ihrer eigenen Mitarbeiter und Ihrer Teamkollegen übernehmen. Der Rest ist nur Technologie und Kodierung, das Handwerkszeug. Die können und werden Sie selbst lernen. Erlernen Sie einige allgemeine Kenntnisse wie gängige Entwurfsmuster und Architekturparadigmen. Schreibe Programme zum Üben. Wählen Sie eine Sprache und Technologie aus, die ziemlich aktuell ist, aber machen Sie nicht den Fehler, sie zu denken. ' Es ist das Letzte, was Sie lernen werden. Tools und Sprachen ändern sich ständig, sodass die Softwareentwicklung sowieso ein ständiger Lernprozess ist.


Wäre es fair zu sagen, dass aus Ihrer Sicht in einem CS-Abschluss nur wenig bis gar nichts steckt, was für sich allein schon hilfreich ist, um ein erfolgreicher Programmierer zu werden? Momentan gefällt mir deine Antwort am besten. Du hast bestimmt viele Dinge getroffen, die ich herauszufinden und zu verstehen versuche. Könnten Sie dem Bereich, für den Sie in der Personalbeschaffung tätig sind, einen zusätzlichen Kontext verleihen? Ich stelle mir vor, dass Personalvermittler, die neue Absolventen für die Arbeit an Betriebssystemen einstellen, andere Perspektiven haben als Sie selbst (aber ich könnte völlig falsch liegen). Schätzen Sie die Zeit, die Sie gebraucht haben, das ist super hilfreich
Paul Hazen

Ich arbeite für ein IT-Beratungsunternehmen, das im Bereich der 0-1-jährigen Erfahrung ziemlich viele Mitarbeiter anwirbt. Ich kann nicht mit Sicherheit antworten, was OS-Entwicklungs-Shops betrifft (wie viele gibt es?), Aber ich würde davon ausgehen, dass dies auch klug ist. Nur sehr wenige Absolventen verfügen über ausreichende Fachkenntnisse, um allein in dieser Hinsicht wettbewerbsfähig zu sein. Sie sollten sich also auf Einstellung, Potenzial und Lernfähigkeit konzentrieren.
Pap

Interessant. Haben Sie eine "+1" gegeben, und ich mag das, was Sie zu sagen haben, mehr als jeder andere, aber Sie beantworten die Frage "Wie komme ich erfolgreich in den Bereich der Softwareentwicklung?" Genauer , aber mein Interesse ist es, die Eigenschaften eines erfolgreichen Programmierers zu verstehen , nicht die Eigenschaften eines angestellten Programmierers (ja offensichtlich sind erfolgreiche Programmierer auch angestellt, aber es geht nicht immer anders herum).
Paul Hazen

Ich stelle keine Leute ein, die entweder schon erfolgreich sind oder das Potenzial und die Fähigkeit haben, erfolgreich zu sein. Für mich sind also "angestellt" und "erfolgreich" dasselbe. Wenn jemand nach anderen Kriterien rekrutiert, kann er Talente entweder falsch oder schlecht erkennen. So oder so, wahrscheinlich kein guter Arbeitsplatz. Der Schlüssel als Arbeitgeber besteht jedoch darin, das Potenzial Ihrer Mitarbeiter zu nutzen und in tatsächlichen Erfolg umzuwandeln. Das ist eine Mischung aus Training, Mentoring und Coaching und wenn Sie es nicht haben, spielt es keine Rolle, wie talentiert Sie Leute einstellen.
Pap

7

Dies ist im Wesentlichen meine Frage: Wie bestimme ich objektiv, welche Studienbereiche, allgemeinen Kenntnisse und sonstigen Fähigkeiten ich durch einen CS-Abschluss erlangt hätte, an denen ich jetzt möglicherweise Mangel habe oder nicht?

Antwort 1

Wenn Sie etwas Neues aus Ihrem Studium lernen. Dann können Sie objektiv sagen, dass Sie dies durch einen CS-Abschluss erlangt haben.

A1. Das Warum

Bei einem CS-Abschluss geht es konzeptionell ums Lernen. Wenn man von einem CS-Abschluss ohne Nettodifferenz zurückkehrt, ist sein Kernziel nicht erfüllt. Prüfungen und Studienleistungen sind das "offizielle" Maß für das Gelernte. Das individuelle Verständnis (habe ich etwas Neues gelernt?) Sollte jedoch eine bessere objektive Maßnahme sein.

A1. Die Erfahrung

Ich war beide im akademischen Bereich und arbeite jetzt professionell. Ich habe mich für einen Master in Informatik entschieden, weil ich mein Verständnis erweitern wollte und eine Leidenschaft für das Lernen habe.

Meine Welt hat sich aufgrund eines Masters in Computing erweitert. Meine Welt hat sich auch von der professionellen Arbeit erweitert.

Wie sortiere ich diese Fähigkeiten in der Reihenfolge ihrer Wichtigkeit?

Antwort 2

Bedeutung ist relativ auf, der die Frage fragt und für welche Situation. Wenn es für persönliches Wachstum ist , dann ist es alles wichtig. Wenn es für die Industrie ist, dann sind Dinge wie Algorithmen und gute OOP / Standard-Software-Praktiken wichtig.

A2. Das Warum

Der "Umfang" der Bedeutung hängt stark vom "Kontext" ab. Ohne Kontext sind die Vorzüge der Fähigkeiten schwer zu sortieren.

A2. Die Erfahrung

Ich habe festgestellt, dass die von "Universität" gegen "auf dem Gebiet" erworbenen Fähigkeiten unterschiedlich sind. Die "Fähigkeiten" in der Universität sind eher "Theorie", aus der Industrie eher "Praxis". Aus diesem Grund bedeutet dieser Unterschied, dass die Fähigkeiten in Bezug auf ihre Wichtigkeit in der Tat unterschiedlich eingestuft werden.

Was ist der beste Weg (in den nächsten zwei Jahren), meine Ausbildung zu ergänzen, um diese Eigenschaften so zu erreichen, dass sie mit dem Niveau eines CS-Studenten einer Spitzenuniversität übereinstimmen oder dieses sogar übertreffen?

Antwort 3

Schieben Sie sich über die Grenze und brechen Sie sich immer wieder , wenn Sie brechen .

Was meine ich?

Wenn Sie zu einem Punkt kommen, an dem Sie nichts mehr verstehen, haben Sie sich selbst gebrochen. Lerne weiter, bis du verstehst. Drücken Sie dann weiter, bis Sie etwas anderes finden, das Sie nicht verstehen (ad infinitum) .

A3. Das Warum

Wenn du nur lernst und innerhalb deiner Grenzen bleibst, wirst du nur "ok" sein. Du willst nicht nur "ok" sein. Sie möchten das "Beste" sein, das Sie sein können. Sie können Ihr wahres Potenzial nicht erreichen, wenn Sie nicht STÄNDIG über Ihre Grenzen hinausgehen.

A3. Die Erfahrung

Ich werde immer ein lebenslanger Student sein, ich werde nicht meine aktuellen Fähigkeiten aufzählen, wenn Sie neugierig sind, können Sie einfach mein Profil sehen.

Das einzige, was ich sagen werde, ist das. Ich bin mit meinem aktuellen Wissen nie zufrieden. Ich möchte höher fliegen, weiter sehen und tiefer gehen.


Gute Bemerkungen, das stimmt mit mir überein. Sehen Sie sich das Update an, wenn Sie sich fragen, warum ich eine Antwort noch nicht als "korrekt" markieren darf.
Paul Hazen

Und nette Updates. Behalte den Glauben, ich werde nicht vergessen, eine Antwort als solche zu kennzeichnen, wenn die Zeit gekommen ist.
Paul Hazen

1
Könnten Sie bitte Ihre Antwort bereinigen? Sie haben zwei sich wiederholende Abschnittsüberschriften mit jeweils unterschiedlichem, aber ähnlichem Inhalt.
Paul Hazen

Hallo Paul, ich bin mir nicht sicher, wie ich es aufräumen soll. Ich denke, es sieht ein bisschen verwirrend aus. Jede Unterüberschrift, die sich auf jede Frage bezieht, dh jede "Frage" hat ein "Warum" und "Erfahrung", um die in Ihrem Update angeforderte Antwort zu unterstützen. Ich ändere gerne die Übersichtlichkeit.
Darknight,

Ohhh ... das war für mich so verwirrend. Könnten Sie die Überschriften inkrementieren oder ** fetten ** Text verwenden, um Unterüberschriften zu markieren? Ich denke, dies würde zur Verbesserung der Klarheit beitragen.
Paul Hazen

4

Wie bestimme ich objektiv, welche Studienbereiche, allgemeinen Kenntnisse und sonstigen Fähigkeiten ich durch einen CS-Abschluss erlangt hätte, an denen es mir jetzt vielleicht mangelt oder nicht?

Schauen Sie sich einfach die Studienvoraussetzungen an und sehen Sie sich dann den Lehrplan für jede Klasse an.

Wie sortiere ich diese Fähigkeiten in der Reihenfolge ihrer Wichtigkeit?

Ohne Rückblick kann man das nicht wirklich selbst machen. Ich würde sagen, das Wichtigste, was den meisten Autodidakten fehlt, ist die Analyse und das Design von Algorithmen. Der Rest kann stückweise abgeholt werden.

Was ist der beste Weg (in den nächsten zwei Jahren), meine Ausbildung zu ergänzen, um diese Eigenschaften so zu erreichen, dass sie mit dem Niveau eines CS-Studenten einer Spitzenuniversität übereinstimmen oder dieses sogar übertreffen?

Auch wenn Sie nicht zum Programm zugelassen sind, können Sie häufig Kurse aus anderen Abteilungen als Wahlfächer belegen. Eine meiner Lieblingsklassen war eine Projektklasse aus dem Bereich Luft- und Raumfahrttechnik, in der ich an Elektronik und Firmware für einen kleinen Satelliten arbeitete.

Sie können auch das Lehrbuch erwerben, das Ihre gewünschte Klasse verwendet. Ich habe das für ein paar Stunden gemacht, die ich nicht in meinen Stundenplan einbauen konnte. Eine weitere Option ist MIT Open Courseware .


So ein erfahrener Benutzer, überrascht, dass Sie sich nicht die Zeit genommen haben, die geposteten Antworten anderer Benutzer zu lesen, ist Ihre Antwort fast identisch mit einigen, die bereits hier sind. Bitte lesen Sie die vorhandenen Antworten sorgfältig durch. Wenn Sie der Meinung sind, dass Ihre Antwort anders ist, helfen Sie mir, dies zu klären.
Paul Hazen

Ich habe niemanden gesehen, der mir empfohlen hätte, CS-Kurse für Wahlfächer zu belegen, was viele Leute nicht wissen. Die Fast-Vervielfältigung im Rest ist das Ergebnis einer riesigen mehrteiligen Frage :-)
Karl Bielefeldt

Ich entschuldige mich, Sie haben Recht. Niemand sonst schlug CS-Kurse als Wahlfächer vor. Während es ein guter Rat ist, und schon gar nicht falsch , haben einige der anderen Antworten waren gründlicher und adressiert die drei Fragen in Zusammenhang besser mit dem Rest meiner Frage. Um einen der von Ihnen gegebenen Ratschläge nicht zu negieren (ich gebe Ihnen +1), wird er Ihnen mit Sicherheit zu Herzen genommen. Mit freundlichen Grüßen, vielen Dank und nochmals Entschuldigung für meinen Fehler.
Paul Hazen

3

Warum ist ein CS-Abschluss Ihrer Meinung nach so wichtig, um ein erfolgreicher Programmierer zu sein ?

Was Sie brauchen, um ein erfolgreicher Programmierer zu sein, ist:

  • Leidenschaft für das Programmieren
  • Unendlicher Wissensdurst über neue Technologien
  • Steigen Sie irgendwann in die Branche ein

Normalerweise bringt Sie der CS-Abschluss in die Branche, aber wenn Sie nicht die Leidenschaft und den Wissensdurst haben, leiden Sie und Sie werden niemals ein guter Programmierer sein.

Sieht so aus, als wären Sie bereits in die Branche eingestiegen, und es scheint, als hätten Sie sowohl die Leidenschaft als auch den Wissensdurst.

Was Sie wissen müssen, ist, weiter zu forschen und zu lernen und Erfahrungen zu sammeln, und die Branche wird wissen, wie Sie ohne Abschluss geschätzt werden.

Ein Beispiel von jemandem, mit dem ich zusammenarbeite

Eine der Softwareentwicklerinnen, die in meinem Team arbeitet, hat einen Abschluss in Rechtswissenschaften. Nach ein paar Jahren hat sie begriffen, dass sie Jura überhaupt nicht mag und dass sie Programmiererin werden möchte. Sie konnte keinen Job als Programmiererin bekommen (keine Erfahrung, kein Abschluss), also machte sie einen 6-monatigen Computerkurs, dann bekam sie einen Job und ist seitdem eine großartige Entwicklerin.


Obwohl dies ein großartiger Inhalt ist, habe ich das Gefühl, dass die Beantwortung meiner Frage nicht ganz richtig ist (etwas, das möglicherweise an meiner falschen Formulierung schuld ist). Ich bin nicht der festen Überzeugung, dass ein CS-Abschluss einen erfolgreichen Programmierer ausmacht. Meine Frage ist eher, "welche der Themen, die im Rahmen eines CS-Abschlusses unterrichtet werden , tendenziell zum Erfolg eines Programmierers beitragen und wie ich objektiv feststelle, wie ich mich in diesen Themen messe und wie ich meine bestehende Leidenschaft, meinen Hunger, ergänzen / bereichern kann für Wissen und Branchenerfahrung mit solchen Themen? " Ihre Antwort ist sicherlich nicht falsch.
Paul Hazen

2

IMHO gibt es keine Programmierjobs (oder Verkaufsjobs oder Sysadminjobs usw.), es gibt nur Jobs zur Problemlösung. Wir stellen Leute ein und bezahlen sie, um Probleme zu lösen. Das Schreiben von Code ist nur ein Teil der Problemlösung. Ja, auch der Verkauf ist eine Form der Problemlösung. Ein Mathematik-Abschluss beweist also, dass Sie Probleme ebenso lösen können wie ein CS-Abschluss.

Aus Ihrer Anzeige geht hervor, dass Sie viel Erfahrung / Praktika sammeln. Toll! Mach dir keine Sorgen, dass du nach dem Abschluss einen Job bekommst.

So versuchen Sie, Ihre Fragen zu beantworten:

Klassen? Wählen Sie einige theoretische CS-Klassen anstelle von Code-Schreibklassen. Finden Sie einige nicht CS / Mathe-Klassen zB. Philosophie es wird Ihnen helfen, sich von der Masse abzuheben

Prioritäten? lerne neue Dinge (nicht nur einfache Klassen, die du zur Hälfte schon kennst)

die nächsten zwei Jahre? Mit Menschen sprechen, lernen, Beziehungen aufbauen, nach Aktivitäten von außen Ausschau halten. (Hobbys / Sportarten / Freizeitbeschäftigungen außerhalb der Arbeit / des Studiums sind ein Anhaltspunkt dafür, wie motiviert ein Bewerber ist.)

Letzte Tipps: Absolvieren Sie so schnell wie möglich. Bauen Sie ein Netzwerk von Kontakten auf. Und der einzig sichere Job ist die Schaffung eines eigenen Jobs. Suchen Sie nach Ideen / Möglichkeiten, um Ihr eigenes Unternehmen zu gründen. Viel Glück.


Das ist großartig, danke für deine Antwort. Ich gebe ein "+1", kann es aber nicht als Antwort markieren, andere Antworten erläutern das Warum gründlich und zeigen Möglichkeiten auf, Lernziele objektiv zu bestimmen. Nichts davon widerspricht Ihrer Antwort. Ich nehme mir das, was Sie sagen, zu Herzen und es ist wirklich hilfreich. Vielen Dank noch einmal.
Paul Hazen

@PaulHazen - wenn Sie wissen möchten, warum? dann nimm einen Philosophiekurs :-) Aber im Ernst, ich habe einen 4-jährigen theoretischen CS-Abschluss gemacht, in dem es keinen C-Kurs gab, weil "das kannst du dir selbst beibringen". Zum besseren Verständnis habe ich ein Semester einen kleinen Philosophiekurs gewählt und dann einen anderen. Es war nicht nur eine Herausforderung, sondern auch eine großartige Gruppe von Menschen und erfrischende Ideen. Und Ihre Frage zeigt deutlich, dass Sie über die erforderlichen Schreibfähigkeiten für alle Nicht-Mathematik- / CS-Klassen verfügen.
JQA

1

Lassen Sie mich zunächst sagen, dass ich sehr froh bin, dass Sie diese Frage gestellt haben, da ich sie mir im Laufe der Jahre gestellt habe.

Ich denke, ich könnte mich in diesem Bereich als ein bisschen erfolgreich bezeichnen. Ich habe einige College-Erfahrungen und möchte irgendwann meine College-Ausbildung in Informatik beenden, aber ich habe zu diesem Zeitpunkt in meinem Leben noch keinen Abschluss verdient. Ich habe jedoch trotz dieses Nachteils (der 10 Jahre andauert) ziemlich viel Erfolg im Software-Engineering gehabt. Ich muss ehrlich zu dir sein, aber es war nicht unbedingt eine leichte Sache (natürlich würde ich wetten, dass alles, was es wert ist, getan zu werden, meistens NICHT die einfachste ist). Ich werde auch sagen, dass es immer noch nicht die einfachste Sache ist. Es gibt viele Unternehmen, die bereit sind, dem richtigen Kandidaten eine Chance zu geben, aber ich bin mit anderen in Kontakt gekommen, die sich über das Fehlen des "Gütesiegels" für die Hochschulausbildung hinwegsetzen werden. Jedoch,

Es begann in .net bei einem sehr großen Unternehmen. Als kleiner Nicht-Programmierer (arbeitete zu dieser Zeit als technischer Supportmitarbeiter) lernte ich alles über die Sprachen und Technologien, die für das Unternehmen, für das ich arbeitete, verwendet wurden. Außerdem und das ist wahrscheinlich das Wichtigste, was ich vernetzt habe. Ich habe eine E-Mail an jede einzelne Person abgeschossen, die ich in dem Verzeichnis finden konnte, dessen Titel Software Engineer enthielt. War ich nervig Wahrscheinlich. Ich war immer höflich und selbstsüchtig und lernbegierig. Ich würde Mittagessen planen oder sie einfach in der Cafeteria finden und mich hinsetzen, um zu versuchen, ein Gespräch zu führen. Manchmal war es peinlich oder ich wurde beschimpft, aber am Ende wurden die erwarteten Ergebnisse erzielt. Ich war in der Lage, zeitlich begrenzte Anmeldeinformationen für einige interne Datenbanken zu erhalten und nach einer Weile die erforderlichen Anmeldeinformationen zu erwerben, um Software auf ihrer proprietären Plattform zu entwickeln. Bald darauf befand ich mich in einer Position innerhalb des Unternehmens, um dem Analyseteam, an dem ich damals arbeitete, einige Fähigkeiten in der Entwicklung interner Tools zu verleihen. Von da an habe ich mich immer nur bemüht, der klügste Typ im Raum zu sein, und zwar auf eine möglichst unprätentiöse Art und Weise. Ich war eifrig und habe dafür gesorgt, dass alle es wussten. Ich habe immer versucht, eine Lösung zu finden, wo immer dies möglich ist, und dabei festgestellt, dass es nur sehr wenige Problembereiche gibt, die nicht zu lösen sind (möglicherweise außerhalb der Quantentheorie). Ich befand mich in einer Position innerhalb des Unternehmens, um dem Analyseteam, an dem ich damals arbeitete, einige Fähigkeiten in der Entwicklung interner Tools beizubringen. Von da an habe ich mich immer nur bemüht, der klügste Typ im Raum zu sein, und zwar auf eine möglichst unprätentiöse Art und Weise. Ich war eifrig und habe dafür gesorgt, dass alle es wussten. Ich habe immer versucht, eine Lösung zu finden, wo immer dies möglich ist, und dabei festgestellt, dass es nur sehr wenige Problembereiche gibt, die nicht zu lösen sind (möglicherweise außerhalb der Quantentheorie). Ich befand mich in einer Position innerhalb des Unternehmens, um dem Analyseteam, an dem ich damals arbeitete, einige Fähigkeiten in der Entwicklung interner Tools beizubringen. Von da an habe ich mich immer nur bemüht, der klügste Typ im Raum zu sein, und zwar auf eine möglichst unprätentiöse Art und Weise. Ich war eifrig und habe dafür gesorgt, dass alle es wussten. Ich habe immer versucht, eine Lösung zu finden, wo immer dies möglich ist, und dabei festgestellt, dass es nur sehr wenige Problembereiche gibt, die nicht zu lösen sind (möglicherweise außerhalb der Quantentheorie).

Zum Abschluss einer langen Geschichte (und wenn Sie im pazifischen Nordwesten sind, würde ich gerne bei einem Bier darüber diskutieren) habe ich meine "große Pause" bei einem winzigen kleinen Startup gemacht, das bereit war, mir eine Chance zu geben . Sie tauschten meine mangelnde Erfahrung gegen ein etwas geringeres Gehalt ein und ich machte mich an die Arbeit. Ich bin dann in den nächsten Jahren von einem kleinen Entwicklergeschäft zum nächsten gewechselt und habe dabei Freundschaften und Fähigkeiten gewonnen, bis ich schließlich als leitender Entwickler und Direktor eines kleinen Ingenieurbüros fungiere.

Wenn ich es nicht effektiv genug kommuniziert habe, muss man sich vernetzen. Lernen Sie Freunde kennen, trinken Sie Bier und lachen Sie und finden Sie Leute, die sich auf dem Gebiet befinden, auf dem Sie arbeiten möchten (am besten innerhalb eines Technologie-Stapels Ihrer Wahl). Stellen Sie sicher, dass die Leute wissen, dass Sie bereit sind, alles zu tun, was nötig ist, und dass Sie bereit sind, die Arbeit zu erledigen, egal wie monumental sie auch sein mag. Sie müssen im Grunde Ihren Mangel an formaler Bildung "überwinden". Spring rein und hab Spaß damit. Diese Branche ist meiner Meinung nach die beste der Welt. Ich habe dauerhafte Freundschaften und Kontakte geknüpft, die mir von einem Ort zum anderen geholfen haben, und ich werde das Gleiche für sie tun, wenn sich die Gelegenheit bietet.


1
Es tut mir wirklich leid, dass ich das nicht als Antwort markieren kann. Wie so viele der anderen Antworten denke ich, dass nichts, was Sie sagen, falsch ist , aber Sie konzentrieren sich ganz darauf, wie Sie meine Karriere vorantreiben können, wenn der springende Punkt meiner Frage ist, wie Sie ein erfolgreicher Programmierer sein können. Während ein erfolgreicher Programmierer eine gute Karriere voraussetzt, konzentriere ich mich lieber auf den Aspekt eines "erfolgreichen Programmierers" und lasse den Karriereteil (wichtig und sehr beabsichtigt) nachdenken. Ich gebe Ihnen jedoch ein "+1" für wertvolle Informationen, die meine Frage teilweise beantworten.
Paul Hazen

Oh, und wenn ich gerade vom Networking spreche, würde ich gerne mehr über Ihre Geschichte erfahren! Klingt so, als ob wir viele der gleichen Wege / Ziele verfolgen. Sie können unter paulhazen.net/about die Kontaktmethode auswählen , die für Sie am besten geeignet ist , und wir holen uns das Bier.
Paul Hazen

1

Lassen Sie mich zunächst über die "prägnante, aber gründliche" Bestimmung am Ende Ihres Hauptwerkes lachen. Runter zur Sache:

Wie bestimme ich objektiv, welche Studienbereiche, allgemeinen Kenntnisse und sonstigen Fähigkeiten ich durch einen CS-Abschluss erlangt hätte, an denen es mir jetzt vielleicht mangelt oder nicht?

Wie andere schon erwähnt, können Sie beginnen Vorlesungsverzeichnis . Aber ich möchte Sie ermutigen, sich von dieser Liste abzuheben. Eigentlich ist es gut, dass du Mathe studierst. Viele Ingenieure, mit denen ich zusammengearbeitet habe, können sich nicht erinnern, wie man eine einfache Integration durchführt, und haben sich nie außerhalb der Mauern der traditionellen diskreten Mathematikkurse des CS umgesehen.

Diese Antwort scheint in Bezug auf Besonderheiten ziemlich spärlich zu sein. Ich habe keinen CS-Abschluss und es mangelt mir auch nicht an den notwendigen Bereichen. Ich wünsche mir jedoch, dass ich mehr Zeit mit den anderen Dingen verbringe, die mich interessieren. Zum Beispiel Geschichte, Linguistik und Englisch.

Wie sortiere ich diese Fähigkeiten in der Reihenfolge ihrer Wichtigkeit?

Lerne was du liebst

Was ist dir wichtig? Was ist Arbeitgebern wichtig? Meine persönliche Heuristik bestand immer darin, das zu lernen, was mir am interessantesten erscheint - du musst lieben, was du tust; sonst wirst du ausbrennen. Software ist so ein weitläufiger Bereich bemüht , dass es immer ein Job für einen kompetenten Entwickler zu sein scheint , das leidenschaftlich ist jede dieser Fähigkeiten.

Lerne zu lernen und drücke dich

Ich denke, das bringt mich zu zwei Metafähigkeiten, die ich über den Rest stellen würde: Dinge unersättlich lernen und hart arbeiten. Das mag klischeehaft und schmerzlich offensichtlich klingen, aber die Kombination ist selten. Ich war auf der ganzen Welt in Bezug auf Fähigkeiten, die "benötigt" wurden - Front-End-HTML / Javascript, Spracherweiterungen, mobile Entwicklung, Computer Vision, Systemadministration und wieder mehr als 7 Sprachen. Die einzig wahre Kernkompetenz ist, dass ich es mir zur Gewohnheit gemacht habe, meine eigene Ignoranz zu überwinden.

Ich liebe Jack Whites Philosophie in Bezug auf Gitarren und Musik (im Ernst, sehen Sie sich das an) und ich denke, dass sie für die Programmierwelt überragend ist. Stellen Sie die Dinge ein wenig außerhalb der Reichweite. Drück dich. Dann wird es einfach erscheinen, wenn alles, was jemand für Sie tun möchte, Ihre Arbeit ist.

Was ist der beste Weg (in den nächsten zwei Jahren), meine Ausbildung zu ergänzen, um diese Eigenschaften so zu erreichen, dass sie mit dem Niveau eines CS-Studenten einer Spitzenuniversität übereinstimmen oder dieses sogar übertreffen?

  1. Nicht-Haupt-CS-Klassen

    Wie Sie hat mich die CS-Abteilung von UW abgelehnt ... obwohl ich glaube, dass ich es ein drittes Mal zulasse, bevor ich zu Sinnen komme. Ich habe mein Hauptfach Informatik und mein Nebenfach Angewandte Mathematik abgeschlossen. Aber ich habe trotzdem den gesamten nicht-großen CS-Track genommen. Das sind CSE 373, 410, 413, 415 und 417. Ich bin sicher, dass Sie zuerst Ihrer Leidenschaft folgen sollten. Meins führte mich zu diesen Kursen. Und ich denke, dass Sie mit ihnen eine ziemlich umfassende Grundausbildung erhalten, obwohl es ein wenig Licht auf die theoretische Seite der Dinge sein könnte.

    Hier ist das Coole: Mit Informatik zählten die meisten davon zu meinen Wahlpflichtfächern. In der Mathematikabteilung müssen Sie möglicherweise eine ausdrückliche Genehmigung einholen, und dies kann für alle außer CSE 417 von großer Bedeutung sein.

    Rufen Sie eine DARS-Anfrage auf (wahrscheinlich ein UWNetID-Link) und sehen Sie, wo sich die Dinge befinden. Ich habe das für verschiedene Majors ad nauseum gemacht .

  2. AMATH-Klassen

    Entsprechend hat die Abteilung für Angewandte Mathematik einige Klassen , die als Wahlpflichtfächer eingesetzt werden könnten. Du könntest in AMATH sogar minderjährig sein, so wie du es wirklich bist.

    Warum erwähne ich das? Numerisches Rechnen - zB AMATH 301/352 - ist den meisten Programmierern ein Rätsel. Wenn Sie sonst nichts davon haben, können Sie interessante Blog-Posts schreiben . Aber ich würde behaupten, dass es verdammt wichtig ist, die Probleme zu kennen, die mit den numerischen Typen einer Sprache zusammenhängen, und zu wissen, wie man sie misst und verbessert.

  3. Baue etwas!

    Das Wichtigste, was Sie tun können, ist, etwas Neues zu bauen. Nehmen Sie eine Idee von Anfang bis Ende. Lass es nicht zu, dass es etwas Leichtes ist, das in deiner Komfortzone liegt.

    Die fruchtbarsten Programmierkurse, die ich belegte, hatten immer eine große praktische Programmierkomponente. Für einen Ingenieur ist die Theorie unglaublich wichtig - solange sie sich in etwas Reales verwandeln lässt. Suchen Sie sich also ein cool klingendes CS-Papier und versuchen Sie, es umzusetzen. Ernsthaft.

  4. Such dir einen Job

    Sie haben bereits erwähnt, dass Sie ein Praktikum bei Amazon absolvieren. Das ist großartig. Tatsächliche Berufserfahrung ist wirklich der Schlüssel! Es gibt viele Leute mit CS-Abschlüssen, die sich nicht aus einer nassen Papiertüte heraus programmieren können. Gute Berufserfahrung ist weit mehr als ein Abschluss wert .


DIESE. Das ist sehr gut. Tatsächlich halte ich dies für eine mehr als gültige Antwort. Die markierte Antwort war nur ein bisschen valider ... * seufz * so schwer zu beurteilen mit so vielen tollen Antworten :( Ich wünschte, ich könnte deinem Wiederholer mehr helfen. Aber da ich dich im wirklichen Leben kenne (aber meistens über Twitter wie wir) Ich habe bereits darüber gesprochen, haha), als Trostpreis muss ich dir ein Bier oder einen Whisky kaufen
Paul Hazen

-2

Es gibt mehr als ein paar Geschichten, in denen Leute Millionäre werden, bevor sie das College abschließen. Vielleicht ist die, die ich am meisten höre, Bill Gates. Die Leute mit Nischenfähigkeiten tendieren dazu, ohne einen Abschluss besser abzuschneiden als die mit einem Cookie versehenen CS-Absolventen.

Finden Sie etwas, auf das sich nur sehr wenige Menschen einlassen, normalerweise etwas, das langweilig, langweilig oder schwer zu lernen ist, und lernen Sie es gut, und werden Sie davon besessen. Einige Bereiche, von denen ich gehört habe, sind Unix-Back-End-Sachen (nicht Linux, obwohl Linux nicht weit hinterher gefragt ist), Flash (ich weiß nicht genug über Flash, um mich genau zu erinnern, was es war, aber ich kenne einen Mann, der umgezogen ist Ich bin schnell informiert und er sagte, dass es NOCH einen Markt dafür gibt, hauptsächlich, weil die Leute sagen, dass es im Sterben liegt und es nicht lernen werden. Sie müssen vielleicht ein paar Kurse belegen, um loszulegen, aber wenn Sie sich auskennen und ein beeindruckendes Portfolio haben, gibt es Geschäfte, die Sie brauchen werden!


1
-1 für die nicht Beantwortung meiner Frage. Sie haben sich nicht geirrt, aber anscheinend haben Sie meinen Abschnitt "Was ich nicht suche" übersprungen und nichts von dem gefunden, wonach ich gesucht habe.
Paul Hazen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.