ld Dicas de Programação
# Dicas de Programação

Facilite seu trabalho

  1. Facilite a leitura de seu código.
  2. Mantenha sempre um backup de tudo. Imprevistos acontecem...
  3. Documente seu trabalho.
  4. Automatize tarefas repetitivas..

Fortaleça o essencial reduzindo retrabalho


Principio de Pareto (80/20)


  • 80% do seus esforços => 20% de seus resultados
    • Ex: Retrabalho, configurar computador, refazer drivers, formatação de documentos, locomoção entre lugares ...
  • 20% do seus esforços => 80% de seus resultados
    • Ex: Pesquisa, Ensino, ...


Mais sobre: Video Ilustramente "O PRINCÍPIO 80/20"
# 1. Facilite a Leitura do código
## Não criptografe seu código... A não ser que realmente tenha um motivo... ``` int I=256,l,c, o,O=3; void e( int L){ o=0; for( l=8; L>>++l&& 16>l; o+=l <>=7&o; L%=1 <>8?256-L?e( L-1) ,c|| (e(c =L), c=0) :( O +=(-I&7)*l+o+l>>3,I=L):putchar( L); }int main(int l,char**o){ for( /* //// */ open(1[o],0); ; e(I++ )) ;} ``` Fonte: [24th International Obfuscated C Code Contest Most Compact Winner](http://www.ioccc.org/2015/mills2/hint.html)
## Facilite a leitura 1. Use nomes mnemonicos 2. Comente seu código 3. Busque manter uma boa indentação 4. Use guias de estilo
### Exemplo ``` #include using namespace std; int main() { unsigned int n; unsigned long long factorial = 1; // Entrada de dados cout << "Digite um número inteiro positivo"; cin >> n; // Cálculo do fatorial de n for(int i = 1; i <=n; ++i) { factorial *= i; } // Saída de dados cout << "Fatorial de " << n << " é " << factorial; return 0; } ``` O que este programa faz ?
## Exemplos de Guias de Estilos * [Guia de Estilo da Google Programação](https://google.github.io/styleguide/) * [Guia de Estilo Material Design](https://material.io/guidelines/#)
# 2. Faça Backup ![explode](https://rs754.pbsrc.com/albums/xx190/_sidorak_/avs/writer_explode.gif?w=280&h=210&fit=crop) ...imprevistos podem sempre acontecer!

Backup de Arquivos

  • Armazenamento em meios distintos
    • Ex: CD, HD Externo, Armazenamento na Núvem
  • Backup de Versões Anteriores
    • Renomear Arquivos Anteriores (Não permite comparação)
    • Sistemas de Versionamento (SVN,GIT)
## GitHub * Sistema de controle de versão baseado no Git * Git: Criado por [Linus Torvalds](https://pt.wikipedia.org/wiki/Linus_Torvalds) para gerenciar os [infinitos contribuidores](https://github.com/torvalds/linux) no desenvolvimento do Kernel do Linux. * Repositório Online de Códigos * Contas para usuário e organizações * Hospedagem de Páginas Online ( [GitPages](https://pages.github.com/) )
## GitHub - Conceitos básicos * [Git - Guia Prático](http://git.huit.harvard.edu/guide/index.pt_BR.html) * [Tutorial Interativo](https://try.github.io/) * [Guias Github](https://guides.github.com/) * [Markdown](https://guides.github.com/features/mastering-markdown/)
## GitHub - Outros Links * [GUI GitKraken](https://www.gitkraken.com/) Interface Gráfica para uso do Github * [GitHub do Lara](https://github.com/lara-unb)
# 3. Documente seu trabalho
## Registro diário * "Backup" das pequenas sacadas e atividades * Direcionar próximas ações * Tratar toda ação de maneira científica (hipóteses + testes) * Mesmo um resultado ruim é um resultado que pode te ajudar depois.
## Documentação de Código * [GitWiki:](https://help.github.com/articles/about-github-wikis/) Wikipage dentro do GitHub * [Doxygen:](https://www.stack.nl/~dimitri/doxygen/) Documentação através de comentários * [Sphynx:](http://www.sphinx-doc.org/en/stable/) Documentação para Python * [ReadTheDocs:](https://readthedocs.org/) Hospedagem de documentação * [WriteTheDocs:](http://www.writethedocs.org/) Referência sobre como Documentar
## Exemplos Documentação * Gist: [Guia Rápido](https://gist.github.com/akafael/4b8724da166354e67a2eb057c42e3e38) * GitWiki: [Wiki Possibilita](https://github.com/sensesunb/Possibilita_Projetos/wiki) * Doxygen: [Documentação RLEG](https://lara-unb.github.io/rleg-overo/) * ReadTheDocs: [Documentação CACIC-Robot](https://cacic-robot.readthedocs.io/en/latest/)
## Mantenha sempre uma boa base de referência >> "Se vi mais longe foi por estar de pé sobre ombros de gigantes."( [Isaac Newton](https://pt.wikiquote.org/wiki/Isaac_Newton))
## Use Ferramentas Produtivas * Prefira ferramentas que tenha somente o que precisa * E com boa API para facilitar a integração com todo resto ### Exemplos * Editores: Atom, Sublime, Emacs, Vim * IDEs: Visual Studio, Android Studio, QT Creator * Projetos: Trello * Github, Dropbox
## Use de Padrões bem conhecidos * **Normatizados:** [USB](https://pt.wikipedia.org/wiki/Universal_Serial_Bus), [POSIX](https://pt.wikipedia.org/wiki/POSIX), [Bluetooth](https://pt.wikipedia.org/wiki/Bluetooth), [Health Level 7 (HL7)](https://pt.wikipedia.org/wiki/Health_Level_7) * **Open Source:** [Arduino](https://pt.wikipedia.org/wiki/Arduino), [Teensy](https://www.pjrc.com/teensy/), ... * Referências Normas e Guias * [ISO C++](https://isocpp.org/std) * [C++ Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#main) * [NASA Standards](https://standards.nasa.gov/) * [IEEE Standards](http://standards.ieee.org/)
## Use bibliotecas e frameworks * Boa Documentação * Suporte Ativo * Comunidade Ativa * Ex: [ROS](www.ros.org/), [Unity](https://unity3d.com/), [D3.js](https://d3js.org/), [Open CL](https://www.khronos.org/opencl/)
## Dê apoio as próximas gerações ![The Iron Giant Movie (1999)](http://www.etonline.com/sites/default/files/images/2015-03/640-iron_giant.jpg) Desta forma não só seu trabalho é facilitado mas também garante a continuidade do projeto.
## Indo Além * Outras 97 Dicas para programação: [GitBook "97 Things Every Programmer Should Know"](https://www.gitbook.com/book/97-things-every-x-should-know/97-things-every-programmer-should-know/details) * Princípios Fundamentais para projetos de software: [The Pragmatic Programmer Quick Reference Guide](https://blog.codinghorror.com/a-pragmatic-quick-reference/)
# Obrigado!