[HN Gopher] Open-source interactive C tutorial in the browser
___________________________________________________________________
Open-source interactive C tutorial in the browser
Author : Buttons840
Score : 230 points
Date : 2025-04-27 02:52 UTC (20 hours ago)
(HTM) web link (www.learn-c.org)
(TXT) w3m dump (www.learn-c.org)
| orionblastar wrote:
| We need more resources like this. Thank you.
| Buttons840 wrote:
| Saw this mentioned in a HN comment and thought it deserved more
| attention: https://news.ycombinator.com/item?id=34106174
| dbacar wrote:
| They host lots of other languages as I see.
| https://www.learnshell.org/ https://www.learnjavaonline.org/ ...
| anovikov wrote:
| Unbearable with ads all around.
| commandersaki wrote:
| The interactive editor seems to only use a quarter of the
| screen space and isn't resizable. Quite vexing to use.
| zerr wrote:
| Surprising that there are still people without ad-blockers.
| Just install uBlock Origin.
| herewulf wrote:
| As great as this looks, I think it should heavily emphasize
| moving on to using GCC (or maybe LLVM).
|
| I learned C in the mid nineties using a copy of Visual C++ 1.0
| that a friend had gotten from his father (and probably he got it
| from work). It was the only compiler I knew of and once I was
| ready to move beyond toy programs, I was seriously hampered by
| the fact that this compiler couldn't produce text mode
| executables (any call to printf opened its own new window that
| definitely wasn't cmd.exe) and it couldn't set the graphics mode
| for blitting pixels. It was heavily oriented around this new
| fangled MFC thing but I was a teenager so I wanted to program
| _games_ not business apps or whatever. That meant I wanted text
| mode or graphics mode.
|
| My high school CS class had Borland C++ and I could set mode 0x13
| with that in DOS. But I had no way of obtaining this compiler as
| a kid. And it probably didn't work on Windows 95 anyway.
|
| Anyways, it wasn't until the early 2000s that I finally learned
| about GCC, a free as in beer and freedom compiler and the
| simplicity of it would have been amazing for learning.. _If only
| I had known_.
| auselen wrote:
| Probably same years... whenever we got a new computer I was
| removing OS shipped and installing a previous MS OS. Win3.1?
| Nah I want DOS, win95 nah... I want 3.1. That's where my tools
| were.
|
| Funny thing I still use win10.
| lgiordano_notte wrote:
| funny how much the tools you first get comfortable with shape
| everything after. even today, setting up a simple clean c
| environment is way harder than it should be for beginners.
| tutorials like this help, but eventually pointing people
| toward gcc or clang early on makes a huge difference long
| term.
| codr7 wrote:
| I stole my copy of Borland C++ from school.
|
| But as mesmerized as I was by C++ at the time, Borland Pascal
| was a lot more fun to play around with. I remember
| unsuccessfully trying to wrap my head around the different
| kinds of pointers, and the humble beginnings of std.
| Buttons840 wrote:
| Same here. Highschool programming class was a lot of fun,
| learning all the basics for the first time, but I too thought
| the first step of being a programmer was to obtain a Microsoft
| product.
| fuhsnn wrote:
| > Defined using char, int, short, long or long long
|
| > Note that C does not have a boolean type
|
| `_Bool` and `long long` are both introduced in C99, this is mixed
| up info.
|
| Edit: probably tailor-made for old MSVC, which didn't support
| _Bool until VS2013.
| PaulRobinson wrote:
| Ironic that you've drawn the eye to the thing that needs to be
| front and center of any C tutorial, and also the thing that
| makes C so tricky to work with.
|
| When somebody says "This program is written in C", my initial
| thought is "Which C?". There is no one, single C.
|
| I don't write C daily. Heck, I don't write it monthly any more.
| And so my grey cells are struggling with which versions
| introduced what, and you've spotted something I would have
| missed on a first read.
|
| And this is a problem.
|
| Can you list all the undefined behaviours, and which language
| features came into which version across ANSI, C99, C11, C17 and
| C23? The last one feels a little brighter in my mind, but I
| definitely can't, and if I was writing a C tutorial - like many
| that have been written - I'd probably be explicit about
| choosing a version and sticking with it, and good luck and
| godspeed to everything outside that version.
|
| Of course this is one of the reasons learning C is harder than
| other languages, and why languages like Zig and Odin have a
| decent chance: ergonomically simpler than Rust, all the power
| and flexibility, (much) less of the head scratching.
| card_zero wrote:
| Because Zig et al won't have future versions with new
| features?
| jononor wrote:
| Of course. But they are starting with 40 years less
| baggage. And can reasonably assume a modern hardware
| architecture, for example.
| uecker wrote:
| You could also just use the newest C standard. I would
| personally trust that C23 code written today still works
| in ten years and still has excelelnt support in compilers
| a lot more than that this is the case for any code
| written in Zig, Odin, or Rust.
| PaulRobinson wrote:
| Ah, but then you have potential interop and portability
| issues. C11 isn't yet universally adopted, and there are
| some dark corners out there where even ANSI (C89/C90) is
| not quite embraced and original K&R is holding out.
|
| I think the jury is out on Zig and Odin (but I like Zig a
| lot, in particular), but I feel Rust has hit a tipping
| point - like Go, Python and Java - where there's too much
| production code out there for it to disappear in the next
| ten years.
|
| If you were to ask me about languages where that might
| not be the case in ten years, I'd point to where usage is
| not very production oriented (R, Julia), or where people
| have had a good try and decided they want to pull back
| investment (anecdotally, Ruby and Scala seem to be on
| that curve right now).
| uecker wrote:
| Nothing really disappears, the question is how strong the
| ecosystem is in ten years and how good the support for
| the code you write today. Rust will not go away but I
| doubt that the code written today still works without
| hassle or that all the 1000 crates it depends on still
| exist. That there are dark corners using C89 or K&R is
| not a weakness, it demonstrates how strong the C
| ecosystem is. If you write something in Zig or Rust now,
| you need to realize that in 10 years it might also be
| considered ugly legacy code, even if you think it is
| shiny modern code today. The question is then if it is as
| easy as using "gcc -std=c89" to work with it.
| ay wrote:
| A piece of anecdata: my Rust code from 8 years ago still
| compiles fine, though compiler complains about not having
| the defined edition set.
| uecker wrote:
| News such as this one do not build confidence though:
| https://internals.rust-lang.org/t/type-inference-
| breakage-in...
| ay wrote:
| Ah. Apparently I didn't use that crate, so happily missed
| that footgun, thanks for the info! That is an unfortunate
| case.
|
| Though I suspect it's fair to say the entire settlement
| is built of glass houses here :-)
|
| https://news.ycombinator.com/item?id=43798312
|
| I suppose if one wants absolutely no surprises, they will
| need to lock the entire toolchain as well, regardless of
| the language...
| uecker wrote:
| Maybe, but this GCC change would affect only code that is
| already broken and then there is even a compiler flag to
| fix it.
| PaulRobinson wrote:
| Sure, but C predates semantic versioning and is rammed with
| undefined behaviour that a lot of people depend on.
|
| Modern languages - even those that have high levels of C
| interop like Zig - can (and do) avoid those problems.
| atiedebee wrote:
| What is wrong with versioning a language like c89, c99
| etc.? I think it is a lot easier to keep track of the 7
| versions of C than the 14 that are available for zig and
| the however many there are for rust.
|
| I do agree that some of the UB is a problem though.
| hahn-kev wrote:
| The problem (as mentioned above) is that c99 is not the
| same everywhere.
| mbel wrote:
| This is mostly an issue with MSVC which refuses to become
| compliant with c99 standard. Their support for c11 and
| c17 also has some gaps around features that were
| introduced in c99.
| arp242 wrote:
| I think you will always have this sort of thing for anything
| that's primarily driven by a standard (e.g. C, but also most
| web stuff) versus anything that's primarily driven by one
| specific implementation (most other languages).
|
| Things are a lot better today than they used to be though:
| compilers that don't support modern features are rarer, and
| the compilers give much better errors on things like UD.
| arcmechanica wrote:
| no thanks
| immibis wrote:
| We should call things free software if they're free software and
| open source if they're not. Also, what's this cookie consent
| dialog about? Are those 999 business partners open source?
| kubb wrote:
| Good luck to the author with the tutorial. I'm really beginning
| to accept that despite all of the new languages, like Rust and
| Zig being available, they won't be able to displace C for the
| next couple of decades at least. A good programmer will need to
| learn all the techniques for working with C code safely,
| efficiently and reliably, with all the inconveniences that
| implies.
| doublerabbit wrote:
| Most older C developers I've spoken to find Go and Python as a
| fresh breath of air and refuse to head back.
|
| The younger generations totally sideline C completely.
|
| Myself a non-coder but experienced SysAdmin who can write cool
| Perl, TCL scripts, C almost feels almost natural when reading
| it. I just haven't had the time available to dive in.
|
| It could be that I was exposed to it at 14 (2003) but chose
| perl because MSN/Y!M/AOL messenger bots were the discord bots
| of today. Still, eager to dive in. Some reason Java too.
| doublerabbit wrote:
| The issue I always find with these tutorials that they never seem
| explain the finer details.
|
| On the Array Page:
|
| /* print the 7th number from the array, which has an index of 6
| */
|
| printf("The 7th number in the array is %d", numbers[6]);
|
| There is no mention of what %d is or does. Once you know, it's
| fine, it's the display placeholder for the variable but that's
| what throws me off on tutorials.
| larfus wrote:
| Had a bunch of inconsistencies last time i checked. Not quite
| comprehensive nor does it have much clarity. I also could hardly
| see when I disabled my ad block momentarily.
|
| Moral of the story: books are better for learning when it comes
| to C.
| codr7 wrote:
| The more, the merrier, here is another one I've been working on
| lately:
|
| https://github.com/codr7/hacktical-c
| alabhyajindal wrote:
| I need to brush up on C for my dissertation. How does this
| compare to Head First C?
|
| I read the first chapter of that book and loved it! Very unlike
| other books on C which dedicate an entire chapter to `for` loop
| for instance. How do other programmers even read a book like
| that? Isn't it tiring to read through how a `for` loop works for
| the 70th time.
| atiedebee wrote:
| Skimming through the pages, there is some things that aren't
| really accurate.
|
| > Integers - whole numbers which can be either positive or
| negative. Defined using char, int, short, long or long long
|
| char is either signed or unsigned depending on the
| platform/implementation. Use signed char if you want signed
| integers.
|
| Telling people who are new to C to define booleans with macros is
| not a good idea, as they have had a proper implementation since
| c99.
|
| It also feels weird to treat structs and pointers as advanced
| topics. They are basically required to be productive in the
| language.
|
| stdint.h was introduced in c99, not c11.
|
| Explaining bitwise operators as "bitmasks" is also quite weird.
| Bitmasking is just one of the few things you can do with them.
|
| > In C, functions must be first defined before they are used in
| the code. They can be either declared first and then implemented
| later on using a header file or in the beginning of the C file,
| or they can be implemented in the order they are used (less
| preferable).
|
| This paragraph reads weird. I haven't found any place where the
| tutorial mentions how to properly write header files. It might be
| because of the interactive part, but if that is the case then
| this tutorial doesn't really teach you how to program in C
| because the tooling around it is an important part of actually
| using the language. It is also fairly common to declare functions
| in order of use. Discouraging that is like telling people they
| need to use tabs over spaces instead of actually focussing on
| language semantics.
| eigenvalue wrote:
| When I see a page filled with junky ads like that, I instantly
| close it. On mobile especially, it's unusable.
|
| I'm amazed something like this gets traction here.
| user432678 wrote:
| Most of the users of this website probably run ad blockers,
| thus the traction. Bu I agree.
| xnickb wrote:
| I didn't see any ads. Thanks for letting me know
| shric wrote:
| I get no ads as I've been using ad blockers for as long as I
| can remember.
|
| It is, however, a terrible tutorial (it's full of beginner
| errors made by people who don't understand C but think they do
| based on behavior by whatever compiler they're using at the
| time).
|
| There is presumably some correlation between sites riddled with
| ads and having terrible content. Perhaps ad-blockers should
| show how many ads they have blocked more prominently.
| Borzadaran wrote:
| Interactive tutorials are great for lowering the entry barrier,
| but technical accuracy is crucial for beginners. It's suggested
| to stick to a single C standard (like C99), properly cover
| essential topics like structs and pointers, and prefer _Bool over
| macros for booleans. Overall, the effort is appreciated.
| dalton_zk wrote:
| C is a great language to learn if you want understand the
| fundamentals of computer. Personally, C was on of the first
| language that I learned, and until today help me if I want to
| learn a new language!
|
| I loved the interactive tutorial!!!
| cies wrote:
| I'd say it's a bit crufty/quirky. Zig seems to be a good modern
| alternative. Basically a very similar language in the core,
| with a much more pleasant syntax.
|
| Wondering how long it will take before Linux can be ported to
| Zig by LLMs. Supposedly subset of it already builds with the
| Zig compiler (which also compiles C), with some minimal
| adjustments.
___________________________________________________________________
(page generated 2025-04-27 23:00 UTC)