E se eu não tiver boas idéias para implementar um recurso? [fechadas]


32

Estou trabalhando no meu próprio aplicativo e estou preso. Eu tenho que implementar um recurso, mas não consigo encontrar uma boa abordagem para implementar esse recurso. Eu estava pensando nisso por alguns dias, e nenhum pensamento bom veio. Pesquisando na Internet não me deu nenhuma inspiração.

Preciso seguir em frente, mas quero saber qual é o melhor:

  • Pense mais, espere mais e continue procurando a melhor abordagem
  • Pare de perder tempo e comece com um design ruim, cobrindo tudo com testes

O que você acha? Como eu disse antes, estou trabalhando no meu próprio aplicativo. Não tenho prazos, mas também quero terminar de codificar o aplicativo o mais rápido possível.



12
@gnat: Essas outras perguntas lidam com situações em que os solicitantes já sabem como implementar alguns recursos de forma limpa, mas podem querer sacrificar um bom design por serem "rápidos e sujos". Esta pergunta, no entanto, descreve uma situação diferente, trata-se de resolver problemas em geral quando você não encontra um bom ponto de partida, por isso é IMHO sem duplicação.
Doc Brown

nota: se o aplicativo for um sucesso, você nunca "terminará de codificá-lo" e os recursos serão redesenhados de qualquer maneira. Então, eu iria implementá-lo da melhor maneira possível agora.
ren

Respostas:


41

Além de conversar com as pessoas sobre o assunto (a pergunta sugere que você não tem colegas no projeto), geralmente considero uma boa abordagem focar nas coisas que posso fazer.

Geralmente, há uma parte do código que eu sei que devo escrever de qualquer maneira. As coisas que ainda não sei escrever são substituídas por stubs que retornam resultados ilegais ou usam uma aproximação que é boa o suficiente para testar o resto.

Isso mantém você produtivo. E quando você precisar implementar a peça que falta, você terá a interface. E você escreveu muito código em torno do problema, no mesmo domínio do problema, o que geralmente me ajuda a gerar idéias: você sabe mais exatamente o que é necessário produzir e quais outras entradas estão disponíveis se ajudar a resolver o problema . Além disso, muitas vezes a conclusão é que a peça que faltava não precisa ser tão abrangente quanto se pensava inicialmente.


6
A desvantagem de escrever o código mais arriscado e menos compreendido por último é que você pode descobrir que não é possível resolver o problema ou apenas com alterações substanciais na arquitetura do programa, levando a muito esforço desperdiçado.
Rich Smith

1
A outra desvantagem dessa abordagem às vezes leva você a: "Eu posso resolver o problema X. Tudo o que resta é fazer Y." quando, na realidade, Y não é viável ea solução real é Z.
Brian

@ RichSmith, Brian: Isso acontece, embora raramente se você me perguntar. Em seguida, ele pode fornecer uma melhor compreensão do porquê da falta da peça, o que melhora suas estimativas. E eu não sugeriria dedicar semanas de trabalho com base em uma divisão especulativa e arbitrária de responsabilidades.
Jdv-Jan de Vaan

é discutível se essas são desvantagens ou não. seria melhor gastar seu tempo sem explorar a questão? ou por você sentado, adivinhando o que funcionaria? Eu acho que é uma boa prática escrever protótipos rápidos, experimentar coisas e falhar rapidamente. é a única maneira de saber com certeza e ganhar experiência para futuras situações semelhantes
sara

14

Se a pesquisa falhar, você sempre pode implementar usando a primeira (não necessariamente a melhor) idéia que você teve e depois refatorá-la mais tarde quando encontrar a abordagem correta.

Essa é a abordagem correta, pois, mesmo que você encontre algo que pareça uma boa ideia, pode ser ruim posteriormente. Ou pode ser bom naquele momento, mas mais tarde você encontrará algo muito melhor. Então você ainda terá que refatorar.

Ao fazer isso, certifique-se de projetar e implementar de maneira que seja fácil refatorar. Se você fizer isso corretamente, precisará alterar apenas a parte problemática e não começar do início.


1
Parece ser assumido neste post, mas eu gostaria de acrescentar que é muito importante que você escreva seu código de uma maneira que seja fácil re-fatorar.
c_maker

