Es gibt viele Dinge, die bei der Erstellung eines Systems berücksichtigt werden müssen. Nehmen wir zum Beispiel ein webbasiertes System, in dem sich Benutzer anmelden und miteinander interagieren, Inhalte erstellen und bearbeiten. Jetzt muss ich über Sicherheit und Validierung nachdenken (ich glaube nicht einmal, dass ich zu 100% sicher bin, was dies bedeutet), "sicherstellen, dass Benutzer sich nicht gegenseitig auf die Füße treten" (Begriff dafür?), Um Fehler in vielen Fällen zu vermeiden Fälle, in denen sichergestellt wird, dass Datenbankdaten nicht durch unerwartete ... Situationen problematisch werden? All diese Dinge, die ich nicht weiß, wie oder wo ich lernen soll, gibt es ein Buch über solche Dinge? Wie gesagt, es scheint einen großen Unterschied zwischen dem Schreiben von Code und dem Schreiben des richtigen Codes zu geben. Wissen Sie, was ich meine? Ich habe das Gefühl, dass meiner aktuellen Programmierarbeit viel von dem fehlt, was ich beschrieben habe, und ich kann die Probleme sehen, die sie später verursacht. und dann sind die Probleme viel schwieriger zu lösen, weil Daten existieren und von Menschen verwendet werden. Kann mich jemand auf Bücher oder Ressourcen oder die richtige Teilmenge der Programmierung (?) Für diese Art des Lernens verweisen?
PS: Fühlen Sie sich frei, meine Tags zu korrigieren. Ich weiß nicht, wovon ich spreche.
Bearbeiten: Ich gehe davon aus, dass einige der Beispiele, die ich geschrieben habe, auch für andere Systemtypen gelten. Ich kenne nur keine anderen guten Beispiele, da ich hauptsächlich an der Webarbeit beteiligt war.
quelle
Wenn es um Web-Apps geht, enthält diese Antwort weitere gute Informationen als jeder andere Ort, den ich jemals gesehen habe.
Die Realität ist jedoch, dass es viel zu wissen gibt, um ein komplettes System gut zusammenzustellen. Es gibt Studien, die 10.000 Stunden unterstützen, da die Menge an Übung , die erforderlich ist, um ein Maß an Meisterschaft zu erreichen, keine Ausnahme bildet, und die Entwicklung von Informationssystemen ist keine Ausnahme.
quelle
Ich mag die Antwort von William Pietri sehr (+1), aber ich glaube, dass sie ergänzt werden muss. Selbst wenn man davon ausgeht, dass das, was Sie unter Systemen verstehen, ausschließlich aus Software besteht.
Aber bevor ich darauf eingehe, kenne ich kein Buch, das mir helfen könnte. Alles, was folgt, habe ich aus Erfahrung gelernt (dh die drei Punkte, die William gemacht hat).
Was Sie sprechen, umfasst mindestens vier große Rollen. Manchmal kann eine Person alle diese Rollen für kleine bis mittlere Projekte ausfüllen, aber wenn Sie mit großen Projekten beginnen, müssen Sie diese Rollen zumindest etwas voneinander trennen. Es ist schwierig für irgendjemanden, in irgendeiner sinnvollen Weise Experte für sie alle zu sein.
Business Analyst
Das ist die Person, die mit dem Kunden spricht und seine Anforderungen in etwas übersetzt, das ein Architekt verstehen kann. Grundsätzlich eine Liste der richtig formulierten Anforderungen. Dies umfasst die offensichtlichen funktionalen Anforderungen (was muss dieses System bieten?), Aber auch nicht funktionale Anforderungen (welche allgemeinen Merkmale muss das System erfüllen? Dies kann Sicherheit, Zuverlässigkeit, Verfügbarkeit, Ausfallsicherheit, Kapazität, Leistung, Robustheit und Sicherheit umfassen andere solche Anforderungen aus Anwendersicht).
Dies ist der erste Durchgang zu dem, was das System tun muss, der Beginn ernsthaften Denkens.
System Architekt
Diese Person erstellt den technischen Rahmen auf hoher Ebene, in dem sie arbeiten kann. Sie geben den Umriss-Match-Plan. Die allgemeinen Werkzeuge, Techniken, Konstrukte. Sie zerlegen das gesamte System in kleinere Komponenten, wie sie zueinander passen, wie sie zur Außenwelt passen ...
Dies hilft in vielerlei Hinsicht zu verfeinern, worüber nachgedacht werden muss. In diesem Stadium werden sehr oft Probleme mit den Anforderungen des Geschäftsanalysten festgestellt. Zurück zu ihnen für einige Iterationen, um ihr Verständnis für das, was sie wollen und ihren Ausdruck davon zu verbessern.
Systemdesigner
In dieser Rolle geht es darum, wie alles funktioniert. Dies könnte mehr Teamarbeit sein als eine Ein-Mann-Show. Es gibt jedoch wahrscheinlich einen leitenden Designer, der das gesamte Systemdesign überwacht. Diese Person muss sich mit den Details befassen und sicherstellen, dass die Ansicht des Architekten tatsächlich erstellt werden kann.
Erwarten Sie eine weitere Verfeinerung der Architektur des Systems und damit möglicherweise der Geschäftsanalyse.
Testmanager
Diese Rolle wird sehr oft vergessen. Aber am Ende des Tages, wenn Sie es nicht testen können, wie können Sie beweisen, dass Sie es bauen können? Die Ergebnisse aller Phasen müssen überprüft werden: Geschäftsanalyse, Architektur und Design durch eine Testperson, die in der Lage ist, Mängel aufzuzeigen und daher frühzeitige Korrekturen zu ermöglichen, lange bevor Code geschrieben wird.
Das ist eine kurze Zusammenfassung.
Diese Jungs / Mädels sind nur die allgemeinen Leute in der Kette, die darüber nachdenken, woran man denken muss.
Für komplexe Projekte wie große Bank- oder Raumfahrtanwendungen, um nur zwei Beispiele zu nennen (denken Sie an viele hundert bis viele tausend Manntage), gibt es viele Fachexperten, wie wir sie nennen, um Projekte in jeder Phase zu überprüfen und zu unterstützen. Diese Rollen umfassen Sicherheitsanalyse, Systemgröße, Kapazität, Leistung, Datenbanken, Clustering und viele andere derart enge Fachgebiete, einschließlich präziser Geschäftsbereiche. Die Vielfalt der Rollen hängt von der Größe und Komplexität der Systeme ab.
All das, um zu sagen, dass Sie nicht versuchen sollten, alles zu wissen, werden Sie nicht. Sie können sich jedoch ein Bild vom Gesamtbild machen und bei kleinen Projekten viel mehr als bei großen Projekten, einfach weil die Komplexität es Ihnen ermöglicht, runder zu sein.
Wenn Sie wissen möchten, wie man Systeme entwirft, müssen Sie anfangen, Fragen zu stellen, indem Sie über den Tellerrand hinaus denken. Versetzen Sie sich genug in die Lage des Kunden und überlegen Sie, was schief gehen könnte und was getestet werden muss. Treffen Sie sich dann mit einem echten Kunden und fordern Sie ihn auf, die Ausmaße und Grenzen des Systems zu erläutern, das er sich vorstellt. Und wenn ich "Kunde" sage, müssen Sie verstehen, dass dies mehrere sehr unterschiedliche Personen umfasst. Es gibt die Person, die das System Tag für Tag für das verwendet, wofür es entwickelt wurde. Es gibt den Betreiber, den technischen Support, den Manager, der den einen oder anderen Bericht benötigt, den Prüfer, das Infrastruktur-Team, den Stakeholder, der dafür bezahlt hat, den Qualitätsmanager, der Mittel zum Testen Ihres Systems benötigt ... Fragen Sie alle (und ob) sie sind eine Person, Bitten Sie sie, alle diese Hüte einzeln aufzusetzen. Fragen Sie sie also alle, was sie benötigen, und Sie haben einen guten Einstieg in die Kenntnis Ihrer Systemanforderungen. Von dort können Sie die Architektur und von dort das Design ableiten.
Für komplexe Systeme (ob nur Software oder zur Integration in Hardware im allgemeinsten Sinne) reicht nicht nur eine Person für jede der vier oben aufgeführten Rollen aus, sondern Sie müssen auch die Definition des Systems projektverwalten tun, geschweige denn die anderen Phasen.
HPH, asm.
quelle
Nicht "ein Buch". Viele Bücher.
Es gibt keine königliche Straße
Richtig.
Sie sprechen von "Architektur", Programmierung im Großen.
Schritt 1. Lesen Sie viel Code. Sehr viel. Denken Sie an Dinge, die Sie gerne tun würden. Finden Sie verwandte Open Source-Projekte. Lesen Sie den Code. Alles davon.
Schritt 2. Lesen Sie mehr Code. Eine Menge mehr.
Schritt 3. Lesen Sie Bücher über Architektur.
quelle
Um zu verstärken, lesen Sie viele Bücher ....
Jetzt, wo Sie wissen, dass Sie ein Problem haben, ist es sinnvoll, Ihnen zu sagen, dass Sie diese Bücher lesen sollen. (Bevor Sie echte Arbeit geleistet haben, macht es wenig Sinn, diese Bücher zu diskutieren.)
Entwurfsmuster von Gamma, Helm, Johnson und Vlissides Mustersprachen des Programmdesigns 1,2,3 und 4.
Versuchen Sie jedoch nicht, jedes Muster überall dort anzuwenden, wo Sie sehen, dass es verwendet werden könnte
das ist auch eine schlechte sache.
Hoffe das hilft.
quelle
Der beste Weg, um zu lernen, wie man etwas macht, ist es, es zu tun. Wenn Sie lernen möchten, wie man Französisch spricht, müssen Sie Französisch sprechen und Französisch lesen und Französisch schreiben und über Französisch lesen und nach Frankreich gehen und mit Franzosen auf Französisch sprechen. Wenn Sie wissen wollen, wie man Klavier spielt, müssen Sie tatsächlich Klavier spielen. Sie müssen einfache Lieder spielen und die Struktur des Klaviers und die Struktur der Musik lernen. Sie müssen lernen, wie man Musik liest und wie man Musik mit den Fingern über ein Klavier ausdrückt. Sie müssen lernen, wie Musik klingt und welche Klänge ein Klavier erzeugen kann, im Gegensatz zu dem, was eine Gitarre, eine Flöte oder ein Saxophon kann.
Die Programmierung ist genau das gleiche. Wenn Sie wissen möchten, wie eine Datenbank entworfen wird, müssen Sie Datenbanken entwerfen. Wenn Sie die Kryptografie verstehen möchten, implementieren Sie kryptografische Algorithmen und kryptografische Protokolle. Wenn Sie Software schreiben möchten, die mehrere Benutzer gleichzeitig bedienen kann, müssen Sie wissen, wie Festplatten-E / A, Netzwerk-E / A und Threads funktionieren. Um zu verstehen, wie das funktioniert, haben Sie Schreibcode, der Dateien liest und aus ihnen schreibt, Daten über ein Netzwerk überträgt und den Zugriff auf Ressourcen synchronisiert. All dies erfordert Übung.
Ein "System" ist im Allgemeinen nur eine Sammlung von Dingen. Stücke, die zu einem Ganzen koordinieren. Um etwas Großes zu bauen, muss man ein paar kleine Teile bauen. Wenn Sie also lernen möchten, wie man Systeme erstellt, beginnen Sie einfach mit dem Erstellen von Systemen. Nehmen Sie ein Problem, zerlegen Sie es in Teile und implementieren Sie jedes Stück einzeln. Schließlich haben Sie ein integriertes "System". Sie werden wahrscheinlich ein paar Mal auf dem Weg scheitern, aber das ist in Ordnung. Wenn Sie nicht versagen, bedeutet dies normalerweise, dass Sie sich nicht genug anstrengen.
Außerdem würde ich empfehlen, zur Schule zu gehen, um Informatik zu studieren. Das wird beim "Üben" nicht zu viel helfen. Sie müssen das selbst tun, aber es hilft beim Belichtungsteil. Sie werden viel über so ziemlich alles lernen, was mit der Funktionsweise von Computern und Computersystemen zu tun hat, was allein schwer zu lernen ist.
quelle