Lernen, ein guter Entwickler zu sein: Welche Teile kannst du überspringen? [geschlossen]


31

Ich habe mir zum Ziel gesetzt, nächstes Jahr um diese Zeit ein anständiger Entwickler zu werden. Damit meine ich die volle Erfahrung mit dem Entwicklungslebenszyklus, ein paar guten Apps / Sites / Webapps, und vor allem die Fähigkeit, in einem konstanten Tempo zu arbeiten, ohne stundenlang durch einige, die dies bereits wissen sollten, außer Gefecht gesetzt zu werden Technik.

Ich fange nicht bei Null an. Ich habe viel HTML / CSS, SQL, Javascript, Python und VB.net geschrieben und andere Sprachen wie C und Java studiert. Ich kenne mich mit Dingen wie OOP, Entwurfsmustern, TDD, Komplexität, Computerlinguistik, Hinweisen / Referenzen, funktionaler Programmierung und anderen akademischen / theoretischen Angelegenheiten aus. Ich kann nur noch nicht sagen, dass ich diese Dinge wirklich getan habe .

Also möchte ich auf dem Laufenden bleiben und wissen, welche Dinge ich bis zu einem späteren Zeitpunkt zurücklassen kann. Zum Beispiel ist es interessant, Algorithmen und die Mathematik dahinter zu studieren, aber bisher brauchte ich kaum etwas anderes als die grundlegendsten verschachtelten Schleifen zu schreiben. Es wäre cool, die Versammlung zu untersuchen, um ein klareres Bild von Operationen auf niedriger Ebene zu erhalten ... aber ich stelle mir vor, dass die tägliche Arbeit selten verletzt wird. Ein Blick auf eine funktionierende Programmiersprache kann mir andererseits helfen, Programme zu schreiben, die verständlicher und weniger anfällig für versteckte Fehler sind (im Moment stelle ich fest, dass die größte Schwierigkeit darin besteht, dass die Komplexität der App meine Fähigkeit zum Verstehen übersteigt - Zum Beispiel war das Weitergeben von Daten in Ordnung ... bis ich mit AJAX anfangen musste, was ein schmerzhafter Schritt war).

Ich bin ein Programmierer mit grundlegenden Fähigkeiten - auf welche Fähigkeiten sollte ich mich konzentrieren, um sie zu entwickeln?

(Auch meine Unix-Kenntnisse sind sehr schwach und ich kenne mich nicht mit der Windows-Konfiguration aus. Ich bin mir nicht sicher, wie viel Zeit ich dafür aufwenden soll.)


41
Sie können den Teil überspringen, in dem Sie schlafen :-)
Jesse McCulloch

17
Eine merkwürdige Frage. Lernen überspringen? Wird nicht berechnet. Erinnert mich an ein Zitat: „Konzentrieren Sie sich auf die Reise, nicht auf das Ziel. Freude macht es nicht, eine Aktivität zu beenden, sondern sie zu
erledigen

5
Ich sagte überspringen, und später zurückkommen ("zu einem späteren Zeitpunkt verlassen"). Ich leugne nicht, dass all diese Dinge später wichtig sein werden / könnten.
Andrew M

13
Eine Sache, an die Sie sich als Entwickler erinnern sollten: Die Listen, in denen Sie Elemente zum "Überspringen und später zurückkehren" platzieren, scheinen immer verloren zu gehen ...
Wonko the Sane

8
Überspringen, faul zu sein. Lerne alles, um zu lernen.
DexterW

Antworten:


12

Dies sind Vorschläge, die nicht auf dem basieren, was ich getan habe, sondern auf dem, was ich im Nachhinein hätte tun sollen:

  1. Überspringen Sie neue gehypte Technologien, da die meisten von ihnen fehlschlagen werden. Machen Sie Ausnahmen für diejenigen, die eine Beteiligung oder einen Geschäftsplan haben, aber immer eine Opt-out-Strategie (Ersatztechnologie) haben.
  2. Skip wird ein Experte für jede Programmiersprache und Bibliothek. Versuchen Sie, ein Experte für die relativ wenigen (sieben) Programmiersprachen und Bibliotheken zu werden, die für das bezahlen, was Sie gerne tun. Verpassen Sie jedoch nicht die Gelegenheit, die Nuancen einer anderen Programmiersprache zu verstehen. Etwa zwei Monate dauert es, um in einer neuen Sprache und ihren Standardbibliotheken kompetent zu werden.
  3. Überspringen Sie Single-Platform-Technologien, wenn es eine Problemumgehung gibt.
  4. MS Windows überspringen. Es hat zu viele Laster.
  5. Überspringen Sie es, Spezialist zu werden, aber lassen Sie andere selektiv denken, dass Sie das sind, was Sie sind.
  6. Überspringen Sie Corporate Voodoo ("benutzergesteuerte Architektur von Unternehmenskomponenten"), wenn Sie können. Es führt nirgendwo hin.
  7. Überspringen Sie C ++ (lassen Sie andere damit umgehen) und warten Sie auf die Python-Bindungen.

Eigentlich können Sie alles überspringen, wenn Sie Ihrer Lernfähigkeit vertrauen. Ich denke, dass das, was Sie wissen möchten, mit einer Frage wie der folgenden besser bedient worden wäre:

  • Ich weiß das und es fehlt mir daran . Was soll ich in einem Jahr lernen?
  • Ich mag Projekte, die sich auszahlen, aber ich mag solche . Was sollte ich lernen, um innerhalb eines Jahres darauf einzugehen?

