Was sind die schlimmsten Dinge, über die unerfahrene Entwickler nicht mehr nachdenken können? [geschlossen]


15

Als junger Entwickler finde ich es nützlich, Ratschläge zu erhalten, um eine qualitativ hochwertige Anwendung zu entwickeln. In meinen College-Kursen legten die meisten Lehrer Wert auf die Validierung von Eingaben und einige sprachen über Sicherheitsbedenken, aber niemand ging auf die Bedeutung bestimmter anderer Dinge ein, wie zum Beispiel Protokollierung.

Was sind einige Fehler, die unerfahrene Entwickler machen und die für erfahrene Entwickler zu Frustration führen können?


1
Sicherheitsaspekte würde ich nicht unbedingt als "Checkliste" bezeichnen - Sicherheitsaspekte müssen auf allen Ebenen eines Designs berücksichtigt und nicht nachträglich hinzugefügt werden. Sicherheitsmerkmale! = Sichere Merkmale!
Billy ONeal

Vielleicht impliziert "Checkliste" das Falsche. Ich suche keine Liste von Dingen, über die ich am Ende der Entwicklung nachdenken könnte. Ich bin gespannt , was die Dinge sollten in Betracht gezogen werden , wie Sie eine Anwendung zu entwickeln. Haben Sie einen Vorschlag, wie ich meine Frage wiederholen könnte?
awmckinley

@awmckinley: Dann lautet Ihre Frage "Wie entwickle ich eine Anwendung?" - aber diese Frage ist zu weit gefasst, um beantwortet zu werden.
Billy ONeal

@ Billy ONeal: Habe gerade meine Frage bearbeitet. Ist das sinnvoller?
awmckinley

1
Es macht mehr Sinn, aber leider verlangt es immer noch nicht viel mehr als eine Liste von Best Practices. Konstruktive Fragen sollten sich eigentlich auf bestimmte Probleme beziehen oder zumindest Antworten erfordern, um mehr als einzeilige, meinungsbildende Beiträge zu verfassen.
Aaronaught

Antworten:


12

Ich finde, die Hauptsache, die neue Entwickler vergessen, ist, dass sie in der realen Welt oft als Teil eines Teams arbeiten. Dies zeigt sich als ..

  • Code einchecken, der den Build bricht
  • Code nicht wiederverwenden, der bereits vorhanden ist
  • Tun Sie die Dinge lieber auf ihre Weise als auf die gleiche Weise wie alle anderen - was die Wartung teuer macht

Das heißt nicht, dass ihr Code nicht für sich allein ausreicht, aber sie arbeiten nicht mehr für sich allein.


+1: Grundsätzlich sind dies die Probleme, mit denen Sie konfrontiert sind. Junior-Codierer können möglicherweise schlecht codieren, aber einige erfahrene Codierer können auch schlecht codieren. Der Hauptunterschied sind solche Gegenstände.
gbjbaanb

8
  1. Tests.
  2. Tests.
  3. Weitere Tests.
  4. Quellcodeverwaltung
  5. Steuern für jedes Programm, auf das Sie abzielen.

