O Programa de Responsabilidades dos Programadores [fechado]

40

Então, todos nós já ouvimos falar da Declaração de Direitos dos Programadores e XP tem um conceito semelhante.

É uma reclamação comum hoje em dia que ouvimos muito sobre os direitos das pessoas, mas não tanto sobre suas responsabilidades, então o que deve constar na lista de responsabilidades dos programadores. Isso é o que eles devem fazer, que podem achar desagradáveis, mas o que separa os programadores agindo de maneira profissional e responsável, daqueles que não o fazem.

Estou interessado principalmente nos que são desagradáveis ​​e nos que tendem a não acontecer. É isso que os programadores tendem a evitar e evitar, em vez daqueles que 90% dos programadores realmente desejam fazer (como sempre refatorar e usar o controle de origem).

Então, o que deve constar na Lista de Responsabilidades dos Programadores?

Jon Hopkins
fonte
4
além disso, acho que se encaixa nas diretrizes 1, 2, 4 e 6.
Stephen Furlani
2
Eu acho que é uma pergunta importante a fazer.
HLGEM
11
Um acompanhamento importante pode ser 'como você se treina para ser um programador responsável?'
Stephen Furlani
2
Esta pergunta parece estar apenas gerando uma lista de itens. Embora as respostas sejam bastante impressionantes (e eu recomendo os respondentes que dedicam tempo e esforço em suas postagens), elas estão centradas nas opiniões e a redação da pergunta me parece uma pesquisa.
Thomas Owens
5
@ThomasOwens discorda fortemente de que "Esta pergunta não se encaixa no nosso formato de perguntas e respostas". Isso já gerou uma resposta sobre testes de desenvolvedores, metodologias de desenvolvimento, freelancers e preocupações comerciais, garantia de qualidade e engenharia de software, realmente começando a ficar incerto por que ainda temos este site se perguntas como a acima continuam sendo fechadas.
Joshua Drake

Respostas:

41
  • Um programador tem a responsabilidade de afastar requisitos ruins em vez de implementá-los cegamente. Isso inclui dizer aos clientes que o que eles querem é mais caro do que outras opções ou tem um conjunto específico de riscos. Também inclui a comunicação de más notícias de maneira profissional - não gritando, chamando as pessoas de idiotas, implicando que elas são idiotas ou outro comportamento infantil. Se ele recuar, deve ter um conjunto de razões (mais do que "Não gosto do SQL Server e não vou usá-lo") e um plano alternativo para apresentar.

  • No entanto, o programador também tem a responsabilidade de aceitar decisões e usar ferramentas ou projetos de que talvez não gostem se sua resposta não for aceita. Se um relatório foi solicitado no SSRS, entregá-lo no Crystal Reports (que o cliente pode não ter) é inaceitável. Se uma solução .net for necessária, entregá-la em Haskell é inaceitável. Se ninguém mais na equipe usa uma ferramenta ou idioma que você deseja usar, não é profissional usá-lo se a gerência não concordar que é a melhor ferramenta para o trabalho específico.

  • Um programador tem a responsabilidade de testar seu trabalho. (Esse não deve ser o único teste, mas nenhum programador profissional deve enviar o código que ele não testou.) Isso inclui testar até mesmo as ramificações do código que você não espera obter com muita frequência. Se você tiver um conjunto de IFs aninhados, teste todas as rotas possíveis.

  • Um programador tem a responsabilidade de lidar com erros e exceções normalmente e de escrever mensagens de erro que o usuário verá profissionais e neutras, sem brincadeiras ou insultos.

  • Um programador tem a responsabilidade de proteger dados privados, proteger o código proprietário que ele escreve para a empresa e proteger os usuários contra catástrofes (mesmo catástrofes auto-infligidas) do uso do aplicativo.

  • Um programador tem a responsabilidade de garantir que seu código seja sustentável e esteja no controle de origem.

  • Um programador tem a responsabilidade de coordenar com os outros para garantir que suas alterações não afetem adversamente o que estão fazendo.

  • Um programador tem a responsabilidade de recomendar a melhor escolha para o cliente de ferramentas ou idiomas na fase de design, não a ferramenta / idioma com o qual ele deseja brincar e aprender.

  • Um programador tem a responsabilidade de trabalhar com todo o pessoal apropriado para um projeto, incluindo aqueles que ele não gosta. Não é seu trabalho gostar de pessoas, é seu trabalho trabalhar com elas e ser educado.

  • Um programador tem a responsabilidade de produzir um produto que faça o que foi especificado em um prazo razoável. Se o prazo não for cumprido, ele ou ela tem a responsabilidade de informar a gerência assim que for conhecido.

  • Um programador tem a responsabilidade de informar ao gerenciamento de projetos os impedimentos para a realização do trabalho. Eles não podem consertar o que não sabem.

  • Um programador tem a responsabilidade de executar toda a tarefa, não apenas as partes divertidas e interessantes. Todo trabalho tem algumas partes chatas, elas ainda precisam ser feitas. Isso inclui itens como quadros de horários e adição de itens de discussão ao software de gerenciamento de projetos. Inclui itens como documentação, revisão de código etc.

  • Um programador tem a responsabilidade de aprender o domínio comercial ao qual está apoiando, não apenas os conceitos de programação.

  • Um programador tem a responsabilidade de manter suas habilidades atualizadas.

  • Quando um programador erra, ele tem a responsabilidade de fazer tudo o que estiver ao seu alcance para corrigir os problemas o mais rápido possível. Isso pode incluir levar más notícias à gerência, em vez de tentar ocultar que você acabou de excluir uma tabela crítica no banco de dados de produção.

  • Um programador tem as mesmas responsabilidades de qualquer outro trabalhador - aparecer pontualmente, trabalhar as horas contratadas, solicitar férias antecipadamente, atender telefone e e-mails (que tal ler seus e-mails), preencher os formulários necessários para RH, etc.

