Qual é a coisa mais importante, útil ou esclarecedora que você aprendeu nos últimos 12 meses? [fechadas]

14

Muitas pessoas na comunidade de codificação falam sobre melhoria contínua, prática deliberada e coisas do tipo - mas quando falam sobre suas práticas atuais é quase como se elas tivessem surgido completamente dos lombos de Zeus porque você não Saiba como as opiniões deles mudaram com o tempo ou o que aprenderam recentemente.

De vez em quando, porém, vou a uma palestra, ou leio um livro, ou falo com alguém e eles se abrem um pouco mais e descubro que aprendo muito com essas percepções.

Então, se você tivesse que escolher uma coisa dos últimos 12 meses, você aprendeu o que seria?

    
por FinnNk 30.10.2010 / 11:47
fonte

16 respostas

18

Eu aprendi que é preciso apenas um gerente podre para estragar todo o projeto, mas é preciso muitos programadores bons para limpar a bagunça depois.

    
por 30.10.2010 / 12:39
fonte
12

Depois de aprender alguns Clojure , comecei a perceber a utilidade da programação funcional , e meu estilo de codificação Java foi strongmente afetado por isso. Ao contrário da crença popular, uma programação funcional linguagem não é um pré-requisito absoluto para fazer alguma programação funcional.

É possível incorporar alguns elementos da programação funcional em uma linguagem imperativa como o Java, e mesmo que nem sempre seja idiomática, pode ser altamente benéfico em alguns problemas. Por exemplo, as classes anônimas são aproximadamente iguais aos encerramentos, conforme descrito em wikipedia . A avaliação preguiçosa deveria ser uma norma em vez de algo incomum. A imutabilidade dificilmente pode ser usada em excesso. Basta superar a ideia (quase) obsoleta de que construir objetos novos em vez de transformar os existentes é caro devido ao consumo de heap e GC - em 99,9% dos casos, isso simplesmente não é relevante. De fato, o processamento paralelo pode inverter o argumento da eficiência de outra forma: criar novos objetos imutáveis pode ser mais barato do que alterar os existentes, porque você se livra do bloqueio.

Mais informações sobre como executar o FP no Java puro aqui , aqui , aqui e aqui .

    
por 30.10.2010 / 12:21
fonte
10

Mesmo que você tenha uma equipe excelente e um gerenciamento competente para essa equipe, seu trabalho ainda não é seguro. A alta gerência ainda pode fazer coisas tolas, como dissolver toda a sua Diretoria.

Resumindo: a política é importante e, às vezes, as políticas que afetam você não podem ser controladas.

    
por 30.10.2010 / 12:24
fonte
9

Aprendi que o objetivo do teste de software é encontrar bugs . Não é para verificar se o sistema está correto.

Existem fatores psicológicos importantes em jogo: Se o seu objetivo é mostrar que o programa está "correto", você irá se aproximar dos testes que você sabe que passarão. Mas se seu objetivo é encontrar bugs, você gravitará em direção a testes que realmente levarão seu sistema aos limites.

Existe até uma mudança importante no idioma que você usa. Se um teste encontrar um bug, você o chamará com êxito . Se o teste não [isto é, o programa passa], você o chamará sem sucesso . Eu me peguei seguindo as linhas do pensamento de "verificação", e isso faz uma grande diferença.

Este efeito psicológico é discutido mais em A Arte do Teste de Software , um livro clássico que eu recomendo. O autor, Myers, também recomenda que quem quer que esteja testando um programa não seja o autor, nem mesmo na mesma cadeia de gerenciamento. Você pode fazer isso se estiver codificando por conta própria, por isso é preciso disciplina.

    
por 30.10.2010 / 19:44
fonte
8

Realizando o desenvolvimento orientado a testes desde o início em uma entrega ao cliente, para ver como isso afetaria a qualidade do código e executando somente a partir do ativador JUnit no Eclipse. Isso resultou em um produto melhor.

    
por 30.10.2010 / 12:34
fonte
5

O verdadeiro valor da programação sem ego.

Em algum nível eu sempre soube que o ego e a programação não se misturam, mas nunca chegaram a raciocinar sobre as conseqüências. A noção de que você precisa rever ativamente e encontrar falhas em suas próprias práticas é algo que só comecei a perceber no ano passado. Também estou aprendendo a procurar ativamente críticas aos meus designs (tanto na interface quanto no código).

Para ser honesto, ainda estou aprendendo a abandonar o ego, e provavelmente estarei aprendendo como fazer isso para o resto da minha carreira de programação.

    
por 31.10.2010 / 14:34
fonte
3

Aqui está minha resposta para minha própria pergunta:

