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.
quelle
Antworten:
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:
Hoffe, etwas davon hilft.
quelle
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 .
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
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.
quelle