HLGEM
fonte
7
Eu amo mensagens de erro de piada. A situação já é ruim o suficiente, não há necessidade de torná-la mais séria do que isso - pelo menos tente me fazer rir enquanto me dá um tapa com um erro!
dr Hannibal Lecter
2
Questiono a responsabilidade de um desenvolvedor testar pessoalmente seu código em todas as situações ... Eu reformularia isso para garantir que seu código seja testado ... Se a organização tiver testadores profissionais (automatizados e humanos) e um processo sólido em vigor para garantir que o código seja testado, não vejo por que o desenvolvedor precisa fazer isso pessoalmente. Se estou desenvolvendo um novo recurso ou corrigindo um bug, com certeza vou testá-lo, caso contrário não saberei se já concluí meu trabalho. No entanto, se estou fazendo uma refatoração grande, não faz sentido para mim exaustivamente testar de regressão todo o produto.
JoelFan
Eu não disse teste de regressão, mas você deve fazer um teste unitário de suas alterações para garantir que elas façam o que você pretendia.
HLGEM
2
Que tal nenhum ponto de exclamação nas mensagens de erro ... ou seja, "A data é inválida!"
JoelFan
11
Estes precisam ser neutros em termos de gênero. Torná-los imperativos tornaria isso mais fácil, por exemplo, em vez de "Um programador tem a responsabilidade de testar seu trabalho", deve ser "Teste seu trabalho".
sigilo
42

Todo programador deve tornar seu código legível por outros.

dan_waterworth
fonte
@ Kevin D: Isso é uma responsabilidade. Você tem a responsabilidade de produzir código legível por humanos.
Doppelgreener
11
@Axidos, é porque mudei minha resposta depois que percebi o que tinha feito.
dan_waterworth
Excluirei meu comentário original, pois ele não é mais relevante.
Kevin D
11
"Legível" por quem? Meus "colegas" (ou seja, alguém com educação e experiência semelhante à minha)? Alguém que é realmente bem educado em arte e ciência? Ou um Flying Code Monkey que não tem negócios com nada mais avançado que o Dartmouth BASIC?
John R. Strohm
7
@ John, outros neste contexto implicam outros programadores. Na frase: "A girafa era maior que as outras.", Não consideramos outras pessoas como macacos voadores. 'Outros' significa "mais do mesmo tipo que ainda não foram mencionados".
dan_waterworth
22

O programador é responsável pela privacidade e segurança de todos os dados fornecidos pelo usuário. Especialmente senhas, números de cartão de crédito, endereços de e-mail e localização física.

