Trübt die Fülle der Frameworks die Programmierer? [geschlossen]

22

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.

Gratzy
quelle
Hier ist ein guter Artikel, an den ich mich vor einigen Jahren erinnere und der sich auf Ihre Frage bezieht. Insbesondere führt der Autor das Fehlen einer BASIC-ähnlichen Lernplattform als Problem an. salon.com/technology/feature/2006/09/14/basic
GrandmasterB
Wir trainieren die Fähigkeiten zur Problemlösung, die erforderlich sind, um aus einer Vielzahl von "weiteren" Frameworks das richtige auszuwählen.
Systempuntoout
1
Was bedeutet es, eine Gruppe von Menschen niederzuschlagen?
Randall Schulz

Antworten:

18

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.

Jé Queue
quelle
4
+1...just solving MVC, it has gone too far.
Talvi Watia
2
Ich finde es lustig, dass Gratzy diese Antwort akzeptiert hat, anstatt dass die Community die beste Antwort auf seine subjektive Frage gewählt hat (was das Gegenteil sagt). Anscheinend suchte er nach einer Antwort, anstatt eine Frage zu stellen.
Craige
1
@Craige - implizieren Sie, dass die richtige Antwort immer die beliebteste Antwort ist?
Jé Queue
1
@ Xepoch - Überhaupt nicht. Als subjektive Frage habe ich das Gefühl, dass diese Frage zunächst keine echte Antwort hat. Ich finde es nur interessant, dass er die Antwort ausgewählt hat, die das Gegenteil der meisten anderen Antworten auf dieser Seite darstellt. Ich glaube, er fand die eine Antwort, die seinen Vorschlägen entsprach, und entschied, dass sie richtig war, weil sie seinen Überzeugungen entsprach.
Craige
31

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:

  • Macht CAD-Software schlechtere Ingenieure?
  • Machen Taschenrechner in der High School Schüler in Mathe schlechter?
  • Beeinträchtigt Social Software die persönlichen sozialen Fähigkeiten der Menschen?
  • Produziert Buchhaltungssoftware schlechtere Buchhalter?

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.

Steven Evers
quelle
Benötigen größere Schläger schlechtere Fähigkeiten von Tennisspielern?
Systemovich
22

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.

Dan Diplo
quelle
Konnte nicht mehr mit "ASP.NET-Webformulare abstrahieren die gesamte statusfreie Natur des Webs" übereinstimmen. Es gab so viele Male, in denen ich Entwickler getroffen habe, die nicht verstehen, was darunter vor sich geht und alberne Probleme mitIsPostBack
billy.bob verursachen
14

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.

Adam Lear
quelle
11
Automatische Tranny macht einen schlechteren Fahrer :)
Jé Queue
3
Ich bin nicht anderer Meinung, nur zu fragen, ob Frameworks mehr schlechte Entwickler ermöglichen.
Gratzy
2
@Gratzy: Das glaube ich nicht. Ich denke, die gleichen schlechten Entwickler würden ohne Frameworks immer noch gedeihen, nur auf unterschiedliche Weise.
Adam Lear
3
Ich bin nicht einverstanden mit Anna. Ohne Frameworks mussten selbst faule Programmierer ihr Wissen erweitern. Frameworks erhöhen tatsächlich (vielleicht nur geringfügig) die Anzahl der schlechten Programmierer.
Wizard
1
Um dem Argument der automatischen Transe entgegenzuwirken: Viele Berufskraftfahrer fahren keine manuellen Autos, und viele mehr werden Paddel-Schaltvorgänge durchführen, die im Allgemeinen computergesteuert sind.
Steven Evers
10

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.

