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/delete devem 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.