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?
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:
- Fragen Sie die Entwickler-Community (dieser Beitrag)
- Verfolgen Sie Patenschaften mit erfahrenen Entwicklern, die mit mir einen ähnlichen Karriereweg eingeschlagen haben
- Definieren Sie kurz- und langfristige Lernziele und die folgenden Lehrpläne, in denen die Studienthemen beschrieben werden
- 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.
Antworten:
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?
Auf deine Fragen
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 :
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. )
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.
quelle
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.
Ü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.
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!]
quelle
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.
quelle
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.
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.
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.
quelle
Schauen Sie sich einfach die Studienvoraussetzungen an und sehen Sie sich dann den Lehrplan für jede Klasse an.
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.
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 .
quelle
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:
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.
quelle
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.
quelle
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.
quelle
Lassen Sie mich zunächst über die "prägnante, aber gründliche" Bestimmung am Ende Ihres Hauptwerkes lachen. Runter zur Sache:
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.
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.
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 .
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.
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.
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 .
quelle
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!
quelle