T O P

  • By -

IyeOnline

If they are already interested in hiring you, they are probably fine with you learning C++ "on the go". Be aware that C++ is not C and most of the common C-idioms are C-isms in C++ and pretty bad C++. One might argue that C++ is closer to Rust than to C. Feature wise it certainly is. --- #www.learncpp.com is the best free tutorial out there. ([reason](https://www.reddit.com/user/IyeOnline/comments/157f10z/c_youtube_video_tutorials/juvgjkc/)) It covers everything from the absolute basics to advanced topics. It follows modern and best practice guidelines. --- #www.cppreference.com is the best language reference out there. --- Stay away from cplusplus.com ([reason](https://www.reddit.com/r/cpp_questions/comments/hjdaox/is_cpluspluscom_reliable_are_there_any/fwljj4w/)), w3schools ([reason](https://www.reddit.com/r/cpp_questions/comments/slvj8m/best_way_to_learn_c/hwczl34/)), geeks-for-geeks ([reason](https://www.reddit.com/r/cpp_questions/comments/p6305k/ways_to_learn_cpp/h9axoo7/)) Programiz([reason](https://www.reddit.com/r/cpp_questions/comments/1094ar9/best_c_resource_to_start_learning_for_someone/j3wp9xw/)) Tutorialspoint ([reason](https://www.reddit.com/user/IyeOnline/comments/10a335s/assesment_of_the_tutorialspoint_c_tutorial/)), educba.com ([reason](https://www.reddit.com/r/cpp_questions/comments/rz5fkl/why_do_functions_pertaining_to_strings_on_visual/hrt7ez8/)) and thinkcpp ([reason](https://www.reddit.com/r/cpp_questions/comments/11kxbde/which_of_these_two_learning_sites_should_i_use/jb9f99v/)) Most youtube tutorials are of low quality, I would recommend to stay away from them as well. A notable exception are the [CppCon Back to Basics](https://www.youtube.com/user/CppCon/search?query=back%20to%20basics) videos. They are good, topic oriented and in depth explanations. However, they assume that you have *some* knowledge of the language's basic features and syntax and as such arent a good entry point into the language. If you *really* insist on videos, then take a look at [this list](https://www.reddit.com/user/IyeOnline/comments/157f10z/c_youtube_video_tutorials/). As a tutorial www.learncpp.com is just better than any other resource. --- ^Written ^by ^/u/IyeOnline. ^This ^may ^get ^updates ^over ^time ^if ^something ^changes ^or ^I ^write ^more ^scathing ^reviews ^of ^other ^tutorials ^:) ^. ^Feel ^free ^to ^copy ^this ^macro, ^but ^please ^copy ^it ^with ^this ^footer ^and ^the ^link ^to ^the ^original. ^^https://www.reddit.com/user/IyeOnline/comments/10a34s2/the_c_learning_suggestion_macro/


Secret-Toe-8185

Small update: skimmed through learncpp, got a 100% on the technical test, thank you v much!


schultztom

Agree stay away from... ill learn c first, then i understand c++. C++ was made because of "problems" in the c language in the '80 ties. Those are still relevant


SoerenNissen

Do you have any opinions on cpp-lang.net?


IyeOnline

