Ich bin ein Hauptfach Informatik im ersten Jahr. Ich ging zu einer Jobmesse, verteilte Lebensläufe, sehr zu meiner Überraschung bekam ich ein Interview und schließlich ein Praktikum als Entwickler.
Ich erklärte dem Interviewer (der mein Chef sein wird), dass ich erst ein erstes Jahr bin und nicht viel Erfahrung im Programmieren habe. Er sagte mir einfach, dass er zuversichtlich ist, dass ich gut abschneiden werde, da ich über einen starken Hintergrund in Mathematik verfüge (ich bin fast mit meinem BA in Mathematik fertig, und ich habe ein paar Abschlusskurse in der Tasche).
Ich bin in allen Programmierkursen gut, aber ich habe immer noch das Gefühl, im Nachteil zu sein. Im Moment möchte ich diesen Job wirklich nur gut machen, wenn er anfängt. Der Job wird meistens C # verwenden, aber abgesehen davon, dass Sie offensichtlich etwas C # gelernt haben, was ist die einzige Fähigkeit, die Sie gerne gelernt hätten, bevor Sie ein echter Programmierer wurden?
Jeder Rat wird sehr geschätzt, aber wenn Sie Bücher im Sinn haben, sagen Sie es bitte. Vielen Dank!
Antworten:
In der Schule lernst du, Code zu schreiben. Was Sie nicht lernen, ist der Rest der Softwareentwicklung. Die wichtigsten Dinge, über die ich in der Schule nie etwas gelernt habe, sind:
Dies sind sehr wichtige Fähigkeiten für jeden Entwickler, und es ist leider unwahrscheinlich, dass Sie sie in einem Klassenzimmer erlernen.
quelle
Ich wünschte, ich hätte zu Beginn meiner Karriere gewusst, dass ich als Entwickler eine sehr wichtige Rolle im Geschäft spiele . Ich bin nicht nur ein Code-Affe.
Als Entwickler haben Sie einen großen Einfluss auf die Teile des Geschäfts, die mit der Software zusammenhängen, an der Sie arbeiten.
Wenn Ihre Firma keine Tests für ihren Code schreibt, schreiben Sie jetzt Tests.
Wenn sie keine Bugs verfolgen, suchen Sie jetzt einen geeigneten Bug-Tracker.
Wenn Ihr Chef möchte, dass Sie sofort mit der Arbeit an einer ausgefallenen Animation für den Begrüßungsbildschirm Ihrer Tabellenkalkulations-App beginnen, aber noch Dutzende von Fehlern zu beheben sind und einige wichtige, noch nicht abgeschlossene Funktionen vor Ablauf der nächsten Kundenfreigabe vorliegen, können Sie sich über die richtige Priorisierung der Arbeit unterhalten .
Selbst wenn Sie nur "ein normaler Angestellter" sind, können Sie sich als Berater von anderen Entwicklern abheben, die nur Code schreiben und sich nicht so verhalten, als hätten sie ein berechtigtes Interesse am Geschäft.
quelle
Meine Schule hat mir nie beigebracht, wie man Probleme löst. Sie haben mir die Mechanismen des Codierens beigebracht, aber ein Problem untersuchen, verstehen und eine Lösung finden zu können, haben sie mir nicht beigebracht. Es erfordert neben dem Verständnis einer Programmiersprache auch Geduld, Genauigkeit und Intuition.
Sie lehrten auch nicht über Teamwork, Versionskontrolle und die Wichtigkeit des Schreibens von Code, der einfach zu pflegen ist. Sie haben auch nicht viel darüber gelernt, wie man Software testet. Sie haben vielleicht Unit-Tests angesprochen, sich aber nicht zu sehr mit den Konzepten Akzeptanztests, Regressionstests usw. befasst.
Disclaimer: Ich bin in den 80ern aufs College gegangen. Ich sehe jedoch Beweise dafür bei Leuten, die ich heute anstelle - frischgebackene Absolventen, die nur sehr wenig über die reale Welt des Programmierens wissen: Versionskontrolle, Testen, sauberes Codieren, Fähigkeiten zum Debuggen usw.
quelle
Meiner Meinung nach sind einige der wichtigsten Dinge, die in der Schule nicht gelernt (oder richtig gelernt) wurden:
VCS, Bug-Tracking-Systeme, Build-Tools usw. sind Tools, die Sie lernen müssen, um mit einem Team zusammenarbeiten zu können. Sie erfordern nicht viel Zeit, um auf einer grundlegenden Ebene gelernt zu werden, und sind danach ziemlich einfach (zumindest zu Beginn). Die obige Liste enthält Feinheiten, die, falls bekannt, Ihre Produktivität steigern.
quelle
Das größte, was mir bei neuen Absolventen fehlt, ist ein gutes Verständnis der Versionskontrolle.
Wenn Sie Erfahrung in der Entwicklung von Open Source-Software mit Quellcode-Repositories (wie GitHub ) haben, sind Sie
most
Ihren Klassenkameraden einen Schritt voraus .Das zweite ist ein Verständnis der Komplexität (
big O
). Die meisten Studenten haben davon gehört, müssen aber noch echte Software entwickeln, wo sie ins Spiel kommt, und verstehen daher ihre wahre Bedeutung nicht.Wenn Ihre Datenmengen so groß sind, dass Brute-Force sie niemals einschränken wird, und das Verständnis anderer Techniken nützlich ist und Sie mit Erfahrung und Fehlern abschätzen können, wann Brute-Force für die Situation in Ordnung ist.
quelle
Wie man gut debuggt, insbesondere mit einem Debugger, und wie man einen Fehler richtig angeht, dh herausfindet, was der Grund ist, warum er den Fehler verursacht, und warum Ihre Lösung ihn behebt, anstatt einfach Dinge auszuprobieren und zu hoffen.
Die meisten Absolventen der Informatik sind auffällig schlecht im Debuggen und benötigen daher viel mehr Zeit, um das Problem zu beheben, als erforderlich ist, und verursachen dabei mehr Fehler.
Andere Dinge wie Versionskontrolle, Fehlerverfolgung usw. sind erwähnenswert, aber meiner Meinung nach ist der Mangel an vernünftigen Ansätzen zum Debuggen ein viel größeres Problem und erfordert mehr Lernaufwand.
quelle
Nach meiner Erfahrung dreht sich beim Programmieren alles um das Lösen von Problemen. In meiner Schule wurde nur geprüft, ob man ein Programm ohne Syntaxfehler schreiben kann. Was tatsächlich benötigt wird, wird nicht als Eingabe angegeben. Die Syntax ist nur etwas, das Sie bei Bedarf in Büchern nachschlagen können. Die Fähigkeit, ein Problem zu lösen, kann jedoch nur erreicht werden, wenn Sie es gut üben und sich darin ausbilden.
Lassen Sie es von jedem Typ sein, versuchen Sie, so viele Fragen wie möglich zu beantworten, damit Sie ein gewisses Vertrauen in sich selbst aufbauen. Versuchen Sie es mit etwas Leidenschaft in Ihrem Kopf, und Sie werden sicher durchkommen.
quelle
Nehmen Sie sich etwas Zeit, um einige gängige Entwurfsmuster zu lernen: Factory, Singleton, Adapter, Befehl und Beobachter (meine Hochschule hat sie nicht unterrichtet).
Wenn das Unternehmen die Agile-Methodik für die Softwareentwicklung verwendet, ist ein gewisses Verständnis von Vorteil.
quelle
Viele der Fähigkeiten, die Sie als professioneller Programmierer benötigen, sind in einem universitären / akademischen Umfeld für jeden nahezu unmöglich.
Sie können nur aus Erfahrung stammen, die sie direkt vor Ort gesammelt haben.
Lernen, wie Sie mit Menschen außerhalb Ihres "Berufs" wie Grafikdesignern, Produktdesignern, Managern usw. zusammenarbeiten und kommunizieren können.
Verstehen, dass Ihre Aufgabe nicht darin besteht, Code zu schreiben, sondern ein Produkt zum Leben zu erwecken. Leichter gesagt als getan.
Wissen, wie man gute Codierungspraktiken mit praktischen Überlegungen in Einklang bringt. Erwerb der Fähigkeit, zu beurteilen, ob der Code "gut genug", "überarbeitet" oder "überarbeitet werden muss".
Lernen Sie, Ihre eigenen Schwächen und Unsicherheiten zu überwinden. Die Fähigkeit erwerben, Kritik standzuhalten. Dein Ego loslassen. Lernen, was es heißt, persönliche Verantwortung zu übernehmen und sie dann zu übernehmen.
Über all das ist leicht zu lesen. Es ist eine ganz andere Sache, dies in die Praxis umzusetzen. Der einzige Weg ist, es zu tun. Sie werden viele Male gebissen, und es wird wahrscheinlich weh tun, aber Sie werden gestärkt und besser herauskommen.
Relevante Lektüre: Lehrlingsmuster
quelle
Es hängt alles von der Schule ab. In meinem College haben wir viele praktische Projekte. Sehr oft in Teams und mit verschiedenen Quellcodeverwaltungen. Daher denke ich, dass sich einige Schulen auf diese konzentrieren.
Aber eines lehrt die Schule nicht: Details. Sehr oft, wenn die Schule Technologie oder Praxis lehrt (wie Webentwicklung, JAVA-UI-Entwicklung, fortgeschrittene Datenbanken), kratzen sie nur die Oberfläche und gehen nie auf Details ein, die notwendig wären, um diese Technologie oder Praxis in der Praxis anzuwenden. Sie erhalten einen allgemeinen Überblick über mögliche Lösungen für Ihre Probleme, müssen sich jedoch mit den erforderlichen Details vertraut machen.
Nur wenn die Schule etwas in Details unterrichtet, steckt ein starker mathematischer oder theoretischer Hintergrund dahinter. Dinge wie formale Sprachen oder SQL-Datenbanken sind ziemlich oft ein zentraler Bestandteil des Lehrplans, da sie auf mathematischen Grundlagen aufbauen und häufig in den Informatik- oder Ingenieurwissenschaften verwendet werden.
quelle
quelle
Ich wünschte, ich hätte schon viel früher im Spiel entschieden, ob ich ein Gesamtprogrammierer sein möchte, viele verschiedene Dinge, Sprachen, Datenbanken und Plattformen lernen und schließlich Webentwickler werden möchte oder ob ich mich nur auf ein CMS spezialisieren möchte. Oder spezialisieren Sie sich einfach auf Photoshop. Als Spezialist sind Ihre Fähigkeiten genauso wertvoll und rentabel wie das Wissen, was ein echter Programmierer wissen sollte. Mit anderen Worten, wenn Sie nur gutes Geld verdienen müssen, spezialisieren Sie sich einfach auf EINE SACHE. Wenn Sie den Computer lieben und gerne Probleme lösen, dann sind Sie ein Programmierer.
[Nachdenken über und nach dem Erlernen von 4 oder 5 verschiedenen Javascript-Frameworks, bevor JQuery wirklich gut herauskam. AS400- rpg,> .NET - c # und PHP, bevor ich Photoshop beherrsche und gleich viel Geld verdiene, ohne Fehler beheben oder Software schreiben zu müssen. ]
Ich meine, es ist eine gewisse Befriedigung, ein breites Themenspektrum zu kennen, aber die Befriedigung lässt nach, wenn Sie jemanden sehen, der Photoshop-Bargeld nur mit dem gleichen Gehalt kennt.
quelle