Malfist
fonte
Isso realmente se enquadra no domínio do arquiteto do sistema. Em muitos cenários empresariais, os programadores não têm voz ou controle sobre os armazenamentos de dados. Como posso ser responsável por um endereço de email em um banco de dados, quando tudo o que estou fazendo é acessar, não criar, esse banco de dados?
Neal Tibrewala
2
Eu acho que as pessoas do Facebook não precisam se inscrever tanto quanto a maioria das responsabilidades acima. :)
MetalMikester
4
-1 isso é muita responsabilidade.
Peter Turner
6
Talvez para sistemas de grande escala possa ser demais para um programador decidir. Mas para a grande maioria dos sites em que um ou poucos programadores trabalham, é absolutamente necessário armazenar dados adequadamente. Nenhuma criptografia quando o hash é necessário, nenhum algoritmo personalizado ou segurança por obscuridade. Segurança real e testada.
Malfist
@ Neal: O arquiteto do sistema é apenas mais um programador. Claro, para grandes projetos, ele provavelmente não fará nenhuma programação, mas isso não significa que ele não seja um programador. E isso se aplica apenas a grandes projetos; em projetos de duas ou três pessoas, um programador geralmente é responsável por parte do banco de dados ou por sua totalidade; é sua responsabilidade garantir que os dados sejam salvos com segurança.
configurator
20

Não faça o usuário perder o trabalho.

Isso é mais difícil do que parece ... o trabalho é mais do que apenas "dados em um arquivo" ... é a qualquer momento que o usuário passa com o seu software.

Por exemplo, se o usuário preencheu seu formulário de 30 campos com 29 itens válidos e 1 inválido, não limpe todos os dados válidos para reclamar do 1 inválido (diabos, nem limpe o inválido. talvez seja longo e exija apenas uma correção menor ou o usuário não se lembrará do que era antes se você a limpar)

Um exemplo não óbvio, mas importante, é o que o Windows e praticamente todos os outros softwares de "gerenciador de arquivos" dão errado ... se eu passasse meia hora cuidadosamente pressionando a tecla Ctrl para selecionar um conjunto de arquivos e, acidentalmente, clique em vez de Com a tecla Ctrl pressionada, ele não deve limpar todos os meus arquivos selecionados anteriormente, fazendo-me começar de novo.

Outro que eles erraram ... se eu acidentalmente pressionar Ctrl-A (em vez de Ctrl-S ao lado), ele não deve perder meu lugar no arquivo e colocar o cursor no início ... o lugar certo no arquivo "trabalho" que o programa "perdeu".

Mais uma: a caixa de diálogo "commit" do TortoiseSVN possui uma longa lista de arquivos. Antes de clicar em "Confirmar", você pode descer a lista de arquivos, clicando duas vezes em cada um para ver as alterações na segunda caixa de diálogo. Para fazer isso rapidamente, às vezes uso apenas o teclado, pressionando <Esc>para fechar a segunda caixa de diálogo e voltar à primeira. Se eu bater acidentalmente <Esc> duas vezes, ele também fechará a primeira caixa de diálogo, o que fará com que eu esqueça o arquivo que estava fazendo.

JoelFan
fonte
5
Tente não criar atalhos de teclado que oponham coisas atribuídas às teclas próximas umas das outras (CTRL-C e CTRL-V, por exemplo, não podem lhe dizer quantas vezes Se copiado quando quando pretendia colar e vice-versa)
HLGEM
5
@HLGEM, Paradoxalmente, quem desenhou este provavelmente pensou que estava fazendo-nos um favor, colocando-os ao lado do outro
JoelFan
4
E ele não estava? Quero dizer, você não tem todo o poder do Emacs ou algo assim, mas pode copiar e colar sem mexer muito a mão.
Compman
11
Use o Total Commander. Clique com o botão direito do mouse para selecionar e clique com o botão direito do mouse para desmarcar. A menos que você navegue em outro lugar ou perca o foco por um longo tempo enquanto a pasta atual que está sendo monitorada for alterada, você não perderá sua seleção.
configurator
11
Para o último exemplo (Ctrl-A perde meu lugar no arquivo), encontrei recentemente uma solução alternativa que funciona em muitos programas ... Ctrl-Z, Ctrl-Y .... que desfará minha edição mais recente no diretório conteúdo do arquivo e, em seguida, "refaça", com o resultado de que o conteúdo é o mesmo de antes, e eu estou localizado no local da edição. Isso não é necessariamente o mesmo que o local em que meu cursor estava antes do Ctrl-A errado, mas geralmente é perto o suficiente ... isso obviamente não desculpa o mau comportamento do programa no Ctrl-A ... é apenas uma solução parcial e demorei um pouco para encontrar
JoelFan
15

