4 ms·
Since this article lays so much emphasis on C, I have an honest question to everyone. What is a good way for a beginner to learn C in the current time? The mine
by fortran90 7y ago
Since this article lays so much emphasis on C, I have an honest question to everyone. What is a good way for a beginner to learn C in the current time? The minefield of undefined behavior is really overwhelming to a beginner. Are there any good resources that teach C the right way with good advice and best practices to navigate the UB minefield?
- kd5bjo 7y agoI can’t advise on modern resources as I’ve known C for a while now, but I can speak a bit about the mindset required. Programming in C isn’t much different than programming in any other language, just without the safety railings. If you’re at the stage where you are typically fixing bugs by understanding what is happening and then making a single targeted change to correct the issue, you should have no significant trouble working in a C codebase. If, on the other hand, you’re in the habit of shotgun debugging, where you make repeated changes to the problem code until it appears to work, you’re quite likely to leave behind various problems that will be hard to figure out. Often, experience is the best teacher. If you’re not exposing your program to malicious users (aka. the public at large), the most serious issue you’re likely to run into is either a program crash or data corruption— nothing that will really harm your computer, but may cause you grief as you try to figure it out. In that process, though, you’ll learn an awful lot about how everything works. So, go write some programs for your own use and see how they crash and burn so that the next thing you make is more stable. Eventually you’ll start to intuitively spot trouble before it actually happens.
- tick_tock_tick 7y agoBeing careful with malloc/free and using a modern toolchain that will warn on 99% of stuff is pretty much all you need. People way overemphasize UB
- pjmlp 7y agoYes, you need to dive into books like Writing Secure Code https://www.amazon.com/Writing-Secure-Second-Developer-Practices/dp/0735617228 https://www.amazon.com/Writing-Secure-Second-Developer-Pract... Secure Programming Cookbook for C and C++ http://shop.oreilly.com/product/9780596003944.do http://shop.oreilly.com/product/9780596003944.do SEI CERT C Coding Standard https://wiki.sei.cmu.edu/confluence/display/c https://wiki.sei.cmu.edu/confluence/display/c
- huhtenberg 7y ago> the UB minefield While UB quirks exist, they are WAY off the beaten path and it takes an effort to run into them. Doubly so if you are just starting with the language. Just treat C as a thin convenient layer over the hardware that expects you to think and act responsibly in exchange for this nearly raw access.
- Profan 7y agoIn C (and C++) something as simple as forgetting to initialize a variable lands you in UB-land already, nearly every person I knew when I was learning myself (and still now) ran into these things _very quickly_. Not to mention compilers make fun-times out of this by sometimes zeroing memory in debug and then not doing so for release builds (Hi MSVC!).. The "thin layer over hardware" idea is a thing of the past as soon as optimizations come into the picture, and even then.
- js8 7y agoIf you already know it a bit, I think https://modernc.gforge.inria.fr/ https://modernc.gforge.inria.fr/ is pretty good.
- LucaSas 7y agoAs a good resource for learning C I would recommend Casey Muratori's tutorials: https://www.youtube.com/watch?v=F3ntGDm6hOs&list=PLEMXAbCVnmY6RverunClc_DMLNDd3ASRp https://www.youtube.com/watch?v=F3ntGDm6hOs&list=PLEMXAbCVnm... If you are interested in learning more about writing complex software in C consider checking out HandmadeHero. Sadly there need to be more good resources on learning how to write good C and low level software. I am hoping my article can be a starting point for people who wish to learn about library design for example.