Wie komme ich von der Fähigkeit, Code zu schreiben, zu einem guten Entwickler?

10

Ich bin frustriert über das Fehlen konkreter Erklärungen, wie man von der Fähigkeit zum Schreiben (bash, awk) und Schreiben einfacher Anwendungen (c, php, python) zum Entwerfen und Entwickeln größerer, komplizierterer Software übergeht. Es scheint, dass es auf der einen Seite Programmiersprachenbücher gibt und auf der anderen Seite die Software-Engineering- / Projektmanagement-Bücher, die für Programmierteams entwickelt wurden.

Ich habe viel von beidem gelesen. Ich habe die XP / Agile-Klassiker gelesen und habe ein gutes theoretisches Verständnis des Softwareentwicklungsprozesses. Ich lese gerne den Code anderer Leute und kann ihm ziemlich gut folgen. Aber wenn ich eine Idee für ein Projekt habe oder von "Hier ist das Problem / Bedürfnis" zu "Hier ist die Lösung" wechseln möchte, zieht mein Verstand eine Lücke und ich weiß nicht, wo ich anfangen soll.

Hacke ich es einfach raus? Gibt es strukturierte Workflows für einzelne Entwickler, die nicht in Teams oder für ein großes Softwarehaus arbeiten? Ich habe wirklich keine Lust, einen PMP zu bekommen oder für ein Softwareunternehmen zu arbeiten. Ich bin nur auf der Suche nach einem effektiven, effizienten und praktischen Workflow.

Thomas Owens
quelle
2
Erfahrung ist ein guter Lehrer.
Bernard
Ist größere, kompliziertere Software nicht nur eine Sammlung einfacher, unkomplizierterer Software?
Rig
5
"Weil das Wichtigste an der Kunst das Arbeiten ist. Nichts anderes ist wichtig, als sich jeden Tag hinzusetzen und es zu versuchen." - Steven Pressfield
Ryan Kinal
Genauso wie Sie zur Carnegie Hall gelangen ...
Michael Brown
1
Genauso wie Sie zur Carnegie Hall kommen - Üben Sie!
Martin Beckett

Antworten:

11

Meiner Meinung nach werden Sie ein guter Entwickler, indem Sie Erfahrung haben und mit verschiedenen Methoden arbeiten. Sie haben angegeben, dass Sie ein Problem haben, das von "Hier ist meine Idee" zu "Hier ist meine Lösung" wechselt. Das ist mehr für Softwareentwicklungsmethoden als auch für erfahrene Entwickler.

Die Verwendung einer Softwareentwicklungsmethode ist mehr als "nur das Hacken von Code". Diese Methoden bieten strukturierte Workflows. Dort bietet die Agile-Familie eine gute Struktur für kleinere Entwicklungsteams (oder Einzelpersonen), die Sie befolgen können, um von der Phase "Idee" zur Phase "Fertigprodukt" zu gelangen.

Es gibt einige Dinge, die ich im Laufe der Jahre von anderen und durch die Arbeit an verschiedenen Projekten gelernt habe, wie zum Beispiel:

  • Machen Sie alles testbar, dies wird Ihr Leben viel einfacher machen;
  • Sie können nicht erwarten, ein perfektes Design zu haben und in der Lage zu sein, Unternehmensanwendungen / den nächstgrößeren Spieletitel / mehr hier einzufügen, ohne Erfahrung darin zu haben;
  • Es ist schwierig, gute Software zu entwickeln, wenn Sie keine Erfahrung damit haben und von anderen gelernt haben.
  • Sie werden selbst als erfahrener Entwickler niemals das erste Mal ein perfektes Design haben - die Dinge ändern sich und daher; Ihr Design könnte auch;
  • Schreiben Sie Dinge auf: Schreiben / Zeichnen / Whiteboarding / Malen / Was auch immer Sie sich wohl fühlen, es macht das Leben einfacher, wenn Sie Dinge aufschreiben lassen. Wie GUI-Designs, Klassendiagramme usw. Nach meiner Erfahrung kann es katastrophal scheitern, wenn man nur "etwas zusammen hackt".
  • Erfinde das Rad nicht neu, du solltest es nicht müssen. Wenn Sie versuchen, Ihre eigene HashMap zu implementieren, machen Sie wahrscheinlich etwas falsch. Erforschen Sie Dinge und denken Sie nach, bevor Sie Code schreiben.

