Curso de Programação em C++ Moderno
Um curso de “C++ Moderno” disponível gratuitamente, voltado para desenvolvedores que já conhecem C, gerou debate sobre como C++ deve ser aprendido e se a experiência prévia em C ajuda ou atrapalha. Comentadores comparam esse material com outros livros e cursos, discutem o papel de ponteiros brutos versus smart pointers, STL versus código artesanal em contextos embarcados e de kernel, e enfatizam a importância de entender compilação, ferramentas de build e modelos de memória. Muitos observam que C++ continua central em áreas como sistemas embarcados, engines de jogos, HPC e finanças, mas defendem que sua complexidade, o atrito das ferramentas e as abordagens de ensino tornam recursos bem escolhidos — e muitas vezes um “subconjunto moderno” restrito — essenciais para uso no mundo real.
Público-alvo e escopo do curso
- O curso é voltado para pessoas que já conhecem C e OOP básica, não para iniciantes absolutos.
- É visto como uma boa opção para desenvolvedores de C embarcado que querem “subir de nível” ou usar C++ como um “C melhor”.
- Alguns dizem que outro recurso (learncpp.com) é mais amigável para iniciantes e mais verboso.
Como aprender C++ (a partir de C, Java/JS ou do zero)
- Há forte discordância sobre se você deve aprender C primeiro:
- Um lado: C++ é construído sobre a máquina abstrata de C; entender C e ponteiros brutos é essencial.
- Outro lado: idioms de C podem ser prejudiciais quando levados para C++; é melhor aprender C++ diretamente e evitar padrões ruins de C.
- Para pessoas vindas de Java/JS, vários cursos em livro/vídeo são recomendados; alguns livros canônicos de C++ são criticados como maus tutoriais.
- Vários participantes argumentam que C++ (e Rust) exigem tanto estudo no estilo de livro quanto projetos práticos, ao contrário de linguagens “hackeáveis” como Python/JS.
C++ embarcado e de baixo nível
- Preocupações: RAM limitada, ausência de heap, sistemas de longa execução, complexidade de alocadores, suporte a exceções e tamanho do binário.
- Regras práticas comuns em embarcados:
- Frequentemente evitar STL, exceções, RTTI e alocação dinâmica pesada.
- Usar recursos da linguagem C++ (RAII, construtores, templates,
constexpr/consteval) sem trazer grandes bibliotecas. - Considerar alternativas de terceiros de “STL embarcado” quando exceções estão desativadas.
- Diversos links e mini-tutoriais são compartilhados sobre:
- O modelo de objetos de C++ e como classes se traduzem para C.
- C++ bare-metal sem a biblioteca padrão.
Práticas modernas de C++ e armadilhas
- Muitos defendem que smart pointers e RAII devem ser ensinados cedo, e não como tópicos “avançados”;
new/deletedevem ser raros em código novo. - Debate sobre ponteiros brutos:
- Alguns dizem que eles precisam ser aprendidos em profundidade.
- Outros dizem que seu papel de ownership deve ser minimizado, usados principalmente como referências anuláveis/não proprietárias.
- Alertas sobre padrões sutis que são legais em C, mas indefinidos em C++ (por exemplo, type punning).
- Reclamações sobre a complexidade da linguagem (por exemplo, livros inteiros sobre inicialização) e áreas incompletas como Unicode/texto.
Estilo de ensino e materiais
- Visões mistas sobre o formato baseado em slides:
- Alguns gostam de slides concisos; outros acham que slides sozinhos são fracos para aprender.
- Críticas a introduções em “dump de recursos” que listam toda construção antes de mostrar uso prático.
- Recomendações para:
- Combinar estudo com projetos reais ou bases de código open source.
- Ensinar explicitamente cedo o modelo de compilação (translation units, templates, LTO).
Ferramentas e sistemas de build
- Desejo por ambientes de desenvolvimento em contêiner com múltiplos compiladores e analisadores estáticos.
- Alguns veem a conteinerização como evidência de que o tooling de C++ não é “moderno”; outros fazem o mesmo com Rust/Python por isolamento.
- Meson e CMake (muitas vezes com Ninja) são os principais sistemas de build sugeridos; gerenciamento de dependências em C++ é amplamente visto como doloroso.
- Discussão sobre usar devcontainers ou Nix para domar toolchains e a visibilidade de bibliotecas.
C++ na indústria e no mercado de trabalho
- C++ ainda é muito usado em:
- Compiladores, kernels de sistemas operacionais, navegadores, bancos de dados, HPC, gráficos, robótica, trading/HFT e engines de jogos.
- Panorama percebido de vagas:
- Menos oportunidades do que web/Python, mas muitas vezes mais “interessantes do ponto de vista algorítmico”.
- Salários muito altos citados em trading/HFT; médios em jogos; relativamente baixos em embarcados.
- Alguns sugerem ampliar para Python, C# ou gerenciamento de projetos se o objetivo for empregos de nível “mais alto”.
- Rust é frequentemente mencionado como uma alternativa atraente, mas C++ é visto como enraizado, especialmente em jogos e sistemas.