Técnicas gerais de programação para acelerar o tempo de codificação

20

Estou me preparando para um concurso de programação em que precisamos codificar em C ++ e é tudo sobre produzir código de trabalho em pouco tempo. Um exemplo seria usar uma macro para obter o mínimo de duas polegadas ou usar memsets para inicializar matrizes (mas me disseram que você não deveria usar aqui ).

Isso leva à pergunta: que tipo de técnicas de codificação existem para usar em um trabalho real?

marktani
fonte
26
Eu acho que as técnicas que você usa em uma competição de codificação podem não ter nada a ver com as técnicas que você usaria em um trabalho real.
21412 Doug T.
1
Eu não estava pedindo técnicas em um trabalho real, estava pedindo técnicas em uma competição de codificação.
marktani
1
@DougT. Concordo, truques para uma competição de codificação não é sobre o tema, mas também acho que você poderia expandir-se para falar sobre a produtividade no ambiente de trabalho, e como você melhor reduzir o tempo gasto no código de macaco
James
1
Por que você não deve usar memsets para inicializar matrizes dinâmicas?
James
3
Não use c ++. Use o idioma de nível mais alto possível.
22412 Kevin

Respostas:

52

A maneira de produzir código de trabalho rápido é ... desacelerar. Dê passos muito pequenos. Certifique-se de saber para que servem cada etapa. Certifique-se de que, após cada etapa, seu código seja compilado e executado.

O melhor de tudo, use o Desenvolvimento Orientado a Testes. Escreva um teste com falha. Escreva apenas o código suficiente para fazer o teste passar. Refatorar para tornar o código limpo, garantindo que ele ainda passe em todos os testes. Repetir.

Se você não fizer isso, é muito fácil escrever uma grande pilha de código, o que não funciona. Depois, levará muito tempo para descobrir por que não funciona.

Dima
fonte
21
Você está falando sério? TDD para concurso de programação?
Codism
1
@ Codism: as perguntas foram expandidas para incluir técnicas aplicáveis ​​ao desenvolvimento normal de software.
Dima
2
Definitivamente, o TDD ajuda a melhorar meu código, mas nunca me ajudou a escrever o código mais rapidamente. Um ambiente de programação interativa (por exemplo, console Groovy, Lisp REPL, etc.) economizou muito tempo em minha experiência.
Erturne 09/09
3
-1 para TDD. Isso faz sentido se o projeto for de longo prazo, e não um hackathon curto.
TheLQ
1
@TheLQ Só porque você prefere gastar todo o seu tempo usando um depurador não significa que o TDD seja uma má sugestão.
byxor
29

Revise as bibliotecas padrão intensamente, principalmente os algoritmos STL. Isso economizará muitas linhas de código e muito tempo. A chave para ganhar concursos de programação está na programação no nível mais alto possível. No C ++, sem bibliotecas externas, isso significa chamadas STL em vez de loops.

Kevin Cline
fonte
+1 - concordo totalmente com isso. Saber escrever rapidamente código no STL é enorme nesses tipos de competições.
Jordan Parmer
23

Participo regularmente de competições da ACM. Espero que algumas dessas dicas o ajudem a:

  • Como outros disseram, familiarize-se com a linguagem , em C ++, especialmente na STL, ela possui funções comuns que você deseja usar (pesquisa binária, min, max) e estruturas de dados robustas para economizar tempo (pilha para evitar recursões diretas) , fila para BFS, até mesmo priority_queue para Dijkstra, se você gosta dessa maneira).

  • Identifique a categoria do problema, se é matemática, programação dinâmica, teoria de grafos, etc. Pergunte a si mesmo: Você conhece esse tipo de problema? Depois de fazer isso, você deve tomar decisões sobre a ordem em que irá resolvê-las , o que caminha lado a lado com o próximo ponto ...

  • Você quer entender o problema completamente antes de digitar, resolver o problema certo. Nas minhas primeiras competições, pensei que, se não estivesse digitando, estava perdendo tempo; Mais tarde, descobri que isso foi um erro.

  • Não pense que os comentários são uma perda de tempo, pelo menos no código "inteligente", você não deseja depurar linha por linha para ver o que deu errado (isso é realmente uma perda de tempo), valorizar a clareza .

  • Divirta- se .

lccarrasco
fonte
6
+1 para entender o problema completamente antes de digitar. Caso contrário, você está desperdiçando o tempo da equipe (ACM competição é 3 pessoa um computador)
Codism
Boa resposta. :)
Jared Farrish
13

Bem, parece-me que você só conhece C e não C ++. Essas perguntas são facilmente respondidas por alguém com um conhecimento básico de trabalho do idioma.

Um exemplo seria usar uma macro para obter o mínimo de duas polegadas

Basta usar uma função? std::minjá existe.

ou usando memsets para inicializar matrizes

std::array<T, N> já inicializa seu conteúdo.

que tipo de técnicas de codificação existem para usar em um trabalho real?

O primeiro passo é conhecer o idioma que você está usando.

DeadMG
fonte
Estou tentando conhecer o idioma que estou usando, por isso fiz essa pergunta! Obrigado pela contribuição sobre isso .
marktani
7
Oh. Devo ter entendido mal sua pergunta então. Eu recomendaria um livro . Apresentamos gentilmente apenas os livros que vale a pena ler, em vez daqueles que ensinam o lixo em C.
precisa saber é o seguinte
10

