Ferramenta de programação mais subestimada [fechada]


35

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.


3
Nossos cérebros? - -
Trufa

Ok, quem quer adicionar a entrada Lisp? * sorria *
Mark C

Respostas:


70

Um pato de borracha. Sim com certeza.

http://en.wikipedia.org/wiki/Rubber_duck_debugging

Depuração de pato de borracha , desvio de borracha e teste de patinho de borracha são termos informais usados ​​na engenharia de software para se referir a um método de código de depuração. O nome é uma referência a uma provável história apócrifa na qual um programador especialista sem nome mantinha um pato de borracha em sua mesa o tempo todo e depurava seu código, forçando-se a explicá-lo, linha por linha, para o pato.

Para usar esse processo, um programador explica o código para um objeto inanimado, como um pato de borracha, com a expectativa de que, ao alcançar um pedaço de código incorreto e tentar explicá-lo, o programador notará o erro. Ao descrever o que o código deve fazer e observar o que ele realmente faz, qualquer incongruência entre esses dois se torna aparente ...


6
Faço isso o tempo todo com meu marido. Como um suporte técnico com um pouco de capacidade de programação, ele entende cerca de 60% do que eu digo, mas me obriga a explicar os 40% que não entendo tão bem. O número de ocasiões em que funciona é realmente impressionante.
Ethel Evans

11
Você ri. Na verdade, uma colega de trabalho tinha um pato de borracha na mesa dela.
Berin Loritsch 11/03/11

57
Eu tentei, mas meu pato de borracha não parecia se concentrar no problema. Onde posso encontrar um pato de borracha devidamente qualificado com um interesse genuíno em programação?
Steve314

3
Eu uso meu diário para isso. Às vezes tenho longas discussões comigo sobre isso. Eu gostaria de poder me fazer entender o que quero dizer, às vezes. Escrever isso em um diário às vezes ajuda muito mais tarde, quando me pergunto o que o idiota que escreveu o código em que estou trabalhando estava pensando.
Lars Wirzenius 31/03

11
@ Steve: Pesquisadores japoneses estão trabalhando nisso, mas eu não acho que eles estão em qualquer lugar perto: youtube.com/watch?v=3g-yrjh58ms
Rei Miyasaka

42

Caneta e caderno.

  1. Funciona sem eletricidade.
  2. Portátil.
  3. Rabiscar ligado / in quando entediado em reuniões
  4. Armazene informações úteis.
  5. Se estiver escrito, as pessoas atribuem mais importância a ele.
  6. Outros podem ler e aprender.

Nos velhos tempos das grandes corporações, engenheiros e técnicos recebiam cadernos de engenharia em branco onde escreviam todas as coisas que costumamos colocar em vários arquivos em nossos discos rígidos. Quando os cadernos eram preenchidos, eles eram enviados para um repositório seguro e protegido contra incêndio. Se alguém precisasse ter acesso a essas anotações, poderia conferir os cadernos.
Oosterwal

3
Os russos usaram um lápis.
Job

@Job Hah, eu ainda uso um frasco de tinta! (... Bem, apenas para caligrafia, mas ainda :).)
Mateen Ulhaq

E os Tablet PCs?
Mateen Ulhaq

11
@ Job: ... e vodka!
Spoike

38

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.


11
++ Absolutamente 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.
Mike Dunlavey

Sim, eu tenho pensado sobre realmente aprender uma ferramenta de análise, mas nunca chegou a esse
Anto

23
+1 para criação de perfil, +1 para ferramentas diff, -1 para ferramentas XML. Algumas pessoas, quando confrontadas com um problema, pensam "eu sei, vou usar XML". <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>
Mason Wheeler

2
@Mason: XML bonito.
Mike Dunlavey

10
@Mason Wheeler: Eu não sugeri o XML como uma ferramenta para resolver problemas, sugeri Boas Ferramentas XML - quando você precisar trabalhar com o XML, verifique se você tem um editor / ferramenta muito bom nisso. Algo que pode executar consultas Xpath, validação de esquema, transformação, comparação de valor versus estrutura (um tipo especial de ferramenta diff, eu acho) etc. pior (btw eu gosto do seu código XML;)).
FrustratedWithFormsDesigner

37

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.


8
Lembre-se de que as expressões regulares não são um canivete suíço, mesmo que sejam ótimas quando aplicadas corretamente.
Anto

10
Extremamente útil - mas muitas vezes abusado, levando a um código enigmático e impossível de manter. O velho ditado "agora você tem dois problemas" tem alguma base na realidade.
Steve314

