Buscos dicas para iniciantes em C++

Introdução

Olá, pessoal. Tenho uma experiência na área (não profissinal ainda) de cerca de 1 ano como desenvolvedor Front-end, com alguns projetos, desde os mais simples até alguns mais completos com Next.js.

Recentemente tenho me interessando em aprender uma linguagem de baixo nível, e lembrei do C++, que é orientada objetos e é amplamente adotado no mundo inteiro, então decidi estuda-lo, mas já passei alguns perrengues.

Problemas:

Bom, é comum que um programador que utiliza JavaScript no seu dia a dia passe perrengues antes nunca visto, dado que JavaScript é algo tão "smooth" que é mais simples de pegar o jeito.

Com C++ sinti uma forte dificuldade em preparar o ambiente, pois eu queria utilizar o VsCode ao invés do VS, e consegui, baixei o compilador do VS e meio que consigo utilizar junto com o VScode.

O problema é justamante em configurações adicionais. Notei que existem várias opções para adicionar ao compilador, como esses tais SDK que eu pesquisei por alto, e não entendi muito sobre (ainda estou em processo de aprendizagem sobre) e outras coisas.

Em primeira instância, consegui meu "Hello World", mas sinto que preciso estar mais preparado para eventuais assuntos com C++.

Preciso de recomendações de recursos:

Bom, agora que contextualizei um pouco sobre minha situação, o que eu procuro não é resposta pronta e etc... Eu estou reunindo recursos para ler e assistir aprender por mim mesmo. Principalmente leitura, pois sinto que aprendo mais assim.

Já reuni alguns recursos e artigos, estou me guiando no pelo o roadmap.sh, então um norte inicial, eu tenho, mas ainda assim, estou em busca de recursos até mesmo adjacentes ao C++ que pode me ajudar a compreende-lo melhor.

Notei que, ao compilar meu app.cpp, alguns arquivos que é identificado como objeto 3D pelo windows apareceram, e não sei se isso é algun default desnecessário ou se é de fato necessário para o .exe.

além disso, meu foco não é criação de jogos, estou aprendendo C++ primordialmente como uma experiência nova, e eventualmente criar apps destkop para windows com ele.

Conclusão:

Desde já agradeço a todos que carinhosamente responderem. C++ tem uma comunidade ampla, mas reunir os bons conteúdos e claro, até mesmo encontra-los pode ser um tanto complexo diante uma enxurada de conteúdos sobre.

Se você quer criar apps desktop, então pode usar Electron ou C# que vai ser mais fácil sua vida. Caso queira realmente aprendar uma linguagem low level é preciso, pelo menos, ler algum livro e ver bastante conteúdo na net.

De livro eu tenho recomendação de 3:

Os dois primeiros são mais antigos. O primeiro é do próprio criador da linguagem, e o que eu mais recomendo para você que está começando, porém se trata da versão C++11, a qual foi um grande marco na linguagem, mas não cobre tudo que a linguagem possui hoje em dia. O segundo é um livro mais avançado e utilizando C++14. O terceiro também é um livro avançado, porém tratando da versão C++23, que é a mais recente. Eu gosto de baixar livros pelo Anna's Archive, caso você não tenha algum site em mente.

Quanto a youtube eu recomendo The Cherno, principalmente os vídeos um pouco mais antigos. Os vídeos recentes dele são mais revisões de código dos inscritos, o que pode ser bom para você que está começando, mas, na minha visão, se tornou muito repetitivo; vários vídeos os códigos tem os mesmos tipos de erros. Eu sou mais do C, então devem existir mais canais bons de C++, mas que desconheço. Os que eu conheço de C++ são mais focados em outras coisas low level e calham de usar C++.

Não uso IDE, então não sei como lhe ajudar nesse sentido, porém eu acredito que nesse começo você possa simplemeste usar o terminal para compilar e evitar maiores dores de cabeça. Com o tempo você aprende sobre Makefiles, CMake, como o compilador funciona, flags e tudo mais. A única coisa que recomendo dar uma olhada logo de cara é em ClangFormat, para ficar com um autoformatter gostosinho.

Dependendo do que você procurar, podem aparecer coisas de Linux, pois essa tal coisa é dependente de plataforma, então você vai ter que especificar que é no Windows. É comum, também, ver exemplos de compilação usando GCC, porém esse compilador é de Linux, apesar de existir um porte para Windows. Eu acho melhor você usar MSVC para compilar os programas, só que eu uso Linux, então não sei se tem como baixar ele separadamente ou se só é possível nesse bundle com Visual Studio e outras coisas.

Valeeeu! Meu objetivo é tocar em algo de baixo nível para aprender mais sobre como funciona e sair dessa zona do conforto que é o JavaScript, onde muito acontece por debaixo dos panos e eu não compreendo muito sobre. Estarei dando uma lida em todos os livros que você recomendou aos poucos, agradeço a recomendação! Estou usando o MSVC, funcionou até o momento, apesar de que para preparar o ambiente foi um tanto desafiador... Eu estou profundamente agradecido com seu comentário. Esta rico de conteúdo para eu estudar bastante. Mais uma vez, muito obrigado!

Olá!

