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?
Respostas:
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.
fonte
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.
fonte
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 .
fonte
:)
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.
Basta usar uma função?
std::min
já existe.std::array<T, N>
já inicializa seu conteúdo.O primeiro passo é conhecer o idioma que você está usando.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte