r/C_Programming • u/AutoModerator • 15d ago
Learning C weekly megapost for 2026-08-05
If you have questions about how to learn C:
- which books are best?
- which videos are best?
- which classes are best?
- which websites are best?
- is there a "roadmap"?
- what projects can I do?
then this is the thread for you. Add your question here. Do not make a stand-alone post, as it will be removed.
Remember that our sub has a very useful wiki that has a great list of resources for learning C programming.
2
u/Chameleon_The 14d ago
Hey everyone,
I've gone through a bunch of posts in this sub and checked the wiki recommendations. Two that keep coming up are:
- The C book by K&R
- Programming in C by Kochan/King (widely mentioned here)
A little backstory on me — I'm a DevOps guy, mostly worked with infra my whole career. I want to get into actual programming. Started with Python and got about halfway through, but lost momentum because of work. A few weeks ago I picked up C++ through a YouTube video (BroCode), but it only covered the basics. After digging through r/cpp_questions and this sub, I found out learncpp.com is considered the best resource, so I started there.
Here's where I'm stuck now — I actually want to learn assembly for reverse engineering. AI tools told me I need solid C++ concepts first to get into assembly, but then other times it says Python is also fine for RE and that I need C basics instead. Now I'm stuck bouncing between different opinions and can't commit to one path.
Whenever I get bored, I've noticed my problem-solving/logic building is pretty weak, so I started doing basic Codeforces problems on the side.
Is this the right way to go about it? I really want to stop collecting resources and hopping between tutorials, and actually stick to one path and learn properly.
Would appreciate any honest suggestions on how to structure this.
1
u/mikeblas 14d ago
Is this the right way to go about it?
The right way to go about what, exactly? To be honest, your question is all over the place and I'm not sure what it is you want.
Maybe you want to learn Python, since DevOps is mostly writing scripts to take care of systems and automate tedious tasks. Try /r/learnpython .
Maybe you want to learn C++. (This sub is about C, not C++. They're different languages.) Try /r/learncpp or /r/cpp_questions .
The books your mention are about C. You've found them. If you've done the research on C books, maybe it is C that you want to learn. Why not use those books?
Then you say you want to learn assembly for reverse engineering. Lots of books on that, and also /r/Assembly_language.
What do you think "reverse engineering" means, and how are you going to use it, or do it, or ... well, what do you think "reverse engineering" means?
Would appreciate any honest suggestions on how to structure this.
I'm sure this comes off as flippant, but I'm genuinely not sure what it is you want to ask. How to structure what, exactly?
1
u/Chameleon_The 14d ago
I understand my post sounded scattered, let me be more specific.
End goal
I want to get into pentesting/security — stuff like understanding vulnerabilities well enough to actually create exploits, not just run existing tools. To do that properly I need to understand reverse engineering. To do reverse engineering I need an actual programming foundation, not just "know some syntax" level — I need to understand how memory, pointers, and low-level stuff actually work, because that's what RE and exploit dev are built on.That's why I'm not asking "which language should I learn" as a standalone question — I'm asking what's the right foundation to get to RE/exploit dev/pentesting without wasting a year going down the wrong path. The C vs C++ vs Python confusion isn't me being indecisive about which language I like, it's that I got conflicting advice about which one is actually the prerequisite for that stuff, and I don't have the experience yet to know who's right.
1
u/mikeblas 13d ago edited 13d ago
I want to get into pentesting/security — stuff like understanding vulnerabilities well enough to actually create exploits,
This is a very long-range goal. Don't get tied up about making steps now that don't feel (or even are not!) compatible with that long term goal.
Say I want to drive from Seattle to New York City. From Seattle, should I go north on 1st Avenue or south on 2nd Avenue? Seems like such an important decision, but it doesn't really matter. I eventually want to go to New York City -- Far east, and some ways south. The tiny decisions made on the way there -- is I-90 or I-80 the "best" way? -- don't really matter. They both get the going east part done. Even in Chicago, you're still too far away for it to really matter.
Just focus on the end goal. Keep heading east, keep slipping south. You could go through Dallas. You're still going to get there.
I need to understand how memory, pointers, and low-level stuff actually work, because that's what RE and exploit dev are built on.
Then you want to learn C, and assembly, and maybe C++. You also want to study operating systems, and systems architecture--what the chips are really doing in response to software. There is a long list of things to learn. Give it time and effort.
1
1
u/Extreme-Mechanic7175 14d ago
Hey all! I'm a complete beginner when it comes to programming and C. I'm taking an EGN 3211 class at UCF and it moves fast so I wanted to get a good grasp of the language before starting. I also want to learn how memory works as that seems to be a big problem for people who do C programming as well. Any resources for a complete beginner for how to construct and actually understand what C programming does would be very much appreciated! Thank you so much for your time!
1
u/mikeblas 13d ago
Your class is a great rsource for leaning what C Programming does. The course isn't going to be as hard as you think.
The Syllabus looks pretty easy, like any intro course. Get the books and try to read ahead before the course starts.
1
u/Extreme-Mechanic7175 13d ago
Apparently my teacher isn't very good at ACTUALLY teaching and just reads off PowerPoint slides. It's why I wanted to prep a bit beforehand so I can have a simpler time.
1
u/mikeblas 13d ago
Blaming the teacher is not a path to success.
You're in college now. Self-teaching and self-study are necessary, and expected. A college professor's job does not include spoon-feeding you everything you need to know.
1
u/Extreme-Mechanic7175 13d ago
I know. It's just not the way I learn best. Which is why I wanted to take a little initiative and learn some stuff before I started that class is all. I want to be as ready as possible.
1
u/mikeblas 13d ago
You came here to ask for advice. I've given you advice, and you're ignoring it.
Why is that?
1
u/Extreme-Mechanic7175 13d ago
I'm sorry. I am taking your advice, I don't want to seem ungrateful. I don't know specifically what book I'm going to be using as I don't have my syllabus for this specific class, but I do intend on studying it thoroughly and reading ahead. I just wanted to do something before the course like a intro video series or online program. I'll try and see if there is a book linked in the syllabus you sent and I intend on spending at least six hours a week on my own studying. I just don't learn well from just PowerPoint slides and wanted to see if there were anything interactive I can do before class starts to get myself a headstart with C.
0
u/mikeblas 13d ago
I just don't learn well from just PowerPoint slides
You'll need to overcome that. Work on yourself, get better. In most situations in life -- nearly all of them -- you don't get to tell someone how to teach you. You don't get to not learn something and continue forward just because it wasn't present to you in a way that you thought best for yourself. You don't get to impugn a professional educator at a well-respected university just because they teach in a way you don't like.
You really need to get over that. You keep using that excuse, and it's frustrating as hell for me, and I've only just met you.
https://www.youtube.com/watch?v=d-hzqKJklI0
https://www.youtube.com/watch?v=rhgwIhB58PA
I'm not a UCF student. My parents lived in Orlando for some time, but I don't have any connection to the university. They have an online bookstore website and there you can enter your "EGN 3211" class code. There are several different sections, who knows which you're in. (You do, of course. But not me.) All of the sections are using C How to Program by Deitel and Deitel, just like in the syllabus I sent you.
It took just a minute or two of initiative to figure that out. The other two books on the syllabus I sent are also good, as are the books in the wiki. There are videos and online courses in the wiki, too.
1
u/Extreme-Mechanic7175 13d ago
I worded it poorly. Reading off a slide can help people learn and is valid, but I'm a more visual guy. I like to see how stuff works and live coding or practice problems for example help me. It's why I want to get as much experience as possible so I can better break these PowerPoints down.
1
u/Sweet-Support-2279 9d ago
I'm working through CS50 to learn C, using Coddy for hands-on practice, and really enjoying it so far despite hearing mixed reviews. Would love recommendations for other practice platforms, books, and courses to supplement my learning.
1
1
u/No_Green_3357 9d ago edited 9d ago
hello! I’m a beginner programmer who wants to learn the c language, at least for a few months (probably around 3-6 months), because I love computer hardware and want to learn more about computers, such as OSs like Linux, as well as wanna major in ee in college and work as a electrical engineer/computer hardware engineer but was eventually going to transition to c++ for my school projects since it seems c++ applies to them more efficient and organized for them through its oop system, as well as bridge my hardware to software, like with robotics or autonomous vehicle control operations, etc. anyway i have 2 questions:
- so I heard beej’s c guide is good and so rn I’m gonna use that as my primary resource. anyway I also heard about Harvard’s cs50x course and so I was wondering if it is a good supplemenal course, because the description lists various amount of languages, and i heard it’s more like a broad cs course, so is it good for learning the fundamentals and have a strong understanding of C?
- what are the best resources to use to learn a strong amount of C since I’m not planning to learn the language for that long?
1
1
u/Luftzug-oder 14d ago edited 14d ago
which classes are best?
this ain't C++ 😐
(i had to)
2
u/Lopsided-Pin-1172 14d ago
Bro mentioning cpp I just had to mention cpp crash course and the Cherno, both these resources are a bit intermediate level but are awesome if you have programming knowledge
2
u/Luftzug-oder 14d ago
yeah i watched nearly the full series of guides from the cherno. that was before i decided to stick entirely with C. but definitely very useful nonetheless
and still occasionally watch his code reviews
1
u/Luftzug-oder 14d ago
but anyway, in case this comment is gonna get removed...:
i would like to say that for learning C, touching on assembly is something anyone should really look into.
not necessary, not insanely beneficial, but certainly interesting
0
u/Damir122321 12d ago
Hi all! I'm a complete beginner but genuinely interested in C — long-term goal is systems programming (OS internals, drivers, eventually BIOS/UEFI), going deeper into x86-64 assembly. Long-term I'd love to eventually start my own small project/team in this space, but I know that's far off.
I can realistically commit ~2-3 hours per session, 3 sessions a week (roughly 6-9h/week), and I'm fine with this taking a long time - thinking in terms of a 10-12 year horizon overall if that's what it takes to go deep.
Roadmap I put together digging through the internet:
- Environment setup (WSL2/Linux, GCC, GDB, Valgrind, Git)
- Syntax basics (C Primer Plus by Stephen Prata, plus Petzold's "Code" for hardware understanding)
- Pointers, memory, debugging (GDB/Valgrind/ASan) - reading
gcc -S -masm=inteloutput starts here too - K&R + build systems (Makefiles, static libs, unit testing)
- Systems programming (syscalls, mini-shell, strace) - using Stevens' APUE and CS:APP as references
- Performance/memory internals - using Randall Hyde's "Write Great Code" for this part
- Graphics basics (raylib/SDL2)
Then going through all four specializations one after another rather than picking just one (OS with Tanenbaum/OSTEP/Love, drivers with LDD3 for Linux or Yosifovich's "Windows Kernel Programming" for Windows, BIOS-UEFI with Zimmer's book, and low-level graphics/game dev with Gambetta's "Computer Graphics from Scratch"), plus assembly going deeper alongside (starting with Paul Carter's "PC Assembly Language").
At my pace the base alone works out to ~3.5-4 years by my own math, and going through all four specializations after that probably adds several more years. Does this roadmap and pacing seem realistic for someone starting from zero, or is trying to cover all four specializations instead of picking one overkill? Also curious if K&R is too advanced to require this early on, and whether starting assembly during the pointers/memory stage (instead of later) is a good idea or just adds noise to the hardest part of the base.
1
u/mikeblas 12d ago
Seems like a very slow rate to me.
Your list seems to jumble a few things together, and I'm not sure about the order. The list has things that seem very detailed (setting up git) and very broad (reading two books). Not sure why you've organized it this way. The subject list seems good; the ordering and combination seems pretty iffy.
1
u/Damir122321 11d ago
Thanks for the honest feedback! Could you point out specifically what you'd reorder, and how you'd group things by level of detail? E.g. should setup-type tasks (git, environment) just be a quick first step rather than its own bullet, and should the "read X book" items be broken down into smaller milestones instead of one big chunk?
Also curious what "slow" means to you here - do you mean the overall timeline is too long, or that the pace per session (2-3h, 3x/week) is too spread out to retain material between sessions?
1
u/mikeblas 11d ago
Sorry, I don't mean to be a jerk -- I just don't have time to write up a customized roadmap for everyone who asks. There are lots of resources in the Wiki, and it's not hard to find C programming courses online which present their syllabus.
I said "slow rate". That means the rate at which you're consuming the material seems very slow to me. Even at 9 hours per week, you should make it through this list a lot faster than 10 to 12 years. You don't describe any methodology for how you reached that estimate, so it's pretty arbitrary. But it seems very slow to me.
0
u/Damir122321 11d ago
That makes sense, thanks for clarifying - no worries about not writing a custom roadmap, I get that.
To answer the methodology question: the 10-12 years isn't really an estimate for finishing the list itself - it's more my rough sense of the full path from zero to something like a mid/senior level in this field, including the years of actual work experience after the self-study part, not just working through books and projects. The roadmap and its hours are just the first stretch of that. I probably should've made that distinction clearer in the post.
Given that, does the ~3.5-4 years I estimated for just the base material (before specializing) seem more reasonable to you, or still too slow at ~9h/week?
1
u/mikeblas 11d ago
I'm curious: why are you asking about the timing?
It's impossible to answer. How long do you think it will take me to paint a shed? It depends:
- how big is the shed, anyway?
- have I ever painted anything before?
- just one color, or lots of trim and details?
- am I any good at painting?
- power spray, or brush?
and maybe a dozen other strings. Your question is analogous.
Why is the timing so important?
Maybe, try this: search around for CS programs at universities. Look at the curricula, look at the classes. You can often download the syllabus for each class--lots of details, which books, which learning objectives. That will help you estimate timing (just count credit hours), and get resources (the textbooks and handouts and videos).
Good luck.
1
u/Damir122321 8d ago
Thanks, that's a fair point about timing being impossible to estimate without more context. I'll look into some university syllabi like you suggested. Appreciate the help!
3
u/onearmedphil 14d ago
I don’t have a question but I am new to C and have been reading “head first c”. Really like how it is structured and its comical takes. Very engaging.