Was kann ein technisch versierter Senior-Softwareentwickler studieren, um sich weiter zu verbessern?

15

Angenommen, Sie programmieren seit über 10 Jahren. Sie kennen viele Sprachen, von denen nur wenige sehr detailliert sind. Sie haben Architekturen für Lösungen entworfen, an größeren Projekten gearbeitet und sie geliefert. Sie haben Muster, Best Practices, effektive Kodierungsrichtlinien, Komponententests, Multithreading usw. studiert.

Und dann entwickeln Sie langsam das Gefühl, dass die meisten Bücher, die Sie lesen, immer weniger wertvolle Informationen pro 100 Seiten Text enthalten. Also geben sie abnehmende Renditen. Sie lernen immer noch, aber Sie verbessern sich nicht mehr sprunghaft.

Warum wird Lernen im Vergleich zu früher weniger produktiv?

Damals änderte es Ihre Denkweise, brachte Ihnen neue Dinge bei und erweiterte Ihren Horizont, der später entweder Ihren derzeitigen Beruf verbesserte oder es Ihnen ermöglichte, etwas Neues zu erfinden, zu verwalten oder zu bauen. Warum ist das nicht mehr der Fall?

Coder
quelle
9
Pro den FAQ , Fragen über das, was Sie als nächstes tun sollen (Projekt, Buch, Technologie oder Sprache) sind vom Thema. Ich kann Ihre Sichtweise verstehen, aber Sie können unmöglich alles wissen, was mit Softwareentwicklung zu tun hat. Ihr Problem ist, dass Sie gelangweilt, vielleicht in eine intellektuelle Furcht geraten sind. Das, was Sie dazu inspiriert, aus diesem Trott herauszukommen, hängt sehr von Ihnen ab und wäre wahrscheinlich etwas ganz anderes für jemand anderen. Aber hier ist die Antwort: Verlassen Sie Ihre Komfortzone . Erfahren Sie mehr über eingebettete Systeme, Mathematik, Grafik oder was auch immer Sie interessiert.
Caleb
2
Ich sehe diese Frage nicht als begrenzt an, was das OP als nächstes tun soll. Es geht vielmehr um allgemeine Ansätze, die Fachleuten zur Verfügung stehen, um ihr Studium voranzutreiben. Vielleicht kann es besser formuliert werden, aber es liest sich nicht wie "was soll ich als nächstes tun".
Frank
3
Nun, ich weiß ehrlich gesagt nicht, welche Fragen heutzutage nicht vom Thema abweichen. Es wird in letzter Zeit tatsächlich schwierig, hier interessante Diskussionen zu finden. Ok, w / e, sperren Sie einfach das Thema ...
Coder
2
Ich glaube, die Frage kann bearbeitet werden , um sie wieder zu öffnen. Soweit ich das beurteilen kann, ist das Problem, das sich daraus ergibt, dass "die Renditen sinken ... das Studium von Mustern, bewährten Methoden, effektiven Codierungsrichtlinien, Komponententests, Multithreading ..." für Programmierer ziemlich aktuell ist
gnat
2
Sie werden ein Thema besser verstehen, wenn Sie versuchen, es jemand anderem beizubringen.
JeffO

Antworten:

23

Erstens gibt es trotz der Art und Weise, wie Ihre Frage formuliert ist, kein Ende des Studiums, insbesondere nicht in unserem Bereich, in dem neue Dinge schneller auftauchen, als Sie darüber lesen können. Abgesehen davon, wenn Sie sich verbessern möchten, gibt es die folgenden Kategorien, die ich in Betracht ziehen würde. Für den größten Nutzen / ROI sollten Sie natürlich etwas aus Ihrem schwächsten Bereich auswählen.

Grundlagenwissen

Obwohl man Programmiersprachen kennt und praktische Erfahrung hat, hat man oft (insbesondere selbst erlernte) Bereiche, in denen grundlegende grundlegende Probleme unvollständig bleiben. Denken Sie an Dinge wie Datenstrukturen, Algorithmen, Cache-Strategien, Hash-Funktionen, ...

Beachten Sie, dass dies auch die Grundlagen von Programmiersprachen umfasst - von Compilern, Optimierungstechniken und Typsystemen bis hin zu Kategorietheorien, Monaden und dergleichen.

