Mantenha sempre um backup de tudo. Imprevistos acontecem...
Documente seu trabalho.
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!