Bei all den heute verfügbaren Frameworks, ORMs , Dependency Injection (DI), Inversion of Control (IoC) usw., finde ich, dass viele Programmierer verlieren oder nicht über die Fähigkeiten zum Lösen von Problemen verfügen, die zum Lösen schwieriger Probleme erforderlich sind. Oft habe ich unerwartetes Verhalten in Anwendungen beobachtet, und die Entwickler waren nicht in der Lage, die Probleme wirklich zu untersuchen und zu finden. Mir scheint, dass ein tiefes Verständnis dafür verloren geht, was unter der Haube vor sich geht.
Versteht mich nicht falsch , ich behaupte nicht, dass diese Frameworks nicht gut sind und die Branche nicht vorangebracht haben. Ich frage nur, ob Entwickler nicht das Wissen und die Fähigkeiten erwerben, die für ein tiefgreifendes Verständnis von erforderlich sind systeme.
quelle
Antworten:
Einverstanden. Ich arbeite derzeit an einem Softwarepaket, das so stark von Frameworks belastet ist, dass es fast unmöglich ist, das Geschäft zu verstehen. Sobald Frameworks Sie von der eigentlichen Lösung von Geschäftsproblemen entbinden, anstatt nur MVC zu lösen , ist dies zu weit gegangen. Wie Sie sagen, IMO versuchen viele Programmierer, das ORM und die MVC zu lösen, und sie fragen sich selten, ob dies tatsächlich in irgendeiner Weise zur Lösung des Problems beiträgt, für das die Software überhaupt gedacht ist.
Ja, ich weiß, dass das Anzeigen von unformatiertem SQL in einer JSP- Seite ein "Nein-Nein" ist, aber wenn Sie ein Berater vor Ort sind, wo passt dies zu einer bestimmten Lösung? Und nein, das bedeutet nicht, dass das Framework nicht richtig ist. Nicht alle Kunden haben bei jeder Gelegenheit 20.000 USD, um sicherzustellen, dass ein kleinerer Datenpunkt auf die Seite projiziert wird.
quelle
...just solving MVC, it has gone too far.
Dies ist ein Argument, das in vielen Bereichen und in vielen Formen regelmäßig auftaucht.
Die allgemeine Form dieses Arguments lautet:
Verschlechtert das Vorhandensein von [x: Werkzeug / Technologie] die Situation bei [y: Funktion, die von x betroffen ist]?
Beispielsweise:
Aus dem Gedächtnis ist die allgegenwärtige Antwort fast immer: nicht wirklich. Sie werden immer Leute haben, die gut und schlecht darin sind, [y] zu tun, aber jetzt sind sie einfach schlecht in einer anderen Facette der Fertigkeit.
Ein tieferes Verständnis der Grundlagen bei jedem Job wird helfen, egal was Sie tun - auch Jobs, die als "Abhilfe" betrachtet werden. Wissen hilft immer.
quelle
Abstraktion ist ein Schlüsselbegriff der Computerprogrammierung, und Frameworks helfen Programmierern, dies zu erreichen. Das ist eine gute Sache. Ich bezweifle, dass viele von uns komplexe Systeme in Assemblersprache entwickeln möchten! Das Problem kommt, denke ich, wenn Programmierer wenig Ahnung haben, was die Abstraktionsschicht maskiert. Mit anderen Worten, Sie müssen eine Vorstellung davon haben, was unter der Haube vor sich geht, auch wenn Sie nicht direkt mit ihr interagieren oder eine Schnittstelle herstellen.
Ich erinnere mich, dass ich Mitte der 90er Jahre einige der ersten dynamischen Websites mit C und CGI entwickelt habe (zu einer Zeit, als die meisten Websites noch statisches HTML waren). Es gab nicht wirklich ausgereifte serverseitige Skriptsprachen (wie PHP oder ASP) und nur sehr wenige Bibliotheken, sodass Sie den gesamten HTTP-Antwortstrom mit jeder Seite auf den Server schreiben mussten. Für das Parsen von GET- und POST-Parametern muss eine eigene Bibliothek erstellt werden. Es war mühsam, langsam, mühsam und sehr fehleranfällig. Ich vermisse es kein bisschen!
Ich habe jedoch auch das Gefühl, dass Frameworks wie ASP.NET-Webformulare die gesamte statusfreie Natur des Webs bis zu einem Punkt abstrahieren, an dem viele neue Webentwickler nur wenig Ahnung haben, was tatsächlich unter der Haube vor sich geht. Dies führt zu ineffizientem, aufgeblähtem Code, der eine schlechte Leistung erbringt, da der Entwickler Komponenten mithilfe einer "Drag'n'Drop" -Methode zusammenführt, ohne zu bemerken, was auf der HTTP-Ebene vor sich geht.
Aus diesem Grund glaube ich, dass Frameworks für die Entwicklung von High-Level-Software unerlässlich sind, aber sie entbinden Entwickler nicht davon, ein gewisses Verständnis dafür zu haben, was abstrahiert wird. Ja, Frameworks können Sie dumm machen, aber nur, wenn Sie sie nicht verstehen.
quelle
IsPostBack
Machen uns Automatikgetriebe oder regensensierende Scheibenwischer schlechtere Fahrer?
Ich denke nicht, dass Codierung ohne Frameworks notwendigerweise ein besseres Verständnis der zugrunde liegenden Systeme impliziert. Dies zeigt sich darin, dass Arbeitgeber bei Vorstellungsgesprächen einfache Kodierungsfragen stellen müssen, um sicherzustellen, dass der Bewerber eine kohärente Methode zusammenstellen kann.
Letztendlich muss der Entwickler lernen. Gute tun es, schlechte nicht.
In ähnlicher Weise ist die Auswahl eines Frameworks, nur weil es vorhanden ist, ohne seine Fähigkeiten und Vor- und Nachteile zu analysieren, auch ein Zeichen für schlechte Entwicklungspraktiken.
quelle
Ich denke, das Problem ist, dass neue Programmierer auf immer höheren Abstraktionsebenen anfangen und sich daher nicht den Bits und Bytes von Dingen "unter der Haube" aussetzen. Sie lernen also nicht einige der wirklich grundlegenden Codierungsgrundlagen, die in den vergangenen Jahren als erstes gelernt wurden.
Ich schüttle jedes Mal den Kopf, wenn ein offensichtlich neuer Programmierer nach etwas fragt, etwa nach dem Speichern von Daten, und jeder fordert ihn sofort auf, ein ORM- Tool zu verwenden. Nein, nein, nein, nein, nein ... sie müssen erst lernen, wie man es selbst macht.
quelle
Vielleicht hat sich die Verteilung von "Dummheit" nicht wirklich geändert, und wir verteilen stattdessen einfach größere und kompliziertere Möglichkeiten für Entwickler, sich in den Fuß zu schießen?
quelle
Es sind nicht die Frameworks, die Programmierer verblüffen. Dumme Programmierer werden dumm sein, ob sie Frameworks verwenden oder nicht.
Es ist sicher richtig, dass Sie durch das Verständnis der einfachen Arbeit, die Ihnen ein Tool oder Framework bei der Rationalisierung hilft, ein besserer Benutzer der Tools und Frameworks werden. Sie können Probleme auch einfacher debuggen und die unvermeidlichen Funktionslücken der Tools umgehen.
Ich habe zum Beispiel eine Klasse in Compiler-Design am College besucht, in der wir einen LR-Parser von Grund auf in C codiert haben, bevor wir gelernt haben, Parser-Generatoren wie Lex und Yacc zu verwenden. Es war sehr lehrreich und seitdem habe ich ein besseres Verständnis und Verständnis für alle von mir verwendeten Programmiersprachen.
Aber ich sage nicht, dass jeder Programmierer jahrelang daran arbeiten muss, Mr. Miyagis Auto zu wachsen, bevor er auf hohem Niveau arbeiten darf. Eine Menge Programmierarbeit ist intellektuell und entscheidet, was die Software tun muss , nicht die mechanische Arbeit des Codierens in einer bestimmten Sprache oder einem bestimmten Werkzeug.
In dieser intellektuellen Arbeit ist Klugheit gegenüber Dummheit noch wichtiger.
quelle
Zitat aus James Larus 'ausgezeichneter "Spending Moore's Dividend" (Hervorhebung hinzugefügt):
Ich denke, es ist wahrscheinlich irreführend zu sagen, dass Sie durch Frameworks die Fähigkeiten vermeiden können, die zur Lösung schwieriger Probleme erforderlich sind, oder dass Sie ein tiefes Verständnis vermeiden. Stattdessen ist der einzige Grund , warum wir in der Lage sind, komplexe Systeme von heute zu erstellen (deren Komplexität schwierige Probleme verursachen und tiefes Verständnis verweigern kann), dass wir über Frameworks (und OO-Sprachen mit hoher Speicherbereinigung und IDEs mit kontextsensitiver Hilfe verfügen on-the-fly-Syntaxprüfung und alle anderen Softwareentwicklungsfortschritte, die manchmal als Verdummung von Programmierern kritisiert werden).
quelle
Frameworks sind großartig. Aber Sie müssen wissen, was unter der Haube ist. Das Problem ist also, dass sich Programmierer zu sehr auf die Frameworks verlassen, ohne über ausreichende Kenntnisse des zugrunde liegenden Systems zu verfügen.
Ein etwas veraltetes Beispiel ist MFC : Ein Programmierer könnte viel Zeit sparen, wenn er MFC anstelle der Windows-API verwendet, aber ohne Kenntnis der API (was bedeutet, dass er über den Hintergrund einer echten Arbeit mit der unformatierten API verfügt) stecken geblieben ist . Es passierte fast nie, da ein typischer MFC-Programmierer über Windows-API-Kenntnisse verfügte.
Mit Windows Forms unter .NET kann ein Programmierer jedoch dank der besseren Kapselung und des besseren Objektmodells fast ignorieren, dass er nur einen anderen Windows-API-Wrapper verwendet. Es gibt also weniger Chancen, festzusitzen, aber wenn es passiert, kann es weh tun.
Leider ist die Time-to-Market immer kürzer und die Projekte werden immer komplexer, so dass Programmierer nicht die Zeit haben, tief zu gehen. Das ist der traurige Zustand der Softwareindustrie ...
quelle
Es bringt den Smart dahin, wo er sein muss. Man muss die Quantenmechanik und die Newtonsche Physik nicht verstehen, um einen Mechanismus aufzubauen, der einen Ball von der Spitze eines Gebäudes fallen lässt. Jede neue Softwareschicht sollte auf der letzten aufbauen und die Kesselplatte aus der Konstruktion nützlicher Anwendungen entfernen .
Diejenigen, die das "Zeug" hinter dem Framework brauchen oder wissen wollen, werden es mit Haken oder Haken untersuchen und untersuchen.
quelle
Nein auf keinen Fall. Frameworks sind im Kern eine Kombination aus einer Subroutinenbibliothek und einer Vorlage, zwei bewährten Programmierwerkzeugen. Ein armer Arbeiter gibt seinen Werkzeugen die Schuld ...
... und es gibt viele arme Arbeiter, die Frameworks benutzen und beschuldigen.
quelle
Frameworks sparen beim Erstellen von Software Zeit. Wenn Sie lernen, Software zu erstellen, behindern Frameworks das Verständnis.
Ich denke, das Problem liegt hauptsächlich darin, dass Computer zu leistungsfähig geworden sind. Für die meisten Programmierer gibt es keinen vernünftigen Grund mehr, sich auf das Wesentliche zu konzentrieren. Es braucht einfach mehr Zeit, um das Gleiche zu tun, und zur Laufzeit gibt es keinen bedeutenden Unterschied. Die einzige Möglichkeit, dies zu lösen, besteht darin, künstliche Beschränkungen einzuführen, so wie es Wettbewerbe wie js1k tun.
Vielleicht sollten Schulen ein spezielles Fach "Optimiertes Design" haben, in dem Sie Programme mit starken räumlichen und zeitlichen Einschränkungen erstellen müssen?
quelle
Nein, das Erlernen der Frameworks verbessert die Fähigkeiten eines Programmierers. Framework ist die Erweiterung einer Programmiersprache. Einige Sprachen sind bereits Framework-basiert. Ich arbeite sowohl mit PHP als auch mit Java. PHP braucht ein Framework wie Template Engine (manchmal). Java benötigt (meistens) kein Framework, es verfügt bereits über viele Methoden und Bibliotheken.
Die meisten Frameworks verfügen über Funktionen, die Programmierer immer wieder verwenden.
quelle
Um hier scheinbar den Anwalt des Teufels zu spielen, denke ich, dass Rahmenbedingungen (jedenfalls "gute") tatsächlich einen großen Beitrag zur Förderung der Ausbildung eines Programmierers leisten können . Ein ausgereiftes Framework löst viele Probleme, und durch die Verwendung des Frameworks kann der Programmierer verstehen, welche Probleme wie gelöst werden. In meinen Augen ist ein Framework eine Kristallisation von Best Practices für die Programmierung (und sollte es auch sein) und kann einem Programmierer anhand von Beispielen beibringen.
quelle