Hoffe, etwas davon hilft.

Deko
quelle
Vielleicht ist es ein Symptom des digitalen Zeitalters, dass ich versuche, ohne Bleistift und Papier auszukommen. Ich erinnere mich, Mind-Maps und ähnliches gemacht zu haben. Guter Rat.
Ich bin damit einverstanden, Dinge aufzuschreiben. Ich habe gute Erfahrung in sehr kleinen und großen Teams, und als erstes würde ich die grundlegenden Anforderungen an die Software / das Modul auflisten. Was tut es? Lernen Sie die Prinzipien des Software-Designs kennen, nach denen Sie im Wesentlichen suchen - es muss am Anfang nicht stark strukturiert sein, sondern nur einige Organisationsnotizen, mit denen Sie die Richtung fokussieren können, ohne auf Sprachen oder Technologien Bezug zu nehmen. Wenn Sie eine klare Richtung haben, überlegen Sie, wie Sie diese implementieren können.
Ich glaube nicht, dass man wirklich etwas ohne einen Notizblock entwerfen kann, sei es Bleistift und Papier oder ein Whiteboard. Ich behalte auch alle Iterationen des Projektdesigns bei, weil Sie nie wissen, wann diese großartige Idee, die Sie verschrotten mussten, plötzlich realisierbar sein wird.
TMN
Ich bin eine sehr visuelle Person, daher helfen mir Bilder immer, die Dinge zu verstehen und zu klären :-)
Deco
5

Nun, meiner Meinung nach ist, wie in jedem Beruf, alles, was man braucht - neben der theoretischen Ausbildung - Erfahrung , um ein guter Profi zu sein .

Da ein Arzt nicht nur mit den Klassen in der Medizinschule gut umgehen kann oder ein Anwalt nicht die gesamte politische Seite einer Attourney mit nur seinem Abschluss kennen kann, braucht es Erfahrung und Zeit, um ein guter Entwickler zu sein.

Erfahrung kommt nicht durch das Lesen von Code von Drittanbietern. Wenn Sie einen Medizinstudenten bekommen, kann er / sie auf viele Verfahren, Krankheiten, Medikamente usw. hinweisen, aber die tatsächliche Anwendung dieser Dinge (wann ein Verfahren anzuwenden ist, welche Krankheit zu diagnostizieren usw.) kommt nur mit Aufsicht und Erfahrung.

Da Sie nicht für ein großes Unternehmen (oder ein anderes Unternehmen) arbeiten möchten, empfehle ich Ihnen, zunächst schrittweise kleine Anwendungen zu entwickeln. Die Entwicklung von Software selbst nimmt viel Zeit in Anspruch, glauben Sie mir.

Eine andere Sache, die ich Ihnen vorschlage, um ein guter Softwareentwickler / -ingenieur zu werden, ist, zu Open Source-Software beizutragen. Viele Leute haben eine Menge Geld (und Erfahrung, übrigens) verdient, indem sie bei der Entwicklung von Open-Source-Software geholfen und anschließend Beratungen durchgeführt haben. Sie haben sich mit ihren Beiträgen zu Open Source einen Namen gemacht.

Wie auch immer, ich denke, es gibt keine Abkürzung, um Erfahrungen zu sammeln, und sie muss mit Disziplin und Geduld verfolgt werden .

EdMelo
quelle
Das ist eine gute Analogie. Das Lesen des Codes anderer Leute hat meinem Stil geholfen , aber Sie haben Recht, es gibt mir keine wirkliche Erfahrung. Jemand anderes schlug vor, den OSS-Weg zu gehen. Ich denke, ich werde das untersuchen.
4

