Qual é o subconjunto mínimo de práticas melhores / conhecidas no desenvolvimento de software para um programador solo? [fechadas]

16

Sou o programador solitário no meu trabalho há muito tempo. Normalmente, li artigos e postagens sobre

  • Sistemas de Controle de Versão
  • Integração / Entrega Contínua
  • Metodologias de desenvolvimento: Scrum, Waterfall, V-Model, Agile, XP, etc.
  • Gerenciamento de Projetos de Software

Mas quase todos eles parecem estar focados nas equipes. Como não sou uma equipe, qual seria o conjunto absolutamente mínimo de práticas para apenas um programador? Considere as seguintes condições:

  • Não tenho conflitos com o código de outras pessoas.
  • Não preciso manter árvores de arquivos / diretórios, meu ambiente de desenvolvimento se preocupa com a versão por si só (desenvolvimento baseado em imagem).
  • Não há requisitos formais, meus usuários não sabem o que querem e estão bem com isso.
  • O único que poderia estar interessado em fornecer uma versão ou documentação sou eu, basicamente o cliente quer RESULTADOS e não se importa com metodologias de software, etc.

Minha opinião é que não quero gastar (muito) tempo e energia em algo que não esteja diretamente relacionado aos requisitos do cliente. Alguma recomendação?

user869097
fonte
Para quantos lançamentos você possui, na natureza, para corrigir os erros?

Respostas:

17

Não há resposta certa para essa pergunta porque depende de cada pessoa. Se você usa um iPad para fazer todo o seu trabalho de desenvolvimento e seus clientes estão felizes com você, você não tem nenhum motivo para mudar.

Se, no entanto, eu estivesse na sua posição, aplicaria fortemente o seguinte:

  • Um sistema de controle de versão - Embora você possa pensar que um sistema de desenvolvimento baseado em imagem faz o trabalho com relação a backups regulares e outros enfeites, você não tem espaço para contornar os recursos experimentais onde normalmente se usaria uma ramificação . Você também não tem como manter uma versão importante do projeto ( marcação ). Se você expandir para além de si mesmo, os desenvolvedores que se juntarem pensarão que estão no inferno.
  • Ágil - Esse método é extremamente aplicável a clientes que não sabem o que desejam. Mais cedo ou mais tarde, eles perceberão que não querem gastar dinheiro para perseguir sua cauda - eles querem ver progresso.
  • Ferramenta de gerenciamento de projetos - isso é obrigatório. É muito formidável poder reter tudo em sua cabeça, mas você não precisa. Ser disciplinado e usar uma ferramenta de gerenciamento de projetos (por exemplo, Redmine ) permitirá separar suas tarefas e fornecer um histórico fácil de navegar do seu trabalho. Será muito importante para quando você começar a cobrar por hora.
JK
fonte
+2 para o gerenciamento ágil e de projetos. No entanto, para recursos experimentais, costumo criar uma imagem virtual (que seria equivalente a ramificação) e, eventualmente, abro outra instância do meu ambiente. Obrigado pela sua boa resposta.
user869097
16

O controle de versão é uma necessidade absoluta para qualquer programador, mesmo que solitário. Isso significa que você pode recuperar de forma simples e rápida arquivos excluídos e alterações complexas que estão erradas.

Basicamente, você evita a merda estúpida que você faz quando vai trabalhar de ressaca.

Tom Squires
fonte
1
Esse não é o único benefício. Um dos principais benefícios é poder reproduzir uma versão anterior do software. E isso é útil ao tentar reproduzir um problema e / ou determinar quando um problema foi introduzido.
Marjan Venema
2
Mais 1 porque salvou meu cérebro de ressaca tantas vezes.
Nicholas Smith
1
Além disso, galhos. Muitas vezes tive essa situação em que iniciei uma mudança de última hora e recebi uma ligação para fazer um lançamento com gráficos substituídos ou outras coisas menores. Com as ramificações, era extremamente fácil, basta mudar para a minha ramificação principal e criar o software. Sem ele? Eu teria arrancado meu cabelo para terminar a mudança ou revertê-lo para poder produzir uma liberação estável.
Tamás Szelei
1
Presumindo que você escreva comentários úteis sobre o check-in, também oferece uma ótima maneira de voltar no tempo para responder à pergunta "O que eu estava pensando quando escrevi essa pilha de lixo?"
Ned
1
@ user869097, parte da intenção dos sites da SE é que perguntas e respostas sejam úteis para mais do que apenas a pergunta original. Embora seus requisitos incomuns possam tornar o controle de versão impraticável (e devo dizer que não estou totalmente convencido, porque sua metodologia de ramificação parece não permitir mesclagens), a maioria dos desenvolvedores individuais que não estão usando o controle de versão deve fazê-lo.
Peter Taylor
6

Como outros dizem, o controle de versão ou o gerenciamento de código-fonte é extremamente importante. Use um DVCS e aprenda tudo sobre ele. Realmente não importa qual é, embora possa beneficiar você se você escolher um popular: git ou mercurial.

Outra coisa que não vi mencionada é um script de construção em uma etapa . Isso não é uma integração contínua direta (essa frase é propensa a BS na minha opinião), mas uma ferramenta muito útil. Sempre que você precisar fazer uma atualização de emergência, basta executar o script e concluir o processo. Ao se aproximar do final do projeto, também acontece que várias compilações são necessárias por dia. Minha experiência é que vale muito a pena, mesmo que o processo de compilação não seja muito complicado. Você pode até adicionar recursos de upload de FTP, relatórios por e-mail, executar testes de unidade, instaladores de edifícios, assinar etc. Com o script escrito desde o início, é fácil manter e expandir com mais etapas à medida que o projeto avança.

Tamás Szelei
fonte
2

Vou apenas responder uma: o controle de versão é extremamente importante para qualquer projeto e não apenas para a equipe. Leva um tempo muito pequeno quando você o está usando, mas fornece um histórico rico para você voltar, não é uma bala de prata, mas certamente é bom poder voltar para uma cópia de trabalho, se isso realmente O recurso experimental quebrou a maior parte do aplicativo.

Nicholas Smith
fonte
2

O controle de versão é uma necessidade absoluta. Não apenas por manter a fonte ok, mas por causa da arqueologia da fonte. Um ano depois de poder verificar como uma classe ou procedimento evoluiu, poderia economizar bastante esforço se você tentar "consertar" algum código estranho.

Para metodologias - recomendo fortemente o manifesto dos programadores . Geralmente, ele fornece ótimos resultados em equipes pequenas por causa de zero sobrecarga e não ter que manter em mente como o conjunto de estruturas de contêiner de aplicativos de serviço da Web CMS MVC compatíveis com portlet J2EE compatíveis com o portlet J2EE .

Daniel Iankov
fonte