Sollte ich mir Sorgen machen, wenn ich viele meiner Probleme auf die gleiche Weise löse?

13

Ich genieße es wirklich, Spiele zu programmieren und Rätsel zu machen. Ich stelle fest, dass ich viele dieser Probleme auf die gleiche Art und Weise konstruiere und letztendlich ähnliche Techniken verwende, um sie zu programmieren, mit denen ich wirklich vertraut bin.

Um Ihnen einen kurzen Einblick zu geben, erstelle ich gerne Diagramme, in denen Knoten mit Objekten dargestellt werden. Diese Objekte enthalten Daten wie Koordinaten, Positionen und natürlich Verweise auf andere benachbarte Objekte. Ich werde sie alle in eine Datenstruktur einfügen und Entscheidungen über diese Informationen in einer "Spieleschleife" treffen.

Dies ist zwar ein kurzes Beispiel, aber nicht in allen Situationen genau. Es ist nur eine Möglichkeit, mit der ich mich wirklich wohl fühle. Ist das schlecht?

Bryan Harrington
quelle
Wenn Sie sich immer wieder wiederholen, warum erstellen Sie dann keine wiederverwendbare Komponente?
Kugel
Nicht unbedingt, wenn es eine gute Möglichkeit ist, sie zu lösen :)
Haylem
4
Wenn Sie sich ständig wiederholen, schreiben Sie eine Bibliothek.
Job
@Bryan Harrington Da ich selbst genau dasselbe Problem hatte, muss ich sagen, dass ich an verschiedenen Domänen arbeite, von der Geschäftslogik (bei der Arbeit) bis zur Kernelprogrammierung (zu Hause) und von der Arbeit an C # (bei der Arbeit) bis zu C ++ (zu Hause). Hat mir viel geholfen. Ich habe mir auch angewöhnt, Open Source Code zu lesen. Hier sind einige Links :) Außerdem kann man GOF
Chani

Antworten:

26

Nein, alles in Ordnung.

Bei der praktischen Programmierung geht es darum, Lösungen zu finden, die möglicherweise bei vielen ähnlichen Entwicklungen nützlich sind. Sie haben gerade einen gefunden.

Sie können und sollten keine unterschiedlichen Lösungen entwickeln, nur damit sie sich unterscheiden. Aber Sie sollten sich auf jeden Fall jedes Mal kritisch mit Ihren Lösungen auseinandersetzen und sich fragen, ob sie noch gut sind oder ob sich die Branche seitdem weiterentwickelt hat und Sie sich dementsprechend darauf einstellen müssen.


quelle
+1 für den letzten Punkt "Fragen Sie sich, ob sie noch gut sind oder ob die Branche Fortschritte gemacht hat". Zu oft sieht man, dass gute Programmierer
alt
12

Wenn es gut funktioniert, nennen Sie es ein Entwurfsmuster. Wenn nicht, aber Sie wissen es nicht besser, dann ist es das goldene Hammer-Antimuster.

user281377
quelle
1
Dies. Es ist nur dann ein Problem, wenn Sie Ihre Lösung auf ein Problem zwingen, bei dem es nicht funktioniert. Wenn alle Ihre Probleme Nägel sind, sollten Sie einen Hammer verwenden. Wenn Sie jedoch versuchen, eine Schraube einzuschlagen, sollten Sie einen Schritt zurücktreten.
Satanicpuppy
@Satanicpuppy ... manchmal haben wir keinen Schraubenzieher und haben ein Problem, das JETZT behoben werden muss. In diesem Fall ist ein Hammer zum gegebenen Zeitpunkt das beste verfügbare Werkzeug.
CaffGeek
@Chad - eine beunruhigend genaue Analogie
normanthesquid
5

In unserer täglichen Arbeit neigen wir dazu, eine ganze Reihe ziemlich ähnlicher Probleme zu haben.

In solchen Situationen kann es gut sein, sich an das zu halten, was man weiß. Ich habe mehr Beispiele für schlechte Lösungen von Leuten gesehen, die etwas implementiert haben, das sie nicht verstanden haben, als jemand, der eine nicht ideale Technik verwendet.

Wenn Sie etwas gut kennen, können Sie es nach Bedarf einsetzen und sicherstellen, dass Ihre Implementierung solide und effektiv ist. Diese Dinge werden wahrscheinlich nicht wahr sein von Ihren ersten Versuchen mit neuen Techniken.

