Eu tenho trabalhado com javascript nos últimos 4 anos. Estou muito confiante em minhas habilidades de resolução de problemas e posso ver que minha qualidade de código está melhorando. Tento me manter atualizado com a comunidade e atualmente estou trabalhando com o ES2015 e o React.js. No entanto, sinto que não consigo entender os padrões de design da programação. Eu sei onde encontrar recursos sobre isso e já li livros sobre isso. Confio em meus colegas de trabalho para tomar decisões sobre a estrutura do projeto, mas não tenho problemas em trabalhar nela.
Sempre que preciso iniciar algo sozinho, procuro esses dois caminhos: Se estou usando uma grande biblioteca / estrutura como o React.js, costumo copiar o que a comunidade está fazendo; Se estiver usando algo menor, usarei o padrão do módulo. Sei que, depois de entender melhor esse assunto, poderei tomar melhores decisões, mas por enquanto estou completamente perdido.
Devo procurar educação superior sobre isso? Preciso de um mentor sobre esse assunto? Eu sou apenas estúpido? Isso é realmente difícil de entender?
fonte
Respostas:
Os padrões de design de software são soluções conhecidas para problemas conhecidos. A maneira como você os entende é aprendendo os padrões, entendendo como eles funcionam e sabendo quando é apropriado aplicar cada um ao seu design de software.
A maneira como você aprende padrões de design de software é estudando-os, um de cada vez. É um processo de educação contínua. Se você deseja reduzir a pegada de aprendizado, estude os padrões relacionados diretamente às tecnologias que você está usando no momento.
Algumas coisas importantes a saber sobre padrões de design:
Alguns padrões de design são arquitetônicos por natureza. MVC e MVVM são exemplos de tais padrões. Você usa esses padrões quando precisa dos benefícios organizacionais e estruturais que eles fornecem.
Alguns padrões de design são soluções alternativas para deficiências nas linguagens de programação. Você não precisará desses padrões se usar uma linguagem de programação mais expressiva, mas geralmente não poderá fazer essa escolha. A maioria dos padrões GoF está nesta categoria .
Use um padrão de software apenas quando estiver tentando resolver o problema que o padrão foi projetado especificamente para resolver. Se você está escrevendo um aplicativo unindo padrões de software, está fazendo errado.
Não existe um padrão de software existente para todos os problemas de computação existentes. Nesse caso, a programação seria apenas um exercício de correspondência de padrões.
Alguns padrões são realmente antipadrões. A complexidade adicional introduzida por esses padrões supera os benefícios que eles fornecem. Você terá que decidir por si mesmo, padrão por padrão, qual desses padrões evitará.
fonte
A abordagem de todo mundo para o aprendizado é um pouco diferente, e eu não tenho idéia de qual é a sua abordagem geral, mas acredito que você está fazendo um desserviço ao se rotular de "estúpido".
Pessoalmente, pelas minhas observações sobre o que muitos chamariam de "bem-sucedidos" engenheiros de software, designers, etc., todos têm um tema em comum no aprendizado: "experiência". Acredito que essa seja sua "educação superior" e você aprenderá mais rapidamente com ela do que comprando toneladas de livros da Amazon e lendo-os (um mau hábito meu).
Portanto, por exemplo, pegue um padrão GOF como o padrão de comando e implemente-o na sua escolha de idioma. Entenda quais benefícios ela oferece e as desvantagens. Os vários livros sobre padrões de design explicam isso para você, mas acho que é melhor aplicar esse conhecimento praticamente e aprender com ele. Não descarte o material de leitura, eles têm um objetivo, mas o mundo da TI dificilmente é um exercício de manual. Dito isto, essa é minha opinião e visão do mundo da TI e, em parte, representa lutas próprias ao iniciar minha carreira em engenharia de software. Além disso, vejo uma questão importante, mesmo com desenvolvedores de software muito experientes, é a impaciência e o esquecimento de gostar do que estão fazendo. Portanto, dedique um tempo ao seu aprendizado e lembre-se de realmente apreciar o que está fazendo, caso contrário, por que se preocupar em investir tempo nisso?
Além disso, faça uso da experiência prática de outras pessoas. Há uma infinidade de soluções de código aberto, ruins e boas, e você pode aprender com elas. Veja como eles aplicaram padrões e pense em como você o enfrentaria de maneira diferente.
Portanto, meu conselho geral é que, se você achar que sua abordagem está errada, mude. Olhe para as pessoas ao seu redor que você sente que estão aprendendo o material que você sente que não está entendendo e observe o que elas estão fazendo ou até pergunte a elas.
fonte
A resposta curta é que você não precisa deles. Você pode escrever código sem eles. Como Matthew disse nos comentários, isso é particularmente verdadeiro no JavaScript, onde a linguagem é bastante flexível e os projetos tendem a ser menores. Mas se você está programando há 4 anos, acho difícil acreditar que você não tenha tropeçado em coisas que parecem repetitivas ou estranhas. É nessas áreas que você está redescobrindo ou faltando padrões de design.
Exemplo: o sistema de eventos do JavaScript geralmente é inadequado para a tarefa em questão. Você nunca se sente capaz de combinar ou transformar fluxos de eventos? Ou essa série de eventos eram valores de primeira classe por si mesmos? Você precisa dos padrões Mediador e / ou Observador. Precisa de ligação de dados bidirecional? Mesma história.
A hierarquia frágil do protótipo caiu? Padrões Mixin / Trait / Subclass Factory para o resgate.
fonte
Encontre um mentor, alguém com uma experiência muito boa para aprender. Pergunte a ele, observe o código, envie uma revisão de código e tente colaborar com ele. Esta é a melhor maneira de aprimorar suas habilidades de codificação.
extra:
Colabore com um projeto OSS simples que você gosta
Quando houver duas maneiras de resolver o mesmo problema, sempre escolha a mais simples
Crie uma experiência extra com projetos paralelos em que você é livre para cometer todo tipo de erro estranho e aprenderá o padrão de design "da maneira mais difícil" (tm)
fonte