Ich bin in meinem letzten Semester am College und nehme an einem Software-Engineering-Kurs teil. In der Klasse lernen wir verschiedene Methoden der Softwareentwicklung kennen. Diejenige, auf die wir uns konzentrierten und die wir zur Entwicklung unseres Projekts verwendeten, war die Wasserfallmethode.
Ich habe das Gefühl, dass der Ausbilder es möglicherweise falsch implementiert hat. In unseren Klassendiagrammen mussten wir ALLE Eigenschaften und Methoden auflisten, einschließlich privater. Ich habe einige Bücher gelesen, nämlich Clean Code, die besagen, dass Funktionen so kurz und konzentriert wie möglich gehalten werden sollen. Es scheint mühsam, jede kleine Funktion in unseren Diagrammen aufzulisten, wenn sie anderen Entwicklern nicht hilft (sie sind privat, niemand anderes wird sie verwenden). Außerdem denke ich beim Entwerfen des Programms möglicherweise nicht an jede winzige Funktion, sondern möglicherweise beim Refactoring.
Hat uns der Ausbilder etwas Falsches gesagt, indem er uns gebeten hat, alle Funktionen aufzulisten? Und unterdrücken diese Entwurfsmethoden den Individualismus des Entwicklers, um Code so zu schreiben, wie er ihn am besten verstehen kann?
quelle
Antworten:
Haben Sie den Ausbilder gefragt, warum Sie alle Methoden auflisten müssen?
Es ist möglich, dass, wie bei vielen Anforderungen in einer Unterrichtsumgebung, die Absicht nicht darin bestand, Ihre Klassendiagramme für Entwickler hilfreicher zu gestalten, sondern Ihnen und Ihren Klassenkameraden dabei zu helfen, darüber nachzudenken, wie Sie Ihre Klassen gestalten würden. Wenn die Schüler lernen, wie sie größere Probleme in kleinere Probleme zerlegen können, ist es wahrscheinlich hilfreich, darüber nachzudenken, welche privaten Methoden sie wahrscheinlich benötigen würden. Und es ist wahrscheinlich hilfreich für den Ausbilder, eine bessere Vorstellung davon zu bekommen, welche Methoden die Schüler implementieren möchten, um früher in den Prozess einzugreifen, wenn das Design einer Person schlecht durchdacht ist. Die Dokumentation in einer Unterrichtsumgebung ist oft viel komplizierter als die Dokumentation in einer realen Umgebung, da der Ausbilder
Natürlich ist es auch möglich, dass der Ausbilder glaubt, dass diese Dokumentationsstufe in einem realen Projekt hilfreich ist. In diesem Fall ist der Ausbilder wahrscheinlich entweder veraltet oder stammt aus einem bestimmten Nischenhintergrund, in dem diese Planungs- und Dokumentationsstufe angemessen ist. Wenn Sie beispielsweise das Navigationssystem für das Space Shuttle erstellen oder medizinische Geräte entwerfen, ist es im Allgemeinen weitaus angemessener, im Vorfeld stark in das Design zu investieren, als den Code während der Entwicklung neu zu gestalten. Wenn Sie dagegen eine Social-Networking-Site entwickeln, ist ein agilerer Ansatz angemessener.
quelle
Nein, der Kursleiter fordert Sie zu Recht auf, alle Eigenschaften und Methoden im Voraus aufzulisten, wenn Sie die Wasserfallmethode verwenden. Wikipedia bemerkt eine Kritik am Wasserfall:
Diese Entwurfsmethoden quetschen den Umsetzer des Individualismus des Entwurfs nicht, da noch Teile zu interpretieren sind und Möglichkeiten, die Struktur einzigartig zu gestalten, z. B. ein Bild mit einem Skelett und das Hinzufügen von Muskeln und anderen Geweben, um ein Tier zu erschaffen, das sich fragt, wie viel Freiheit mussten Sie dieses Tier entwerfen?
Sie haben einen Mangel an Wasserfall gefunden, aber alles hat seine Stärken und Schwächen.
quelle
Sie haben wahrscheinlich das klassische Wasserfallmodell gelernt, das die Person, die es von Anfang an in die Welt der Softwareentwicklung eingeführt hatte, für die Entwicklung umfangreicher Softwaresysteme als ungeeignet bezeichnete. Sie würden wahrscheinlich daran interessiert sein, Winston Royces Artikel mit dem Titel "Verwalten der Entwicklung großer Softwaresysteme" zu lesen , um mehr über die Probleme mit dem zu erfahren, was viele Menschen als Wasserfallmodell betrachten.
Das Waterfall-Modell ist jedoch gut geeignet, um den Lebenszyklus der Softwareentwicklung während des Durchlaufs zu lehren, und kann Zeit damit verbringen, Anforderungs-Engineering, Architekturdesign, detailliertes Design, Implementierung, Testen und Wartung in sehr klaren, unterschiedlichen Phasen zu erlernen und durchzuführen.
Dies sind alles sehr gültige Punkte.
Das Auflisten aller Eigenschaften und Methoden während der Entwurfsphase, auch bei Verwendung von Waterfall, ist wahrscheinlich übertrieben. Sie sollten auf jeden Fall alles auflisten, was öffentlich ist, zusammen mit den wesentlichen Eigenschaften. In Wirklichkeit ist alles andere ein Implementierungsdetail, das Sie erhalten können, indem Sie Ihre Implementierung in Diagramme zurückentwickeln.
Der Rat von Clean Code (ich habe ihn nie gelesen - ich halte mich nur an das, was Sie gepostet haben) scheint fair und auch dann anwendbar zu sein, wenn Sie die Waterfall-Methode verwenden. Sie können Ihre Klassen und Methoden in Bezug auf das Design Einzel Prinzip Verantwortung , Trennung von Bedenken und anderen Prinzipien der SOLID . Der Wasserfall sagt Ihnen nicht, wie Sie entwerfen sollen, nur wenn Sie es tun müssen. Das heißt, es ist im Vorfeld schwieriger, wenn Sie lernen und überlegen, wie Sie dies während der Implementierung besser tun können.
Ich denke, dies weist darauf hin, dass es eine klare Iteration zwischen Design und Implementierung geben muss - ein Problem, das der traditionelle Wasserfall nicht berücksichtigt.
quelle
Wenn Sie der Meinung sind, dass dies langwierig ist, warten Sie, bis Sie eine echte Jobprogrammierung erhalten. Bedenken Sie für einen Moment, dass Software für Sie möglicherweise keine tragfähige Karriere ist.
So?
Nein, es ist eine häufige Anforderung.
Ja. Die Seelenzerstörung von Individuen ist ein wichtiger Bestandteil der Softwareentwicklung. Alle Individualität wird von allen Programmierern jederzeit auf alle möglichen Arten geschlagen. Es heißt, dass irgendwo in den "Programmierregeln Gottes" von einem Berg an einen Propheten weitergegeben wurde.
Nein. Sie scheuen nur die Langeweile. Überwinde es und mach dich wieder an die Arbeit.
quelle
Programmieren ist die Kunst, innerhalb von Einschränkungen zu arbeiten. Die CPU bietet einen begrenzten Befehlssatz; Die E / A wird durch das Design der Hardware eingeschränkt. Betriebssystem-APIs werden erstellt, um bestimmte Verhaltensweisen zu fördern und andere einzuschränken. Hochsprachen werden oft entwickelt, um eine Reihe von Redewendungen gegenüber anderen zu fördern ...
Und auch Methoden sind so konzipiert, dass sie einschränken.
Ihre Herausforderung in allen Aspekten des Entwicklungsprozesses besteht darin, Ihre Vision innerhalb dieser Grenzen zu verwirklichen . Wirst du deinen Kopf gegen jede Wand schlagen, die durch Hardware, Sprache, API und Methodik aufgeworfen wird? Oder werden Sie einen Weg finden, das, was Sie erreichen möchten, mit dem zu harmonisieren, was erlaubt und gefördert wird?
Glaubst du wirklich , dein Lehrer möchte endlose Seiten mit Kleinigkeiten durchlesen? Testen Sie dann diese Theorie: Brechen Sie ein Programm auf und dokumentieren Sie jedes Atom. Wenn sein Schreibtisch unter dem Gewicht durchhängt, werden Sie wahrscheinlich feststellen, dass sein wahrer Wunsch etwas anders ist als erwartet.
Oder bereiten Sie die Dokumentation , wie Sie für richtig halten. Machen Sie es klar, machen Sie es verständlich, lassen Sie es wie einen Dashiell Hammett-Roman lesen. Und dann setzen Sie sich und sprechen Sie mit ihm, zeigen Sie ihm, was Sie getan haben, überzeugen Sie ihn von seinem Verdienst.
quelle
Ich denke, der Ausbilder ist hervorragend darin, Sie zu diesem Projekt zu bewegen und Ihnen so die Vor- und (meistens) Nachteile der Wasserfallentwicklung beizubringen.
quelle
Eine einfache Faustregel zur Beurteilung der Komplexität der Projektanalyse lautet: "Kann der Entwickler oder das Unternehmen, für das er arbeitet, für etwas verantwortlich gemacht werden, das dramatisch genug ist (im Allgemeinen einschließlich Tod oder großer Geldverlust), das mit der erstellten Software passiert?".
Ich hatte für einige meiner Kurse die gleiche Erfahrung wie Sie. Leute, die einen Hintergrund in der Militärindustrie hatten, würden uns Analyse beibringen. Und das wäre eine vollständige und umfassende Analyse, die den gesamten Projektverlauf bis ins kleinste Detail plant. Sie können sich mit dieser Art von Projekt nicht viele Iterationen leisten (auch das Explodieren von Bomben kann in Ordnung sein, das Explodieren von Budgets nicht), also gibt es hier keinen Platz für Kreativität, Sie müssen sich an den Plan halten.
Auf der anderen Seite, wenn Sie ein bisschen gelesen haben, lesen Sie sicherlich über agile Methoden. Im Allgemeinen gibt es weniger Dokumentation und mehr Raum für den Entwickler, um seine Kreativität einzusetzen und gleichzeitig eine Lösung für das Problem zu entwickeln, auf das er stößt.
Je mehr Erfahrung Sie sammeln, desto besser und was Ihr Ausbilder Ihnen zeigt, gilt in einem Teil der Branche. Beachten Sie jedoch, dass es mit Sicherheit so viele Möglichkeiten gibt, ein Projekt zu verwalten und zu entwerfen, wie es gibt, um sie zu codieren. Und Sie werden Verteidiger und Kritiker für alle finden. Testen Sie sie während des Studiums und wählen Sie die aus, mit der Sie zufrieden sind.
quelle
Einige Software-Engineering-Kurse, wie der, den ich hatte, werden in einem seltsamen Stil unterrichtet, in dem „Misserfolg Erfolg ist“, Erfolg eine verpasste Gelegenheit ist, aus Misserfolg zu lernen, und mehr ist immer weniger ist mehr. Wenn dies einer von denen ist, dann bleiben Sie einfach bei den Aufgaben und genießen Sie die Verrücktheit.
quelle
Ich denke, Ihr Lehrer ist nicht in Kontakt. Kommerzielle Software wird selten in diesem Umfang entwickelt oder dokumentiert. Es ist viel zu teuer und die resultierende Dokumentation kann nicht ohne noch mehr Kosten gepflegt werden. IMO solche Praktiken sind ein Erbe aus Tagen, als die Codierung oft in Assemblersprache durchgeführt wurde. Ihre Zeit wäre besser gewesen, um agilere Praktiken auszuprobieren: testgetriebene Entwicklung, Paarprogrammierung, kontinuierliches Refactoring.
Ich glaube schon.
Es ist verschwenderisch, Arbeitern des geistigen Eigentums langweilige Arbeit zuzuweisen. In der Schule hat langweilige Arbeit wenig oder keinen pädagogischen Wert, außer vielleicht, um Schüler zu langweiliger Arbeit zu bewegen. Solche Übungen haben negative Konsequenzen sowohl für die Studenten als auch für die Industrie. Die Schüler werden verletzt, weil ihre Zeit verschwendet wird. Die Branche ist geschädigt, weil einige Studenten zu dem Schluss kommen können, dass eine solche Langeweile notwendig und nützlich ist. Es ist weder. In dreißig Jahren in der Software war die einzige Arbeit, die ich mir vorstellen konnte, sowohl langweilig als auch nützlich, das Wechseln von Sicherungsbändern. Es gab Roboter, die das konnten, aber sie waren unerschwinglich teuer.
quelle