Um programador tem a responsabilidade de respeitar o sistema em que seu programa estará sendo executado. Após o término do desenvolvimento e teste, o programa será implantado para ser usado para a finalidade a que se destina, e isso geralmente envolve outras pessoas que o executam em seus computadores. O programador precisa ter isso em mente: seu programa está sendo executado na propriedade de outra pessoa , não na sua, e precisa se comportar como um hóspede em sua casa, em vez de entrar como se fosse o dono do lugar.

Por exemplo, seu programa não deve:

Mason Wheeler
fonte
11
Eu realmente gosto tanto de usuários quanto de programadores. Os ícones saltitantes no meu cais são a minha principal causa de raiva em relação a pessoas que nunca conheci.
Agos 23/12
7
Eu gosto de todos eles, exceto "atualizar-se sem o consentimento do usuário". Acho o modo como o Chrome se atualiza refrescante - adoro encontrar novos recursos. A maneira como outros programas o fazem, no entanto, é abominável. Estou olhando para você, Java e para você, Acrobat Anything. Não me pergunte se eu quero atualizá-lo todos os dias. Eu disse nenhuma vez, dê uma dica!
configurator
2
Se um programa deve se atualizar automaticamente, pelo menos deve solicitar o consentimento do usuário na primeira vez.
gablin
Outra violação por TortoiseSVN ... fazer praticamente qualquer coisa com ele faz com que o sistema para moer a um impasse
JoelFan
@SpashHit: Hmm? Eu uso o TortoiseSVN numa base diária e eu nunca notei que ...
Mason Wheeler
8

Do Manifesto para Software Craftsman :

Como aspirantes a artesãos de software, estamos elevando a fasquia do desenvolvimento profissional de software, praticando-o e ajudando outras pessoas a aprender o ofício. Através deste trabalho, chegamos ao valor:

  • Não apenas software funcionando, mas também software bem trabalhado

  • Não apenas respondendo às mudanças, mas também agregando valor constantemente

  • Não apenas indivíduos e interações, mas também uma comunidade de profissionais

  • Não apenas a colaboração do cliente, mas também parcerias produtivas

Ou seja, na busca dos itens à esquerda, achamos os itens à direita indispensáveis.

esponja
fonte
8

Dê uma olhada no espelho e, possivelmente, reconheça as piores qualidades de um programador em si mesmo. Depois, elimine-os todos os dias.

  1. Não aprendendo nada de novo
  2. Não buscando ampliar suas habilidades
  3. Não estar aberto a novos hábitos, seguindo os velhos hábitos
  4. Não se preocupando com a qualidade do seu trabalho
  5. Não buscando melhorar a qualidade do seu trabalho
  6. Ser trabalhador das 9 às 5 sem paixão
  7. Não tendo opinião própria das coisas
  8. Aceitar a opinião dos outros sem questionar
  9. Acreditando que você aprendeu tudo
  10. Não tolerando nenhuma crítica
  11. Não está ouvindo entrada externa
  12. Ser individual egocêntrico e conhecedor de tudo
  13. Ter uma personalidade negativa e criticar outras pessoas
user8685
fonte
+1, mas a redação desta maneira o torna bastante negativo.
dan_waterworth
11
Acho # 13 altamente irônico, já que isso é essencialmente o que você está fazendo aqui, embora em um sentido geral.
Dustin Rasener
6
  • A responsabilidade de um programador é criar um software que atenda às necessidades dos requisitos, análises, design e especificações, conforme definido em qualquer contrato entre o programador e o cliente.
  • A responsabilidade de um programador é criar um software econômico, confiável e que funcione eficientemente em máquinas reais.
  • A responsabilidade de um programador é trabalhar da maneira mais eficiente, ética e com a maior integridade possível e conduzir-se com o máximo profissionalismo.