Aber die Kehrseite ist, wenn Sie nur einen Hammer haben, sieht alles aus wie ein Nagel. Sie sollten Dinge tun, um sich auf Alternativen aufmerksam zu machen und wenn Sie Ihre Favoriten vielleicht zu weit treiben.

Vielleicht ein paar nicht dringende / nicht kritische Änderungen herausgreifen und sie nutzen, um mit alternativen Lösungen auf dem Laufenden zu bleiben?

Jon Hopkins
quelle
4

Gute Frage, und ich muss zugeben, dass mich das auch verfolgt.

Wann ist das in Ordnung? Führen Sie eine Leistungsanalyse Ihres Codes durch. Wenn Sie feststellen, dass Sie sich in O (log n) oder O (n) oder O (n log n) befinden und das Problem daher bekannten Datenstrukturen zugeordnet werden kann, sind Sie im Allgemeinen in Ordnung.

Wann ist das nicht in Ordnung? Ihre zeitliche oder räumliche Komplexität ist O (n ^ 2) oder schlechter, oder das Problem ist per Definition NP vollständig. In diesen Situationen müssen Sie einige Heuristiken anwenden, Kenntnisse aus anderen Bereichen anwenden usw.

Ein kurzes Beispiel: Beim Chip-Design ist die Auswahl, wie die Gates in der Schaltung für minimale Leistung angeordnet werden sollen, NP-vollständig. Nur Grafiken allein bringen Ihnen nicht viel, obwohl sie ein Muss sind. Sie müssen zusätzliches Material lesen, manchmal interdisziplinär, und das Wissen in Ihrer Domäne anwenden. Zum Beispiel haben genetische Algorithmen (Algorithmen, die genetische Überkreuzungen und Mutationen nachahmen, wie in Biologie 101 definiert) eine große Anwendung beim Entwerfen von Hardware-Chips.

Fanatic23
quelle
3

Nicht unbedingt, wenn es eine gute Möglichkeit ist, sie zu lösen :)

Wenn ich an einer "Lösung" arbeite, gehe ich normalerweise nach den folgenden Kriterien vor:

  • Einfachheit ,
  • Wiederverwendbarkeit ,
  • und nur letzte Leistung .

Nicht, dass es auf die Leistung ankommt: Ich entwerfe mit Blick auf die Leistung, aber ohne sie zu weit zu treiben. stört mich nicht). Wenn Leistung dann benötigt wird (Problem mit dem Geschäftsmodell oder der Benutzererfahrung), verfolge ich einen anderen Ansatz als den einfachen und wiederverwendbaren. Pragmatisch sein.

Seltsamerweise ist mir beim Codieren in C die Leistung viel wichtiger als beim Codieren in Java ... Macht der Gewohnheit :))

Haylem
quelle
2

Solange das Problem auf effiziente Weise gelöst wird, besteht kein Grund zur Sorge.

Manoj R
quelle
2

Ich denke, Grafik ist ein geeignetes Design für das Entwerfen von Spielen, um Entscheidungen \ Entscheidungen darzustellen. Bedenken Sie jedoch, dass dies möglicherweise verfeinert und effizienter gestaltet werden kann. Dies ist möglicherweise nicht die beste Lösung für andere Domänen.

Gaurav
quelle
2

Wenn es funktioniert, ist es in Ordnung.

Wenn Sie befürchten, sich auf eine einzelne Technik zu verlassen, versuchen Sie als Übung, Variationen eines gelösten Problems zu finden, die Ihre Lösung unbrauchbar machen würden. Zusätzliche Punkte, wenn Sie die Änderungen verallgemeinern können, um den Anwendbarkeitsbereich Ihres üblichen Prozesses zu definieren.

Javier
quelle
2

Wenn Sie das Problem lösen, ist es gut. Und es ist egal wie, bis es keine Probleme mehr macht.

Dainius
quelle
0

"Developer Art" hat tatsächlich die richtige Antwort, wenn es Ihr Ziel ist, ein Produkt zu produzieren. Und wenn Ihre "Fabrik" die Produkte produziert, die Sie zufrieden stellen, dann ist das cool.

Aber...

Wenn Sie jemals neue (und möglicherweise bessere) Methoden erlernen möchten, müssen Sie Änderungen vornehmen. Dies wird zu Fehlern führen, aber nur durch Fehler lernt man tatsächlich. Und durch dieses neue Lernen können Sie möglicherweise noch bessere und überzeugendere Software erstellen.

Dies wird tatsächlich durch neurologische Forschung gesichert. Hier bitteschön.

ElGringoGrande
quelle