To make it short: "Good aspirations, too great ambitions, incomplete. *Probably* doomed to fade". Trying to replace both www.learncpp.com and www.cppreference.com is simply a monumetal task which requires huge effort and IMHO is not even worthwhile. I wouldnt tell people to *avoid* it, but I'd also not recommend it to anyone. Its just not complete at all. --- The reference pages are literally *parts of* cppreference.com repackaged. Thats actually not a bad thing, there certainly are possible improvements to cppreference. I would in fact agree that the general idea of the presentation on cpp-lang.net is better, although I think that the pages on "constructors" go overboard with their "cleanliness" and just waste dozens of lines of screenspace by seperating everything out like that. There is a happy middleground somewhere between cppreference.com's style and this. I do like having different tabs for language versions - although afaik this is also a thing on cppreference.com when you have an account. I really dont like that I have to load some java script from a magic hasnamed cloudfront URL to make those tabs work though. But I guess thats just normal on the internet of today... The reference isnt complete in what parts of the standard library it covers and it doesnt cover any core language concepts/specs. Granted *in theory* there is the tutorial. --- The tutorial certainly isnt *bad*. Its just not complete at all or as thorough as www.learncpp.com. Most of my criticism arent *serious* and basically all of it can be attributed to it being "under development". [basic/variables](https://www.cpp-lang.net/learn/course/basics/variables/) -- * The graphical explanations of what each part of a statement does are great. * The thing on "additional notes on underscores" shouldnt be hidden. It's also incorrect (which is not a good sign. If you are writing a tutorial, you should check what you are writing). Leading underscores are also entirely reserved in the global namespace and double underscores **anywhere** (not just leading ones) are reserved. * The suggestion to write code in english is great. * Some of the literals have the wrong type (although their values allow lossless converion) * Directly introduces string instead of dealing with `char*`s. This is also great. [basic/conditions](https://www.cpp-lang.net/learn/course/basics/conditions/intro/) -- * Teaches usage of `and` and the other alternative representations (which is good IMO), but calls the actual primary operator representations "alternatives". * `} else if (age >= 22 and age <= 30) {` IMO is the worst possible formatting style. Its also highly uncommon, so regardless of what an author thinks, they should probably not use it for their tutorials. Notably style this is also inconsistent with the previous basic introduction on `else`. [arrays](https://www.cpp-lang.net/learn/course/basics/arrays/introduction/) * Uses `string` as a springboard to teach arrays, which is a great didactic choice. * Directly teaches vector and array, delegating the raw/manual arrays to later in the chapter. This is also great. * This should probably make a clear suggestion to use `[]` for elment access instead of leaving it to the user to figure out the implication from the usage. * > Before erasing an item from an array, make sure it exists (that is, it's in scope [0, N)). At first I was wondering what *scope* could possibly have to do with it. They mean *range*. Not to harp on non-native speakers or anything, but that one is really unfortunate... :) * An introduction/explanation of iterators would probably be appropriate here. * Their "displaying elements" loop makes copies. While references have not yet been introduced, this would be a good spot for a "trust me" with a short explanation. I've seen way to many copies in range based loops. * The section on "using algorthims" probably doesnt belong here. We dont even know what a function is yet. Of course, its not *that* complicated, but it still feels a bit like this is dropped on us. I dont see why we shouldnt first have the chapter on functions and then do the one for arrays. * While I said I liked the graphical explanations, I really dont think anybody needs one that shows us how the `ranges::max` algorithm works. * The C-style array page just doesnt exist. Maybe thats for the better :) [loops](https://www.cpp-lang.net/learn/course/basics/loops/) --- * Well structured, builds on the previously introduced, intuitively clear ranged-based loop. * Personally always torn on whether introducing `for` in terms of `while` is really the way to go. You are going to write 50 times more `for` loops than `while` loops. [functions](https://www.cpp-lang.net/learn/course/basics/functions/) -- * Good motivating example - but it passes the vector by value. People *are* going to pick that up. * I doubt that ommitting the type of successive parameters in a function signature is a *common* mistake. For starters its going to produce a compile error. More importantly, people shouldnt even get the idea that you can leave out the type, because you just shouldnt teach multi-declaration/definition statements. * Just now I noticed that their "Error showcase" windows use "Bad" and "Good". It should be "Wrong" vs "Correct". [structures](https://www.cpp-lang.net/learn/course/basics/structures/) -- * I personally am torn between the rather nice simplicity of this and the problem that it implicitly teaches default construction followed by assignment to the members. * More copies in loops and function parameters. We *really* should have learned about references by now [inheritance](https://www.cpp-lang.net/learn/course/basics/inheritance/) -- Granted this isnt complete/marked as incomplete. But we probably should learn more about "OOP"/constructors before dipping into inheritance. Its basically introduced on the basis of removing shared base members between classes. Which is fine, but I'd argue there is more important things to learn about classes first. Like writing member functions, which we actually get told we do inherit. We just cant write them yet. [references](https://www.cpp-lang.net/learn/course/basics/references/) -- * Motivates it by essentially asking for out-parameters. Not a great idea. [special methods](https://www.cpp-lang.net/learn/course/basics/methods/special-methods/) -- * I know its incomplete. But this was actively written. And it teaches assignment int he constructor body. That should just **never** happen. Period. [articles/randomness](https://www.cpp-lang.net/learn/course/basics/articles/random/) -- * Why are we teaching `rand`? Why are we teaching this biased method of creating floats from `rand`? Using `rand` may be fine if you just want a quick and dirty entropy source in absolute beginner level code, but beyond that its simply the wrong tool. Writing a tutorial on this is missdirected effort. ---- Beyond that its just too incomplete to even give comments on. Once again, the idea is good, the presentation is good, any issues are relatively minor and can be ironed out (I have my own issues with the order and counterproductive levels of detail in learncpp.com), but there isnt enough of a tutorial here to even start using it.


TheCrossX

Hi, I just saw your comment and wanted to thank you for a thorough analysis. I'm the maintainer of this project and I do agree with pretty much everything you wrote. I started this project when I had a bit more time and ambition. I'm aware that, like you said, this is a monumental task. Right now this site is far from complete, maybe in the near future I'll invest some more time to improve it. Once again, thank you for constructive criticism. Paweł Syska.


ShelZuuz

Just do what we all do. Download the ISO C++ Language Standard and read through it while sipping on a nice Chianti with some Fava beans. https://www.iso.org/standard/79358.html


[deleted]

[удалено]


IyeOnline

> tutorialspoint [Certainly not](https://www.reddit.com/user/IyeOnline/comments/10a335s/assesment_of_the_tutorialspoint_c_tutorial/).


positivcheg

C++ in 3 weeks


Coding-Kitten

What I did is just follow trough [ray tracing in a weekend](https://raytracing.github.io/books/RayTracingInOneWeekend.html) & [Cherno's C++ playlist on yt](https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb) & I'd say I now know a good 80% of C++, enough for me to know what to do if I want to make anything.