Denken Sie daran, dass gute Entwickler über alles Bescheid wissen, denn beim Computing geht es selten um das Computing selbst, sondern vielmehr darum, es auf alle Bereiche des menschlichen Lebens anzuwenden, sei es theoretische Physik, Erhaltung des Ökosystems oder fotografische Effekte in The Matrix .

Zuletzt informieren Sie sich über Design, Abstraktion, Algorithmen und Komplexität. Ich, die Programmierer, die mich unterrichtet haben, und die Programmierer, die ich respektiere, werden Ihnen danken und Sie dafür schätzen. Wenn Sie Zeit zum Lernen haben, würde ich empfehlen, die erste Ausgabe von Code Complete zu lesen .


Vielen Dank. Dies ist wahrscheinlich meine bisherige Lieblingsantwort oder zumindest die, die meiner Frage am nächsten kommt (dachte ich). Ich habe Code Complete bereits gelesen, ein großartiges Buch, das mir geholfen hat, viele Hindernisse zu umgehen, bevor ich zu ihnen kam.
Andrew M

@ Andrew W. Beachten Sie, dass einige der Pints, die ich gemacht habe, "Zunge in der Wange" sind . Das Geschwisterpaar dieser Website, stackoverflow.com , ist ein großartiger Ort, um auf flexible und unstrukturierte Weise neue Dinge zu lernen. Es bietet auch eine gute Vorstellung davon, woran Entwickler tatsächlich arbeiten.
Apalala

Wie würden Sie "6. Überspringen Sie Corporate Voodoo (" benutzergesteuerte Architektur von Unternehmenskomponenten "), wenn Sie können. Es führt nirgendwo hin"? Was ist eine benutzergesteuerte Architektur von Unternehmenskomponenten? N-Tier-Entwicklung? Entwurfsmuster, etwas anderes?
Bob

@Bob Die grundlegende Modeerscheinung des Unternehmens besteht seit Jahrzehnten darin, dass eine neue Technologie oder Methodik es Nicht-Programmierern ermöglicht, Arbeitsprogramme zu schreiben. CASE, UML-to-Code und Enterprise Architecture Frameworks. Es kommt immer wieder vor: MDAs sind ihre Computer, erstellen ein Prozessdiagramm und erstellen Software.
Apalala

+1. Ich mag "skip corporate voodoo" und "skip hyped technologies". Sogar super coole Sachen (wie Python) sind immer noch in C & C ++ geschrieben. Hmmm ... ich frage mich, warum das so ist ...
riwalk

35

Wählen Sie eine Haustieranwendung. Dies sollte etwas sein, das sehr einfach beginnen kann, aber eine gewisse Komplexität aufweist, wenn Sie tiefer graben. Es sollte auch etwas sein, das Sie interessiert, weil Sie viel Zeit damit verbringen werden. Stellen Sie auch sicher, dass es etwas tut. Versuchen Sie jetzt nicht, ein Framework oder einen Webservice zu schreiben. Nur eine normale benutzergesteuerte App.

Laden Sie git, mercurial oder bazaar herunter und erfahren Sie, wie Sie mit ihnen ein Repository erstellen (ganz einfach).

Implementieren Sie jetzt Ihr Lieblingsprojekt mit einer beliebigen Technologie, die Sie nach besten Kräften einsetzen. Geben Sie sich eine Frist, damit Sie sicherstellen können, dass alles erledigt wird. Verwenden Sie das von Ihnen vorgenommene Quellcodeverwaltungs-Repository, um Änderungen nachzuverfolgen. Machen Sie sich keine Sorgen über Zweige und ähnliches, stellen Sie nur sicher, dass Sie in der Lage sind, Fehler zu vermeiden.

Wenn Sie Ihre App fertig geschrieben haben, beschriften Sie sie. Das ist deine V1. Holen Michael Feathers' Effektiv arbeiten mit Legacy - Code , Bob Martin Agile Software Development Principles, Patterns und Practices und Clean Code , und Andrew Hunt und David Thomas' The Pragmatische Programmierer . Fühlen Sie sich frei, sie in beliebiger Reihenfolge zu lesen, auch zwischen ihnen herumzuspringen. Viele der Ideen wiederholen sich, aber sie stärken auch Ihr Verständnis, weil sie aus verschiedenen Perspektiven präsentiert werden. (Wahrscheinlich möchten Sie das GoF Design Patterns- Buch als Referenz mitnehmen. )

Versuchen Sie beim Lesen der Bücher, das Gelernte anzuwenden, um Ihr Projekt zu verbessern. Stellen Sie sicher, dass Sie Ihre Quellcodeverwaltung als Journal für die von Ihnen vorgenommenen Änderungen verwenden.

Wenn Sie es richtig gemacht haben, sollten Sie eine Reihe guter Fähigkeiten erlernt haben: Refactoring, testgetriebenes Design, Verbesserung des vorhandenen Codes und wie (und wann) Sie Entwurfsmuster anwenden (unter anderem).

Idealerweise hätten Sie einen Mentor, der Ihnen hilft, Ihre Fortschritte zu messen. Bei Interesse können Sie sich an mich wenden (firstinitiallastname bei kharasoft dot net), und ich helfe Ihnen mit einem Plan und einer Überprüfung.

Herzlichen Glückwunsch zum Ergreifen der Initiative, um Ihre Karriere voranzutreiben! Viele Belohnungen werden davon kommen.