Unter Windows betragen diese Steuern :

  • Umgang mit Umgebungen mit hohen DPI-Werten
  • Roaming-Benutzerprofile
  • Schnelle Benutzerumschaltung
  • Remotedesktop (z. B. möchten Sie keine doppelte Pufferung verwenden, wenn RDP aktiviert ist
  • Mit hierarchischem Speichermanagement gut spielen
  • Mehrere Monitore
  • 64 Bit Windows

Auf so ziemlich jeder Plattform müssen Sie sich mit Folgendem befassen:

  • Unicode
  • Lokalisierung
  • Energieverwaltung

Es tut mir leid, Billy. Vielleicht war mir nicht klar, wie ich meine Frage gestellt habe: Ich suche nicht so sehr nach Entwicklungspraktiken (wie der Quellcodeverwaltung). Ich denke, das war ziemlich gut abgedeckt in Was würden Sie in dieser Checkliste für Softwareentwicklungsprojekte hinzufügen? . Der Abschnitt "Steuern" ist jedoch auf jeden Fall hilfreich.
awmckinley

3
@awmckinley: Der Grund, warum ich die Quellcodeverwaltung erwähne, ist, dass Sie Releases nicht effektiv verwalten können, ohne mehrere Entwicklungsleiter zu haben - auch wenn Sie nur ein Einzelentwickler sind. Sie müssen an Release n + 1 denken, auch wenn Sie an Release n arbeiten.
Billy ONeal

5

Nach meiner Erfahrung denken fast alle unerfahrenen Entwickler nicht daran, dass Sie (fast immer) in einem kommerziellen Umfeld arbeiten. Ihr Code muss gut sein, aber nicht perfekt. Das Wichtigste ist nicht die Perfektion, sondern, dass Ihr Code ausgeliefert wird.

Anders ausgedrückt: Das perfekte Stück Code drei Monate nach dem Zusammenbruch Ihres Unternehmens zu liefern, nützt niemandem.

Meiner Meinung nach ist dies eine der bedeutendsten Arten, in denen sich die Entwicklung in der realen Welt von der Entwicklung unterscheidet, die an der Universität gelehrt wird.


3

Wirklich breite Frage; im Detail zu beantworten ist ... mehrere Bücher.

Hier ist eine allgemeine Checkliste zur Systemdefinition, um Ihnen den Einstieg zu erleichtern -

  • Was sind die kritischen Ressourcen im System und wie können sich die Anforderungen an sie ändern?
  • Was sind die Leistungsfähigkeiten des Systems und wie müssen sie möglicherweise wachsen?
  • Welche Anforderungsbereiche könnten unnötig und entfernbar werden?
  • Gibt es die Möglichkeit, dass unterschiedliche Versionen des Systems mit unterschiedlichen Fähigkeiten benötigt werden?
  • Welche Auswirkungen haben die festgestellten Änderungen auf die Personal- und Computerressourcen?
  • Welche Auswirkungen wird das neue System auf bestehende Betriebssysteme haben?
  • Welche Funktionsbereiche haben die größere Chance, im Lichte der Erfahrungen mit dem System eine Veränderung zu erfordern?
  • Wer sind die zukünftigen Benutzer des Systems?
  • Was sind die zukünftigen Betreuer des Systems?
  • Welche zukünftigen Verbesserungen können die zukünftigen Benutzer des Systems als wahrscheinlich identifizieren?
  • Wie fügt sich das System in die Gesamtpläne des Benutzers ein und wie soll es sich entwickeln?

1

Die saubere Entkopplung des Systems auf dem eigenen Entwicklungscomputer und dem Zielcomputer, sodass es nicht zu Situationen kommt, in denen "Nun, es funktioniert auf meinem Computer".

Und wie schnell können Sie Ihre Entwicklungsmaschine rekonstruieren?

  • Wissen Sie, welche Pakete Sie benötigen?
  • Haben Sie eine Push-Button-Lösung, um Ihre Datenbank neu zu erstellen?
  • Haben Sie eine Push-Button-Lösung, um die Integrität des Quellcodes zu testen?

1

Ich denke, es ist wahrscheinlich Design - dh der Ansatz zu überlegen, was Sie tun werden, bevor Sie es tun.

Zu viele unerfahrene Programmierer (denken Sie daran, als Sie angefangen haben) springen gern hinein und bringen etwas in Schwung, fügen dann ein bisschen mehr hinzu und fügen ein bisschen mehr hinzu und fügen ein bisschen mehr hinzu. Dieser Ansatz kann funktionieren, wenn Sie dies vorhaben (jedes Bit kann nach Belieben getestet werden), aber die meisten unerfahrenen Programmierer konzentrieren sich nur auf den Teil, den sie schreiben. Daher werden alle Ergänzungen häufig gehackt in an der Spitze. Und wir haben alle Code gesehen, der sich so entwickelt hat!

Organisation ist das nächste, oft sind sie zu sehr auf den Code konzentriert, den sie geschrieben haben, um sich daran zu erinnern, wie sie es getan haben und was erforderlich war. Sie vergessen also, eine erforderliche Abhängigkeit zu bündeln oder zu dokumentieren. Sie neigen auch dazu, Dinge dorthin zu bringen, wo sie hinfallen. Ich musste letzte Woche einen Junior kritisieren, der seinen Code im Stammverzeichnis eingecheckt hat, einschließlich 3 wsdls, von denen 2 dieselbe Datei waren, und einer Reihe von DLLs von Drittanbietern, in denen er sich engagierte ein Unterverzeichnis und das Stammverzeichnis. Der Code war nicht nach einem Standard formatiert, den Sie sich auch vorstellen konnten, und es gab mehrere Funktionen, die vorhanden waren, aber nie aufgerufen wurden.

Offensichtlich hat er es zum Laufen gebracht, aber es war nicht aufgeräumt, und das bedeutete, dass Installation und Wartung mühsam gewesen wären.


1

Ich denke, die größten Unterschiede liegen in der Codierungstechnik. Jeder hat einen etwas anderen Ansatz, aber unerfahrene Entwickler neigen dazu, Code zu erstellen, der:

  • behandelt keine Grenzfälle
  • ist viel länger als nötig
  • hat schlechte Leistungsmerkmale in relevanten Szenarien
  • hat schlechte Trennung von Bedenken
  • es fehlen selbstschützende Techniken wie const, seal, readonly, etc.
  • seltsame Möglichkeiten, Daten und Datensammlungen zurückzugeben
    • Dies zeigt mehr Unerfahrenheit mit einer Plattform

0

Weil Sie die schlimmsten Dinge gefragt haben, lautet meine Antwort wie folgt:

  1. Ich habe vergessen, die Entwicklungsmaschine vor Spyware, Malware und Trojanerviren zu säubern.
  2. Ich habe vergessen, ein regelmäßiges Backup zu erstellen, das in sicheren Speichern an verschiedenen Standorten gespeichert wird.

0

Mein größter Gedanke ist, Flexibilität zu planen. Im Unterricht werden die Anforderungen fast immer zu Beginn festgelegt und ändern sich nie. In der Software ist es oft umgekehrt: Es gibt vage Anforderungen, die sich häufig ändern (sogar täglich). Das Beste, was Sie tun können, um dabei zu helfen, ist, flexibel zu codieren: lose Kopplung, kleine Funktionen, die zuverlässig in mehreren Situationen verwendet werden können, und das Vermeiden von hartcodierten Dingen so weit wie möglich.

Mit der Zeit werden Sie wahrscheinlich lernen, a) welche Dinge sich am wahrscheinlichsten ändern und welche nicht, und b) wie Sie Änderungsanforderungen antizipieren und für sie planen.

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.