How I program C
Eskil Steenberg8 HN recommenders · recommended in 9 months, 2017–2025
talk · intermediate · evergreen · 2017–2025 on HN
Eskil Steenberg's two-hour talk on his personal approach to writing C, covering code style, structure, naming, pointers and large-project organization. He warns it contains a fair bit of programming religion.
HN recommends it as the one long programming video worth watching, a provocative and influential take on C.
Up next
6 mo on HNDEF CON 26 - Svea, Suggy, Till - Inside the Fake Science Factory
DEFCONConference
5 HN recommender · 2018–2025
12 mo on HNLec 1 | MIT 18.06 Linear Algebra, Spring 2005
MIT OpenCourseWare
11 HN recommender · 2011–2020
5 mo on HN!!Con 2016 - How I Code and Use a Computer at 1,000 WPM!! By Sina Bahram
Confreaks
2 HN recommender · 2019–2022
3 mo on HNHamming, Intro to The Art of Doing Science and Engineering: Learning to Learn (March 28, 1995)
securitylectures
3 HN recommender · 2016–2020
4 mo on HNLone Star Ruby Conference 2010 Real Software Engineering by Glenn Vanderburg
Confreaks
3 HN recommender · 2013–2025
6 mo on HNDemocracy at Work: Curing Capitalism | Richard Wolff | Talks at Google
Talks at Google
6 HN recommender · 2017–2026
11 mo on HNBret Victor The Future of Programming
Joey Reid
12 HN recommender · 2017–2026
4 mo on HN31 Hamming, Learning to Learn: You and Your Research, 6 June 1995
Hamming on Hamming: Learning to Learn
3 HN recommender · 2020–2024
11 mo on HNCppCon 2015: Andrei Alexandrescu “std::allocator...”
CppCon
7 HN recommender · 2017–2025
12 mo on HNLexical Scanning in Go - Rob Pike
GoogleFOSSSydney
13 HN recommender · 2012–2025
10 mo on HNCppCon 2017: Matt Kulukundis “Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step”
CppCon
9 HN recommender · 2018–2026
9 mo on HNRustConf 2018 - Closing Keynote - Using Rust For Game Development by Catherine West
Rust Programming Language
9 HN recommender · 2018–2023
12 comments from Hacker News
link If you have lots of time: link If you can't be bothered reading a whole book: link Exercises: link and link Once you have syntax and basic algorithms down well, watch this, the only 2 hour YouTube video I'll ever recommend: ▶ this video Both r/cprogramming and r/C_programming are active, also full of lazy students trying to get people to do their homework. If you come by, describe your problem well with code. Say you're learning for yourself, not for school. Together C & C++ is a good Discord if you prefer live chat: link
> Once you have syntax and basic algorithms down well, watch this, the only 2 hour YouTube video I'll ever recommend: > ▶ this video Hard +1 on this! I think Eskil Steenberg work in C is really top notch - the video is heavily recommended, as is an overview of his work in general, he does some awesome stuff with C.
Hi Eskil from Australia :-) I remember you posted that on the page from 40 days ago also hehe. I have too many ideas myself already, so that one wasn't so useful to me, but was interesting. However, I really liked Drama in games [0] and I seriously loved How I Program C [1]. It's been a big influence. Thank you! [0] link [1] ▶ this video
Other resources I like: - Eskil Steenberg’s “How I program C” ( ▶ this video ). Long and definitely a bit controversial in parts, but I find myself agreeing with most of it. - CoreFoundation’s create rule ( link ). I’m definitely biased but I strongly prefer this to OP’s “you declare it you free it” rule.
The author's defense of C reminds me of this classic youtube video: ▶ this video ... I am sure the video above will cause immediate disagreement (I think it goes too far on some topics), but I urge people to consider the ideas contained within. (I seem to have mis-posted this to another thread?)
For what it's worth I think this is an excellent choice. Back in 2019 I was deciding whether I wanted to pursue Zig full-time and one of the upsides that I determined was that once you reach critical mass writing all of your code for tools and things in Zig you end up with things that are really exactly what you need and with a very high baseline for speed, flexibility, and so on. Right now I'm considering the same thing but with Odin and for many of the same reasons that I had for Zig; it's an excellent language to write foundational code in and once you do, you end up being able to build significantly more understandable, reliable, stable and consistent things. This, but on a company level, is a real multiplier. Once you adopt a couple of Python scripts and that's OK, you give up the possibility of wielding this sharp spear. Edit: I think "How I program C" by Eskil Steenberg is an interesting window into what you can get if you laser focus on a language and environment and allow yourself to build up a mountain of code that you dogfood: ▶ this video At some point I will likely soft-retire and at that point it's exceedingly unlikely that I'll bother with using other people's libraries except a few key ones that I think are decent, and at that point there really is no reason I'd sit down and write these fundamentals in anything but a lower-level language. Odin, Zig or something like it would pretty much be the only thing on the table.
Try watching this: ▶ this video Its long and is filled with other stuff about C programming but it goes in to dept about how to think about pointers. Good Luck!
As a C programmer i have two ways I go about selecting names. For anything uniqe, I use long post fix names. I think of them as a directory path to the functionality. So instead of: create_object(); delete_object(); I do: project_module_object_create(); project_module_object_delete(); I then do the same with files, so the above would probably reside in a file called: project_module_object.c This makes everything easy to find, you know where things belong and you can search for partial names to find instances of interfaces. For local variables, I have a small set of variable names that all have specific meninges like i, j, k, f, sum, found, best, length, count, that I always use in the same way. They therefore become very easy to read since I know their use. If something doesn't fit the limited set of common variables, I revert to long post fix names. A much longer explanation of how is use C that goes in to more depth about naming can be found here: ▶ this video
All code written in C89 Written from scratch, without any dependencies. All operating system interaction is warped and ported. FreeBSD License. -Forge: stdlib with math, text, A*, geometry math, memory debugger and much more. -Imagine: Threads, timing, setting, lib loading. -Betray: Platform layer, with plugin support, VR, Multi-touch, controllers and more. Win32 , Linux and limited MacOS support. -Relinquish: Rendering library, wrapping OpenGL supports and hides a wide range of extensions. -Seduce: 3D UI toolkit, text rendering and editing, fonts, 3D manipulators, cameras. Mouse / multi-touch / multi-user / controller support. -Testify: Networking and serialization. TCP, UDP, Files, NAT Holepunching, local/global service discovery. -Hxa: asset file format, FBX and PNG implementation. Graphics processing. -Json parser. These libraries have been used extensively in software production for all my applications including LOVE, Exo, Stellar, MoF, and Loq Airou (source included). You can find out more about these at: link . For more on my programing style, and philosophy watch this: ▶ this video
this video: ▶ this video , from a talk by eskil-steenberg titled 'how i program in c' is, imho, pretty good as well.
The author of this website couldn't be further from any notion of vibe coding: link ▶ this video Vibe coders follow the herd (Python, JS, Rust), they don't write any C.
>You don’t have inheritance [..] Modern PL features are more or less wrappers around comparatively complex C code. Object inheritance is actually one that isn't too difficult or complex to implement: ▶ this video