Sinto que sou bom em escrever código em partes, mas meus projetos são realmente ruins. A questão é: como melhoro meus projetos - e, por sua vez, me torno um designer melhor?
Eu acho que escolas e faculdades fazem um bom trabalho ao ensinar as pessoas a se tornarem boas na resolução de problemas matemáticos, mas vamos admitir o fato de que a maioria dos aplicativos criados na escola geralmente tem entre 1000 e 2000 linhas, o que significa que é principalmente um exercício acadêmico o que não reflete a complexidade do software do mundo real - da ordem de algumas centenas de milhares a milhões de linhas de código.
É aqui que acredito que mesmo projetos como o topcoder / project euler também não serão de grande ajuda, pois podem aprimorar sua capacidade de resolver problemas matemáticos - mas você pode se tornar um programador acadêmico; alguém que está mais interessado nas coisas legais e limpas, que não tem interesse nenhum no dia-a-dia das coisas mundanas e cabeludas com as quais a maioria dos programadores de aplicativos lida.
Então, minha pergunta é como melhoro minhas habilidades de design? Ou seja, a capacidade de projetar aplicativos de pequena / média escala que vão para alguns milhares de linhas de código? Como posso aprender habilidades de design que me ajudarão a criar um kit de editor de html melhor ou algum programa gráfico como o gimp?
Respostas:
A única maneira de se tornar realmente bom em algo é tentar, falhar espetacularmente, tentar novamente, falhar novamente um pouco menos do que antes e, com o tempo, desenvolver a experiência para reconhecer o que causa suas falhas, para que você possa gerenciar possíveis situações de falha mais tarde. Isso é tão verdadeiro quanto aprender a tocar um instrumento musical, dirigir um carro ou ganhar uma idade PWN grave no seu jogo de tiro em primeira pessoa favorito, assim como é aprender qualquer aspecto do desenvolvimento de software.
Não existem atalhos reais, mas existem coisas que você pode fazer para evitar que problemas ocorram enquanto você ganha experiência.
fonte
Bem, não há maçã de ouro para esse tipo de pergunta, e acho que talvez seja para todo programador descobrir o que é certo para ele. Aqui está a minha opinião, de qualquer maneira.
Você pode ler livros sobre o assunto. Ótimos livros. Livros fantásticos. Mas acho que esses livros só ajudam quando você tenta criar e projetar um aplicativo - e falhou.
Para mim, é tudo sobre experiência. Quando comecei como novato, li livros sobre como criar. Eu não entendi muito do conteúdo naquela época. Quando comecei a trabalhar e tive que projetar aplicativos, criei aplicativos muito confusos. Eles trabalharam, mas eram difíceis de manter. Então li esses livros novamente - e desta vez eu os entendi melhor.
Agora, continuo cometendo novos erros e aprendendo com os antigos.
fonte
Pare de projetar e aprenda a refatorar o código. O desenvolvimento incremental com refatoração contínua e agressiva resultará em um produto final muito mais limpo do que em qualquer projeto inicial.
fonte
Leia sobre padrões, claro, mas antes de tudo leia sobre antipadrões. O reconhecimento de antipadrões é importante e é mais fácil entender por que algo não deve ser feito dessa maneira do que deveria.
Consulte http://sourcemaking.com/antipatterns/software-development-antipatterns, por exemplo.
Escreva o código para que possa ser ajustado rapidamente se os requisitos forem alterados (o que é muito comum no ambiente de produção).
Seja super cético em adicionar "apenas mais um pequeno truque". Mais um aqui, mais um ali, e o código se torna insustentável.
Valorize o princípio aberto / fechado .
Escreva testes (como no TDD). Eles o forçam a pensar em seu design antes mesmo de implementá-lo.
Procure o código de projetos de código aberto (ou seja, de tamanho razoável). Eu costumava me surpreender - geralmente - vendo tantos níveis de abstração. Agora eu entendo que não é arte por arte, há uma razão pela qual é feito dessa maneira.
fonte
Um princípio que considero muito importante para o bom design é a decomposição: se uma classe é muito grande (mais do que, digamos, 300-400 linhas de código), divide-a em classes menores; se um método for muito grande (digamos, mais de 50 linhas de código) o decomponha; se um projeto contiver mais de 50 classes, decomponha-o.
A chave é estimar o tamanho do seu sistema e construir várias camadas de abstração (por exemplo, subsistema, aplicativo, projeto, módulo, classe, método) que permitem decompor seu código em unidades compreensíveis, com relações claras entre eles e poucas dependências.
fonte
É difícil, o que realmente estamos falando é a capacidade de abstrair em vez de criar um código melhor, mas duas coisas o farão melhorar e uma coisa o fará mais feliz:
"Melhor"
A) Encontre o melhor designer possível e emparelhe o programa / faça um design juntos. Peça-lhes que expliquem o que estão pensando ao resolver o problema, não se conforme com "simplesmente parece certo" e continuem cavando. Esse processo também ajudará a parte "mentora"
B) Imagine tudo como atores individuais e conversas entre eles. Cada um dos atores deve ter uma única função / responsabilidade e grupos deles lidam com sistemas diferentes. Se essa conversa funcionar e cada ator se sentir coerente e coeso, você estará a caminho.
E "mais feliz"
C) Se você tentou o seu melhor e ainda não está acontecendo, não há nada errado em aceitar que algumas pessoas não podem fazer algumas coisas. Você pode escrever um código rígido e brilhante, mas nunca conseguir projetar ou arquitetar. E daí? Eu não posso praticar esportes físicos para caramelo, eu não sou bonito e meu carro nunca será melhor que a média. Revel e utilizar o que você é bom.
fonte
Na minha experiência pessoal, ler o código de outras pessoas é uma boa fonte de "inspiração". Quero dizer, tente entender o design de outras pessoas e se pergunte por que ele / ela faz as coisas dessa maneira?
você pode encontrar muitos projetos de código aberto para pesquisa.
de qualquer maneira você precisa praticar.
fonte
Não viva com medo
Esforce-se pela simplicidade
Ouça seus usuários
Experimente muitas ideias
Crie algo e depois melhore
Trabalhe em coisas que agregam valor, abandone coisas que não
fonte
Aprenda a fazer as perguntas certas. Na maioria das vezes, você aprimora seu design olhando o problema de um ângulo diferente. Em particular, isso ajudará você a deixar de se concentrar na solução do problema em questão e procurar mais soluções que resolvam vários problemas relacionados.
fonte