ti-enxame.com

O Linq está tendo um efeito entorpecedor nos programadores .NET?

Muitos de nós começaram a ver esse fenômeno com o jQuery cerca de um ano atrás, quando as pessoas começaram a perguntar como fazer coisas absolutamente insanas, como recuperar a string de consulta com o jQuery . A diferença entre a biblioteca (jQuery) e a linguagem (JavaScript) aparentemente está perdido em muitos programadores e resulta em muitos códigos complicados e inapropriados sendo gravados onde não é necessário.

Talvez seja apenas minha imaginação, mas juro que estou começando a ver um aumento no número de perguntas em que as pessoas estão pedindo para fazer coisas igualmente insanas com o Linq, como encontre intervalos em um array classificado . Não consigo entender como as extensões do Linq são inadequadas para resolver esse problema, mas o mais importante é que o autor apenas assumiu que a solução ideal envolveria o Linq sem realmente pensar sobre isso (tanto quanto eu posso dizer). Parece que estamos repetindo a história, criando uma nova geração de programadores .NET que não sabem a diferença entre a linguagem (C #/VB.NET) e a biblioteca (Linq).

O que é responsável por esse fenômeno? É apenas hype? Tendências de pega? O Linq adquiriu uma reputação como uma forma de mágica, onde, em vez de realmente escrever o código, você apenas precisa pronunciar o encantamento certo? Não estou satisfeito com essas explicações, mas não consigo pensar em mais nada.

Mais importante, é realmente um problema e, em caso afirmativo, qual é a melhor maneira de ajudar a esclarecer essas pessoas?

36
Aaronaught

É basicamente porque a programação é fundamentalmente difícil. Exige muito pensamento lógico e estruturado de uma maneira que muitas pessoas simplesmente não sabem como fazer. (Ou simplesmente não pode fazer dependendo de quem você ouve.)

Coisas como LINQ e jQuery tornam muito mais fáceis certas tarefas comuns de manipulação de dados. Isso é ótimo para aqueles de nós que sabem o que estamos fazendo, mas o infeliz efeito colateral é que isso diminui a fasquia. Isso torna mais fácil para as pessoas que não têm idéia do que estão fazendo começar a escrever código e fazer as coisas funcionarem. E então, quando eles se tornam realidade e descobrem algo fundamentalmente difícil, para o qual suas técnicas simples de alto nível de abstração não são adequadas, elas se perdem, porque não entendem a plataforma em que sua biblioteca é construída.

Sua pergunta está no caminho certo, mas muito parecida com a controvérsia perene sobre videogames violentos "que tornam crianças violentas", ela tem a direção do link para trás. Técnicas de programação fáceis não tornam os programadores estúpidos; eles apenas atraem pessoas estúpidas para a programação. E realmente não há muito que você possa fazer sobre isso.

52
Mason Wheeler

Para mim, é o novo fenômeno do brinquedo. Algo novo sai (LINQ) e agora todo desenvolvedor quer brincar com ele.

Eles vêem o LINQ como um martelo e todo problema é um prego. Quem se importa se é mais simples fazê-lo de outra maneira? LINQ deve ser a resposta! Como quando todo mundo estava usando XML para TUDO! Arquivo de configuração? XML. Armazenando dados? XML. Etc etc

13
ist_lion

Eu acho que o LINQ oferece uma oportunidade muito boa em C # na solução de problemas usando uma abordagem mais funcional. Não devemos descartar um novo estilo de solução de problemas apenas porque já temos algo que funciona.

Vindo de um background SQL pesado, gosto de ter a opção de usar lógica baseada em conjunto no meu C # para descrever melhor a intenção de minhas operações.

Dito isto; o contexto é rei e qualquer coisa pode ser usada em excesso.

10
dotjosh

Se você usar o Linq corretamente e entendê-lo sob o capô, encontrará todos os tipos de novas técnicas de programação de ponta.

Portanto, se você pensar profundamente sobre as melhorias, eu argumento que isso o torna um programador melhor. Se um determinado programador realmente faz isso ou não, não é culpa do Linq.

O mesmo argumento pode ser feito para os mapeadores objeto-relacionais. Alguém realmente escreve consultas SQL brutas em tabelas de banco de dados? :)

2
Robert Harvey

LINQ e jQuery são os mais recentes "brinquedos" e os desenvolvedores adoram mostrar como eles podem fazer coisas usando as coisas mais recentes.

2
Dan Diplo

Algumas dessas coisas insanas são porque as pessoas estão usando o martelo errado, outras são porque estão construindo um super-martelo realmente elegante, mas encontraram um detalhe esquisito que precisa ser superado.

Por exemplo, se você vir uma pergunta sobre o uso do linq para gerar o linq dinâmico para usar contra o linq não dinâmico, nove em cada dez vezes, a pessoa ficará curiosa se for possível ou latirá na árvore errada, mas há algumas coisas que você pode resolver dessa maneira que são difíceis a ponto de irracionais de resolver de outra forma.

Eu tomo esse tipo de pergunta em duas partes:

  1. isso pode ser feito? Se sim, como seria?
  2. caso isso seja feito, existe um risco ou uma alternativa melhor

Descobri que quase sempre os faço nessa ordem. Ele responde à pergunta e também ajuda a explicar melhor possíveis alternativas.

1
Bill

Não conheço nenhum efeito entorpecedor na mente dos desenvolvedores, mas dê uma olhada aqui para o efeito de ferramentas/idiomas com mente ineficaz nas taxas. Fale sobre como baixar a barra!

0
Pete Wilson

Eu concordo com Mason Wheeler. No entanto, não é totalmente louco tentar resolver https://stackoverflow.com/questions/3762202/get-range-of-integers-with-linq operando em uma "sequência". O problema é que os iteradores de Java e .Net não suportam todas as três operações: valor atual, próximo valor e passam para a próxima. O Clojure pode fazer todos os 3, e suspeito que no Clojure seja mais fácil fazer isso corretamente. Python também tem co-rotinas, e eu quero tentar decifrá-lo. http://clojure.org/sequences)http: // www. try-clojure.org/

De fato, se a entrada é uma sequência infinita, como http://oeis.org/A007401 , então, o preguiçoso é o único caminho.

0
Job