@c_maker Sim, é claro. Caso contrário, não faz sentido reescrever tudo mais tarde do zero. Vou adicioná-lo à resposta. obrigado #
121213

10

Que tal perguntar a outra pessoa? Por exemplo, você pode descrever seu problema aqui ou, se for mais um problema de implementação, no stackoverflow.com e pedir idéias. Às vezes, isso já o ajudará se você começar a escrever o problema, mesmo que não obtenha boas respostas.


Se for um problema com a interface do usuário, também há o ux.stackexchange.com
Rob Church

se você perguntar sobre o SO, as respostas terão direitos autorais sob Creative Commons e, dependendo do projeto, esse código poderá ser inutilizado.
precisa

2
O conselho pode ter direitos autorais? Certamente autor usaria como um tutorial, não copiar / colar?
grizwako

@smcg: o tópico foi discutido aqui: meta.stackexchange.com/questions/12527/… - Mas, honestamente, se isso está realmente se tornando um problema, acho que podemos contornar isso da maneira como o GrizzLy sugeriu.
Doc Brown

@DocBrown IANAL, então não posso dizer com certeza se isso aguentaria, mas às vezes é bom errar por precaução.
smcg

2

Algumas idéias:

  • Brainstorm
    Escreva todas as idéias estúpidas que você tem (em papel ou quadro branco). Risque os que você tem certeza de que não funcionarão. Continue escrevendo. Inclua soluções para problemas do mundo real potencialmente relacionados. Por exemplo, misturar tinta, colocar uma unha na parede ou trocar o óleo resolve um símile do mundo real?
  • Peça ajuda ao
    Google, pergunte aqui, pergunte aos seus amigos geeks, etc.
  • Resolver um problema relacionado
    Você não pode resolver o problema, mas pode resolver um muito mais simples? Ou um igualmente complexo e relacionado? Faça isso. Em seguida, faça pequenas alterações individuais para aproximar sua solução da solução desejada.
  • Basta começar a escrever de fora,
    independentemente de sua interface ser um serviço da Web, página da Web, formulário nativo, câmera, teclado, monitor ou qualquer outra coisa , existe uma interface. Escreva algumas linhas de código / pseudocódigo para fazer a interface funcionar. Use métodos mágicos que ainda não existem. Recursivamente, faça o mesmo para cada método mágico inexistente. Otimize mais tarde.

2

Não há nada de errado em seguir com a solução ruim. Muitas vezes, você simplesmente não sabe o suficiente sobre o domínio do problema naquele momento. Seguindo uma solução ruim, vamos seguir em frente e aprender mais sobre o problema. Então você ainda pode voltar e refatorar sua primeira solução.


1

Eu sempre tento vê-lo da perspectiva do usuário final. É muito fácil pensar em uma idéia "legal" como um desenvolvedor em que você pode passar anos trabalhando, o que na verdade adiciona muito pouco ao seu aplicativo.

Idealmente, você deseja mapear todos os recursos do seu aplicativo e priorizá-los de acordo com o benefício para o usuário final. Pessoalmente, eu uso o MOSCoW , embora contanto que você mantenha seu método de priorização da mesma maneira, ele pode ser tão simples quanto 1 - 5

Depois disso, se você ainda achar que esse recurso é uma parte essencial do seu aplicativo, como as pessoas já disseram, pergunte! Acho que nunca encontrei um problema que eventualmente não tenha sido resolvido por um colega ou por pessoas legais no Stackoverflow.


Legal, porque eu sou de Moscou :)
user21974

Lá vai você é um sinal!
MrK Fldig

1

Minha opinião é: nunca escreva código que funcione! Deve ser muito difícil refatorar no futuro.

É uma abordagem muito comum para desenvolvedores (e, é claro, diretores ou chefes). Ouvi muito tempo "apenas fazê-lo funcionar" ou "vou consertar mais tarde" (mais tarde quando ??? nunca!), Mas acho que a qualidade não é algo que você não pode obter no meio do projeto.

Minha sugestão é: pare de pensar no seu problema por um tempo ... faça outra coisa e, às vezes, as soluções surgem ele mesmo.

Aliás, perguntar a um colega é absolutamente uma ótima maneira de resolver seu problema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.