Danke, Mike. Im Moment (in den nächsten paar Monaten) beende ich mein MSc-Softwareprojekt, aber danach gab es eine Reihe von Dingen, an denen ich in meiner Freizeit arbeiten wollte. Eine ist eine einfache Teammotivation-App für Unternehmen, die ich teilweise für eine meiner Klassen entwickelt habe. Es ist etwas, das ich als mein Hauptprojekt auswählen, die Benutzeroberfläche verbessern, einige neue Funktionen hinzufügen, in Dinge wie Parallelität / mehrere Instanzen eintauchen, irgendwann ins Web portieren und so weiter. Vielleicht nehme ich Sie zu gegebener Zeit auf Ihr Angebot an. Und diese Bücher stehen jetzt auf meiner Leseliste.
Andrew M

1
Ich würde auch "Refactoring: Verbessern des Designs von vorhandenem Code" von Martin Fowler & Kent Beck vorschlagen.
Oscar Mederos

1
Das habe ich eigentlich schon, aber noch nicht alles gelesen. Ich besuche häufig die lokale Wohltätigkeitsbuchhandlung neben der Glasgow University (Heimat von Haskell ...), um "die Klassiker" abzuholen. Bisher habe ich Code Complete 2, Refactoring, Transzendierendes CSS, Zen of CSS Design, Javascript, K & R C, GOF sowie ASP.NET-Websiteprogrammierung, Java-Sammlungen, Datenbanksysteme (Connelly / Begg) gefunden. Studentenhandbuch zu Unix, Programmieren von Ruby, Einführung in Func Prog Mit Haskell, UML entmystifiziert, Beginn von Java 2. Ich werde versuchen, sie eines Tages alle zu lesen ... kann sie auch günstig kaufen, wenn ich kann.
Andrew M

28

Sie kennen das Geheimnis eines guten Entwicklers?

Sie wissen nicht alles, aber Sie wissen, was Sie nicht wissen und wo Sie weitere Informationen darüber finden, was Sie nicht wissen, wenn Sie es benötigen.

  • Es ist nicht möglich, alles zu wissen, was Sie im Detail erwähnt haben - zu viel, als dass ein Gehirn damit umgehen könnte.
  • Sich alles zu merken ist nicht möglich - das nicht verwendete Wissen wird aus dem Gedächtnis gelöscht
  • In den meisten praktischen Situationen braucht man sowieso nicht so viel

Der Versuch, das Unmögliche zu erreichen, führt nur zu Angstzuständen, Schlaflosigkeit und zum Verlust des Selbstvertrauens.


Ich habe nicht die Absicht, alles zu wissen, aber im Moment fühle ich mich wie ein Glücksspiel, wenn ein Software-Team mich anstellt. Vielleicht könnte ich alles mitnehmen und bald ein produktives Teammitglied werden, aber vielleicht wäre das Lernen zu viel für mich. Ich mag es nicht, Leute zu bitten, ein Glücksspiel zu machen. Es muss eine Komfortzone geben, die professionelle Entwickler erreichen, in der sie noch nachsehen und neue Tricks lernen müssen, aber im Großen und Ganzen erledigen sie die Dinge. Mit einer Kernkompetenz (von der sie sich vielleicht gar nicht mehr bewusst sind). Dort versuche ich zu sein.
Andrew M

1
@ Andrew, Junior-Programmierer werden voraussichtlich eine Anleitung benötigen. Lernen erfordert praktische Erfahrung ...

Ja, Sie haben wahrscheinlich Recht, aber die Stellenanzeigen sagen das nie. Hoffentlich kann ich sie umgehen und mich direkt mit Teammanagern vernetzen / unterhalten. Aber mit der Möglichkeit, dass ich mit den Fähigkeiten, die ich gerade habe, keinen Job bekommen kann, möchte ich nur verdammt sicher sein, dass ich in einem Jahr nicht dasselbe Problem haben werde.
Andrew M

10

Ich denke, die Antwort wird für jeden Entwickler unterschiedlich sein, je nachdem, worauf er sich spezialisieren möchte. Ich empfehle den folgenden Algorithmus, um eine gute Antwort für sich selbst zu finden:

  1. Wählen Sie ein einfaches Projekt aus, das eine Fertigkeit verwendet, die Sie lernen möchten.

  2. Implementiere es und konzentriere dich auf diese Fertigkeit.

  3. Beachten Sie, was Ihnen an dem Projekt gefällt und was Ihnen nicht gefällt.

  4. Fragen Sie sich, was Sie an dem Projekt interessiert: "Könnte ich mich darauf spezialisieren, dass es mir Spaß macht, oder hängt es mit etwas zusammen, auf das ich mich spezialisieren und das mir Spaß macht?"
    ein. Wenn ja, denken Sie an andere Fähigkeiten, die mit dieser Spezialisierung zusammenhängen, und schreiben Sie sie auf.
    b. Wenn nicht, klopfen Sie sich auf den Rücken, stellen Sie fest, dass Sie gut darin sind, und fahren Sie fort.

  5. Fragen Sie sich, was Ihnen an dem Projekt nicht gefallen hat: "Ist dies etwas, das ich tun sollte (oder wissen möchte, wie es zu tun ist), oder ist dies ein Aspekt der Entwicklung, den ich könnte und möchte? allgemein anderen überlassen? "
    ein. Wenn Sie der Meinung sind, dass Sie wissen möchten oder sollten, wie es geht, fügen Sie es der in Schritt 4a gestarteten Liste hinzu. b. Wenn du denkst, du könntest diesen Aspekt anderen überlassen, melancholisch über deine Grenzen als Mensch seufzen, ihn als Schwäche wahrnehmen und weitermachen.

  6. Wählen Sie aus der Liste der Dinge, auf die Sie sich spezialisieren könnten, und der Dinge, die Sie aus 4a und 5a wissen sollten, eine Fertigkeit aus. Wählen Sie, was Ihrer Meinung nach am wichtigsten ist, um Ihre Programmierung dem näher zu bringen, was Sie möchten.

  7. Brainstorming von einfachen Projekten, die Sie mit dieser Fähigkeit durchführen können. Wählen Sie eine, möglicherweise ein Projekt, mit dem Sie eine andere Fertigkeit üben können, die ebenfalls ganz oben auf der Liste steht, damit Sie zwei Fliegen mit einer Klappe schlagen können (obwohl n / 2 die gleiche Komplexität wie n hat, ist dies dennoch schneller).

  8. Kehren Sie mit diesem Projekt zu Schritt 2 zurück.

