Temos muitas ferramentas excelentes que ajudam muito na programação, como bons programadores, editores de texto, IDEs, depuradores, sistemas de controle de versão etc. Algumas das ferramentas são mais ou menos ferramentas "necessárias" para realizar o trabalho (por exemplo, compiladores) .
Ainda existem sempre ferramentas que ajudam muito, mas ainda não recebem tanta atenção, por várias razões, por exemplo, quando foram lançadas, estavam adiantadas e agora são mais ou menos esquecidas.
Que tipo de ferramenta de programação você acha que é a mais subestimada? Motive sua resposta.
tools
developer-tools
Anto
fonte
fonte
Respostas:
Um pato de borracha. Sim com certeza.
http://en.wikipedia.org/wiki/Rubber_duck_debugging
fonte
Caneta e caderno.
fonte
As ferramentas Diff parecem estar sendo subutilizadas ao comparar saídas ou dados de log em arquivos de texto simples. Ou talvez seja apenas um nicho? Parece-me muito útil e útil para a depuração comparar enormes logs de execuções de programas e identificar um ou dois detalhes que foram alterados.
As ferramentas de criação de perfil de desempenho também são muito boas de ter, especialmente quando você atinge um ponto crítico, mas parece que poucas pessoas estão familiarizadas com elas (e eu me admito em alguma categoria nesta categoria).
Boas ferramentas XML são vitais - se você estiver trabalhando com arquivos XML com mais de uma dúzia de linhas ou múltiplos esquemas. Às vezes, você precisa mais do que apenas a sintaxe básica, destacando outros editores. Além disso, ao trabalhar com XML, aprender XSL pode ser muito útil. Muitas vezes, vejo o que poderia ser feito em uma simples transformação XSL feita em várias linhas no código do aplicativo. Embora a esclarecer: Estou não sugerindo que XML em si é uma "ferramenta de programação subestimado"; Estou sugerindo que o valor de bons editores de XML está subestimado, pelo que vi.
fonte
diff
é subestimado. Quanto ao perfil, você não está sozinho ao pensar que eles devem ser úteis, mas você mesmo não sabe como. Verifique isso.<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription></ProblemWorsening>
Expressões regulares
Eles são tão úteis. Eles ajudam na busca por arquivos de log, análise de texto etc. Eles são extremamente úteis.
Acho estranho quantas pessoas que conheço que nunca as usam porque há uma curva de aprendizado associada a elas. Muitas vezes, vejo as pessoas fazendo as coisas da maneira mais difícil (Nota: antes da regex, eu fazia as coisas da maneira mais difícil) quando uma regex simples podia baixá-la rapidamente.
fonte
Seus companheiros de time. Quando você adota uma ideia rápida e esquece de incorporar sua equipe, nunca ouvirá as preocupações ou idéias de por que não funcionará ou por que poderia ser ainda melhor.
Digo isso, porque é fácil pensar que a programação é algo antissocial que as pessoas fazem nos cantos com suas idéias brilhantes. As pessoas que acham que isso subestimam o valor das equipes e de seus colegas de equipe para ajudar a fazer as idéias / projetos afundarem / nadarem.
fonte
Google. Existem muito poucos problemas que ainda não foram resolvidos e documentados. Uma consulta bem ajustada do Google pode economizar muito tempo para todos.
fonte
De longe, a ferramenta mais subestimada para encontrar "gargalos" é Ctrl+ Cou o botão "Pausar", em um depurador.
Verifique o último parágrafo desta publicação , e esta publicação e esta publicação , para iniciantes.
Muitas vezes eu vejo ouço pessoas dizendo: "O programa é muito lento! O que posso fazer sobre isso? Tentei um perfilador (se o fizeram), mas não entendo o que diz. Alguém tem alguma sugestão? Ajuda! " Bem, suposições são apenas isso. O que eu sempre fiz, e outros também, é continuar, interromper e examinar a pilha de chamadas. Se o problema é muito ruim, bingo , está bem na sua frente. Se o problema for moderado, você o faz várias vezes. Tudo o que aparece em mais de uma amostra, que você pode evitar, é um gargalo que você pode corrigir.
Sim, isso é isca de voto negativo, mas funciona.
fonte
O compilador.
A maioria das pessoas não leva tempo para entender o que seu compilador de escolha faz. Eles apenas acham que ele transforma o código em um programa executável, e isso é o mais longe possível. Na maioria das modernas, existem várias configurações que você pode alimentar para fazer o que você precisa. Aqui está um exemplo: aposto que metade dos desenvolvedores do seu escritório não tem idéia de como definir o aviso como nível de erro (supondo que ele realmente tenha um). Quais opções você tem para gerar símbolos de depuração? Quais otimizações (ou em que nível) você deseja que ela faça. A lista continua.
fonte
-pedantic -Wall -Wextra -Werror
... embora ele pode ficar difícil construir qualquer coisa então: pSeu cérebro. Outras ferramentas não teriam muito significado sem ele.
fonte
Bom e velho:
Às vezes, um depurador ou criador de perfil ou um diagrama de fluxo UML é útil. E às vezes eles te deixam louco. Eu sempre me pego usando declarações de impressão (ou trace, NSLog ou what-have-you) apenas para garantir que meu código esteja fazendo o que penso que está fazendo quando penso que está fazendo.
fonte
Scripts antigos simples ... não importa quantas linguagens da próxima geração que desenvolvemos, ainda dependemos muito de scripts, também a maior parte das tarefas do dia a dia pode ser alcançada escrevendo-se algumas linhas de scripts.
fonte
Caneta e quadro branco.
Você não pode vencer a baixa tecnologia ao tentar explicar alguma coisa.
fonte
ack . É como
grep -r
, mas foi projetado para pesquisar através do seu código-fonte.fonte
Perl e outras linguagens de script. Ótimo para tarefas que são um pouco complicadas demais para ferramentas de GUI como o Agent Ransack.
fonte
Atalhos de teclado que permitem refatoração rápida, frequente e segura. Aprender a extrair (ou incorporar etc) variáveis, métodos, constantes ou classes ao pressionar algumas teclas mudou fundamentalmente como eu codifico. Você apenas refatorará com frequência (ou seja, o suficiente) quando o custo for mínimo, portanto, tornar esses atalhos uma segunda natureza é essencial para escrever e manter um bom código no que me diz respeito.
Portanto, geralmente, use boas ferramentas (IDE / editor) e aprenda a aproveitar ao máximo os recursos que eles fornecem.
O teste de unidade e o TDD vêm a seguir, para manter seu código testável e evitar o medo de refatoração.
Use-os e você passará facilmente para escrever código de manutenção correto, em conformidade com o princípio DRY e que seja auto-documentado.
fonte
O teste de unidade oferece os seguintes benefícios:
fonte
Geradores de código
Os geradores de código podem criar uma grande quantidade de código eficiente e sem erros a partir de uma definição simples. Os usos do tipo ORM são os mais óbvios para a criação de classes de acesso a dados, mas há muito mais usos em potencial.
O suporte para geração de código parece ainda estar na infância, tanto do ponto de vista do programador quanto do framework, mas acredito que é algo que veremos cada vez mais. No .NET, você pode começar a se interessar pelas coisas do CodeDOM .
fonte
Eu uso muito o AgentRansack . É uma tremenda ajuda para pesquisar milhares de arquivos muito rapidamente. Isso me salvou muito tempo, mas não conheço muitos programadores que o conhecem ou o utilizam.
fonte
Métodos formais.
http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkstra/dp/013215871X
http://www.amazon.com/Science-Programming-Monographs-Computer/dp/0387964800/ref=pd_sim_b_1
É difícil exagerar sua importância. Todo loop e toda declaração if começa como uma idéia que requer algum tipo de "prova". A maioria dos programadores faz essa prova na maioria das vezes em suas cabeças. Você pergunta o que a declaração if faz e eles podem articular - de maneira sã e lógica - quais são as escolhas e por que as escolhas são completas, consistentes e exclusivas.
Mas alguns parecem adivinhar aleatoriamente. Eles precisam de mais ajuda e métodos formais podem ser o tipo de ajuda que precisam.
É apenas álgebra (e cálculo) para código. Nada muito complexo ou sofisticado.
fonte
Padrões de design físico, como deixar a cadeira para uma corrida rápida à luz do sol e ar fresco, mantêm nosso cérebro funcionando com uma grandiosidade impressionante.
fonte
Bem, é Half Life 2 (insira seu jogo favorito aqui). Se eu tenho um problema que não consigo resolver, simplesmente paro e começo a jogar com meu jogo favorito e, de repente, a solução aparece em minha mente. Então, para ser honesto, não é um jogo ou algo parecido, mas fazer outra coisa . Costumo ver pessoas sentadas em um problema por horas sem resolvê-lo e tudo o que deveriam fazer é colocar o cérebro offline por um curto período.
fonte
Stack Overflow - ajuda rápida e especializada quando você está preso
fonte
Eu acho que é Notepad / TextPad / programas de edição de texto simples. Todo mundo tem um momento em que precisa de uma correção rápida que não exija a abertura de um IDE e precisa apenas de uma edição rápida. E todos os computadores possuem algum tipo de programa simples de edição de texto.
fonte
Afirmações e uma boa
alwaysAssert()
função. IMHO, estes são mais importantes que os testes de unidade, porque os testes de unidade só podem encontrar erros nos casos específicos que você pensou em testar. Se o mesmo programador escrever o código e os testes, ele provavelmente perderá os mesmos casos extremos em ambos. Além disso, às vezes o teste de unidade é impraticável porque o ambiente no qual o componente funciona e / ou os dados nos quais ele opera é muito complicado para apresentar um caso de teste artificial.A beleza das afirmações reside em sua capacidade de documentar suposições e testá-las em informações não-inventadas . Se alguma dessas suposições estiver incorreta, seu código falhará alto em vez de "funcionar", mas produzindo resultados sutilmente incorretos. Também falha mais perto da raiz do problema do que seria sem as afirmações. Na prática, se você declarar explicitamente suposições suficientes sobre um trecho de código e todas essas suposições estiverem corretas, o código geralmente estará correto.
Uma queixa comum sobre afirmações é que elas podem ser desativadas. IMHO toda linguagem ou biblioteca padrão deve ter uma
alwaysAssert()
função ou equivalente aproximado que faça a mesma coisa queassert
mas não possa ser desativada. Isso pode ser usado para verificar suposições em áreas críticas de código que não são de desempenho, onde os benefícios de desativar declarações são insignificantes.fonte
A tecla F1. - Útil para programas que você não conhece e para programas em que está trabalhando. (Supondo que seja um aplicativo grande.)
Poderosos para filtrar problemas, os usuários relatam bugs com base na interpretação de como o software deve funcionar. Obviamente, pode ser que o design em si tenha falhas. Mas isso é outra história.
fonte
Vários utilitários principais do UNIX, mas principalmente
find
e ocasionalmentegrep
oued
. A capacidade de encontrar coisas em ninhos profundos de arquivos é inestimável, principalmente quando você repentinamente herda uma base de código e precisa corrigi-la. Mesmo que o código esteja bem documentado, você provavelmente terá que caçar, e uma forte compreensão dofind
mata.fonte
Curiosidade
Chame de "Enigma da programação". O que é uma ferramenta em comparação com a pessoa que a empunha? O desejo de saber como e por que algo funciona ou não, expande o conhecimento de alguém mais do que qualquer ferramenta específica e isso é verdade além da programação.
fonte
Economizou inúmeras horas em todo o mundo!
fonte
Rabo
A cauda pode ser usada para monitorar o arquivo de saída do log do programa em tempo real. Foi de grande ajuda no desenvolvimento de sistemas que não fornecem outros meios de leitura do log.
Programas de exemplo são;
fonte
Reuni um gerador de gráfico de chamada Perl uma vez. Foi extremamente útil, mas ficou muito contente com código não processual ou rotinas fora do arquivo.
fonte