Às vezes, olho fixamente para o espaço ou desenho idéias e escrevo alguns pseudo-códigos no papel. Em seguida, raspei o papel e inicio novamente; quando penso que tenho a solução correta para o problema, começo a escrever o código.
É normal pensar por dias sem escrever nenhum código? Isso é um sinal de que estou abordando o problema totalmente errado? Me deixa nervoso por não ter nenhum código tangível escrito no meu IDE.
Respostas:
Dependendo do problema que você está tentando resolver, a fase de design pode levar semanas e meses (se não anos), não apenas dias.
É preciso experiência para não iniciar o código imediatamente. Pensar na arquitetura e no design de alto nível deve levar dias, se não mais, definitivamente algo que deve acontecer antes de você começar a escrever seu código.
fonte
Isso geralmente é chamado de "Paralisia da análise"
É comum, mas errado. Em algum momento, você precisa testar as várias idéias para ver o que funcionará melhor para você e, em seguida, aprimorá-lo gradualmente.
Leitura recomendada ao programador Pragmático Especificamente no capítulo 2 da seção "Balas de rastreamento"
fonte
Isso é completamente comum. No entanto, se você adotar uma abordagem "Teste primeiro" ou TDD, é menos comum e pode ajudá-lo a formular melhor suas idéias.
fonte
Os hábitos são geralmente o resultado de abordagens de tentativa e erro e continuando o que nos dá os resultados desejados e evitando o que não acontece. Fazer o que gostamos e evitar o que não gostamos também entra em jogo. Isso funciona até certo ponto, porque, eventualmente, faremos algo que não gostamos para que o aluguel seja pago.
Depende do que o levou a isso e a seus motivos. Aqui estão alguns:
Felizmente, você descobriu que, se criar mais, seu código será melhor. Se você puder olhar para trás e perceber que não importa quanto tempo você gasta em design, convém mudar. Outra consideração é a frequência com que você descobre problemas depois de escrever o código, em comparação com o trabalho com seus designs. Se você não encontrar problemas até depois de escrever algum código, considere um equilíbrio e comece a codificar algo mais cedo ou mais tarde. Talvez essa abordagem possa ser aplicada ao uso de tecnologias mais recentes ou a um recurso muito complexo.
Não sei se tenho disciplina para seguir uma abordagem ou outra, mesmo quando descubro que uma funciona melhor que a outra. Às vezes sinto necessidade de ir ao quadro branco; outros o teclado.
fonte
É muito comum e acho que é uma maneira melhor de lidar e entender as coisas. Enquanto trabalho em um projeto, fico preso muitas vezes e leva um dia ou dois para entender como posso abordá-lo melhor. Mesmo depois que o problema é resolvido, espero um dia passar. Isso me deixa mais atualizado e pronto.
É um fenômeno natural e bom para um desenvolvedor interceptar sua mente entre os momentos.
fonte
Quando fiz um curso de gerenciamento de projetos, uma das coisas que o instrutor nos contou sobre o planejamento, que ficou na minha cabeça, foi que a regra geral que eles ensinavam nas forças armadas era a figura 1/3 do tempo para o planejamento . Portanto, se você tivesse uma operação que exigisse a conclusão daqui a três meses, dedique um mês ao planejamento antes de iniciar a execução.
fonte
Na minha opinião, existem três abordagens, cada uma adequada para uma situação de codificação específica
Já vi um problema semelhante antes, por isso tenho uma boa idéia dos padrões a serem aplicados e fica claro como a solução deve se comportar e responder.
=> Use BDD / TDD iniciando nas soluções desejadas e trabalhando no código. (Ok, às vezes trapaceio e escrevo um pouco de código e depois o teste - tipo uma abordagem aninhada 2. -> 1.).
Tenho uma boa idéia de padrões para aplicar, mas não tenho certeza de como a solução deve ser.
=> Protótipo para ver que tipos de coisas interessantes aparecem. Vá para 1. quando descobrir quais coisas interessantes são desejadas.
Não tenho certeza de quais padrões aplicar.
=> Pense sobre o problema e como as várias maneiras de abordar o problema influenciam o código. Vá para 2) ou 1), dependendo do resultado desse exercício.
Em outras palavras, a resposta é a favorita do engenheiro: depende.
fonte
É melhor passar um mês pensando e projetando do que criar um protótipo rápido com base em um design abaixo do padrão, que você precisará moldar. Especialmente se você estiver em um time; depois que outras pessoas começam a depender do seu código, é muito mais difícil implementar um design melhor com uma API diferente.
fonte
Concordo com as outras respostas que, em princípio, dedicar tempo para pensar em um problema / solução é uma boa idéia. No entanto, se você sentir que está empacado, tenho algumas recomendações sobre maneiras de tornar o processo de planejamento um pouco mais coerente:
Crie artefatos de design. E daí se você não escrever código? Talvez você apenas anote um diário de seus pensamentos. Ou um esboço de uma solução geral. Ou mesmo apenas um resumo muito bom do problema que você refina com o tempo. Ao considerar as idéias e aceitá-las / rejeitá-las, mantenha um registro do seu raciocínio sobre o assunto. Dessa forma, no final do dia, você ainda pode apontar os resultados do mundo real como prova de seu trabalho.
Falar com pessoas! Não há nada como ter um ser humano vivo e respirador com quem discutir idéias. Se você acha que está preso, converse com alguém. Pegue alguém - qualquer um! - e explique o problema para eles. Esboce seus pensamentos sobre como resolver o problema. Mesmo que tudo o que eles façam seja inspirar, expirar e piscar por dez minutos enquanto você balbucia, as chances são de que você descubra novos conhecimentos apenas no processo de explicar o problema .
fonte
Como disse Satchel Paige, "às vezes eu sento e penso, e às vezes eu apenas sento".
Acho que o que ele estava dizendo é que às vezes é bom clarear sua mente, pois isso pode levar você a pensar no seu problema de uma maneira diferente. Portanto, se você não está estragando o código, pode ter uma solução ou ideia que pode ter escapado de você. Portanto, sim, é normal e uma boa prática não entrar diretamente na codificação.
Existem duas maneiras pelas quais eu mesmo faço esse processo. Crio uma pasta na qual tenho um arquivo de texto e quaisquer desenhos relacionados ao projeto. Anoto minhas idéias e tento salvar todo o processo de pensamento da melhor maneira possível. Também criarei um projeto do bloco de rascunho, onde posso testar rapidamente idéias simples, de algoritmos a layouts de CSS.
fonte
Programa = Algoritmo + Estrutura de Dados
IMHO, o processo de design (resolução de problemas) é totalmente determinante. Os detalhes da implementação (problema técnico) seguem e resolvem naturalmente.
fonte
Aqui está o meu caso.
Começando do zero Primeiro, é necessária uma idéia aproximada do que você deseja. Tente obter uma lista de alguns requisitos ou crie-os. Deve demorar um pouco para descobrir as coisas aqui. Depois de ter pelo menos uma peça que você confia que deseja, conhecendo a maior parte da interface dessa peça, comece a codificar.
Corrigindo um problema com o código existente Primeiro, rastreie o problema. Isso pode exigir algum tempo para não escrever código real (algum código de depuração pode ser escrito, mas isso normalmente não será mantido). Depois de encontrar o problema, dependendo da complexidade, comece a escrever o código para tentar corrigi-lo. Pouco pensamento deve ser necessário quando o bug for conhecido. Se o problema parecer uma das principais falhas de design, consulte a próxima seção.
Alterações no projeto / principais recursos É provavelmente o que exigirá mais reflexão. Deve-se considerar a preservação da estrutura, a compatibilidade com versões anteriores etc. Pensar na melhor mudança poderia economizar um tempo significativo, mas normalmente para mim não é mais do que alguns dias.
Adicionando um recurso simples Se nenhuma alteração significativa no design for necessária, basta codificar no seu recurso, usando alguma tentativa / erro. Isso não deve exigir muito tempo em geral.
fonte
Eu vou discordar do consenso sobre este. Prefiro começar a criar um protótipo de algo assim que tiver a mais vaga idéia de escrever em um guardanapo de como quero que meu sistema funcione. É quase impossível para mim pensar em todos os pequenos detalhes que podem causar problemas, a menos que eu esteja especificando as coisas de uma maneira muito precisa. Se estou apenas discutindo design com as pessoas, é muito fácil contornar alguns dos problemas mais complexos. Depois de especificar coisas como essa, também pode estar diretamente no código-fonte, em vez de outros meios de expressão precisos e formais, mas que não podem ser compilados e executados.
fonte
Depende do que você quer dizer com "normal" . Falando de mim, acho que o código é uma ótima ferramenta de aprendizado. Portanto, quando enfrento um problema complexo, faço esboços no papel, mas também faço codificação orientada a testes. O código me diz que um quadro branco não pode dizer e vice-versa, e talvez o resultado seja um insight ou a necessidade de mais algumas perguntas para o especialista em domínio.
Portanto, o conselho real é: "Use todas as ferramentas de aprendizado necessárias para se aproximar da definição do problema" , mas também "lembre-se de que essas são ferramentas de aprendizado; portanto, não se apaixone por elas", tanto o código quanto os esboços devem ser descartáveis .
fonte
Nesta era da programação RAD e ágil, você deve começar a desenvolver assim que conseguir identificar as principais partes do sistema, os detalhes aparecerão. Como os softwares estão aumentando, o foco prematuro em cada detalhe não levará a lugar algum.
fonte