Mein Ansatz beim Entwerfen einer Lösung besteht darin, den einfachsten Weg zu finden, um das gewünschte Ergebnis zu erzielen. Dies bedeutet in der Regel, dass ich das Notwendige und die geforderten Zeitrahmen zur Verfügung stelle. Und ziemlich fehlerfrei. Das ist alles gut und ich habe mir einen guten Ruf aufgebaut.
Der Nachteil ist das. Ich glaube, ich habe meine Fähigkeit eingeschränkt, Probleme anzugehen, die von Natur aus komplexer sind und eine entsprechend komplexere Lösung erfordern. Dies bedeutet auch, dass ich mich weniger dem .NET Framework und weniger ausgeklügelten Algorithmen / Datenstrukturen als anderen aussetze.
Irgendwelche Empfehlungen, um mir zu helfen, komplexere Szenarien mit passenden Lösungen anzugehen?
Aktuelle Fähigkeiten: .NET, C #, VB.NET, LINQ, ASP.NET (+ MVC), SQL Server 2000/5 Aktueller Job: Web Dev für eine hoch verfügbare Transaktions-Website
Sie sollten Seiten-Mini-Projekte haben, die "Stretch" -Projekte sind, die Sie mit etwas anderem spielen lassen. Sie helfen dabei, eine Reihe von Fähigkeiten zu entwickeln, die du deinem Toolbelt hinzufügen kannst, egal ob es sich dabei um Sprachen, Frameworks, Designtechniken oder was auch immer handelt. Nur etwas, das dich aus deiner Komfortzone bringt.
Finden Sie einen Mentor oder einen anderen Programmierer mit einem anderen Programmierhintergrund; Treffen Sie sich regelmäßig, um den Code des anderen zu überprüfen, besprechen Sie neue Dinge, die Sie kürzlich gelernt haben, und Projekte, an denen Sie gearbeitet haben.
Es ist alles sehr gut, sich mit komplexen Open-Source-Projekten zu beschäftigen, aber konstruktives Feedback wird Ihnen wahrscheinlich helfen, schneller voranzukommen und sich zu verbessern.
Hängt von der Art und Komplexität der Probleme ab, die Sie als Entwickler darstellen. Ein Weg wäre, eine komplexere Sprache oder ein komplexeres Toolset zu verwenden.
Wenn Sie beispielsweise geschäftliche Probleme mit MS Access lösen, versuchen Sie, in einem .NET- und Sql-Server zu lösen oder zumindest darüber nachzudenken, wie Sie sie lösen.
Ich denke, sogar KISS kann überbeansprucht werden. Es ist wichtig, zu lernen über komplexe Techniken, aber halten Sie dieses Lernen getrennt von der eigentlichen Arbeit, die Sie tun. Wenden Sie die einfachste Technik an , die funktioniert . Das Erlernen komplexerer Techniken hilft Ihnen, mögliche Probleme / Engpässe usw. zu erkennen.
Wie Sie anmerken, erfordern einige komplexe Probleme komplexe Lösungen. Der einzige Weg, sich darauf vorzubereiten, besteht darin, komplexe Probleme in der Sicherheit Ihrer Freizeit anzugehen, wenn es egal ist, wenn Sie sie falsch verstehen.
Ich kann mich nicht erinnern, wer es gesagt hat, aber:
"Die meisten Programmierer können eine komplexe Lösung für ein komplexes Problem finden, aber nur wenige können eine einfache Lösung für ein einfaches Problem finden."
Ich denke, es stimmt, dass viele Programmierer dazu neigen, Dinge zu komplizieren. Vielleicht vereinfachst du die Dinge, aber es ist wahrscheinlich das richtige Ende der Skala, von dem aus du anfangen kannst.
Ich würde ein kompliziertes Open-Source-Projekt finden und es in Ihrer Freizeit bearbeiten, das gibt Ihnen nicht nur die Möglichkeit, an einer komplexen Lösung zu arbeiten, sondern kann auch sehr lohnenswert sein, wenn Sie sich für die Open-Source-Sache interessieren. Oder, wie andere schon gesagt haben, Projekte mit komplizierten Lösungen zu entwickeln.
Bei projecteuler.net gibt es eine große Menge an Übungsproblemen. Auch Google "code kata".
Sie geben nicht an, was Ihr Fachgebiet ist / sind. Du beschreibst auch nicht, woher deine Arbeit kommt. Daher ist es schwierig, spezifische Ratschläge zu geben. Aber ...
Darf ich vorschlagen, dass Sie sich für ein Open-Source-Projekt entschieden haben, das zu Ihren Fähigkeiten und Interessen passt und einen Gegenstand aus der ToDo-Liste übernimmt und damit läuft? Die nette Sache ist nicht nur, dass Sie herausfordernde Probleme finden, sondern auch Ihren Ruf durch Ihre Beiträge verbessern.
Versuchen Sie, Ihre Ansicht zu erweitern, indem Sie etwas versuchen, das völlig unabhängig und neu ist.
Ich sehe, dass Sie hauptsächlich mit Microsoft-Technologie und mit Microsoft-Sprachen arbeiten. Es gibt so viele Dinge, die dir das eine oder andere beibringen könnten.
Meine Empfehlung aus eigener Erfahrung ist es, Lisp, Erlang oder solche funktionalen Sprachen und die Philosophie dahinter zu lernen. Vor allem die Shared Nothing-Architektur von Erlang zusammen mit seinen ungewöhnlichen Features wie Threading-Modell und Aktualisierung laufender Anwendungen könnte den Blickwinkel auf das nächste Projekt ändern.
Heißt das, Sie haben festgestellt, dass Sie einige Probleme aufgrund ihrer Komplexität und mangelndem Wissen nicht lösen können?
Nach meiner Erfahrung ist der einfachste Ansatz nicht immer der beste. Es ist jedoch am besten, zunächst den einfachen Ansatz zu betrachten und zu sehen, ob das Problem angemessen gelöst wird.
Es wurden so viele Projekte überentwickelt, weil x feature in der Zukunft verwendet werden könnte und nicht. Auf der anderen Seite kann Under-Engineering schlechte Leistung bedeuten.
Wenn es nötig ist, können Sie neu bestimmen, was Sie verbessern oder die Lösung erweitern müssen.
Bücher, die ich empfehlen kann: 1) Das Design alltäglicher Dinge 2) Entwurfsmuster (Die, die ich gelesen habe, war eine c / c ++, aber es gibt solche in der Sprache Ihrer Wahl). Das Gute an Entwurfsmustern ist, dass sie Ihnen helfen, einfache Lösungen für manchmal komplexe Probleme zu sehen. Ein gutes Verständnis der grundlegenden Entwurfsmuster verbessert Ihre Fähigkeit als Programmierer / Designer.
Tags und Links design