Cerca de um ano atrás, ele clicou que os testes de aceitação automatizada não precisavam ser versões automatizadas dos testes que nossos testadores teriam feito manualmente. Focar nos testes contra especificações únicas, em vez de tentar atingir o máximo possível em uma única passagem, tornou os testes muito mais simples, mais fáceis de ler e também ajuda a incentivar a entrega incremental.

    
por 30.10.2010 / 11:56
fonte
3

Eu aprendi como um conceito matemático como Semirings se aplica a algoritmos. Com isso, você pode mostrar como alguns algoritmos são os mesmos, exceto pelo uso de um semiring diferente. Isso não deveria ser tão estranho para mim como programador, mas minha cabeça estava explodida.

    
por 30.10.2010 / 13:09
fonte
3

Além da política Frank Shearar mencionou , eu recentemente descobri QUnit e JSCoverage que fez o meu dia. E mês. Nunca pensei que seria possível testar JavaScript de unidade com cobertura de código, mas aí está ...: -)

    
por 30.10.2010 / 13:26
fonte
2

Meus três principais agradecimentos pelo último ano de programação foram para o seguinte (em ordem decrescente de importância e gratidão):

  • o paradigma de programação funcional para abrir minha mente para outras formas, muitas vezes mais elegantes e concisas, de expressar ideias e algoritmos em código. Sinto que minha habilidade geral de programação melhorou muito em pouco tempo graças às idéias de programação funcional.

    (Meus agradecimentos pessoais vão para Tomáš Petříček por seu excelente livro Programação funcional do mundo real .)

  • a injeção de dependência e o teste unitário me ensinaram que a composição de objetos é indiscutivelmente a melhor maneira de criar sistemas complexos (orientados a objeto) (e essa herança de classe é isn ' quase tão importante quanto eu costumava pensar). Ambos me ensinaram e me fizeram pensar sobre a melhor forma de compor sistemas e como escrever componentes fáceis de usar, mas ainda flexíveis o suficiente para reutilização.

    (Se eu tivesse que mencionar um bom recurso de ensino, eu diria que o Art of Unit Testing de Roy Osherove .)

Todas estas tomadas em conjunto resultaram em eu escrever código que geralmente tem menos bugs do que antes, porque eu estou agora escrevendo código que é muito mais fácil de entender e errado do que o que eu coloquei anteriormente.

    
por 30.10.2010 / 16:19
fonte
2

O que muda na indústria de software em rápida evolução, a curva de aprendizado está sempre aqui. "Se houvesse apenas uma maneira de aprender sem ter tempo para aprender."

    
por 30.10.2010 / 19:33
fonte
1

Aprendi que a venda para uma nova empresa pode realmente melhorar seu trabalho. Minha organização foi comprada de nossa antiga empresa em maio, e as coisas parecem continuar melhorando. A nova empresa poupou pouco ou nenhum gasto com nosso novo escritório, substituiu nossas máquinas de desenvolvimento obsoletas por equipamentos do século XXI, demonstrou flexibilidade para gerenciar nossos projetos e, em geral, fez com que todos nos sentissem mais que bem-vindos.

Parece um pouco deprimente ser vendido (um pouco como um servo que tem um novo senhor feudal porque está amarrado a uma terra que mudou de mãos), mas o resultado final foi muito melhor do que eu esperava.

    
por 30.10.2010 / 19:33
fonte
0

Eu diria usando testes de unidade da Microsoft no Visual Studio 2010.

Achei muito fácil depurar um método de teste específico.

Eu poderia executar a qualquer momento meu projeto de teste para ver se o aplicativo da camada de negócios está funcionando bem. O processo de teste garante que minha equipe não tenha problemas ao implantar a solução completa para os visitantes do site.

    
por 30.10.2010 / 13:25
fonte
0
  • Aprendeu Python Básico (usando-o para escrever scripts rápidos às vezes)

  • Instalado o ArchLinux na VM (já tinha o Ubuntu na VM, meu PC agora está rápido!)

  • Iniciando com o MATLAB (especialmente para plotagem de gráficos e verificações numéricas rápidas)

  • Comutado para o Mercurial (do SVN) (ramificando e mesclando!)

por 30.10.2010 / 20:23
fonte
0

O aprendizado do padrão MVVM ajudou-me a me tornar menos invasivo.

    
por 30.10.2010 / 22:42
fonte
-1

Eu tive que começar a manter um aplicativo da web em Python - então decidi que era um bom momento para aprender Vim também. Agora estou usando o plugin IdeaVim para Intellij para meu desenvolvimento em Java e Flex e definitivamente acredito que isso tornou minha digitação mais rápida e eficiente.

    
por 30.10.2010 / 17:39
fonte