Muitas pessoas na comunidade de codificação falam sobre melhoria contínua, prática deliberada e assim por diante - mas quando falam sobre suas práticas atuais, é quase como se 'tivessem surgido totalmente formadas dos lombos de Zeus' porque você não ouve como suas opiniões mudaram com o tempo ou o que aprenderam recentemente.
De vez em quando, embora eu vá a uma conversa, ou leia um livro, ou converse com alguém, eles se abrem um pouco mais e eu acho que aprendo muito com essas idéias.
Então, se você tivesse que escolher uma coisa dos últimos 12 meses, aprendeu o que seria?
learning
self-improvement
FinnNk
fonte
fonte
Depois de aprender um pouco de Clojure , comecei a perceber a utilidade da programação funcional , e meu estilo de codificação Java foi fortemente afetado por isso. Ao contrário da crença popular, uma linguagem de programação funcional não é um pré-requisito absoluto para executar alguma programação funcional.
É possível incorporar alguns elementos da programação funcional em uma linguagem imperativa como Java, e mesmo que nem sempre seja idiomática, pode ser altamente benéfica em alguns problemas. Por exemplo, classes anônimas são aproximadamente iguais a encerramentos, conforme descrito na wikipedia . A avaliação preguiçosa deve ser uma norma e não algo incomum. Imutabilidade dificilmente pode ser usada em excesso. Basta superar a ideia (quase) obsoleta de que construir novos objetos em vez de alterar os existentes é caro por causa do consumo de GC e de heap - em 99,9% dos casos, isso simplesmente não é relevante. De fato, o processamento paralelo pode virar o argumento da eficiência de outra maneira: criar novos objetos imutáveis pode ser mais barato do que modificar os existentes, porque você se livra do bloqueio.
Mais informações sobre como fazer FP em Java puro aqui , aqui , aqui e aqui .
fonte
Mesmo se você tiver 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 Diretoria.
Em resumo: a política é importante e, às vezes, a política que afeta você, você não pode controlar.
fonte
Eu aprendi isso o objetivo dos testes de software é encontrar bugs . É não para verificar se o sistema está correto.
Existem fatores psicológicos importantes em jogo: se seu objetivo é mostrar que o programa está "correto", você gravitará em testes que sabe que serão aprovados. Mas se seu objetivo é encontrar bugs, você gravitará em testes que realmente levarão seu sistema ao limite.
Há até uma mudança importante no idioma que você usa. Se um teste encontrar um bug, você o chamará de bem - sucedido . Se o teste não [ou seja, o programa passa], você o chama sem êxito . Eu me peguei seguindo as linhas do pensamento de "verificação", e isso faz uma grande diferença.
Esse efeito psicológico é discutido mais em The Art of Software Testing , um livro clássico que eu recomendo. O autor, Myers, também recomenda que quem estiver 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.
fonte
Realizando desenvolvimento orientado a testes desde o início na entrega de um cliente para ver como isso afetaria a qualidade do código e executando apenas a partir do iniciador JUnit no Eclipse. Isso resultou em um produto melhor.
fonte
O verdadeiro valor da programação sem ego.
Em algum nível, eu sempre soube que ego e programação não se misturam, mas nunca raciocinei as consequências. A noção de que você precisa revisar ativamente e encontrar falhas em suas próprias práticas é algo que só comecei a perceber no ano passado. Também estou aprendendo a buscar ativamente críticas de meus projetos (na interface do usuário e no código).
Para ser sincero, no entanto, ainda estou aprendendo a abandonar o ego, e provavelmente aprenderei a fazer isso pelo resto da minha carreira em programação.
fonte
Aqui está a minha resposta para minha própria pergunta:
Cerca de um ano atrás, clicamos que os testes de aceitação automatizados precisavam ser versões não automatizadas dos testes que nossos testadores teriam feito manualmente. O foco nos testes com especificações únicas, em vez de tentar atingir o máximo possível em uma única passagem, tornou os testes muito mais simples, fáceis de ler e também ajuda a incentivar a entrega incremental.
fonte
Aprendi como um conceito matemático como Semirings se aplica a algoritmos. Com isso, você pode mostrar como alguns algoritmos são iguais, exceto pelo uso de um semicondutor diferente. Isso não deveria ser tão estranho para mim como programador, mas minha cabeça estava estourada.
fonte
Além da política que Frank Shearar mencionou , eu descobri recentemente o QUnit e o JSCoverage que fizeram o meu dia. E mês. Nunca pensei que seria possível testar o JavaScript com cobertura de código, mas existe ... :-)
fonte
Meus três principais agradecimentos pelo último ano de programação iriam para o seguinte (em ordem decrescente de importância e gratidão):
o paradigma de programação funcional para abrir minha mente para outras maneiras, muitas vezes mais elegantes e concisas, de expressar idéias e algoritmos em código. Sinto que minha capacidade geral de programação melhorou muito em pouco tempo, graças às idéias funcionais de programação.
(Meus agradecimentos pessoais a Tomáš Petříček por seu excelente livro Programação funcional do mundo real .)
tanto injecção dependência e testes unitários me ensinaram que a composição objeto é sem dúvida a melhor maneira para a criação de sistemas complexos (orientados a objetos) (e que herança de classe não é quase tão importante quanto eu costumava pensar). Ambos me ensinaram e me fizeram pensar sobre como melhor compor sistemas e como escrever componentes que são fáceis de usar, mas ainda assim flexíveis o suficiente para serem reutilizados.
(Se eu tivesse que mencionar um bom recurso de ensino, diria Art of Unit Testing de Roy Osherove .)
Tudo isso em conjunto resultou na escrita de código que geralmente possui menos bugs do que antes, porque agora estou escrevendo um código que é muito mais fácil de entender e errar do que o que eu coloquei anteriormente.
fonte
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."
fonte
Aprendi que ser vendido para uma nova empresa pode realmente melhorar seu trabalho. Minha organização foi comprada de nossa antiga empresa em maio e as coisas parecem melhorar. A nova empresa poupou pouca / nenhuma despesa com nosso novo escritório, substituiu nossas máquinas de desenvolvimento obsoletas por equipamentos do século XXI, exibiu flexibilidade no gerenciamento de nossos projetos e, em geral, nos fez sentir mais do que bem-vindos.
É meio deprimente ser vendido (um pouco como um servo tendo um novo senhor feudal porque ele está vinculado à terra que mudou de mãos), mas o resultado final foi muito melhor do que eu esperava.
fonte
Eu diria que usando o teste 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.
fonte
Python básico aprendido (usá-lo para escrever scripts rápidos às vezes)
ArchLinux instalado na VM (tinha o Ubuntu na VM anteriormente, meu PC está rápido agora!)
Iniciado com MATLAB (especialmente para plotagem de gráficos e verificações numéricas rápidas)
Comutado para Mercurial (de SVN) (ramificação e mesclagem!)
fonte
Aprender o padrão MVVM me ajudou a tornar-me muito menos um hack.
fonte
Eu tive que começar a manter um aplicativo Web Python - então decidi que era uma boa hora para aprender o Vim também. Agora, estou usando o plugin IdeaVim para Intellij para o meu desenvolvimento Java e Flex e definitivamente acredito que isso tornou minha digitação mais rápida e eficiente.
fonte