Wiederholen Sie diese Schleife für den Rest Ihres Lebens oder bis Sie nicht länger ein guter Programmierer sein möchten (hey, wenn Sie das Programmieren beenden möchten, um hungrige Waisen zu ernähren, werde ich Sie nicht aufhalten!).

Ich habe mich auf Tests und n-Tier-Webanwendungen spezialisiert. Mein nächstes Projekt wird TDD und vielleicht ASP .NET MVC 2 sein. TDD soll meine Teststärke fördern (ich bin ein SDET, daher würde TDD mir nur einen Einblick in das Testen von Einheiten geben, was ich normalerweise nur mache auf meinen Testwerkzeugen) und auch bei einer Schwäche im guten Design zu helfen (hoffe ich), und MVC ist, bei meiner Schwäche im Front-End-Design zu helfen. Meine Liste enthält Dinge wie Leistungstests, Websicherheit und die Zusammenarbeit mit einem Webdesigner, um eine gute (und gut aussehende) Website zu erstellen.

Ein weiterer Rat, den ich schon früh erhalten habe und der sich als sehr nützlich erwiesen hat: Spezialisierungen können entweder umfassend oder tiefgreifend sein. Mit anderen Worten, ein bisschen von allem zu probieren, ist eine Art Spezialisierung. Denken Sie daran, wenn Sie herausfinden möchten, was Ihre Spezialisierung sein soll.

Tut mir leid, wenn Sie etwas Schnittiges wollten. Ich glaube nicht, dass die Frage eine solche Antwort hat.


6

Ich programmiere seit Jahren ein und aus (seit ich 7 war - ich bin jetzt in meinen späten 30ern).

Wenn ich in Ihrer Position wäre, würde ich dringend empfehlen - aber was ich in den meisten anderen Antworten nicht sehe, ist, mindestens einen anderen Programmierer zu finden, mit dem ich ZUSAMMEN an einem definierten Projekt arbeiten kann.

Lesen Sie dabei etwas über Agile Programmierung - SCRUM usw. und arbeiten Sie agil und testgetrieben. Arbeiten Sie zusammen - aber lassen Sie nicht zu, dass einer von Ihnen den größten Teil des Codes schreibt - und arbeiten Sie wirklich als Entwicklerpaar daran.

Und während Sie Ihre eigene Version von allem schreiben, kann dies informativ sein - die allerbesten Entwickler, die ich kenne, sind Meister darin, das Schreiben von Code zu vermeiden, AUSSER für das, was sie unbedingt selbst tun müssen - dh den Kern dessen, was an ihrem Projekt einzigartig ist.

In der restlichen Zeit wird der Code weitgehend wiederverwendet. Rufen Sie APIs auf, verwenden Sie Open Source-Projekte (sofern zutreffend) und vermeiden Sie es, das Rad (oder die Datenzugriffsschichten usw.) nur zu diesem Zweck neu zu erfinden.

Dabei werden sie - insbesondere bei Open Source-Projekten - auch einen Beitrag zu diesen Projekten leisten - den Code lesen, bereinigen, Fehler beheben, Erweiterungen beisteuern usw.

Bei der Entwicklung in der realen Welt geht es normalerweise darum, als Teil eines Teams zu arbeiten. Deshalb möchte ich Sie ausdrücklich dazu ermutigen, dies zu tun. Wenn Sie keine anderen Programmierer kennen, die mit Ihnen an einem bestimmten Projekt arbeiten möchten, empfehlen wir Ihnen, einen Blick auf die 1000 Open Source-Projekte zu werfen und eines oder mehrere auszuwählen, an denen Sie sich aktiv beteiligen können kratzen Sie ein persönliches "Jucken" - und sehr wahrscheinlich werden Sie ein Projekt finden, an dem Sie mitwirken können, und andere Entwickler finden, mit denen Sie arbeiten können.

Und persönlich würde ich den Rat, dass Ihre Einstellung "Überspringen, was ich kann", eine schlechte ist - wenn ich Entwickler anstelle, möchte ich Entwickler, die nicht versuchen, alles selbst zu tun. Ich bevorzuge Entwickler, deren erster Instinkt es nicht ist, es selbst zu schreiben, sondern Entwickler, deren erster Instinkt es ist, zu sehen, wie sie die Geschäftsanforderungen und -anforderungen erfüllen können, ohne Code zu schreiben (und dann den minimal benötigten Code zu schreiben).

