Jump to content

Where do I learn the FULL C/C++?

Gat Pelsinger

Not into college yet but really like programming. I am into the low level stuff and learning assembly is my main goal. Had done a C/C++ course few years ago, only to realize that I just have learned the very basics of the language. Later I learned that the world has gone much further than that and have a lot many APIs and stuff, which I might not need to study but look up the content in them to use those. But I am feeling kind of lost. For example, to make a GUI program, I need the content of stuff like Windows.h and use ImGUI or Qemu to use their functions and stuff. If you are still confused, a simpler example is that in C, I don't need to learn and understand the command "printf", I can just read about it that this function exists in C and what it does so I can use it. Just data Abstraction. This is my understanding so far and correct me if I am wrong. But I feel like before that, I still haven't learn all there is the base C/C++. If I ever open the #include files that I need to write, my mind is boggled with so many terms that I don't even know and the complex code that lies under C/C++. They are not using some pre-defined code from other .h files, but using the stuff that is unbuilt in C/C++. Which states I haven't learned everything there is to know about C/C++. For example, I came across "#if" in one of the include files, and I looked it up and got to know what it is (I knew normal if but not #if), but I was never ever told what this was, meaning my course was just base level. So, did I miss any advanced level course or something?

Microsoft owns my soul.

 

Also, Dell is evil, but HP kinda nice.

Link to comment
Share on other sites

Link to post
Share on other sites

By and large trying to learn "everything" about a programming language is kind of a waste of time. I would argue that even knowing by heart what every niche function does not mean you know how to use it. It's like that scrabble player who learned the entire french scrabble dictionary but still can't speak french...

 

As a beginner you should focus on broader concepts and on how to structure a program; there is plenty of complexity to be had in how you use even the most basic constructs of a programming language. Further, these concepts often carry over from language to language, meaning you can pick up a new language very quickly if you know what you should be looking for.

 

To directly answer your question:

1 hour ago, Hensen Juang said:

So, did I miss any advanced level course or something?

while there are certainly advanced language courses you can take at various universities, the only place where you'll find a full description of everything in these languages is the language specification (for example here is C++20). Which is extremely tedious documentation that isn't really meant to be learned in full unless you're writing a feature complete compiler for that language.

 

You also seem to be confusing libraries and frameworks, which are not part of the language itself, with actual language keywords. There's an argument to be made that the C standard library (which includes stuff like stdio.h) is so widespread that you can assume its presence and consider it part of the language, but things like qemu are definitely not.

Don't ask to ask, just ask... please 🤨

sudo chmod -R 000 /*

Link to comment
Share on other sites

Link to post
Share on other sites

Nothing beats the C Programming Language for learning, well, C. It is like the gold standard.

Also, pick up the Linux Programming Interface. any college program worth its salt should teach at least one course on system fundamentals in a Unix environment. If you are looking to work jobs in like say a finance trading firm, all these low-level interfaces will come in handy. they use Linux or some form of Unix operating system and C++ for their trading software and these are very low level. you are literally not allowed to use any third-party libraries and things like PHP, Node.js, Django, and all those fancy modern web frameworks are completely out of the picture. instead, you will be writing raw sockets and network protocols from scratch with all those fancy bytes of packet headers, metadata, and all those good low-level stuff. 

Sudo make me a sandwich 

Link to comment
Share on other sites

Link to post
Share on other sites

Pace yourself.

 

 

“The decay and disintegration of this culture is astonishingly amusing if you are emotionally detached from it. I have always viewed it from a safe distance, knowing I don't belong; it doesn't include me, and it never has. no matter how you care to define it, I do not identify with the local group. Planet, species, race, nation, state, religion, party, union, club, association, neighborhood improvement committee; I have no interest in any of it. I love and treasure individuals as I meet them, I loathe and despise the groups they identify with and belong to.” ― George Carlin

Link to comment
Share on other sites

Link to post
Share on other sites

On 11/11/2023 at 1:37 PM, Hensen Juang said:

So, did I miss any advanced level course or something?

No course is going to teach you everything. The #if statement you mentioned isn't even part of the C++ language as such. It's a compiler directive, to include or exclude code from the compiled binary based on some external condition. I'm sure you can find seasoned C++ developers who don't know about it or at least never used it.

 

I've been programming in Java for over a decade by now. That doesn't mean I know or have ever needed to know everything about the language. That applies even more so to the billions of libraries and frameworks that are out there. I typically learn about new things as I need them, rather than learning them in a vacuum in the hope of needing them one day (though it can be fun to learn new concepts for the sake of learning).

 

The first step when implementing anything is to figure out how to solve the problem you're presented with logically/algorithmically. Maybe do a Google search on how others have approached it. Then think about how to translate that into the programming language of your choice. If you don't know how to implement a specific concept, now's the time to hit the specs or do a Google search.

 

And whenever it feels like "I can't be the first person who's needed to do this", then it's likely a good time to start looking into libraries (doesn't mean you should use libraries for everything, especially if the solution turns out to be a one liner). Though you can always turn a more difficult task into a learning experience, if you've got the time to do so.

Remember to either quote or @mention others, so they are notified of your reply

Link to comment
Share on other sites

Link to post
Share on other sites

It is impossible to keep it all in your head. You learn the basics and some of the rules, and then read/learn as you go and need things. If you spend enough time with a language, you'll know a lot about it, but you'll never stop looking things up when you run across new problems or just need a reminder of syntax for something.

 

Even if you write your own language from scratch, you'll need to document it and refer to your documentation, or go back and look at your code to remember what you did. I work with some amazing developers, some who did low level Unix operating system development for years. They are still looking stuff up all the time, they still go back at look at their code to remember how something was implemented so they can explain it, they still write their own documentation and help info, and refer to it on a regularly basis. 

Link to comment
Share on other sites

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×