GroßmeisterB
quelle
4
Wo hört die "du musst es selbst tun" -Mentalität auf? Muss jeder Programmierer seinen eigenen Compiler schreiben, bevor er einen verwendet?
mipadi 20.09.10
2
Es hört nicht auf. Programmierer sollten immer lernen. Nicht alle Programmierer müssen einen Compiler schreiben. Aber ich bezweifle, dass es viele großartige Programmierer gibt, die ihre gesamte Karriere so ungewöhnlich in Bezug auf ihr Handwerk durchlaufen, dass sie irgendwann nicht mehr versuchen, eines zu machen.
GrandmasterB
6
Unter der Logik, ein ORM-Tool erst dann zu verwenden, wenn Sie es "selbst gemacht" haben, sollte ich wahrscheinlich auch keine Datenbankabstraktionsschicht verwenden, bis ich direkt Aufrufe an die Datenbank geschrieben habe? Oder sollte ich eigentlich keine Datenbank verwenden, bis ich ein Speichersystem mit dem Dateisystem geschrieben habe? Nun, das Dateisystem ist auch eine Abstraktion ... Wo fange ich an? Für jede Generation werden sie auf einer höheren Abstraktionsebene beginnen oder interessantere Dinge in kürzerer Zeit erledigen.
RationalGeek,
2
Ich denke, wenn ein Programmierer auf den höheren Abstraktionsebenen bleibt, kann er ein perfekt kompetenter Programmierer sein und perfekt funktionierende Geschäfts-Apps aus ihren perfekt funktionierenden Kabinen erstellen. Aber ich bezweifle, dass sie die nächste Programmiersprache sind, die man unbedingt verwenden muss, oder die nächste Innovation in Datenbanken oder das nächste innovative Spiel, das die Grafiktechnologie auf den neuesten Stand bringt.
GrandmasterB
2
@jkohlhepp: In jedem bedeutenden Projekt, das ich jemals versucht habe, ist die bereitgestellte Abstraktion immer durchgesickert. Wenn ich nicht den Drang gehabt hätte, die tiefen Dinge des Geschehens zu verstehen, wäre ich verloren und unproduktiv gewesen. Wenn Sie jemals interessante Dinge tun wollen, müssen Sie alles wissen.
Paul Nathan
4

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?

Rodney Gitzel
quelle
4

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.

Bill Karwin
quelle
4

Zitat aus James Larus 'ausgezeichneter "Spending Moore's Dividend" (Hervorhebung hinzugefügt):

Vor 30 Jahren änderte Bill Gates die Eingabeaufforderung in Altair Basic von "BEREIT" in "OK", um 5 Byte Speicher zu sparen. Heutzutage ist es unvorstellbar, dass Entwickler sich dieser Detaillierungsgrade ihres Programms bewusst sind, geschweige denn darüber besorgt sind, und das zu Recht, da eine Änderung dieser Größenordnung heute nicht mehr zu bemerken ist ... Es gibt keine Möglichkeit , die heutigen Systeme zu produzieren unter Verwendung der handwerklichen, handwerklichen Praktiken, die auf Maschinen mit 4 KB Speicher möglich (notwendig) waren.

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).

Josh Kelley
quelle
2

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 ...

Magier
quelle
1

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.

Jesse C. Slicer
quelle
1

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.

Shog9
quelle
Ich denke, Sie verpassen möglicherweise den Punkt der Frage, den ich nicht vorschlage, dass Frameworks keine guten Tools sind, da es so viele Tools gibt, die so viel Abstraktion bieten, dass mehr Menschen die Möglichkeit haben, die Schuld an diesem Tool zu übernehmen.
Gratzy
3
@Gratzy: na klar. Je mehr Leute ein Werkzeug benutzen, desto mehr Hündin ist daran interessiert. Als Computer riesig, teuer und selten waren, konnten sich nur eine Handvoll Menschen auf der Welt darüber beschweren, wie schwer sie zu bedienen waren - jetzt tut es jeder . Ebenso müssen Frameworks Programmierer nicht langweilig machen - sie ziehen einfach viele, viele dumme Programmierer an.
Shog9
1

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?

Joeri Sebrechts
quelle
-1

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.

Pandu
quelle
1
Oh, du könntest mit deiner Antwort nicht falscher liegen.
NB
-1

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.

Chris Allen Lane
quelle
Warum die Gegenstimme? Einfach, weil Sie nicht einverstanden sind? Boo.
Chris Allen Lane