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á perdida 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 encontrar intervalos em uma matriz classificada . Não consigo entender o quão inadequadas são as extensões do Linq para resolver esse problema, mas o mais importante é o fato de o autor simplesmente assumir que a solução ideal envolveria o Linq sem realmente pensar nisso (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?
fonte
Respostas:
É 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 quem sabe o que está fazendo, mas o efeito colateral lamentável é que ele 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 e 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.
fonte
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
fonte
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 tudo pode ser usado em excesso.
fonte
LINQ e jQuery são os mais recentes "brinquedos" e os desenvolvedores adoram mostrar como eles podem fazer coisas usando as coisas mais recentes.
fonte
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? :)
fonte
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:
Descobri que quase sempre os faço nessa ordem. Ele responde à pergunta e também ajuda a explicar melhor possíveis alternativas.
fonte
Eu não conheço nenhum efeito entorpecedor na mente dos desenvolvedores, mas dê uma olhada aqui para ver o efeito de ferramentas / linguagens insensatas nas taxas. Fale sobre como baixar a barra!
fonte
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 da maneira certa. Python também tem co-rotinas, e eu quero tentar decifrar isso. http://clojure.org/sequences http://www.try-clojure.org/
De fato, se a entrada for uma sequência infinita, como http://oeis.org/A007401 , a preguiça é a única maneira.
fonte
System.Linq
espaço para nome.yield
instrução existiam antes do Linq, assim como os delegados. Os fechamentos vieram no mesmo release do Linq, mas poucas operações "Linq" puras realmente exigem captura de variável local. Perguntando "Como posso fazer [descrição da operação / função totalmente iterativa] com o Linq?" trai uma profunda ignorância tanto do próprio Linq (o que ele deve fazer) quanto da própria linguagem.