Beaucoup d'entre nous ont commencé à voir ce phénomène avec jQuery il y a environ un an lorsque des gens ont commencé à demander comment faire des choses complètement folles, telles que récupérer la chaîne de requête avec jQuery . La différence entre la bibliothèque (jQuery) et le langage (JavaScript) est apparemment perdue pour de nombreux programmeurs, ce qui entraîne l'écriture de nombreux codes inappropriés et compliqués là où ils ne sont pas nécessaires.
C’est peut-être juste mon imagination, mais je jure que je commence à voir une légère augmentation du nombre de questions où les gens demandent à faire des choses aussi folles avec Linq, comme trouver des plages dans un tableau trié . Je ne peux pas comprendre à quel point les extensions Linq sont tout à fait inappropriées pour résoudre ce problème, mais plus important encore, le fait que l'auteur présume que la solution idéale impliquerait Linq sans y penser réellement (pour autant que je sache). Il semble que nous répétions l’histoire, en créant une nouvelle génération de programmeurs .NET qui ne peuvent pas faire la différence entre le langage (C # / VB.NET) et la bibliothèque (Linq).
Qu'est-ce qui est responsable de ce phénomène? Est-ce juste un battage publicitaire? Tendances Magpie? Linq a-t-il acquis une réputation de magie dans laquelle, au lieu d'écrire du code, il suffit de prononcer la bonne incantation? Je suis à peine satisfait de ces explications, mais je ne peux pas penser à autre chose.
Plus important encore, s'agit-il vraiment d'un problème et, dans l'affirmative, quel est le meilleur moyen d'aider à éclairer ces personnes?
la source
Réponses:
C'est essentiellement parce que la programmation est fondamentalement difficile. Cela nécessite beaucoup de réflexion logique et structurée d'une manière que beaucoup de gens ne savent tout simplement pas faire. (Ou tout simplement ne peut pas faire, en fonction de qui vous écoutez.)
Des choses comme LINQ et jQuery facilitent beaucoup certaines tâches courantes de manipulation de données. C’est formidable pour ceux d’entre nous qui savent ce que nous faisons, mais l’effet secondaire regrettable est que cela abaisse la barre. Cela facilite la tâche aux personnes qui n'ont aucune idée de ce qu'elles font pour commencer à écrire du code et faire fonctionner les choses. Et ensuite, quand ils se rendent compte de la réalité et trouvent quelque chose de fondamentalement difficile pour lequel leurs techniques simples de niveau d'abstraction élevé ne sont pas bien adaptées, ils sont perdus, car ils ne comprennent pas la plate-forme sur laquelle leur bibliothèque est construite.
Votre question est en quelque sorte sur la bonne voie, mais un peu comme la controverse éternelle sur les jeux vidéo violents "qui transforment les enfants en violence", le sens du lien est inversé. Les techniques de programmation faciles ne rendent pas les programmeurs stupides; ils attirent simplement des personnes stupides à la programmation. Et vous ne pouvez vraiment rien faire à ce sujet.
la source
Pour moi, c'est le nouveau phénomène du jouet. Quelque chose de nouveau est sorti (LINQ) et maintenant chaque développeur veut jouer avec.
Ils considèrent LINQ comme un marteau et chaque problème est un clou. Qui se soucie s'il est plus simple de le faire autrement? LINQ doit être la réponse! Comme quand tout le monde utilisait XML pour TOUT! Fichier de configuration? XML. Stocker des données? XML. Etc
la source
Je pense que LINQ offre une très bonne opportunité en C # de résoudre des problèmes en utilisant une approche plus fonctionnelle. Nous ne devrions pas rejeter un nouveau style de résolution de problèmes simplement parce que nous avons déjà quelque chose qui fonctionne.
Venant d'un contexte SQL chargé, j'aime bien avoir la possibilité d'utiliser une logique basée sur les ensembles dans mon C # pour mieux décrire le but de mes opérations.
Cela dit; le contexte est roi et tout peut être surutilisé.
la source
LINQ et jQuery sont les derniers "jouets" et les développeurs aiment montrer comment ils peuvent faire des choses en utilisant les dernières nouveautés.
la source
Si vous utilisez correctement Linq et le comprenez sous le capot, vous découvrirez toutes sortes de nouvelles techniques de programmation de pointe.
Donc, si vous réfléchissez profondément aux améliorations, je soutiens que cela fait de vous un meilleur programmeur. Que ce soit ou non un programmeur, ce n’est pas la faute de Linq.
Le même argument peut être fait pour les mappeurs relation-objet. Est-ce que quelqu'un écrit réellement des requêtes SQL brutes sur des tables de base de données? :)
la source
Certaines de ces choses insensées sont dues au fait que les gens utilisent le mauvais marteau, d’autres parce qu’elles construisent un super-marteau très élégant, mais elles ont rencontré un détail insolite qui doit être surmonté.
Par exemple, si vous voyez une question sur l'utilisation de linq pour générer linq dynamique à utiliser contre linq non dynamique neuf fois sur dix, la personne est simplement curieuse de savoir si cela est possible ou aboie le mauvais arbre, mais il existe quelques Ce que vous pouvez résoudre de cette manière est difficile au point de devenir déraisonnable autrement.
Je prends ce genre de questions en deux parties:
J'ai constaté que je les fais presque toujours dans cet ordre. Il répond à la question et vous aide également à mieux expliquer les alternatives potentielles.
la source
Je ne connais aucun effet anormal sur les esprits des développeurs, mais jetez un coup d'œil ici à l'effet des outils / langages insensés sur les taux. Parlez de baisser la barre!
la source
Je suis d'accord avec Mason Wheeler. Cependant, il n'est pas complètement fou d'essayer de résoudre https://stackoverflow.com/questions/3762202/get-range-of-integers-with-linq en opérant sur une "séquence". Le problème est que les itérateurs de Java et .Net ne prennent pas en charge les 3 opérations: valeur actuelle, valeur suivante et passage à la suivante. Clojure peut faire les 3, et je soupçonne qu’il est plus facile de le faire correctement. Python a également des co-routines, et je veux essayer de résoudre ce problème. http://clojure.org/sequences http://www.try-clojure.org/
En fait, si l'entrée est une séquence infinie, telle que http://oeis.org/A007401 , alors paresseux est le seul moyen.
la source
System.Linq
espace de noms.yield
déclaration existaient avant Linq, tout comme les délégués. Les fermetures ont été publiées dans la même version que Linq, mais peu d’opérations "Linq" pures nécessitent en réalité une capture de variable locale. Demander "Comment puis-je faire [description d'opération / fonction entièrement itérative] avec Linq?" trahit une profonde ignorance à la fois de Linq lui-même (ce qu'il est censé faire) et de la langue elle-même.