Während Sie gleichzeitig die Geschäftsanforderungen testen und im Auge behalten - und ja, manchmal zeigt sich, dass Sie tatsächlich Code neu schreiben oder ihn selbst schreiben müssen (manchmal können Sie dies dann zur Verbesserung eines Projekts beitragen).


+1 Gute Idee - Erfahrung im Umgang mit anderen Menschen ist sehr wichtig.
Michael K

+1 Sie müssen ein gutes Team leiten, das aus unerfindlichen Gründen sehr selten vorkommt, um einen Entwickler sagen zu hören - prüfen Sie zuerst, ob Code erforderlich ist. Auch für die Teamprogrammierung unerlässlich.
Orbling

Vielen Dank, Shannon. Ich bin ein wenig überrascht, dass mehr Menschen der Idee, bestimmte unwesentliche Dinge zu überspringen, nicht zustimmten. Tatsächlich denke ich, dass ich im Moment zu viel Purist / Perfektionist bin und immer versuche, Dinge auf die beste Art und Weise zu lernen. Manchmal beneide ich Leute, die einfach nur stecken bleiben und sich nicht darum kümmern, ob sie ein Dutzend oder so am besten auslöschen Praktiken oder nur teilweise verstehen, was ihr System funktioniert. Und natürlich bin ich alle dafür, Open-Source-Bibliotheken zu nutzen, wann immer ich kann.
Andrew M

5

Es ist einfach eine Frage des Lesens und Lernens, wenn Sie es brauchen.

Wenn Sie irgendwo hängen bleiben oder das Gefühl haben, dass "meiner Lösung etwas fehlt" - dann sollten Sie sich etwas Zeit nehmen, um mehr darüber zu erfahren!


Ich habe immer das Gefühl. Gute Antwort.
JeffO

5

Der Versuch, Teile zum Überspringen zu finden, ist nicht die beste Einstellung.

Abgesehen davon können Sie sich auf bestimmte Bereiche konzentrieren, sobald Sie eine Vorstellung davon haben, welche Teile des Seins ein Entwickler sind, den Sie bevorzugen.

Vielleicht bleiben Sie bei der Webentwicklung, zum Nachteil von Windows Dev zum Beispiel.

Ich mag es, ein Alleskönner zu sein, weil es mich nützlicher macht.


3

In einem Jahr werden Sie wahrscheinlich nicht "ein paar gute Apps / Websites / Webapps" fertig haben, besonders in einer steilen Lernkurve. Das einzige, was Sie lernen werden, ist Burnout.

Konzentrieren Sie sich stattdessen auf eine, die Sie interessiert, und verwenden Sie diese als Ihr Lernwerkzeug. Sorgen Sie sich nicht um die Qualität der Produktion (das wird es nicht sein), sondern verwenden Sie sie als Sandbox, zu der Sie immer wieder zurückkehren können.

Zum Beispiel interessiere ich mich für Fantasy-Baseball. Im Laufe der Jahre habe ich viele Dinge entwickelt, die damit zu tun haben, angefangen von einem Bildschirm-Scraping-Roboter über eine reine HTML-Website bis hin zu einer vollständigen Web-App mit einer skalierbaren SQL Server-Datenbank, die ... Mein nächstes Lieblingsprojekt könnte eine Echtzeit-Silverlight-App sein, mit der die Jungs sich an einen virtuellen Tisch setzen können, um den Entwurf zu erstellen.

Keines dieser Dinge ist außerhalb meiner Welt so nützlich. Jeder von ihnen hat mir jedoch geholfen, ein besserer Programmierer zu werden und Technologien außerhalb meiner Komfortzone zu erlernen.


3

Machen Sie sich keine Gedanken darüber, in welcher Sprache Sie mit dem Programmieren beginnen sollen.
Wählen Sie einfach eine Sprache und fahren Sie fort.
Verbringen Sie Ihre Zeit damit, die Details der API zu lernen.

Hier ist der Grund:

Was ist besser, XUL, Eclipse's SWT oder wxWindows? Ich weiß es nicht. Das sind alles so riesige Welten, dass ich sie nicht wirklich einschätzen und erzählen konnte. Es reicht nicht aus, die Tutorials zu lesen. Sie müssen ein oder zwei Jahre lang mit dem Ding schwitzen und bluten, bevor Sie wirklich wissen, dass es gut genug ist oder erkennen, dass Sie Ihre Benutzeroberfläche nicht wie echtes Essen schmecken lassen können, egal wie sehr Sie es versuchen.

Joel Spolsky, "Lord Palmerston über Programmierung" http://www.joelonsoftware.com/articles/LordPalmerston.html


3

Ich würde mir nicht allzu viele Sorgen um das "sollte-das-schon-wissen" -Syndrom machen. In dieser Branche lernt man immer etwas Neues. Ein- oder zweimal im Jahr sendet mir mein Chef einen Link zu einem Dokument mit 200 bis 300 Seiten für ein Kommunikationsprotokoll oder eine integrierte Schaltung oder so etwas und beauftragt mich, der Resident Expert für dessen Inhalt zu werden. Niemand erwartet von Ihnen, dass Sie zu einem Punkt kommen, an dem Sie mit dem Lernen "fertig" sind.

Wenn es um den Entwicklungsprozess geht, nehmen Sie das einfach so, wie es kommt. Sie werden nicht wirklich wissen, was am nützlichsten ist, bis Sie es ein oder zweimal falsch machen. Bewerten Sie Ihre Leistung und verbessern Sie sie beim nächsten Mal.

