L'abondance de frameworks alourdit-elle les programmeurs? [fermé]


22

Avec tous les cadres disponibles de nos jours, les ORM , l' injection de dépendance (DI), l' inversion de contrôle (IoC), etc., je trouve que de nombreux programmeurs perdent ou n'ont pas les compétences de résolution de problèmes nécessaires pour résoudre des problèmes difficiles. Plusieurs fois, j'ai vu un comportement inattendu se glisser dans les applications et les développeurs ne pouvaient pas vraiment creuser et trouver les problèmes. Il me semble que la compréhension profonde de ce qui se passe sous le capot se perd.

Ne vous méprenez pas , je ne dis pas que ces cadres ne sont pas bons et n'ont pas fait avancer l'industrie, demandant seulement si, en conséquence involontaire, les développeurs n'acquièrent pas les connaissances et les compétences nécessaires pour une compréhension approfondie de systèmes.


Voici un bon article dont je me suis souvenu il y a quelques années et qui se rapporte à votre question. En particulier, l'auteur cite le manque de quelque chose qui ressemble à BASIC en tant que plate-forme d'apprentissage. salon.com/technology/feature/2006/09/14/basic
GrandmasterB

Nous formons les compétences de résolution de problèmes nécessaires pour choisir le cadre approprié parmi une tonne de cadres "encore un autre".
systempuntoout


1
Que signifie abaisser un groupe de personnes?
Randall Schulz

Réponses:


18

D'accord. Je travaille actuellement sur un progiciel tellement encombré de frameworks qu'il est presque impossible de comprendre l'entreprise. Une fois que les frameworks vous ont empêché de résoudre réellement les problèmes commerciaux au lieu de simplement résoudre MVC , ils sont allés trop loin. Comme vous le dites, de nombreux programmeurs de l'OMI essaient de créer un architecte / programme pour résoudre l'ORM et le MVC, et ils demandent rarement si cela aide réellement à résoudre le problème pour lequel le logiciel est là en premier lieu.


Oui, je sais que voir du SQL brut dans une page JSP est un "non-non", mais si vous êtes consultant sur le terrain, où cela correspond-il à une solution spécifique? Et non, cela ne signifie pas que le cadre n'est pas correct, tous les clients n'ont pas 20 000 $ à chaque tour pour s'assurer qu'un point de données mineur est projeté sur la page.


4
+1...just solving MVC, it has gone too far.
Talvi Watia

2
Je trouve drôle que Gratzy ait accepté cette réponse plutôt que la communauté ait voté la meilleure réponse à sa question subjective (qui dit le contraire). Il semble qu'il cherchait une réponse, plutôt que de poser une question.
Craige

1
@Craige - voulez-vous dire que la bonne réponse est toujours la réponse la plus populaire?
Jé Queue

1
@Xepoch - Pas du tout. En tant que question subjective, je pense que cette question n'a pas de vraie réponse pour commencer. Je trouve juste intéressant qu'il ait choisi la réponse qui dit le contraire de la plupart des autres réponses sur cette page. Je pense qu'il a trouvé la seule réponse qui reflétait ce qu'il a suggéré dans sa question, et a décidé qu'elle était correcte car elle était conforme à ses convictions.
Craige

31

C'est un argument qui revient régulièrement, dans de nombreux domaines et sous de nombreuses formes.

La forme générale de cet argument est:

Le fait d'avoir [x: outil / technologie] aggrave-t-il les gens à [y: fonction affectée par x]?

Par exemple:

  • Le logiciel de CAO fait-il pire pour les ingénieurs?
  • Les calculatrices du secondaire aggravent-elles les élèves en mathématiques?
  • Les logiciels sociaux retardent-ils les compétences sociales des personnes?
  • Les logiciels de comptabilité produisent-ils de pires comptables?

De mémoire, la réponse omniprésente est presque toujours: pas vraiment. Vous aurez toujours des gens qui sont bons et mauvais pour faire [y] mais maintenant ils sont juste mauvais à une facette différente de la compétence.

Une compréhension plus approfondie des principes fondamentaux de tout travail va aider, peu importe ce que vous faites - même les emplois qui sont considérés comme «correctifs». La connaissance aide toujours.


Les raquettes plus grosses nécessitent-elles moins de compétences de la part des joueurs de tennis?
systemovich

22

