ti-enxame.com

A abundância de frameworks está emburrecendo os programadores?

Com todos os frameworks disponíveis atualmente, ORMs , injeção de dependência (DI), Inversão de controle (IoC), etc., eu acho que muitos programadores estão perdendo ou não têm as habilidades de resolução de problemas necessárias para resolver questões difíceis. Muitas vezes, tenho visto um comportamento inesperado invadir os aplicativos e os desenvolvedores não conseguirem realmente cavar e encontrar os problemas. Parece-me que a compreensão profunda do que está acontecendo nos bastidores está se perdendo.

Não me interpretem mal , não estou sugerindo que essas estruturas não sejam boas e não tenham levado a indústria adiante, apenas perguntando se, como uma consequência não intencional, os desenvolvedores não estão adquirindo o conhecimento e a habilidade necessários para um entendimento profundo dos sistemas.

22
Gratzy

Acordado. Atualmente, trabalho em um pacote de software que é tão sobrecarregado por estruturas que torna quase impossível entender o negócio. Uma vez que as estruturas o impedem de resolver problemas de negócios em vez de apenas resolver MVC , ele foi longe demais. Como você afirma, muitos programadores da IMO tentam arquitetar/programar para resolver o ORM e o MVC, e raramente perguntam se isso realmente ajuda de alguma forma a resolver o problema para o qual o software existe.


Sim, eu sei que ver algum SQL bruto em uma página JSP é um "não-não", mas se você é um consultor de campo, onde isso se encaixa uma solução específica? E não, isso não significa que a estrutura não esteja certa, nem todos os clientes têm US $ 20 mil sentados a cada volta para garantir que um ponto de dados menor seja projetado na página.

18
Jé Queue

Este é um argumento que surge regularmente, em muitos campos e em muitas formas.

A forma geral deste argumento é:

Ter [x: ferramenta/tecnologia] torna as pessoas piores em [y: função afetada por x]?

Por exemplo:

  • O software CAD faz para engenheiros piores?
  • As calculadoras no ensino médio tornam os alunos piores em matemática?
  • O software social prejudica as habilidades sociais das pessoas?
  • O software de contabilidade produz contadores piores?

De memória, a resposta onipresente é quase sempre: não realmente. Você sempre terá pessoas que são boas e ruins em fazer [y], mas agora elas são apenas ruins em uma faceta diferente da habilidade.

Uma compreensão mais profunda dos fundamentos de qualquer trabalho vai ajudar, não importa o que você faça - mesmo os trabalhos que são considerados 'corretivos'. O conhecimento sempre ajuda.

31
Steven Evers

Abstração é um conceito-chave de programação de computador e estruturas ajudam os programadores a conseguir isso. Isto é uma coisa boa. Duvido que muitos de nós gostaríamos de desenvolver sistemas complexos em linguagem Assembly! O problema surge, eu acho, quando os programadores têm pouca ideia do que a camada de abstração está mascarando. Em outras palavras, você precisa ter alguma ideia do que está acontecendo nos bastidores, mesmo que não interaja diretamente ou faça interface com isso.

Lembro-me de desenvolver alguns dos primeiros sites dinâmicos em meados dos anos 90, usando C e CGI (em uma época em que a maioria dos sites ainda era HTML estático) . Não havia realmente nenhuma linguagem de script do lado do servidor madura (como PHP ou ASP) e muito poucas bibliotecas, então você tinha que escrever todo o fluxo de resposta HTTP para o servidor com cada página. Analisar GET e POST exigiam escrever sua própria biblioteca. Era tedioso, lento, trabalhoso e sujeito a erros. Não sinto falta disso nem um pouco!

No entanto, também sinto que estruturas como formulários da web do ASP.NET abstraem toda a natureza sem estado da web a um ponto em que muitos novos desenvolvedores da web têm poucas pistas do que realmente está acontecendo nos bastidores. Isso leva a um código ineficiente e inchado que tem um desempenho ruim porque o desenvolvedor está juntando os componentes usando uma metodologia "arrastar e soltar" sem perceber o que está acontecendo no nível HTTP.

Então, acredito que frameworks são essenciais para o desenvolvimento de software de alto nível, mas eles não isentam os desenvolvedores de ter algum entendimento do que está sendo abstraído. Sim, estruturas podem torná-lo burro, mas apenas se você não conseguir entendê-las.

22
Dan Diplo

A transmissão automática ou os limpadores de pára-brisa com sensor de chuva nos tornam motoristas piores?

Não acho que a codificação sem frameworks implique necessariamente um melhor entendimento dos sistemas subjacentes. Isso é evidenciado pelo fato de os empregadores terem de fazer perguntas simples de codificação nas entrevistas, apenas para garantir que o candidato possa reunir um método coerente.

Em última análise, cabe ao desenvolvedor aprender. Os bons fazem, os ruins não.

E na mesma linha, escolher uma estrutura apenas porque está lá, sem realmente analisar seus recursos e prós/contras também é um sinal de práticas de desenvolvimento deficientes.

13
Adam Lear

Acho que o problema é que os novos programadores estão começando em níveis cada vez mais altos de abstração e, portanto, não ficam expostos aos bits e bytes das coisas "nos bastidores". Portanto, eles não estão aprendendo alguns dos fundamentos de codificação realmente básicos que seriam as primeiras coisas aprendidas nos anos anteriores.