Zum Beispiel hatte ich letztes Jahr viele Probleme mit der Build-Instabilität. Ich hatte Angst vor einem Update aus der Quellcodeverwaltung, weil es mir so vorkam, als würde ich einen halben Tag damit verbringen, alles erneut zu kompilieren. Wenn ich jedoch zu lange zwischen den Aktualisierungen gewartet hätte, wäre die Zusammenführung am Ende fürchterlich. Ich habe auch gelegentlich dringende Fehler, bei denen ich die Aktualisierung nicht verschieben kann und die es schwierig machten, Teiländerungen zu verfolgen, die ich bereits für neue Funktionen vorgenommen hatte.

Nun, meine Firma arbeitet daran, das im Allgemeinen zu korrigieren, aber ich brauchte etwas, das ich in der Zwischenzeit für mich selbst verwenden konnte. Ich habe einige Untersuchungen zur Build-Stabilität durchgeführt, die verteilte Versionskontrolle entdeckt, mit einigen Verzweigungsmodellen experimentiert und habe jetzt ein sehr funktionsfähiges Hybridsystem, das lokal mehrere Basarzweige und die zentralisierte Quellcodeverwaltung meines Unternehmens verwendet, wenn ich sie freigeben muss.

Mein Punkt ist, wenn Sie mich vor zwei Jahren gefragt hätten, was ich als nächstes über Software-Tools und -Prozesse erfahren soll, hätte ich es Ihnen nicht sagen können. Wenn Sie keine ähnliche Arbeitsumgebung haben wie ich, ist eine hybride Quellcodeverwaltung nur eine zusätzliche Komplexität, die keinen nennenswerten Nutzen bringt. Sie hat jedoch meine persönliche Produktivität und meine geistige Gesundheit enorm verbessert.

Als nächstes arbeite ich an meinen Schätzfähigkeiten, aber ich habe keine Ahnung, was danach kommt, und ich weiß mit Sicherheit nicht, was ein Fremder im Internet in einem Jahr am nützlichsten finden wird. Das können nur Sie beantworten.


2

Ich möchte hier zwei Punkte teilen:

  1. Algorithmisches Denken würde immer helfen. Als ich anfing, habe ich immer über reale Szenarien und aktuelle Algorithmen nachgedacht und immer versucht, sie zu optimieren.
  2. Niemals aufhören, neue Dinge / Technologien zu lernen und zu verstehen. In Computern gibt es nichts Vergleichbares GURU. Sie müssen immer weiter lernen und diese Tatsache im Voraus akzeptieren und weiter lernen.

2

Es ist egal, was du tust, solange du dabei bleibst und lernst, es gut zu machen .

Alle Ideen, die Sie veröffentlicht haben, sind gut zu wissen und werden Ihnen helfen. Welches interessiert dich am meisten? Sie haben erwähnt, dass Ihre Unix-Kenntnisse schwach sind. Haben Sie darüber nachgedacht, Linux auf Ihrem Computer zu installieren? Die Kenntnis von C würde bereits helfen, da Sie sich beim Programmieren von Unix-Systemen die Füße nass machen könnten, ohne den zusätzlichen Stress zu haben, eine neue Sprache zu lernen. Dies könnte auch eine Gelegenheit sein, sich über Gerätetreiber zu informieren, falls dies Sie interessiert.

Ich würde Ihnen wärmstens empfehlen, irgendwann in Ihrer Entwicklerausbildung die Montage- und Funktionsprinzipien zu erlernen. Beides hat sich für mich in meiner "normalen" Rolle als Java-Programmierer als äußerst nützlich erwiesen. Ich habe Lisp und Prolog gelernt. Persönlich bevorzuge ich Lisp, aber das ist Ansichtssache. Assembly lehrt Sie, darüber nachzudenken, wie der Computer Ihr Programm sieht, und ich denke, das ist wichtig, damit jeder Programmierer lernt. Die funktionale Programmierung lehrt Sie, deterministischer zu denken, was mir in meinem Fall geholfen hat, prüfbareren Code zu schreiben, und das ist threadsicher.

Suchen Sie sich also etwas aus, das Ihnen gefällt, und verbringen Sie ein paar Monate damit. Sie werden der Bessere sein und es könnte sich als Sprungbrett für das nächste Projekt in Ihrer Selbsterziehung erweisen. Oh ja, und was auch immer Sie tun, hören Sie nicht auf zu lernen. Sobald Sie dies tun, fangen Sie an zu stagnieren.


Eigentlich habe ich einen alten Computer bekommen, nur um Unix / Linux auszuprobieren. Es stellte sich heraus, dass Ubuntu bereits darauf war, aber ich hatte einige gute ... "Spaß" ... daran, eine xorg.conf-Datei oder etwas anderes zu bearbeiten, um die Grafikkarte zum Laufen zu bringen. Ich sagte es mir selbst, nur solche Dinge zu tun, erweitert dein Wissen. Aber es ist auch zeitaufwändig und ich möchte bis zum nächsten Jahr ein brauchbarer Bewerber für die allgemeine Software- / Webentwicklung sein. Ich versuche nicht, einen Job bei Google zu bekommen, nur um für Arbeitgeber eine sichere Sache zu sein. Und ich bin nicht mehr 17, ich bin 25 ... Ich möchte wirklich Prioritäten setzen und meine Karriere so schnell wie möglich voranbringen.
Andrew M