L'abstraction est un concept clé de la programmation informatique et les frameworks aident les programmeurs à y parvenir. C'est une bonne chose. Je doute que beaucoup d'entre nous souhaitent développer des systèmes complexes en langage assembleur! Le problème vient, je pense, lorsque les programmeurs ont peu d'idée de ce que la couche d'abstraction masque. En d'autres termes, vous devez avoir une idée de ce qui se passe sous le capot, même si vous n'interagissez pas ou ne vous connectez pas directement avec lui.

Je me souviens avoir développé certains des premiers sites Web dynamiques au milieu des années 90, en utilisant C et CGI (à une époque où la majorité des sites Web étaient encore en HTML statique). Il n'y avait pas vraiment de langages de script côté serveur matures (comme PHP ou ASP) et très peu de bibliothèques, vous avez donc dû écrire le flux de réponse HTTP complet sur le serveur avec chaque page. L'analyse des paramètres GET et POST nécessitait l'écriture de votre propre bibliothèque. C'était fastidieux, lent, laborieux et très sujet aux erreurs. Je ne le manque pas du tout!

Cependant, je pense également que des cadres comme les formulaires Web ASP.NET résument toute la nature sans état du Web au point que de nombreux nouveaux développeurs Web ont peu d'indices sur ce qui se passe réellement sous le capot. Cela conduit à un code inefficace et gonflé qui fonctionne mal parce que le développeur assemble les composants en utilisant une méthodologie "drag'n'drop" sans réaliser ce qui se passe au niveau HTTP.

Donc, je crois que les frameworks sont essentiels pour développer des logiciels de haut niveau, mais ils ne dispensent pas les développeurs d'avoir une certaine compréhension de ce qui est abstrait. Oui, les frameworks peuvent vous rendre stupide, mais seulement si vous ne les comprenez pas.


N'a pas pu être plus d' accord avec « des formulaires Web ASP.NET-abstraites toute la nature apatride du web » il y a eu tant de fois que je l' ai rencontré les développeurs qui ne comprennent pas ce qui se passe en dessous et causer des problèmes stupides avecIsPostBack
billy.bob

14

Est-ce que la transmission automatique ou les essuie-glaces à capteur de pluie font de nous de mauvais conducteurs?

Je ne pense pas qu'un codage sans framework implique nécessairement une meilleure compréhension des systèmes sous-jacents. Cela est démontré par les employeurs qui doivent poser des questions de codage simples lors des entretiens juste pour s'assurer que le candidat peut rassembler une méthode cohérente.

En fin de compte, c'est au développeur d'apprendre. Les bons le font, les mauvais non.

Et dans la même veine, choisir un framework juste parce qu'il est là sans réellement analyser ses capacités et ses avantages / inconvénients est également un signe de mauvaises pratiques de développement.


11
La transsexuelle automatique aggrave le conducteur :)
Jé Queue

3
Je ne suis pas en désaccord en demandant seulement si les frameworks permettent plus de mauvais développeurs?
Gratzy

2
@Gratzy: Je ne pense pas. Je pense que les mêmes mauvais développeurs continueraient de prospérer sans frameworks, juste de différentes manières.
Adam Lear

3
Je ne suis pas d'accord avec Anna. Sans framework, même les programmeurs paresseux devaient élargir leurs connaissances. Les cadres augmentent en fait (peut-être légèrement) le nombre de mauvais programmeurs.
Wizard

1
Pour contrer l'argument de la transsexuelle automatique: de nombreux conducteurs professionnels ne conduisent pas de voitures manuelles, et beaucoup d'autres vont passer des palettes au volant qui sont généralement contrôlées par ordinateur.
Steven Evers

10

Je pense que le problème est que les nouveaux programmeurs commencent à des niveaux d'abstraction de plus en plus élevés et ne sont donc pas exposés aux bits et octets des choses «sous le capot». Ils n'apprennent donc pas certains des principes de base du codage qui seraient les premières choses apprises ces dernières années.

Je secoue la tête à chaque fois ici lorsqu'un programmeur manifestement nouveau pose des questions, par exemple, sur le stockage de certaines données, et tout le monde leur dit immédiatement d'utiliser un outil ORM . Non, non, non, non, non ... ils doivent d'abord apprendre à le faire eux-mêmes.


4
Où s'arrête la mentalité «vous devez le faire vous-même»? Chaque programmeur doit-il écrire son propre compilateur avant d'en utiliser un?
mipadi

2
Ça ne s'arrête pas. Les programmeurs devraient toujours apprendre. Tous les programmeurs n'ont pas besoin d'écrire un compilateur. Mais je doute qu'il y ait beaucoup de grands programmeurs qui traversent toute leur carrière si peu curieux au sujet de leur métier qu'ils n'essaient pas à un moment donné d'en faire un.
GrandmasterB