Wenn Sie gut unterrichtet sind, wie Sie es bereits seit mehreren Jahren mit einem Universitätsabschluss getan haben, sind Sie wahrscheinlich bereits stark in dieser Kategorie (bei weitem nicht abgeschlossen, aber auf einer soliden Basis). Versuchen Sie ansonsten, ein paar Bücher in diesen Bereichen zu lesen, um herauszufinden, ob etwas, von dem Sie nicht einmal wussten, dass es in Ihrem Repertoire fehlt. Diese Kategorie lässt sich am einfachsten überschätzen.

Paradigmatisches Wissen

Ich bin immer wieder erstaunt, wenn Programmierer auftauchen, die sich für Besserwisser halten, sich aber mit anderen als den gängigen Paradigmen nicht auskennen. Wenn Sie der Meinung sind, dass die Objektorientierung das Ende ist, ist dies Ihre Kategorie für Verbesserungen. Wenn Sie der Meinung sind, dass es auch funktionale Programmierung gibt und vielleicht sogar von logischer Programmierung gehört hat, ist dies immer noch eine gute Wahl. Es gibt weitaus mehr Paradigmen, und das Lernen über sie hat den tiefgreifenden Effekt, dass Sie eine neue Sicht auf die Welt des Programmierens erhalten.

Vergessen Sie nicht: Es gibt häufig (eher philosophische) Argumente darüber, was als Paradigma angesehen werden kann oder nicht. Lass dich von diesen nicht ablenken. Ihr Ziel sollte es sein, Ihren Horizont zu erweitern, und das bedeutet, dass Sie etwas über diese Dinge lernen, ob jemand anderes X als eigenes Paradigma ansieht oder nicht, das macht keinen Unterschied.

Fachwissen

Der einfachste von allen - und der am wenigsten nützliche zugleich. Natürlich können Sie sich auf eine einzelne Technologie festlegen und alle Einzelheiten kennenlernen, aber Sie sollten bereit sein, den Preis zu zahlen. Technologien altern und dies in immer schneller werdendem Tempo. Das macht es fast zu einer Garantie dafür, dass die hier investierte Zeit einige Jahre später wertlos sein wird.

Auch das Problem der sinkenden Rendite scheint hier auf. Spezialist für etwas zu sein, bedeutet natürlich, dass Sie unzählige Stunden mit diesem engen Thema verbringen müssen, und daher wird es per Definition lange dauern, bis Sie etwas Neues lernen, und dieses Neue wird ein winziges kleines Puzzleteil sein die Meinung von niemandem zu etwas ändern.

Fachwissen

Sei es, weil es der Bereich Ihrer Arbeit ist oder einfach auf Ihrem persönlichen Interesse basiert, aber ein Experte für Informatik und ein bestimmter Bereich zu sein, ist sehr wertvoll und lohnend. Ich spreche hier nicht über Nebenbereiche von CS, wie Computergrafik oder KI. Beachten Sie stattdessen, dass Computer das Leben aller erfasst haben und dass jedes andere Feld Computern und einem Bereich unterworfen ist, in den Sie vordringen können.

Dieses fällt eindeutig in die Kategorie "außerhalb Ihres Fachgebiets", ist jedoch kein scharfes mathematisches "außerhalb", sondern vielmehr ein Anwendungsgebiet. Betrachten Sie die Medizin: Ich rate Ihnen nicht, Arzt zu werden. Es lohnt sich jedoch, die Grundlagen der Medizin zu erlernen, um Ihr vorhandenes Wissen über die Informatik auf die Probleme dieses Fachgebiets anzuwenden. Dies reicht von Visualisierungstechniken über Robotik bis hin zu Expertensystemen und einfachem Datenmanagement für Buchhaltung / Administration. Während Sie das alles schon einmal gemacht haben, kann es eine völlig neue Erfahrung werden, es in einer anderen Domäne zu machen.

Bedenken Sie jedoch, dass dies eine viel radikalere Änderung in Ihrer Richtung ist als die anderen Kategorien. Möglicherweise haben Sie in Ihrer täglichen Arbeit keinen Kontakt zu diesem Bereich, was es äußerst schwierig macht, sich durchzusetzen. Es kann sogar bedeuten, Jobs zu wechseln. Außerdem benötigen Sie eine Art Zertifizierung für Ihre neue Domain - schließlich sind Sie ein absoluter Neuling in dieser Domain und müssen sich gegen Absolventen interdisziplinärer Studien behaupten, die sich bereits auf den Weg gemacht haben, um Experten in dieser Nische zu werden.

Ergänzungswissen