Und vielen Dank für Ihren Rat. Sie haben mich gefragt, was mich am meisten interessiert - wohl Web-Apps und Webdesign. Nach meinen eigenen Fähigkeiten zu urteilen, macht meine Nische wahrscheinlich etwas, bei dem Ästhetik wichtig ist und die technischen Aspekte nicht zu hart sind. Den Web-Designern, die WYSIWYG-Tools verwenden, könnte meine Programmierung einen Wettbewerbsvorteil verschaffen, während den erfahrenen Programmierern manchmal ein Hauch von Sinn für Design / Stil fehlt, der mir nicht allzu übel ist.
Andrew M

0

Hören Sie auf, in einem Jahr zu lernen, ein anständiger Entwickler zu sein. Lerne in 10 Jahren, ein guter Entwickler zu sein.

Aus dem verlinkten Artikel:

Der Schlüssel liegt in der überlegten Praxis: nicht nur immer wieder zu tun, sondern sich selbst mit einer Aufgabe herauszufordern, die über Ihre derzeitigen Fähigkeiten hinausgeht, es zu versuchen, Ihre Leistung während und nach dem Ausführen zu analysieren und Fehler zu korrigieren. Dann wiederhole. Und noch einmal wiederholen. Es scheint keine wirklichen Abkürzungen zu geben: Sogar Mozart, der im Alter von 4 Jahren ein musikalisches Wunderkind war, brauchte noch 13 Jahre, bis er begann, Weltklasse-Musik zu produzieren.

In einem Jahr werden Sie immer noch ein Glücksspiel sein. Daran können Sie nichts ändern. Gute Unternehmen betrachten Junioren als Investition. Was sie suchen, ist keine gute aktuelle Fähigkeit, sondern potenzielle Fähigkeit, ein gutes Verständnis der Grundlagen und Begeisterung. Sie müssen diese Eigenschaften in einem Interview vermitteln, um einen Einstiegsjob zu bekommen.

Wie viel programmierst du in deiner Freizeit? Dies ist wahrscheinlich der Schlüsselfaktor, um einen potenziellen Arbeitgeber davon zu überzeugen, dass Sie sich schnell verbessern werden. Welche Projekte haben Sie abgeschlossen ? Abgeschlossene Projekte zeigen Engagement.

Ich war nur bei 2 verschiedenen Unternehmen beschäftigt, aber jedes hatte seine eigene interne Technologie, die ich lernen musste, bevor ich produktiv sein konnte. Diese anfängliche Beule wird nicht viel mit der Erfahrung, die Sie haben, verringern. Gute Arbeitgeber erwarten eine erste Lernphase.

Hör auf, dir Sorgen zu machen und mach dich ans Programm. : D


1
Norvig sprach jedoch von "Exzellenz" als Elite-Programmierer. Ich spreche nur von Kompetenz und verbringe keine Zeit (in diesem Jahr) mit Dingen, die Arbeitgebern nicht viel bedeuten. Vielen Dank für Ihren Rat. Ich werde mich bemühen, weitere Projekte zu realisieren, was auch immer ich tue. Apropos ... Ich muss ein paar GAE-Handler schreiben.
Andrew M

@ Andrew M, 'Die größte Gefahr für die meisten von uns besteht darin, unser Ziel nicht zu hoch zu setzen und zu kurz zu kommen. aber unser Ziel zu niedrig zu setzen und unsere Marke zu erreichen. Michelangelo. Ziel ist es, ein Elite-Programmierer zu sein, kein guter.
Dominique McDonnell

0

Ich möchte Ihnen nur meine Schritte zu inspirierenden Lesungen und meine wichtigsten Momente bis jetzt geben.

Es gab einige "WOW" -Momente in meiner Software-Karriere. Sie gingen wie folgt vor:

Head First Design Patterns - Dies hat mir wirklich die Welt von OOP / OOD eröffnet, ein absolutes Muss.

Robert C. Martin - Clean Code - Ich habe tagelang nicht geschlafen, vor Aufregung! So einfach es ist, Junge, hatte ich vergessen, was es bedeutete, sauberen Code zu haben, und das brachte mich gleich wieder auf die Strecke.

Robert C. Martin - Agile Muster und Praktiken - Ich lebe jetzt meine Karriere als Programmierer basierend auf diesen Prinzipien. Das Wort SOLID geht mir für jeden einzelnen Code durch den Kopf. Dies in Kombination mit Clean Code hat mich so sehr beeindruckt, dass ich meinen damaligen Arbeitgeber davon überzeugt habe, es dem gesamten Unternehmen von rund 15 Entwicklern beibringen zu lassen. Ich war nicht einmal ein Senior, gut in Präsentationen, aber meine Begeisterung machte es möglich.

Mein letzter "WOW" Moment war die Entdeckung von TDD. Ich teilte meine Erkenntnis mit 2 anderen engen Freunden, die ebenfalls den gleichen "WOW" -Effekt hatten. Wir waren alle begeistert und üben jetzt so viel wie möglich und diskutieren immer, wie wichtig es ist, im Software Development Life Cycle zu testen.

Ein letzter Punkt von mir, der mir sehr am Herzen liegt, ist, dass Sie, wenn Sie jemals ein grundlegendes Verständnis für eine Technologie wie einen Skript-Parser, eine REST-Bibliothek, ein Test-Framework usw. haben möchten, eines schreiben! Nur zum Spaß! Sie werden es nicht nur genießen, aber ich habe festgestellt, dass der Versuch, die Dinge zu schreiben, die ich noch nicht vollständig verstehe, mir viel mehr Respekt und ein viel tieferes Verständnis dafür gibt und mich dazu zwingt, es gründlich zu verstehen.