Sie können beginnen, indem Sie den Code anderer Personen verbessern. Nehmen Sie ein Projekt, das Sie haben, und fügen Sie ihm eine Funktion hinzu. Sie müssen entscheiden, was die Funktion tun soll und wie sie es tun soll. Entwerfen Sie Ihre Lösung im Rahmen des vorhandenen Codes.

Und hab keine Angst, Sachen rauszuhacken. Viele neue Entwicklungen werden durchgeführt, indem schnelle und schmutzige Prototypen verfeinert (oder vorzugsweise neu geschrieben) werden. Gehen Sie voran und verwenden Sie jede schlechteste Übung und Antipattern in dem Buch, drehen Sie einfach etwas heraus, das tut, was Sie wollen. Dann gehen Sie zurück und entwerfen Sie es richtig. Normalerweise denke ich: "Weißt du, ein besserer Weg, dies zu tun, wäre ...", während ich einige Konfigurationsparameter in meiner 800-Zeilen-Monstrosität mit drei Prozeduren hart codiere.

Ich weiß, dass es derzeit nicht in Mode ist, aber die Techniken der strukturierten Analyse haben mir wirklich geholfen, das Software-Design in den Griff zu bekommen. Spielen Sie mit der Erstellung einiger Blasendiagramme und DFDs, um ein Gefühl für die Zerlegung von Problemen zu bekommen und verschiedene Teile eines Systems für die Zusammenarbeit zu entwerfen.

TMN
quelle
2

Wie andere gesagt haben, kommt Erfahrung aus dem Schreiben von Code. Wenn möglich, sollten Sie auch Ihren Code von einer anderen Person überprüfen lassen. Ein erfahrener Programmierer kann auf Probleme in Ihrem Code hinweisen und Ihnen bessere Methoden zeigen. Wenn Sie zu einem Open-Source-Projekt beitragen, haben Sie die Möglichkeit, beides zu tun.

Jonathan
quelle
1

Für mich hilft es, ein größeres Stück Software in kleinere Teile zu zerlegen. Und dann brechen Sie diese Stücke in noch kleinere Teile und so weiter. Jedes Softwareprogramm ist eine Sammlung kleiner logischer Elemente.

Stellen Sie sich zum Beispiel einen Blog vor. Sie möchten in der Lage sein, Beiträge zu erstellen und zu bearbeiten, die andere lesen können. Sie können das Projekt sofort in Administrator- und öffentliche Bereiche aufteilen. Der Administrator benötigt mindestens Administratorbenutzer, eine Anmeldeseite und einen Abschnitt zum Verwalten des Blogs. Der Abschnitt zum Verwalten des Blogs kann in eine CRUD-Oberfläche (Erstellen, Lesen, Aktualisieren, Löschen) unterteilt werden. Das Erstellen eines neuen Blogposts erfordert eine Überprüfung, um sicherzustellen, dass der Administrator über die richtigen Berechtigungen, ein Formular, eine Formularüberprüfung und die Möglichkeit zum Speichern in der Datenbank verfügt. Und so weiter.

Je mehr Sie ein Problem oder eine Funktion auflösen, desto überschaubarer wird es. Es ist teilen und erobern. Sobald Sie in der Lage waren, Ihre Software so abzubilden, können Sie sich ansehen, wie verschiedene Teile davon miteinander interagieren. Wo könnten Sie Code wiederholen? Was kann abstrahiert werden? Dies sollte ein iterativer Prozess sein, sowohl beim Planen als auch beim Schreiben des Codes.

Ich würde empfehlen, herauszufinden, was Ihr Mindestfeaturesatz ist, und dies zu implementieren, bevor Sie andere Teile hinzufügen. Sie möchten defensiv codieren, damit zukünftige Änderungen nicht zu schwierig werden. Gleichzeitig möchten Sie jedoch keine halben Funktionen implementieren, die möglicherweise nie abgeschlossen werden. Es ist eine schwierige Grenze zwischen Flexibilität und der Bereitschaft, Ihre Lieblinge rücksichtslos zu töten und eine literarische Referenz auszuleihen. In diesem Balanceakt gut zu werden, kommt nur aus Erfahrung.