Wie Mike Brown hinzufügte, gibt es auch den Wissensbereich, der in gewisser Weise Ihren aktuellen Job begleitet, aber nicht unbedingt erforderlich ist. Sie müssen kein Projektmanager sein, um sich mit Projektmanagement vertraut zu machen, aber wie üblich erhalten Sie durch zusätzliches Wissen einen besseren Einblick, wie die andere Seite tickt. Man könnte dies sogar so weit verallgemeinern, dass man sich auf Soft Skills konzentriert. Ich denke, jeder, der mit anderen Menschen an einem echten Projekt gearbeitet hat, kennt den Wert dieser.

Frank
quelle
+1, besonders für "Domain Knowledge" - das hat zumindest bei mir funktioniert.
Doc Brown
1
Ich stimme 100% mit dem überein, was Sie sagen. Ich interessiere mich sehr für tieferes Grundlagenwissen. Zu dem Zweck, dass ich gerade in einem Compilerkurs eingeschrieben bin. Was Sie nicht angesprochen haben, würde ich als ergänzendes Wissen einstufen: Grafikdesign, Projektmanagement usw.
Michael Brown
+1 für das Paradigma - Ich habe ungefähr 10 Jahre lang OOP / prozedural gemacht (und bin es leid) und dann habe ich angefangen, funktionale Programmierung zu lernen und meine Augen wurden für eine ganz neue Welt geöffnet.
Paul
9

Ich denke, dass sich Software ständig weiterentwickelt, und daher liegt der Schwerpunkt auf ständiger Verbesserung. Ich verstehe, woher Sie kommen. In letzter Zeit habe ich mich ähnlich gefühlt und verfolge jetzt ein MCSM in SQL Server.

Lerne die nächste neue Sprache oder das nächste Framework oder was gerade "heiß" ist. Jedes Jahr gibt es eine Technologie, ein Framework oder eine Sprache, die herauskommt oder eine kritische Masse erreicht, die zu einem eigenen Modewort wird. Ich kann mir einige davon in den letzten Jahren vorstellen: node.js, Ruby, jQuery. Dies wird sich wahrscheinlich auch auf Ihre Denkweise für andere Plattformen auswirken. Sehen Sie sich beispielsweise an, was ROR mit Java mit Grails angestellt hat.

Es gibt immer Raum für Verbesserungen. Ich halte es für sehr unwahrscheinlich, dass Sie ein Experte für alles sein können, und ich lese viel und lerne immer. Ich stimme dem zu, was Sie über das Erlernen immer weniger pro 100 Seiten sagen, aber dies ist zu erwarten, wenn Sie ein Fachexperte sind.

In Bezug auf das, was Sie tun können, sind hier einige Vorschläge:

  1. Bleiben Sie auf dem Laufenden über die Veränderungen in der Community und darüber, worauf sich die Leute einlassen. Lernen Sie die neuen Stacks kennen, damit Sie sie bei Bedarf empfehlen können

  2. Nehmen Sie an solchen Q & A-Sites teil, auf denen Sie Ihr Wissen an andere weitergeben können. Wenn Sie sich die Zeit nehmen, die Beiträge anderer Leute zu lesen, werden Sie wahrscheinlich etwas lernen und zumindest die Perspektiven sehen, die andere Menschen haben.

  3. Wählen Sie ein Hobby, das in irgendeiner Beziehung zu Ihrer Arbeit steht. Es gibt viele Hobbys mit Crossover, Think AI, Lego Mindstorms, RaspPi usw.

  4. Versuchen Sie nicht nur, Ihr Wissen zu vertiefen, sondern auch, die Tiefe zu erhöhen. Erfahren Sie beispielsweise, wie EF im Hintergrund funktioniert, damit Sie diese seltsamen Eckfälle diagnostizieren können, anstatt nur das Framework zu verwenden.

  5. Verfolgen Sie die Zertifizierung auf höchstem Niveau, um zu beweisen, dass Sie sich auskennen

Persönlich erzähle ich Ihnen, was mich gerade in den Bann zieht. Ich lese 97 Dinge, die jeder Software-Architekt wissen sollte, und ich bin nur teilweise davon überzeugt, aber es werden viele weise Ratschläge ausgesprochen. Das Buch kann online unter dem von mir angegebenen Link gelesen werden.

In Bezug auf das Hobby, das ich letztendlich aufnahm, beschäftigte ich mich mit der Fahrzeugdiagnose (natürlich mit dem Computer), wodurch ich mein eigenes Auto vollständig pflegte. Ich genieße die Zeit, die ich mit meinen Händen verbringe.

