Qual foi 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 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?

FinnNk
fonte

Respostas:

18

Aprendi que é preciso apenas um gerente podre para estragar todo o projeto, mas são necessários muitos bons programadores para limpar a bagunça depois.

Martin Wickman
fonte
Martin, eu upvoted porque a sua mensagem me fazer sorrir neste chuvoso e manhã de sábado frio, mas você não responder à pergunta;)
Adicionado "eu aprendi isso ..."
Martin Wickman
+1 porque sou um desses programadores este mês. Mais de 70 horas na semana passada == "minha vez no barril".
Dan Ray
Eu reconheço esse! Deve ser citação! "É preciso apenas um gerente podre para estragar todo o projeto, mas são necessários muitos bons programadores para limpar a bagunça depois".
Amir Rezaei
12

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 .

Joonas Pulakka
fonte
+1 eu concordo. É triste que o Java tenha um suporte tão ruim à programação funcional.
Jonas
Eu tenho um interesse de longa data em FP (meu primeiro trabalho envolveu lisp) e acho muito emocionante que nos últimos anos finalmente esteja se tornando um paradigma bastante "comum" ao lado de OO etc.
FinnNk
O Java 7 deve ter pelo menos fechamentos melhores. E o uso de bibliotecas inteligentes, como o lambdaj, pode fazer maravilhas para corrigir as deficiências da própria linguagem.
Joonas Pulakka
Eu gostaria de ter um melhor suporte para recursão de cauda em Java / JVM.
Jonas #
1
Método @ Helper: os dois primeiros links na minha resposta são artigos sobre FP com Java. Não conheço nenhum livro sobre o assunto. Acho que o melhor método para "obtê-lo" é aprender alguma linguagem FP real e começar a usar objetos mais imutáveis ​​em seu código Java.
Joonas Pulakka
10

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.

Frank Shearar
fonte
Dou-lhe um +1 virtual porque Martin já me faz sorrir com uma resposta semelhante;) Você leu Dead March? este é um livro sobre o que você está falando #
(
9

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.

Macneil
fonte
8

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
Observe que não encontrei uma maneira de vincular "Executar novamente o teste de unidade mais recente" a uma chave. Isso tornou um pouco tedioso.
5

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.

Joeri Sebrechts
fonte
3

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.

FinnNk
fonte
3

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.

Peter Stuifzand
fonte
1
Você tem um exemplo de um?
Mark C
Há um exemplo no livro Element of Programming que usa uma função que calcula potências e algumas coisas de fibonacci, que calcula fib em tempo de O (log n). Acho que o exemplo pode ser encontrado aqui cpp-next.com/archive/2010/03/eop-ch3-preview , mas esse site responde com um erro interno do servidor.
Peter Stuifzand
3

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 ... :-)

Dr. Hannibal Lecter
fonte
Este está no meu radar para o próximo ano, eu me envolvi um pouco nos testes de unidade js, mas ainda não em um projeto real. Não sabia que havia uma ferramenta de cobertura disponível!
FinnNk 30/10/10
2

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.

stakx
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."

wassimans
fonte
O fato de sempre haver coisas novas para aprender é, para mim, um dos grandes apelos dessa profissão. Os sistemas de TI geralmente tratam da melhor maneira de lidar com o aumento da complexidade, e eu adoro descobrir novas teorias e conceitos nessa direção. Por outro lado, às vezes tudo pode ser frustrante, porque ter que acompanhar o estado da arte pode parecer um pouco como uma corrida constante.
stakx
1

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.

bedwyr
fonte
0

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.

Junior M
fonte
0
  • 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!)

Vaibhav Bajpai
fonte
0

Aprender o padrão MVVM me ajudou a tornar-me muito menos um hack.

bufferz
fonte
-1

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.

Watson
fonte
1
Realmente - -1? Você quer descompactar isso para mim - as pessoas não acham que o VIM é esclarecedor ou útil?
Watson