Eu balanço minha cabeça toda vez aqui quando um programador obviamente novo está perguntando algo sobre, digamos, armazenar alguns dados, e todos imediatamente lhes dizem para usar um ORM ferramenta. Não, não, não, não, não ... eles precisam aprender como fazer sozinhos primeiro.

10
GrandmasterB

Citando o excelente de James Larus "Spending Moore's Dividend" (ênfase adicionada):

Trinta anos atrás, Bill Gates alterou o Prompt no Altair Basic de “READY” para “OK” para economizar 5 bytes de memória. Hoje, é inconcebível que os desenvolvedores estejam cientes desse nível de detalhe de seu programa, muito menos preocupados com ele, e com razão, já que uma mudança dessa magnitude é hoje imperceptível ... Há de jeito nenhum poderíamos produzir os sistemas de hoje usando as práticas artesanais e artesanais que eram possíveis (necessárias) em máquinas com 4K de memória.

Acho provavelmente enganoso dizer que os frameworks permitem que você evite as habilidades necessárias para resolver questões difíceis ou que evite um entendimento profundo. Em vez disso, o  A razão pela qual somos capazes de construir os sistemas complexos de hoje (cuja complexidade pode gerar problemas difíceis e desafiar o entendimento profundo) é porque temos estruturas (e OO linguagens coletadas de lixo, e IDEs com alto nível ajuda sensível ao contexto e verificação de sintaxe em tempo real e todos os outros avanços de desenvolvimento de software que às vezes são criticados como emburrecendo os programadores.

4
Josh Kelley

Talvez a distribuição de "estupidez" não tenha realmente mudado e, em vez disso, estejamos simplesmente distribuindo maneiras maiores e mais complicadas para os desenvolvedores darem um tiro no próprio pé?

4
Rodney Gitzel

Não são as estruturas que emburrecem os programadores. Programadores burros serão burros, quer usem frameworks ou não.

Certamente é verdade que entender o trabalho de baixo nível que uma ferramenta ou estrutura ajuda a simplificar o torna um usuário melhor das ferramentas e estruturas. Você também pode depurar problemas mais facilmente e contornar as inevitáveis ​​lacunas de funcionalidade das ferramentas.

Por exemplo, eu fiz uma aula de Design de Compilador na faculdade, onde codificamos um analisador LR do zero em C, antes de aprender a usar geradores de analisador como Lex e yacc. Foi muito educativo e, desde então, compreendi e apreciei melhor todas as linguagens de programação que usei.

Mas não estou dizendo que todo programador deve trabalhar duro encerando o carro do Sr. Miyagi por anos e anos antes de poderem trabalhar em alto nível. Muito trabalho de programação é intelectual, decidindo o que o software precisa fazer, não o trabalho mecânico de codificação em uma linguagem ou ferramenta específica.

Esse trabalho intelectual é onde a inteligência versus a estupidez é ainda mais importante.

4
Bill Karwin

Frameworks são ótimos. Mas você tem que saber o que está por baixo do capô. Portanto, o problema é que os programadores confiam demais nas estruturas, sem ter conhecimento suficiente do sistema subjacente.

Um exemplo um tanto desatualizado é MFC : um programador pode economizar muito tempo usando MFC em vez da API do Windows, mas sem conhecimento da API (o que significa tendo um histórico de trabalho real com a API bruta), eles frequentemente estariam travados. Quase nunca acontecia, porque um programador MFC típico tinha conhecimento de API do Windows.

No entanto, com Windows Forms em . NET , graças ao melhor encapsulamento e melhor modelo de objeto, um programador pode quase ignorar que está usando apenas outro wrapper de API do Windows. Portanto, há menos chances de ficar preso, mas quando acontecer, pode doer.

Infelizmente, o tempo de lançamento no mercado é sempre mais curto e os projetos estão cada vez mais complexos, então os programadores não têm tempo para ir fundo. Esse é o triste estado da indústria de software ...

2
Wizard

Ao construir software, as estruturas economizam tempo. Ao aprender a construir software, as estruturas atrapalham o entendimento.

Acho que o problema é principalmente o fato de os computadores terem ficado muito poderosos. Para a maioria dos programadores, não há mais razão sensata para "ir ao básico". Leva mais tempo para fazer as mesmas coisas e, no tempo de execução, não há diferença significativa. A única maneira de resolver isso é introduzir restrições artificiais, como fazem competições como o js1k.

Talvez as escolas devam ter um assunto dedicado "design otimizado", onde você tem que construir programas sob fortes restrições de espaço e tempo?

1
Joeri Sebrechts

Ele coloca a inteligência onde precisa estar. Não é preciso entender a mecânica quântica e a física newtoniana para configurar um mecanismo que lança uma bola do topo de um edifício. Cada nova camada no software deveria construir sobre a última e remover o clichê da construção de aplicativos úteis.

Aqueles que precisam ou querem saber as "coisas" por trás da estrutura irão estudar e investigar por bem ou por mal.

1
Jesse C. Slicer

Não, absolutamente não. Frameworks são, em sua essência, uma combinação de uma biblioteca de sub-rotinas e um modelo, duas ferramentas de programador testadas e comprovadas. 'Tis um pobre trabalhador culpa suas ferramentas ...

... e há um lote de trabalhadores pobres usando e culpando frameworks.

1
Shog9