6
Dans la logique de ne pas utiliser d'outil ORM jusqu'à ce que vous l'ayez "fait vous-même" en premier, je ne devrais probablement pas non plus utiliser une couche d'abstraction de base de données avant d'avoir écrit des appels à la base de données directement? Ou en fait, je ne devrais pas utiliser une base de données avant d'avoir écrit un système de stockage utilisant le système de fichiers? Eh bien, le système de fichiers est aussi une abstraction ... Par où commencer? Pour chaque génération, ils vont commencer à un niveau d'abstraction plus élevé, ou pour faire des choses plus intéressantes en moins de temps.
RationalGeek

2
Je pense que si un programmeur reste aux niveaux d'abstraction supérieurs, il peut être un programmeur parfaitement compétent et créer des applications métier parfaitement fonctionnelles à partir de ses cabines parfaitement fonctionnelles. Mais je doute qu'ils soient ceux qui créeront le prochain langage de programmation incontournable, ou celui qui créera la prochaine innovation dans les bases de données, ou qui écrivent le prochain jeu innovant qui pousse la technologie graphique à la limite.
GrandmasterB

2
@jkohlhepp: Dans tous les projets importants que j'ai jamais tentés, l'abstraction fournie a toujours fuité. Si je n'avais pas eu le désir de comprendre les choses profondes de ce qui se passait, j'aurais été perdu et improductif. Si jamais vous voulez faire des choses intéressantes , vous devez tout savoir.
Paul Nathan

4

Peut-être que la distribution de "stupidité" n'a pas vraiment changé, et que nous distribuons simplement des moyens plus grands et plus compliqués aux développeurs de se tirer une balle dans le pied?


4

Ce ne sont pas les cadres qui abaissent les programmeurs. Les programmeurs stupides seront stupides qu'ils utilisent ou non des frameworks.

Il est certainement vrai que la compréhension du travail de bas niveau qu'un outil ou un cadre vous aide à rationaliser fait de vous un meilleur utilisateur des outils et des cadres. Vous pouvez également déboguer les problèmes plus facilement et contourner les inévitables lacunes de fonctionnalité des outils.

Par exemple, j'ai suivi un cours de conception de compilateurs à l'université, où nous avons codé un analyseur LR à partir de zéro en C, avant d'apprendre à utiliser des générateurs d'analyseurs comme lex et yacc. C'était très éducatif et depuis lors, j'ai une meilleure compréhension et appréciation de tous les langages de programmation que j'ai utilisés.

Mais je ne dis pas que tous les programmeurs doivent travailler dur pour épiler la voiture de M. Miyagi pendant des années et des années avant de pouvoir travailler à un niveau élevé. Une grande partie du travail de programmation est intellectuelle, décidant de ce que le logiciel doit faire , pas du travail mécanique de codage dans un langage ou un outil particulier.

Ce travail intellectuel est l'endroit où l'intelligence contre le mutisme est encore plus important.


4

Citant l'excellent "Spending Moore's Dividend" de James Larus (je souligne):

Il y a trente ans, Bill Gates a changé l'invite dans Altair Basic de «PRET» à «OK» pour économiser 5 octets de mémoire. Aujourd'hui, il est inconcevable que les développeurs soient conscients de ce niveau de détail de leur programme, et encore moins concernés, et à juste titre, puisqu'un changement de cette ampleur est aujourd'hui imperceptible ... Il n'y a aucun moyen de produire les systèmes d'aujourd'hui en utilisant les pratiques artisanales et artisanales qui étaient possibles (nécessaires) sur des machines avec 4K de mémoire.

Je pense qu'il est probablement trompeur de dire que les cadres vous permettent d'éviter les compétences nécessaires pour résoudre des problèmes difficiles ou vous permettent d'éviter une compréhension approfondie. Au lieu de cela, la seule raison pour laquelle nous sommes en mesure de construire des systèmes complexes d'aujourd'hui (dont la complexité peut générer des problèmes difficiles et défier une compréhension approfondie) est parce que nous avons des cadres (et des langages OO de haut niveau récupérés par les ordures, et des IDE avec une aide contextuelle et vérification de la syntaxe à la volée, et toutes les autres avancées de développement logiciel qui sont parfois critiquées comme des programmeurs stupides).


2