Parte disso se aplica às responsabilidades de "Uma empresa de programação ".

Stephen Furlani
fonte
4
  • O programador deve conhecer e usar as principais bibliotecas e plataformas usadas.

Especialmente quando o programador vem de outra plataforma / idioma. É terrível encontrar o programador lutando por algo que a biblioteca principal fornece ou abusar da vantagem da plataforma devido à ignorância.

  • O programador deve criar código de auto-documentação

É muito importante que o código seja documentado para uso por outros, mas quando se trata de manutenção, o código de auto-documentação pode literalmente economizar horas e horas de frustração.

Por exemplo, compare:

// validates if is leap year
if(  year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ) { 
     doSomethingWithFebruary();
}

para

if( isLeapYear( year ) ) { 
    doSomethingWithFebruary();
}
OscarRyz
fonte
4

Programar é uma profissão, não uma habilidade. Isso significa que um programador tem a responsabilidade de se manter atualizado em seu campo sobre as mais recentes ferramentas, técnicas e tecnologias.

Isso pode significar recorrer aos gerentes para dar tempo para permitir aprendizado e treinamento contínuos ou fazê-lo no seu próprio tempo.

Neal Tibrewala
fonte
2

1) Explique claramente que uma solução para qualquer problema terá trocas entre desempenho, custo, tempo e qualidade.

2) Complete a documentação relevante, sejam elas notas ou planos de teste. (a documentação varia de acordo com o tipo e tamanho da empresa)

3) Solicite as ferramentas corretas para o seu trabalho (muitos reclamam disso, mas nunca abordam seu chefe com um argumento razoável para obter o que precisam)

... Outros, sem dúvida, a seguir.

Kevin D
fonte
2

Questionar qualquer coisa - Um programador deve ter a responsabilidade de perguntar sobre qualquer coisa que um sistema possa precisar executar ou manipular. Isso pode incluir perguntar o que os usuários podem ver como perguntas tolas, pois existem vários sites dedicados a mostrar exatamente o que os usuários podem fazer. O WTF diário e o SharkTank são alguns exemplos, embora eu tenha certeza de que existem outros.

JB King
fonte
1

Um programador é responsável por converter as histórias de usuários na lista de pendências do produto em incrementos de software úteis e entregáveis

É por isso que os gerentes devem garantir que eles tenham tudo para atingir seus objetivos.

user2567
fonte
1

Aqui está a minha proposta.

  1. Um programador deve exigir as condições de trabalho expostas na Declaração de Direitos do Programador, a fim de não diminuir os padrões para a posição.

(Para "programador", quero dizer "programador", não "hacker de fim de semana", portanto, tudo o que um programador deve fazer está implícito.)

cbrandolino
fonte
-1. Não acho que uma responsabilidade possa ser uma que "exija [s]" um direito.
Craige
1

5 preceitos da guilda do programador

1.) verifique seu código semanalmente e nos feriados.

2.) suprir as necessidades da comunidade de programação.

3.) leia pelo menos um livro de programação por ano.

4.) ir a pelo menos uma conferência de programação por ano.

5.) confie nos seus erros.

Peter Turner
fonte
"verificar seu código semanalmente e nos feriados"? Você quer dizer de hora em hora, certo?
configurator
@ configurador Quero dizer isso como um mínimo para se chamar um programador. Mas quanto mais check-ins, melhor
Peter Turner
1

Vou adicionar "sempre documentar quaisquer suposições feitas" à lista. :-)

John Parker
fonte
Ou ... nunca faça suposições?
Stephen Furlani
2
@ Stephen Furlani - Infelizmente isso é praticamente impossível em um projeto de qualquer tamanho.
John Parker
0

Um programador não deve fazer ou implementar algo antiético ou ilegal, como gravar vírus ou invadir os sistemas de outras pessoas (a menos que seja para descobrir falhas de segurança e depois informar à vítima sobre isso e o que ele pode fazer para evitar que isso ocorra). explorado por hackers maliciosos).

gablin
fonte