I am looking for a book (or even a web-based course or an interactive tutorial, but ideally a book) that teaches C ++ 17. My normal approach of "learning by doing and Google" does not work, it is obvious that I need a more structured one. Formal approach to this Specifically, a book that:
- Teach C ++ assuming v17, and do not worry about giving the reader a historical journey on how to do something in previous versions, or any knowledge on how to work on an "inherited" project. I really just want 17 and on, mainly to minimize the considerable learning curve inherent in C ++, and maximize productivity and security. (Speaking relatively, of course, knowing that none of those attributes are the strengths of C ++ in absolutely modern terms compared to other languages).
- He is highly opinionated. This minimally focuses only on what the author considers "best practice" solutions to some of the more universal problems that the system's utility programs tend to solve over and over again, instead of teaching all possible approaches to a problem. . (If your ideas are subjectively "best practices" or not, it's not really the important thing). C ++ is quite overwhelming with possible approaches. You may only use 1% of your language capabilities and functions, and that's all I have the bandwidth or even the ability to learn and use. (Unfortunately, the exact 1% I need can not be known now, or I would iterate!) If I learn a suboptimal approach among the 50 possible ones, the negative consequences are minimal.
- I understand that there are languages with "opinions" incorporated in them, such as Go. But I am no longer in the "language choice" phase.
- It is known within the community that at least it is not a theft of horribly written money. It seems that there are many of those. Sand traps everywhere!
There are so many books. Tyranny of choice. I've spent hours touring Amazon, the web search and the StackExchange family of sites, but the books seem nonexistent, that:
- Do not assume baseline competition in previous versions of C ++
- They are not just a "tour" of news to 17.
- Focus on teaching the excellent new features of 17, excluding historical expressions that do similar things. (I know that the superposition of the new: the old functionality is rarely 1: 1).
So, I guess the real question is not which exact book meets those needs, but at least it comes close and you know it's not horrible. I also understand that there is no ideal approach / pattern / language / toolkit for each or even for a problem; again, I'm fine with just learning a sub-optimal subset.
This response is excellent (if it is too exhaustive), but it is only for C ++ in general, and it does not focus on "opinion" either.
This is the end of the question, but if the additional information helps, here is my relevant background:
- A long time ago I programmed in C, both as a hobby and in a small capacity professionally. But I have forgotten almost everything, in particular the syntax, symbols and idioms, possibly debatable. (Less general concepts, such as raw memory pointers, stack / stack, etc. Most of them are still with me, just like general programming and OO concepts). I think the syntax based on C ++ symbols is especially inscrutable and confusing. C ++ 17 seems to get a little worse (or better), so I want to avoid learning an unnecessary "inherited" syntax. (But my use of negative adjectives should not be interpreted as an unwillingness to learn symbols and syntax, quite the opposite!)
- I have not programmed professionally in many years, but I am responsible for understanding web applications based on full stack nodejs. But almost daily "program" at least in Bash, in the way structured and idiomatic that language allows, including the resolution of problems that should never have addressed. (But it's the complete tour after all!)
- I understand and appreciate that the typing of ducks and generics are the future, and I can deal with that, but strong and explicit typing is my comforting food. (As are the private members and immutability.)
- I understand lambdas, anonymous and similar functions, when I stop to think about it, but I often struggle with real-world applications and almost never use them. While I do not need to learn them better, it would be good, it seems that I could benefit from its use.
Current / evolving environment:
- Currently g ++ 7.4.0, but can change to any version or necessary version.
- Mainly, Linux CLI, with occasional ports to Windows CLI and MacOS / Darwin CLI.
- Currently it favors the Visual Studio code with the popular C ++ extensions. (I'm comfortable with Sublime too.)
- CMake (fighting!)
- There is no FLOSS C ++ code yet, but we will use Git public repositories in the future.
There are many reasons for my choice to move to C ++. But being the best tool for the problems that I am currently solving is do not one of them. Let's say it is not the most rational or necessarily the best option, but a thoroughly researched and well-thought-out option, nonetheless. (This is not a question about "what is the best language to solve the XYZ problem", that decision has already been made.) In short, I have considered that it is possibly the least evil solution and in only one language. To the next 5-10 years of problems to be solved on the horizon. But most importantly, I've always wanted to "be" reasonably proficient in that, like my own private badge of honor.
Thanks in advance!