Ich programmiere seit einigen Jahren und bin im Allgemeinen gut darin, Probleme zu beheben und kleine bis mittlere Skripte zu erstellen. Im Allgemeinen bin ich jedoch nicht gut darin, große Programme objektorientiert zu entwerfen. Ein paar Fragen
Kürzlich hat ein Kollege, der über die gleiche Anzahl von Jahren Erfahrung verfügt wie ich , an einem Problem gearbeitet. Ich habe länger an einem Problem gearbeitet als er, aber er hat eine bessere Lösung gefunden und am Ende werden wir sein Design verwenden. Das hat mich wirklich berührt. Ich gebe zu, dass sein Design besser ist, aber ich wollte ein Design entwickeln, das so gut ist wie sein. Ich denke sogar darüber nach, den Job zu kündigen. Ich bin mir nicht sicher warum, aber plötzlich fühle ich mich unter Druck, zB was würden Junioren von mir und so weiter halten? Es ist normal? Oder denke ich ein bisschen zu viel darüber nach?
Mein Job beinhaltet das Programmieren in Python. Ich versuche, den Quellcode zu lesen, aber wie kann ich meine Designfähigkeiten verbessern? Gibt es gute Bücher oder Software, die ich studieren sollte?
Bitte erleuchte mich. Ich werde Ihre Hilfe sehr schätzen.
quelle
Antworten:
Ich denke, das ist ein sehr positives Zeichen Ihrer Fähigkeiten. Es kommt weitaus häufiger vor, dass Menschen, die Schwierigkeiten haben, im Team ein „besseres“ Design zu entwickeln, überhaupt nicht erkennen können, warum ein anderes Design besser ist.
Sie haben zwei wirklich große (und überraschend ungewöhnliche) Stärken:
Sie sind erst ein paar Jahre alt und haben noch einen langen Weg vor sich, aber mit dieser Einstellung werden Sie auf jeden Fall dorthin gelangen. Geben Sie einfach nicht auf. wir alle haben es mit solchen mentalen Rückschlägen zu tun. So oft ich die Chance bekomme, stecke ich Design Principles (NICHT das Gleiche wie Design Patterns) ein, und ich denke, dies ist ein perfektes Beispiel dafür, wo sie nützlich sind. Studieren Sie sie und üben Sie, sie in Ihren Entwürfen anzuwenden, bevor Sie wissen, dass sie in dieser Hinsicht einen weiteren Schritt nach vorne gemacht haben.
Denken Sie am Ende des Tages daran, dass das Entwerfen schwierig ist. Wir haben es jeden Tag mit komplexen Abstraktionen auf hoher Ebene zu tun, diese aus dem Nichts zu erstellen, sie gut funktionieren zu lassen und für Kollegen einfach zu bedienen, ist eine äußerst schwierige Aufgabe. Es braucht jahrelange Übung .
Denken Sie also daran: Es gibt eine ganze Reihe von Leuten, die zwei Designs nicht bewerten können und tatsächlich eines als besser als das andere anerkennen. Wie gut verstehen sie sich bei der Erstellung guter Designs?
Edit:
'nother tip, nachdem Sie sich ein wenig mit den Grundsätzen befasst und deren Anwendung geübt haben, denke ich, dass es ein weiteres Juwel aus einer anderen Frage gibt, das den Wert des Lernens einer Vielzahl von Sprachen mit unterschiedlichen Zwecken und Regeln zum Ausdruck bringt:
Dies wird dazu beitragen, die Vielfalt der Ideen zu erweitern, die beim Entwerfen einer Lösung in den Sinn kommen.
quelle
Der beste Weg zur Verbesserung beim Entwerfen von Software ist das Entwerfen von Software * . Eine Möglichkeit ist die Betrachtung von Designwettbewerben: TopCoder verfügt über ein Archiv mit über 100 Komponentendesigns, einschließlich UML-Designdokumentation und Implementierungen in Java und / oder C #. Nehmen Sie eine fertige Komponente, die Ihnen gefällt, lesen Sie die Anforderungsspezifikation und versuchen Sie, ein Originaldesign zu erstellen, um die Anforderungen zu erfüllen. Denken Sie ein oder zwei Stunden lang über das Problem nach und skizzieren Sie ein Klassendiagramm. Öffnen Sie dann das Gewinnerdesign und lesen Sie, was der Autor getan hat. Vergleichen Sie sein Design mit Ihrem, erkennen Sie die Unterschiede und prüfen Sie, ob Ihr Design besser ist. Überprüfen Sie die Scorecard des Wettbewerbs, um festzustellen, wie die Juroren das Design bewertet haben. Dies gibt Ihnen das Feedback, das Sie benötigen, um zu entscheiden, wie Sie Ihre Designfähigkeiten verbessern können.
* Dies gilt nicht nur für das Entwerfen von Software: Führen Sie einige Schritte mit qualifiziertem Feedback aus, achten Sie auf die darin enthaltenen Informationen und verbessern Sie Ihre Arbeit.
quelle
TopCoder archive of 100+ component designs,
. Kann solche Dateien nicht finden.Kündigen Sie nicht Ihren Job. Es ist besser, mit jemandem zusammenzuarbeiten, der über bessere Fähigkeiten verfügt als Sie, damit Sie von ihm oder ihr lernen können.
Schauen Sie sich das bessere Design an und finden Sie heraus, warum es besser ist. Lernen Sie das akzeptierte Design kennen und überlegen Sie, wie Sie ein ähnliches Design in anderen Situationen anwenden können. Sobald Sie wissen, warum es besser ist als Ihr Design, wissen Sie, was Sie beim nächsten Entwurf nicht tun sollten. Sprechen Sie mit dem anderen Entwickler und fragen Sie, wie er auf das Design gekommen ist.
Um die Designfähigkeiten zu verbessern, ist es am besten, Entwürfe zu erstellen und sie dann brutal mit sich selbst zu bewerten und zu bestimmen, wie sie verbessert werden können. Stellen Sie sich Fragen wie: Funktioniert es und erfüllt es die Anforderungen in allen Aspekten? Ist es wartbar? Wie kann ich dies testen? Verursacht es Leistungsprobleme? Wie wahrscheinlich ist es, dass sich die Anforderungen ändern und wie gut wird das Design? in der Lage sein, mit Veränderungen umzugehen. Informieren Sie sich über Entwurfsmuster und versuchen Sie dann, sie auf Ihre Entwürfe anzuwenden. Refactor gnadenlos nach der Entwicklung eines ersten Designs. Wenn Sie zusammen mit der Anwendung eine Datenbank entwerfen, ausführlich über Normalisierung und Leistungsoptimierung der Datenbank lesen, erfahren Sie viel über das Datenbankdesign, wenn Sie lernen, wie eine Datenbank am effektivsten und effizientesten funktioniert. Denken Sie bei Anwendungen an die DRY- und SOLID-Prinzipien, wenn Sie Ihr Design erstellen. Lesen Sie über Antimuster, um zu wissen, was Sie vermeiden sollten.
quelle
Ein besseres Design zu erkennen, ist eine wichtige Fähigkeit. Sie sollten dies fördern, wenn Sie einige der früheren Vorschläge zum Betrachten von Designs befolgen.
Nach welchen Kriterien haben Sie das andere Design besser beurteilt? War es einfacher und verständlicher? Hat es einen Leistungsvorteil gebracht? War es erweiterbarer? Es gibt viele Entwurfsprinzipien wie Zerlegung, Abstraktion, Ausblenden von Informationen und Modularität von Komponenten, anhand derer Sie Entwürfe beurteilen können und die Sie möglicherweise bereits erkennen.
Sie erhalten Ideen zu verschiedenen Grundsätzen für Designs aus den folgenden Quellen: http://www.cs.wustl.edu/~schmidt/PDF/design-principles4.pdf Software-Design auf Wikipedia Google "Software-Design-Grundsätze"
Verstehen Sie verschiedene Modelle für das Software-Design, z. B. objektorientiertes Design oder funktionales Design oder strukturiertes Analyse-Design. Dies können ganz unterschiedliche Denkweisen sein, um sich einer Designaufgabe zu nähern, und sie haben jeweils Bereiche, in denen sie sich auszeichnen. Lernen Sie diese als Werkzeuge für Ihre Toolbox. http://userpages.umbc.edu/~khoo/survey2.html
Stellen Sie sicher, dass Sie Design von Implementierung trennen, und versuchen Sie, die Dinge, die Sie als gute Designs betrachten, grafisch darzustellen, um die Sprach- und Implementierungsspezifikationen von den übergeordneten Designprinzipien zu trennen. Und um Ihr "Designauge" und Ihre Kommunikationsfähigkeiten zu entwickeln.
Zu guter Letzt, aber vielleicht am wichtigsten, ist das breite Lesen ein sehr gutes Werkzeug - es gibt viele interessante Dinge, von Fraktalen über Bayes'sche Analyse, Fuzzy-Logik bis hin zur Verarbeitung natürlicher Sprache, die Anregungen für später und unerwartet auftauchende Ideen liefern können. Mit dem Web können Sie Themen weit und breit lesen, nur zu Ihrer Unterhaltung und zur Unterhaltung, und es wird davon profitieren. Sie müssen kein Experte sein, sondern nur mit Begriffen und Ideen vertraut sein.
Viel Spaß - mach es nicht, wenn du es nicht wenigstens ein bisschen genießt!
quelle
Nun, Sie haben bereits den ersten Schritt getan. Sie geben zu, dass Sie etwas zu lernen haben, dass die Arbeit Ihres Kollegen besser ist als die Ihre, und dass Sie lernen und sich verbessern wollen.
Der zweite Schritt ist die Analyse. Schauen Sie sich seine Arbeit an und sagen Sie nicht nur, dass es besser ist; Finde heraus, warum es besser ist. Achten Sie auf bestimmte Details und Punkte, die er besser gemacht hat.
Wenn Sie das verstanden haben, extrahieren Sie die Prinzipien dahinter. Stellen Sie Fragen wie diese:
Versuchen Sie, die Dinge selbst herauszufinden, da Sie die Ideen besser verinnerlichen können, wenn Sie die Argumentationskette gefunden haben, die Sie selbst zu dem Ergebnis geführt hat. Sprechen Sie aber auch mit Ihrem Kollegen, um sicherzustellen, dass Sie die Dinge bekommen richtig. (Sie wollen doch keine Fehler in Ihren Überlegungen machen und ein schlechtes Prinzip verinnerlichen.) Und Sie können Ihren Kollegen um Hilfe bitten, wenn Sie die Dinge nicht herausfinden können. Das Programmieren ist eine Disziplin, in der Demut häufig geachtet wird, und viele Programmierer werden die Chance ergreifen, jemandem etwas Neues beizubringen. Dies ist wahrscheinlich ein wesentlicher Grund, warum StackOverflow so schnell so groß geworden ist.
quelle
Ich möchte auch hinzufügen (zusätzlich zu den tollen Antworten), dass es mehr gibt als "Er kann ein besseres Design schaffen als ich". Die anderen Antworten konzentrieren sich darauf, wie man beim Design besser werden kann - das ist alles und gut ... aber ...
Ich wette, dass SIE etwas Besseres tun können als Ihr Kollege. Nicht um ein Pissing Match oder irgendetwas zu kreieren (Sie können Y besser machen? Verdammt, ich kann X besser machen!), Sondern um die Wahrheit zu betonen, dass jeder Stärken und Schwächen hat.
Bei mir arbeiten 4 Entwickler. Es gibt Zeiten, in denen die beiden Haupt- "Programmierer" Sachen erstellen können, die mich einfach im Staub liegen lassen. Lässt meinen Kopf drehen und versucht, meinen Kopf um ihre Kreationen zu wickeln.
Aber ich kann SQL und Kommandozeilen-Skripte viel besser als sie und kann Dinge automatisieren, die SIE im Staub belassen.
Sind sie besser als ich? In manchen Gegenden ist das definitiv so. Zum Teufel, in vielen Gegenden sind sie es - ich bin bei weitem der Junior-Entwickler in meinem Geschäft und sie haben individuell jahrelange Erfahrung mit mir. Trotz dieser jahrelangen Erfahrung bin ich in einigen Bereichen besser als selbst sie.
Hör auf, dich auf die Tatsache zu konzentrieren, dass jemand besser in X ist als du. Diese Person ist möglicherweise in der Lage, Sie zu übertreffen, ohne es zu versuchen oder auch nur darüber nachzudenken, selbst nachdem Sie die nächsten 10 Jahre darin geübt haben. Nicht, dass Sie überhaupt nicht daran arbeiten sollten, Ihre Schwächen zu beheben, aber denken Sie daran, dass es für jede Stärke eine Schwäche gibt.
Konzentrieren Sie sich auf beide - Stärken und Schwächen - von Ihnen und Ihren Mitarbeitern.
quelle
In jedem Aspekt des Lebens finden Sie Menschen, die nicht so gut sind wie Sie, sowie Menschen, die besser sind als Sie, insbesondere nach nur "ein paar Jahren" Erfahrung.
Man muss von allen lernen.
Fühle dich nicht schlecht. Vielleicht ist Ihr Kollege ein Naturtalent. Sie sollten ihm aufrichtig gratulieren und so viel wie möglich von ihm lernen.
Lassen Sie sich nicht von Profis eifersüchtig auf die Gelegenheit ein, etwas zu lernen.
quelle
Ein paar Jahre sind wirklich nicht so viel. Und dann gibt es Leute mit besseren oder schlechtesten Designansichten. Ich kenne zum Beispiel Leute, die in der Lage sind, komplexe Algorithmen für Low-Level-Programme zu schreiben, aber nicht in der Lage sind, übergeordnete Designs und Konzepte wie Zusammenhalt und Abhängigkeiten zu verstehen. Dies ist jedoch kein De-facto-Zustand. Beide können Sie auf höherer Designebene verbessern (lesen Sie ein paar Bücher, probieren Sie ein paar Tricks zu Hause aus usw.) und Sie können auch feststellen, dass Ihr Programmierkollege auf anderen Gebieten weniger gut programmiert. Wenn Sie der Meinung sind, dass Sie sowohl in Bezug auf Erfahrung als auch in Bezug auf technisches Wissen ungefähr auf dem gleichen Niveau sind, kann dies eine zufällige Situation gewesen sein. Das nächste Mal haben Sie vielleicht bessere Gestaltungsideen. Nutzen Sie auch diese Gelegenheit und lernen Sie von Ihrem Kollegen, anstatt Ihren Job zu kündigen. Mach das nächste Mal zusammen ein Design, versuche seine Geheimnisse, seine Gedanken zu fangen. Programmieren ist wie ein Handwerk, es wird gelernt, indem man es tut und anderen zuschaut.
Designfähigkeiten kommen meistens mit Erfahrung und nachdem Sie ein paar wichtige Bücher gelesen haben. Ich würde dir folgendes empfehlen:
Keines dieser Bücher ist ein Wundermittel, aber das Lesen der ersten beiden Empfehlungen wird wahrscheinlich Ihre Sichtweise und Wahrnehmung der Programmierung für immer verändern.
quelle
Lass es nicht zu dir kommen. Wenn Sie jahrelange Erfahrung darin haben, Fehler zu beheben und kleine Programme zu erstellen, sind Sie hier genau richtig. Ihr Kollege hat wahrscheinlich jahrelange Erfahrung in der Gestaltung größerer Projekte.
Es ist unglaublich praktisch, mit den zugrunde liegenden Elementen vertraut zu sein, aber wenn Sie das Design verbessern möchten, müssen Sie ein paar Projekte entwerfen. Wiederholen, bis die Fertigkeit einsinkt.
Kurz gesagt, "langjährige Erfahrung" ist nicht immer gleichbedeutend. Mach, dass deine Jahre etwas wert sind.
quelle
"Besser werden" bedeutet oft, dass Sie Ihre Designs oder Ihren Code mit etwas / jemandem vergleichen, sorgfältig vergleichen, aus diesen Unterschieden lernen und kontinuierlich versuchen, Ihre zukünftigen Designs auf dieser Grundlage zu verbessern. Wenn Sie feststellen, dass Sie mehr lernen müssen, verlangsamen Sie diesen nützlichen Prozess. Wenn Sie an einen Ort ziehen, an dem es keine Menschen (oder andere Ressourcen) gibt, die Ihnen manchmal oder immer einen besseren Vergleich bieten können, können Sie diese Gelegenheit verpassen, Ihren Wettprozess besser zu lernen und zu verlangsamen.
quelle