Les cadres sont super. Mais vous devez savoir ce qui se cache sous le capot. Le problème est donc que les programmeurs s'appuient trop sur les frameworks, sans avoir suffisamment de connaissances du système sous-jacent.

Un exemple un peu dépassé est MFC : un programmeur pourrait gagner beaucoup de temps en utilisant MFC au lieu de l'API Windows, mais sans connaissance de l'API (ce qui signifie avoir un arrière-plan de travail réel avec l'API brute), ils seraient souvent bloqués . Cela ne s'est presque jamais produit, car un programmeur MFC typique avait une connaissance de l'API Windows.

Cependant, avec Windows Forms sur .NET , grâce à une meilleure encapsulation et un meilleur modèle d'objet, un programmeur peut presque ignorer qu'il utilise simplement un autre wrapper d'API Windows. Il y a donc moins de chances d'être coincé, mais lorsque cela se produit, cela peut faire mal.

Malheureusement, le temps de mise sur le marché est toujours plus court et les projets sont de plus en plus complexes, donc les programmeurs n'ont pas le temps d'aller en profondeur. C'est le triste état de l'industrie du logiciel ...


1

Il met l'intelligence là où elle doit être. Il n'est pas nécessaire de comprendre la mécanique quantique et la physique newtonienne pour mettre en place un mécanisme qui laisse tomber une balle du haut d'un bâtiment. Chaque nouvelle couche dans le logiciel doit s'appuyer sur la dernière et retirer le passe-partout de la construction d'applications utiles.

Ceux qui ont besoin ou veulent connaître les "trucs" derrière le cadre étudieront et enquêteront par crochet ou escroc.


1

Non, absolument pas. Les cadres sont, à la base, une combinaison d'une bibliothèque de sous-programmes et d'un modèle, deux outils de programmation éprouvés. C'est un pauvre ouvrier qui blâme ses outils ...

... et il y a beaucoup d'ouvriers pauvres qui utilisent et blâment les cadres.


Je pense que vous manquez peut-être le point de la question.Je ne dis pas que les cadres ne sont pas de bons outils, car il y a tellement d'outils là-bas qui fournissent tellement d'abstraction, cela permet-il à plus de gens de blâmer leur outil.
Gratzy

3
@Gratzy: bien sûr. Plus les gens utilisent un outil, plus il y a de chienne. Lorsque les ordinateurs étaient énormes, chers et rares, seule une poignée de personnes dans le monde pouvaient se plaindre de leur difficulté d'utilisation - maintenant tout le monde le fait. De même, les frameworks n'ont pas à rendre les programmeurs plus stupides - ils attirent simplement beaucoup de programmeurs stupides.
Shog9

1

Lors de la création de logiciels, les frameworks font gagner du temps. Lorsque vous apprenez à créer des logiciels, les cadres gênent la compréhension.

Je pense que le problème est principalement dû au fait que les ordinateurs sont devenus trop puissants. Pour la plupart des programmeurs, il n'y a plus de raison valable de "passer aux principes de base". Il faut juste plus de temps pour faire les mêmes choses, et au moment de l'exécution, il n'y a pas de différence significative. La seule façon de résoudre ce problème est d'introduire des restrictions artificielles, comme le font les compétitions comme js1k.

Peut-être que les écoles devraient avoir une matière dédiée "conception optimisée" où vous devez créer des programmes soumis à de fortes restrictions d'espace et de temps?


-1

Non, l'apprentissage des frameworks améliore les compétences d'un programmeur. Framework est l'extension d'un langage de programmation. Certaines langues sont déjà basées sur un framework. Je travaille avec PHP et Java. PHP a besoin d'un framework comme un moteur de template (parfois). Java n'a pas besoin d'un framework (la plupart du temps), il a déjà de nombreuses méthodes et bibliothèques.

La plupart des Frameworks auront des fonctions que les programmeurs utilisent encore et encore.


1
Aww, vous ne pourriez pas être plus mal dans votre réponse.
NB

-1

Pour jouer l'avocat du diable ici, je pense que les cadres (les «bons», de toute façon) peuvent en fait faire beaucoup pour favoriser l'éducation d'un programmeur. Un cadre bien conçu résoudra de nombreux problèmes, et en utilisant le cadre, le programmeur peut comprendre quels problèmes sont résolus et comment. Dans mon esprit, un cadre est (/ devrait être) une cristallisation des meilleures pratiques de programmation, et peut enseigner à un programmeur par l'exemple.


Pourquoi le downvote? Tout simplement parce que vous n'êtes pas d'accord? Huer.
Chris Allen Lane
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.