4
Os RegExes são um canivete suíço: uma ferramenta adequada para muitos trabalhos rápidos, embora provavelmente não seja a ferramenta certa para a construção de uma casa inteira.
JasonTrue

4
Hmm, por algum motivo, eu sempre tive a impressão de que a regex estava longe de ser subestimada. Muitas vezes vejo pessoas buscando um regex em que uma divisão / loop simples seria suficiente ou quando os regexes simplesmente não são a resposta (por exemplo, analisando xml / html).
MAK

Eu já vi os dois fenômenos: Regex? Esse material é ilegível / lento / insere pejorativo aqui e "Qual é a melhor maneira de analisar (inserir gramática completamente não regular) com um regex?"
JasonTrue

24

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.


Bons companheiros de equipe nunca podem ser supervalorizados. A maioria dos softwares e hardwares pode.
Tipo anônimo

19

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.


13
Uma boa ferramenta, mas não tenho certeza se a chamaria de subestimada, pelo menos não mais (talvez eu tivesse concordado 9 ou 10 anos atrás).
FrustratedWithFormsDesigner

12
Sinto muito, mas o Google subestimou? No mínimo Google é superestimado :)
eestein

2
Eu sei eu sei! Mas minha justificativa para dizer que é subestimada é uma que eu suspeito que você concorda: pelo menos 75% das perguntas feitas no StackOverflow são facilmente respondidas pelo Google, sim? Claramente, é até certo ponto subestimado se muitas pessoas não o estão usando. Se minha lógica for falha, eu excluirei minha resposta.
Adam Crossland

3
@ Adam Crossland: 75% está sendo gentil. Eu acho que é mais alto que isso.
31511 S.Lott

11
@ adam @ s.lott, então acho que o ponto é que o Google não é usado corretamente. Com isso eu concordo. Tantas perguntas poderiam ser respondidas (não precisariam ser feitas) se as pessoas soubessem como usar o Google corretamente. Saudações.
eestein

16

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.


Não se deve subestimar instrumentos contundentes. Claramente, essa nem sempre é a resposta certa, mas pode ser. Chame isso de aproximação de primeira ordem, a ser refinada por um criador de perfil real, se necessário.
Kristof Provost

@ Kristof: É tentador pensar que sim, e existem problemas que ele não consegue resolver, e há casos em que as amostras não são fáceis de obter, mas os criadores de perfil também não conseguem lidar com esses casos, exceto para um tipo específico, como o Zoom , e mesmo assim eles não são realmente melhores no sentido de direcioná-lo direto ao problema.
Mike Dunlavey

@ Kristof: Aqui está o tipo de problema em que a pausa aleatória não é boa - onde, se você tirar uma foto a tempo e estudá-la, não poderá dizer o motivo do que está fazendo. Exemplo: processamento orientado a mensagens, onde você não pode dizer de onde a mensagem foi enviada, por que ou com que frequência. Outro exemplo: protocolos assíncronos, onde as mensagens estão sendo trocadas, e parece que estamos sempre esperando pelo outro cara. Para processamento síncrono, os criadores de perfil podem medir melhor, mas a pausa aleatória é melhor para encontrar .
Mike Dunlavey

14

Que tipo de ferramenta de programação você acha que é a mais subestimada? Motive sua resposta.

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.


3
@ Kevin: e gostaria de adicionar maneiras de escrever código para que o compilador efetue verificações para você (para linguagens estaticamente tipadas). A maioria dos desenvolvedores usa tipos de prateleira (como string) para representar qualquer tipo de informação, onde eles podem definir tipos simples, mas incompatíveis, para dados não relacionados ... e ter o compilador que não estragam ao passar argumentos.
Matthieu M.Mar

@ Matthieu M Esse também é um bom ponto. Muitas pessoas esquecem as maneiras fáceis de ajudá-lo.
kemiller2002

3
Todo aviso do compilador é um presente precioso. Não os ignore! Peça mais! -O erro deve ser obrigatório.
Kristof Provost

@Kristof: -pedantic -Wall -Wextra -Werror... embora ele pode ficar difícil construir qualquer coisa então: p
Matthieu M.

Talvez seja só eu, mas se "metade dos devs" não sei o que acontece com símbolos de depuração" não é um exagero, é bastante assustadora.
kizzx2

10

Seu cérebro. Outras ferramentas não teriam muito significado sem ele.


4
De vez em quando, tornei o meu praticamente inútil.
David Thornley

3
"mais ou menos esquecido": -S

5
Eu diria que está subestimado. Muitas pessoas estão sempre procurando atalhos para que não precisem pensar. Não há substituto para o senso comum e a lógica, e as ferramentas simplesmente não podem substituir isso.
jnevelson