Sam
quelle
Komisch, ich kenne einen der Autoren für 97 Dinge;)
Michael Brown
Es ist ein gutes Buch.
Sam
Bitte. Es ist großartig, nicht wahr?
Sam
1

Nach einem bestimmten Zeitpunkt haben Sie genug über ein bestimmtes Thema gelernt, um problemlos ad hoc neues Wissen zu erlangen. Wenn Sie das Gefühl haben, dass es nicht mehr viel zu lernen gibt, ist es an der Zeit, ergänzendes Wissen zu erwerben, das Ihr Primärwissen ergänzt.

Ich beschäftige mich mit UX und Grafikdesign, weil ich der Meinung bin, dass ich als Entwickler nicht nur elegante Strukturen im Code, sondern auch elegante Benutzeroberflächen für den Endbenutzer bereitstellen kann.

Weitere Themen, mit denen Sie sich befassen können, sind Projektmanagement, Geschäftsanalyse, Systemadministration und Softwareprozessverbesserung. Wenn Sie sich in einer bestimmten Domäne befinden, ist es möglicherweise sinnvoll, tiefer in diese Domäne einzutauchen. Zum Beispiel habe ich in letzter Zeit viel im Finanzdienstleistungssektor gearbeitet. Ich habe mich für Kurse über Coursera zum Thema Finanzmodellierung angemeldet, die mir helfen, mit meinen Kunden über deren Bedingungen zu sprechen.

Es gibt immer mehr zu lernen, man muss nur über den Tellerrand schauen.

Michael Brown
quelle
0

Diese Frage besteht aus zwei Teilen: Warum ist es schwieriger zu lernen und was können Sie tun?

Der erste Teil ist ziemlich einfach - fortgeschrittenere Themen sind schwieriger. So schwierig es auch ist, das Programmieren zu erlernen, so schwierig ist es, Programme gut zu entwerfen, und noch schwieriger ist es, das Entwerfen großer Anwendungen zu erlernen. Tatsache ist, dass fortgeschrittene Themen schwieriger sind, sonst wären sie nicht fortgeschritten. Sie müssen mehr Zeit damit verbringen, sie zu lernen. mehr Zeit zum Üben, um sie zu meistern.

Was Sie tun können, scheinen Sie sich auf die technischen Aspekte eines leitenden Software-Ingenieurs zu konzentrieren. Sie können viel mehr tun, um Ihrem Team bei der Erstellung von Software zu helfen, als Sprachen und Frameworks zu lernen. Soft Skills, wie andere Entwickler Mentoring, Verhandeln Anforderungen, Projektmanagement, Programmgestaltung, die Vision in Verbindung steht, die Umsetzung Team Norm ... All diese wichtigen Dinge benötigt , um eine machen Team von Entwicklern wirksam zu machen , Software, nicht nur Sie.

Telastyn
quelle
-3

Jedes Mal, wenn ich auf die Website Lambda The Ultimate gehe , kann ich wirklich nicht denken, dass ich alles auf dem Gebiet der Computerwissenschaften weiß.

LtU gibt Ihnen einen guten Ausgangspunkt für Paradigmen und theoretisches Wissen, das Sie noch lernen müssen.

"Je mehr du weißt, desto mehr weißt du, wie wenig du weißt."

Stephane Rolland
quelle
1
Wie beantwortet das die Frage: "Warum wird Lernen im Vergleich zu früher weniger produktiv?"
gnat
Denn wenn ich dorthin gehe, gibt es Artikel mit etwa 90% der neuen Dinge, die ich lernen muss. Genau das beklagt das OP: Das Verhältnis der gelernten Dinge nach Anzahl der gelesenen Zeilen wird in seinem Fall zu niedrig. Kennst du diese Seite auch nicht?
Stephane Rolland
@gnat, und Sie verwechseln die Frage mit dem Titel: "Was kann ein technisch versierter leitender Softwareentwickler tun, um sich weiter zu verbessern?"
Stephane Rolland
Hast du den Inhalt der Frage nach dem Titel gelesen?
gnat
@gnat Ja natürlich, ich habe seine Frage gelesen: Es ist in der Tat eine Aussage, wenn OP nur fragt, warum : Nach 10 Jahren liest ein sogenannter Senior Software Engineer Bücher, die den Horizont nicht mehr ändern, weil ein Senior viel weiß. Ja das habe ich gelesen Ich habe gelächelt Ich wiederhole mich: "Je mehr du weißt, desto mehr weißt du, wie wenig du weißt."
Stephane Rolland