I haven’t found the time to write as many blog posts as I’d like, so feel free to be brutal constructive with any feedback. The site is also still not finalized, e.g. I know the side-nav is kinda annoying.
I would argue that even C is probably not a good starting language and something like Go would better suited for a beginner programmer course. Go has far less surprising behavior than C let alone C++. Initialization as an example since that was the point of the article is extremely well defined in Go with everything having a zero value.
The value of C is probably in learning how badly you can accidentally shoot your foot off and you’ll still spend far more time learning the gotchas than you will the computational science that you wished to learn.
I wholeheartedly agree with you. It seems that most universities have switched to Python, but I still think Python has too many distracting features. I like the idea of teaching something like Racket instead, where the focus is really on decomposing problems and functional composability, a skill I wish more had by the time they reach C. There’s even graphics support.
Given that, C can produce a natural gradient to more in-depth systems programming concepts. For example, you get a segfault. “What’s a segfault?” Now we can introduce concepts of virtual memory, paging, et al.
Racket would be great, it has a lot of useful stuff in the standard library, great documentation, a good IDE…
Unfortunately I think many people would still take issue with the damn parentheses. Maybe it would be worthwile to develop a #lang in the vein of ReasonML that looks closer to an ideal C/JS-like lingua franca, such as sweet-expressions
What about something like pyret? It was written by racketeers originally as a racket #lang and only later became its own language.
Our professor that taught us in Racket also taught us the useful hotkeys in DrRacket to deal with parens. It ends up not mattering at all, with just a tiny bit of effort.
I mean, this is the pedagogic approach of SICP, but even MIT has moved away from it. We used it in my CS classes at Chicago, too, but that was back in the paleolithic era (1990).
It always made sense to me to start from the principle of handling abstraction, before moving onto actual computer stuff; but then, how much of that is confirmation bias on my part?
friend int main()
friend int main()
I love posts like this. It’s nice to reflect on the complexity of software to remind us of how quickly small incremental change can lead to absurdity.
Your sidebar needs work.
I got rid of it because of complaints! Thanks for the feedback. I was trying a CSS-only solution and eventually gave up with it in that state.