Além de conhecer o idioma, conheça suas ferramentas, especialmente seu editor. Eu tenho codificado por mais de 15 anos profissionalmente e vi grandes programadores desacelerando porque os únicos comandos de editor que eles usam são as teclas do cursor e crtl-x / c / v ..

Seu editor suporta um único toque de tecla para excluir uma linha? Para reentrar uma linha? Mover entre funções / métodos? bloquear selecionar / colar? favoritos? Mover por palavra? O editor pode gerar automaticamente classes / métodos / funções? Ele suporta modelos que você pode criar com antecedência? Refatoração rápida? Gravação de macro?

Conhecer o seu editor pode acelerar bastante o tempo de desenvolvimento.

Garion911
fonte
1
Amém. Só estou trabalhando com um cara novo que é muito rápido ... e usa o vim. Funciona para ele, porque ele tomou um tempo para aprender a usá-lo.
gbjbaanb
Além disso ... se o seu editor não suportar quase todos os recursos listados aqui - encontre um editor melhor.
Abhi Beckert
entrevista no google docs ... pior experiência por esse motivo.
UmNyobe
6

Pense antes de agir. É melhor pensar e planejar antes de escrever uma implementação de classe do que após três falhas. Além disso, pense enquanto você age - fazer as coisas em pequenas etapas simplifica bastante o processo de desenvolvimento.

Escreva apenas o código que você precisa no momento. Ou seja, não comece a escrever código com mentalidade como: " Preciso dessas funções mais tarde, para que eu também possa escrever seus protótipos enquanto estou nisso ". As coisas mudam, os planos mudam. Você terminará com um código que pode nem ser utilizável. É perda de tempo.

Saiba o que você está fazendo. Não há nada pior do que tentar lembrar como funcionam as funcionalidades e os recursos básicos da linguagem e / ou biblioteca. Familiarize-se com as ferramentas que você usa.

zxcdw
fonte
+1 para YAGNI .
Reintegrar Monica
4

Já existem muitas respostas, mas gostaria de acrescentar minha opinião.

Para acelerar sua codificação, torne-se um datilógrafo de toque a uma velocidade que, ao digitar, seja capaz de se concentrar tanto na lógica quanto no código. Existem muitos softwares para aprender a digitar (Typing Master, Rapid Typing, KTouch, gTypist, por exemplo), use-os

Eu já vi muitos programadores experientes que ainda são datilógrafos de dois dedos. Isso leva a códigos desagradáveis ​​sem documentação e código realmente enigmático com macros e nomes de tipos abreviados.

Sarvex
fonte
Downvoted com um dedo indicador :)
mlvljr
Ótima resposta. Acrescentarei que as pessoas que olham para o teclado em vez da tela geralmente digitam lixo antes que percebam e tenham que voltar atrás. Ou eles digitarão na janela errada. E o mais triste é que eles não percebem o quanto isso os atrasa.
58512 Dave
2

O desenvolvimento de software é uma daquelas atividades clássicas de 80 a 20 - ou seja, onde os primeiros 80% do trabalho levam 20% do tempo e os últimos 20% do trabalho 80% do tempo.

A chave para acelerar seu trabalho em geral é, portanto, trabalhar para melhorar seu desempenho nos últimos 20% do esforço. Normalmente, esse é o estágio de depuração e o trabalho para unir tudo e torná-lo utilizável.

Você pode melhorar isso tomando mais cuidado nos estágios iniciais. O trabalho de planejamento e design no início de um projeto pode parecer uma perda de tempo quando você é tentado a mergulhar na programação pesada, mas pode economizar muito tempo mais tarde.

As pessoas vão falar sobre metodologias específicas como TDD ou BDD. Isso é ótimo, mas se você não estiver fazendo isso agora, eles levarão um tempo para você se ajustar, então provavelmente não é algo com o qual você deseja começar um concurso de programação. Mas parar para planejar o que você está fazendo antes de mergulhar e fazê-lo colherá recompensas, não importa o quê. E eles são os primeiros passos em direção ao TDD e BDD de qualquer maneira. É aqui que você deseja começar.

SDC
fonte
-2

Se for para uma competição de programação real, não use C ++. Use uma linguagem de script RAD rápida e interativa. Isso é algo em que o VB6 domina absolutamente. Vá pré-armado com as bibliotecas que você pré-escreveu. Divisão de string, reversão de array, pesquisa, classificação, gráficos rudimentares, controle do console.

Se for para o trabalho, faça exatamente o oposto. Aprenda o que há, use uma linguagem sólida (C ++ é bom), comente tudo e assim por diante. Os dois tipos de ambientes não poderiam estar mais afastados.

Bryan Boettcher
fonte
3
Eu não era um dos que recusaram, mas presumo que eles provavelmente o fizeram com +1 porque a pergunta era sobre programar mais rápido em C ++ .
Gordon Gustafson
9
VB6? Seriamente? Você é do passado?
precisa
2
@ Konamiman: heh, sim eu sou. Não sabia se ele queria dizer "Estou me preparando, em C ++, para um concurso de programação" ou "Estou me preparando para um concurso de programação em C ++". Oh, bem, as batatas fritas estão onde podem. Ainda assim, nada supera um ambiente RAD muito rápido para competições de programação, onde literalmente cada segundo conta.
amigos estão
Eu editei a pergunta para esclarecimentos.
marktani
No RAD: Delphi 6 será a melhor aposta então, possivelmente.
mlvljr