Entendo que configurar o ambiente para C++ pode ser um desafio, minha sugestão é simplificar ao máximo seu ambiente de desenvolvimento.

Abrace o Terminal:

Em vez de se preocupar com diversas configurações, SDKs e ferramentas que podem complicar ainda mais o processo, recomendo que você utilize o terminal (WSL2 no Windows) com o gcc ou clang para compilar seus programas e o GDB/LLDB para depuração. E um editor de texto mais simples possível, notepad++ ou Gedit, não é brincadeira. O seu autocomplete é o cppreference.com. Simples assim.

Ao focar no essencial e utilizar ferramentas básicas, você evitará distrações e complicações desnecessárias, forçando-se a aprender o fundamental. Isso pode parecer menos produtivo no início, mas com o tempo você perceberá que é um maneira eficiente de realmente dominar a linguagem. Com o tempo, você perceberá que é menos produtivo ficar "brigando" com ambientes de desenvolvimento sempre que ele mudar, enquanto o terminal e e as ferramentas básicos permanecem sempre iguais!

Recomendações de Recursos adicionais:

  • C++ Core Guidelines: Recomendo fortemente a leitura das C++ Core Guidelines. Este é um conjunto de diretrizes elaborado por especialistas da comunidade C++ para ajudar desenvolvedores a escrever código moderno, seguro e eficiente.

  • clang-tidy: Utilize o clang-tidy como uma ferramenta de análise estática para identificar possíveis problemas em seu código e aderir a boas práticas.

Um abraço e bons estudos!

Um membro me recomendou um site onde eu posso focar no essencial e deixar o ambiente de lado por enquanto e isso de fato me ajudou muito como você me disse. Nunca tive muita experiência sobre definir o ambiente bem, dado que eu venho do JavaScript que é basicamente apenas instalar uma IDE e pronto... Estou seguindo seu raciocínio: Focar no essencial é o melhor caminho para iniciar, dado como C++ é tão vasto em possibilidades. Agradeço a elucidação!

BOm como alguém que trabalhou pouco mas, trabalhou com C++, primeiro não se apegue muito a configurações no compilador, tente aprender o básico da linguagem e sua sintaxe, como você já teve alguns perrengues no seu ambiente tente fazer alguns exercicios em sites como o exercism pois não precisa configurar seu ambiente. Segundo na compilação será gerado alguns arquivos, de inicio não se apegue a eles, pois creio que está fazendo programas simples ainda. Depois de algum tempo voc6e vai entender como funciona as bibliotecas dentro do C++ e ai algumas coisas nesse aspecto fazem sentido maior.

Eu não sou talvez a melhor pessoa para te instruir em material de C++ pois tudo que aprendi da linguagem em sua maior parte veio da minha faculdade, porém um livro que te indicaria que é gratuito e muito bom é o C++ Practice and Principles não sei se inglês é um problema pra você mas, é um bom livro.

Acho que isso já pode ir te ajudando a principio.

Opa, agradecido com sua contribuição! Estarei atento ao básico antes de mais nada mesmo, afinal tentar entender tudo de uma vez não faz sentido. Estarei lendo o livro e praticando no site que você recomendou, dei uma olhada e achei bem interessante! Mais uma vez, muito obrigado.

Não sou programador c++ fulltime mas tenho algumas dicas:

  1. Não se apegue ao estilo C de escrever código.
  2. Use a STL o máximo que puder.
  3. Smart Pointers são vida, não se esqueça deles.
  4. Sempre mantenha um valgrind e um cppcheck por perto.
Me parece a voz da experiência ein. Meu foco é no C++ mesmo, apesar de que C e C++ são quase a mesma coisa, sei que usam paradigmas diferentes. Alguns conceitos eu ainda não entendo, como o STL, mas certamente é um norte para eu eventualmente estudar. Agradecido pela a contribuição!
Na realidade C e C++ estão anos-luz de distância entre si, com apenas algumas coisas sendo comuns. Quanto ao termo STL, significa Standard Template Library, que é basicamente o conjunto de funções e estrutura de dados que já vêm prontos para serem usados, como Vector, Map e Set, diferentemente de C, que tudo tem que ser implementado à mão.
Entendo o ponto. Talvez onde eu estudei tenha ensinado de forma supercial para evitar confusões. Lembro de ter visto algo como "C++ é uma extensão do C". Ao mesmo tempo, agora que você falou, em outras fontes de fato é dito que C++ tem infinitas coisas a mais que o C, e apesar de ter relações, há muitas nuances. Esquisito isso, parece que veio um flash de luz quando tu falou em minha mente :smile:
Se fosse só coisas a mais, poderia ser realmente algo como uma extensão, porém existem coisas que estão presentes nas duas linguagens, só que tratadas de formas diferentes. Por exemplo, em C uma função escrita como ```c void foo() { // snip } ``` é diferente de ```c void foo(void) { // snip } ``` enquanto que em C++, a primeira definição (sem `void`) é tratada como a segunda (com `void`). [C function with no parameters behavior](https://stackoverflow.com/a/5929736) PS: Eu não vejo muita gente nova se interessando por low level, e é o que eu mais gosto, então se quiser me adicionar no discord pra trocar um papo depois, aqui está meu user: frangomolhado.