# Últimas pesquisas na blogosfera nacional

2009-05-08 ^

É um imenso prazer constatar que hoje, mais de dez anos depois de eu ter iniciado minha caminhada pelo mundo da programação C/C++, temos uma reação de blogues e saites prontos para elucidar questões simples e avançadas dessas duas linguagens que ainda não morreram e, se depender de como as coisas andam, ainda vão durar pelo menos mais uns dez anos (sim, não sou tão otimista assim).

Esse artigo é só para constar em minha lista de referência para o aprendizado de C, C++ e todas as outras coisas que vem depois. Se eu tivesse que escrever isso lá no início, provavelmente recomendaria mais linques de livros e saites em inglês. Hoje, felizmente, temos um conteúdo em pleno desenvolvimento em nossa blogosfera tupiniquim. E espero que continue assim!

 * Strings
 * Strings e Números
 * Os diversos tipos de casting
 * Pointeiros e Referências
 * Templates
 * Smart Pointer - Introdução
 * Auto Pointer (auto_ptr)
 * Boost Shared Pointer, Weak Pointer e Scoped Pointer
 * Boost Shared Array e Scoped Array 
 * Quando usar cada um dos smart pointers
 * As infinitas e riquíssimas discussões na lista C/C++
 * Como usar o Visual Studio
 * Compilando o Boost no Windows (usando Visual Studio)

A internet brasileira cresceu como um todo. Mesmo que você deseje saber mais sobre microprocessadores ou drivers para Windows, em português, hoje isso é possível. É claro que o que não é possível é você se dedicar profissionalmente a essas áreas sem saber inglês. Mas é uma muito bem-vinda manifestação das pessoas que fazem acontecer todas essas coisas em nosso país.


# Meu roteiro C++

2009-05-20 tag_coding ^

Como não consigo mais ter ideias para artigos, resolvi catalogar todas as coisas que já falei nesse blogue e, o mais importante, todas as coisas que ainda não falei nesse blogue (e espero um dia falar ou talvez nunca fale), começando por C++, que era o intuito original (só que não é mais, porque eu uso mais a Win32 API que a STL):

C++
   
 * História
   
   * [A linguagem BCPL]
   * [O código-objeto]
   * [A linguagem B]
   * [A "função" char]
   * [O primeiro printf da história]
   * [A linguagem C]
   * [A linguagem C++]
   * As influências
   
 * Conceitos
   
   * [O conceito programa]
   * [O código-objeto]
   * [Processo de compilação]
   * [Declaração x definição]
   * [Tipos]
   * [Lvalue x Rvalue]
   * [A passagem por valor]
   * [Ponteiros]
   * [Estruturas e classes]
   * Espaços de nomes
   * [Polimorfismo estático]
   * [Herança]
   * [Polimorfismo dinâmico]
   * [Iteradores]
   * [Função-objeto]
   * [Templates]
   * Algoritmos genéricos
   * Qualificadores (traits)
   * [O conceito RAII]
   
 * Linguagem
   
   * [O operador de subscrito]
   * [A proteção protected]
   * [Sizeof e strings literais]
   * [Uso de reflexão com typeid]
   * [Typeid e o polimorfismo]
   * [Ponteiros de método]
   * [Ponteiros de método e o this]
   * [Try-catch fora do corpo da função]
   * [Sobrecarga de operadores]
 * Biblioteca
   * [Biblioteca C no Windows]
   * [Mobilidade da pilha com prinff]
   * [Erros comuns de iteradores]
   * STL
   * Boost
   
 * Dicas
   
   * [Erros comuns de iniciantes]
   * [Ponteiro nulo em entrevistas]
   * [Nem todo ponteiro nulo é inválido]
   * [Decifrando código obscuro]
   * [Usando do-while para evitar erros de macro]
   * [Sobrecarga por tipo de retorno]

Espero que isso me ajude a continuar completando as lacunas do saite. Se não der certo, pelo menos já sei o que fiz.

Sugestões?


# Como compilar em somente um passo

2009-05-25 tag_coding ^

Uma das primeiras perguntas do teste do Joel é saber se você pode compilar todo o projeto em apenas um passo. Essa é uma **questão essencial** e um desafio para muitas equipes. Perdem-se horas sagradas para gerar um novo Release.

Compilação automática geralmente está disponível nas ferramentas de desenvolvimento. Se você estiver usando o Visual Studio, por exemplo, é possível fazer isso com uma linha:

   devenv minha-solução.sln /Rebuild Release

Se não for exatamente o que você precisa, basta fazer uma pesquisa de quinze minutos e encontrar os parâmetros corretos. O objetivo é: **eu rodo esse comando em cima do projeto inteiro em uma máquina zerada e ele simplesmente compila**.

Múltiplas soluções

É lógico que ter apenas um _solution/workspace_ para guardar projetos médios e grandes é inviável. Demora para carregar no ambiente e possuem dezenas de dependências. Isso já foi tentado duas vezes nas duas empresas em que trabalhei e não funcionou. Talvez por isso seja necessário criar um _script_ que rode o comando acima para todas as soluções do projeto, o que não muda muito o _modus operandi_ da coisa:

   
   call :Build ..\Libraries\Libraries.sln
   call :Build ..\Services\Services.sln
   call :Build ..\Drivers\Drivers.sln
   call :Build ..\Tools\Tools.sln
   goto :eof
   
   :Build
   echo %1...
   devenv "%1" /Rebuild Release
   exit /b %errorlevel%

Note que meu script usa a estrutura padronizada dos diretórios de um projeto, onde cada tipo de componente tem sua pasta e solução.

Aos poucos você pode ir colocando "frescurinhas" em seu build (executa Debug e Release, roda automatizado no servidor, faz testes unitários, incrementa o número da versão, ...), mas algumas premissas sempre se mantêm:

 * Deve ser possível compilar o projeto inteiro em um passo
 * Deve ser possível usar qualquer máquina de desenvolvimento para isso

Regras simples de ser seguidas se você usar sempre a máxima do KISS.


<< >>