2
Eu concordo com Jonathan, o cérebro geralmente é subestimado. De fato, muitos programadores confiam nos poucos truques que conhecem, em vez de sair da caixa e, ocasionalmente, escrever um caso de teste e uma ferramenta de teste sob medida (barata e suja, jogue fora a classe) e uma ferramenta de teste para investigar o problema em questão. Em muitas ocasiões, dei aos desenvolvedores os meios para ir além de seu estado de pensamento e resolver seus problemas com não mais do que algumas perguntas.
asoundmove

11
Alguns comentários me fez mudar a minha opinião, uma :)
Anto

10

Bom e velho:

print

À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.


Eu acho que isso depende do idioma e do depurador. Os tipos de depuradores oferecidos pela maioria dos IDEs decentes hoje em dia para idiomas populares permitem que você faça as coisas muito mais facilmente do que as declarações impressas.
Billy ONeal

8

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.


11
Veja .. Eu discordaria deste. Sim, os scripts podem automatizar algumas tarefas. Mas muitas vezes eles são levados muito além do ponto do senso, ao ponto em que acabam de se tornar um grande espaguete.
Billy ONeal

11
É verdade que grandes scripts são horríveis de se olhar e pode-se usar perl ou python para isso. Embora eles ainda sejam ótimos para realizar pequenos trabalhos.
Gaurav Sehgal

@ Billy Use python. Problema Spaghetti resolvido :)
Evan Solha



5

Perl e outras linguagens de script. Ótimo para tarefas que são um pouco complicadas demais para ferramentas de GUI como o Agent Ransack.


11
Eu não tenho certeza que eles são subestimados ...
Anto

3
Definitivamente subestimado ... especialmente Perl. É um lang. muito bem projetado com o lema de manter as coisas simples ... como tal, não tem preço para tarefas rápidas que só precisam ser realizadas.
Rook

@Rook: Não sei como um idioma com mais de 100 operadores pode ser considerado "simples". Útil, possivelmente. Mas não é "simples".
Billy ONeal

@ Billy - Simples não exclui poderoso. Acho as calculadoras simples. Não sei o que metade das 300 funções faz, mas isso não reduz sua simplicidade.
Rook

4

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.


4

O teste de unidade oferece os seguintes benefícios:

  • Os desenvolvedores se tornam os primeiros clientes do código. Quanto mais rápido um bug for detectado, menos caro será o reparo. Os erros podem ser detectados antes de uma construção, instalação ou implantação .
  • O teste muda sua perspectiva sobre o código. O design é claro? Ele lida com caixas de canto?
  • O Efeito Hawthorne melhorará a qualidade, simplesmente anunciando que uma equipe está publicando métricas de qualidade / teste.
  • Mesmo que os testes não sejam verificados no controle de origem, eles podem ser uma ótima maneira de explorar e aprender novos terrenos.
  • Uma alta probabilidade de menos erros!

4

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 .


Eu gosto de escrever geradores de código, não é a coisa mais fácil de acertar, mas é muito útil.
Zachary K

3

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.


3

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.


Eu os achei frequentemente úteis para acertar as coisas simples, para que eu possa confiar enquanto depuro as coisas mais complicadas. Minha experiência é que os métodos formais eliminam muito bem os erros sutis, deixando apenas os óbvios flagrantes que são facilmente capturados nos testes.
David Thornley

3

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.


3

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.


3

Stack Overflow - ajuda rápida e especializada quando você está preso

site de perguntas e respostas para programadores profissionais e entusiastas. Ele foi desenvolvido e executado por você como parte da rede de sites de perguntas e respostas do Stack Exchange. Com a sua ajuda, estamos trabalhando juntos para criar uma biblioteca de respostas detalhadas para todas as perguntas sobre programação ...


+1, mas não está subestimado mais #
MAK

4
talvez até superestimada, ou pelo menos em demasia
Anto

3

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.


2

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 que assertmas 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.


Acordado. Mas, infelizmente, ferramentas simples, mas eficientes, como essa, geralmente são subestimadas.
Peter Mortensen

2

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.


2
Ambos subestimados e também sub-implementados.
Tipo Anonymous

Muito subestimado pelos desenvolvedores do aplicativo que você está usando no momento; como tal, a ajuda contém pouca ou nenhuma informação útil.
cutucar

2

Vários utilitários principais do UNIX, mas principalmente finde ocasionalmente grepou ed. 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 do findmata.


2

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.



1

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;


O Mac OS X é um sistema UNIX. Não há necessidade de mencioná-lo separadamente.
rightfold 12/09

0

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.