Und darauf kommt es an, wie die anderen Antworten bereits erwähnt haben: Erfahrung. Der einzige Weg, um es zu bekommen, ist einfach zu beginnen. Mach dir nicht so viele Sorgen, dass es von Anfang an perfekt wird. Lassen Sie den Code zuerst funktionieren, machen Sie ihn dann schön und dann schnell.

Im Gegensatz zu diesem Absatz sollten Sie die Sicherheit am Ende nicht nachträglich in Angriff nehmen. Sie sollten eine Vorstellung davon haben, wie Ihre Software kompromittiert werden könnte, aber zunächst einmal sollten Sie keiner Benutzereingabe vertrauen.

VirtuosiMedia
quelle
0

Ich weiß, dass Sie sagen, Sie möchten nicht für ein Softwareunternehmen arbeiten, aber das ist ein guter Ort, um die Erfahrung zu sammeln, über die viele der anderen Antworten sprechen. Und ob Sie an großen Projekten arbeiten möchten oder nicht, es ist gut, sich mit der Arbeit und dem Arbeitsstil anderer Menschen vertraut zu machen.

Sie können die Paarprogrammierung beispielsweise nicht selbst ausprobieren. Und wenn Sie mit jemandem zusammenarbeiten, der klüger ist als Sie, erhalten Sie den zusätzlichen Vorteil, dass Sie bessere Praktiken von ihm erhalten und gleichzeitig Erfahrung mit dieser Methodik sammeln.

Übrigens habe ich es mir zur Praxis gemacht, mit Gruppen zu arbeiten, in denen ich das Gefühl habe, in Bezug auf Erfahrung, Fähigkeiten und dergleichen unter dem Durchschnitt zu liegen. Es erhöht mein Spiel enorm. Es ist viel schwieriger, das alleine zu machen oder wo du der "erfahrene" Typ bist.

DaveE
quelle
0

Was Sie suchen , sind Fähigkeiten zur Problemlösung . Mir ist aufgefallen, dass davon ausgegangen wird, dass der Entwickler dies bereits kann, was albern ist. Glücklicherweise ist das Lösen von Problemen eine allgemeine Fähigkeit, die in Mathematik, Forschung, Alltag usw. verwendet wird.

In erster Linie sollten Sie die wissenschaftliche Methode mit einigem Schnickschnack befolgen.

  1. Sie haben ein Problem (verwenden Sie Tools und Techniken, um dies zu definieren).
  2. Sie nehmen eine Lösung an (Muster und Erfahrungshilfe)
  3. Testhypothese (möglicherweise haben Sie hier nicht einmal Code)
  4. Wiederholen Sie die Schritte 2 und 3, bis die Hypothese zutrifft. Sie haben jetzt eine Theorie (Arbeitsprogramm zur Lösung des Problems)
  5. Entwickeln Sie ein Experiment zur Stresstheorie, um nach Löchern zu suchen (Testfälle!)
  6. Wenn Testfälle gelten, haben Sie eine Lösung! Andernfalls spülen und wiederholen

Beachten Sie, dass dies ein ziemlich hohes Niveau ist. Jeder Schritt umfasst normalerweise mehrere Teilschritte, z. B. das Ermitteln des tatsächlichen Problems. Betrachten Sie als Beispiel die Lösung von Wortproblemen in Mathematik. Sie sammeln Fakten (ein Werkzeug) und bestimmen, was tatsächlich gewünscht wird. Anschließend untersuchen Sie Ihre Fakten und versuchen, sie der Lösung zuzuordnen.

Dies führt letztendlich zu Unterproblemen des Hauptproblems. Befolgen Sie die Schritte erneut. Wir brauchen ein Zwischenprodukt, um das Endergebnis zu erhalten, damit es zu unserem neuen Problem wird. Dies zerlegt das Problem in kleine, leicht verständliche Abschnitte. Wenn jedes Stück gelöst ist, wird die Lösung zusammengesetzt.

Spencer Rathbun
quelle