Entschuldigung, mir ist gerade aufgefallen, wie sehr ich von der Frage abgewichen bin. Was ich oben erwähnt habe, war mein absoluter Kern. Keines der oben genannten Materialien hat mich verlassen und mir ein so starkes abstraktes Denken vermittelt, dass das Lernen in der Tat umfassender und einfacher geworden ist. Versuchen Sie daher, bei der Beantwortung Ihrer Frage die Kernprinzipien des Codeschreibens und des Softwaredesigns nicht zu überspringen. Andere spezifische Tools zur Lösung spezifischer Probleme sind nicht so wichtig.


0

Lernen und Anhäufen von Wissen ist wie das Bauen eines Gebäudes, jeder Baustein liegt auf einem anderen, sie verlassen sich auf ihre Fundamente.

Wenn Sie anfangen, Dinge zu überspringen, stürzen Sie sich durch, und Sie erhalten wackelige Fakten, die von der Luft unterstützt werden. Du wagst es nicht, sie zu benutzen, aus Angst, sie könnten durchfallen, und sie würden es tun. Tatsachen können falsch sein, wenn sie nicht mit der Vernunft verbunden sind, da Sie ihre Grenzen kennen müssen.

Ich mache mir besonders Sorgen, dass Sie die Grundlagen, die Mathematik, die Algorithmen und ihre Verwandten überspringen möchten. Ohne ein sicheres Verständnis werden Sie nie in der Lage sein, "etwas anderes als die grundlegendsten verschachtelten Schleifen" auszuführen .

Seien Sie nicht in Eile, die Arbeit ist für immer da, die Zeit für ununterbrochenes Lernen ist es nicht. Erfahren Sie alles, was Sie können, und lassen Sie in der Reihenfolge, in der Sie es benötigen, keine Lücke offen.


0

Wie Jeff O vorschlägt, hört man nie auf zu lernen, wenn man ein guter Programmierer sein will.

Man muss sich darüber im Klaren sein, dass es so viel zu lernen gibt, das nur mit dem Programmieren zu tun hat. Wenn man alles wissen und gut darin sein möchte, würde man Millionen von Jahren dort sein. Konzentrieren Sie sich also nur darauf, was Ihr Leben gut machen wird. Egal, ob es sich um puren Genuss, Geld, wissenschaftliche Bemühungen oder eine Mischung aus verschiedenen Gründen handelt, Sie haben die Wahl, in was Sie Ihre Zeit und Ihren Schlaf investieren sollen.

Fragen Sie sich genau, was ein anständiger Entwickler ist, und machen Sie genau das: Üben Sie Ihre Kunst an realen Projekten, bei denen Sie vergessen, wie spät es ist.

Als anständiger Entwickler verstehe ich unter anderem, wie man gute Anforderungen erhält und schreibt, wie man ein Projekt verwaltet, wie man testet, wie man Ergebnisse präsentiert, wie man beurteilt, wer mir helfen kann und wer nicht (rekrutiert), wie man Verbünde dich mit anderen, um den Chef und den Kunden zufrieden zu stellen.

Auf technischer Ebene bedeutet für mich, ein guter Entwickler zu sein, in der Lage zu sein, nützliche Benutzerhandbücher zu entwerfen, zu überprüfen, zu codieren, zu debuggen, zu testen, zu schreiben, den Code für andere Entwickler sinnvoll zu kommentieren, Versionen zu verwalten, zu simulieren und immer eine zu finden Lösung zur täglichen Verbesserung der Produktivität und zur Automatisierung von Aufgaben (Test, Debugging, Datenanalyse für Lastprognosen oder was auch immer). Es bedeutet, in der Lage zu sein, schnellen und schmutzigen Code zu erstellen, wenn dies erforderlich oder gerechtfertigt ist, aber auch sauberen und gut durchdachten Code zu erstellen.

All das wird nicht durch Lernen erlangt, sondern durch Lernen zu einem Zweck, um ein Bedürfnis zu lösen, das Sie dort und dann haben. Lernen ist gut, um eine solide Basis zu schaffen, aber Lernen für einen bestimmten Zweck ist gut, um ihn zu verwirklichen.

Ein guter Entwickler ist am Ende derjenige, der in der Lage ist, die für die jeweilige Aufgabe erforderlichen Informationen zu erfassen.


0

Es sieht so aus, als ob Sie überall sind. Ich denke, die Leute lernen am meisten, wenn sie sich auf einen bestimmten Bereich konzentrieren und sich wirklich darauf konzentrieren, denn wenn Sie dies tun, werden Sie ausnahmslos auf bestimmte Probleme stoßen, die das Erlernen eines anderen Tools erfordern. Auf diese Weise können Sie Ihre Fähigkeiten organisch und in enger Verbindung erweitern, sodass Sie nicht das erworbene Wissen verlieren, da Sie mit jeder neuen Idee oder jedem neuen Werkzeug, das in Ihre mentale Toolbox aufgenommen wird, andere leichter erlernen können.


-1

Suchen Sie sich ein gutes Open Source-Projekt aus, das Sie interessiert, und lernen Sie den Code kennen, und bringen Sie Fehlerbehebungen und neue Funktionen ein. Das sollte jeder Programmierer tun.

Starten Sie jetzt ein Projekt. Sie können nur lernen, Lösungen für ein echtes Problem zu finden. Wenn Sie nichts bauen, haben Sie noch kein Problem zu lösen.

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.