this post was submitted on 07 Mar 2024
790 points (95.1% liked)

Programmer Humor

32483 readers
313 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 10 points 8 months ago* (last edited 8 months ago)

Obligatory link to the wizard book, aka learn programming the proper way. Never mind the language this is about principles and fundamental concepts. Yes by the end of it you'll have written a compiler, that's the equivalent of a smith forging a hammer and tongs. Flank with HTDP if you need a bit hand-holding putting programs together, SICP is rather pinpoint-focussed on the concepts so doesn't contain much in terms of design. If you want a stand-alone implementation of the language (with the first link you can run all the code boxes in the browser, fancy newfangled stuff I approve of) racket is the way to go, just add #lang sicp in front of your files and you'll have the exact dialect the wizard book uses.

The wizard book has been the standard recommendation for like 20 years now, the only reason other tutorials exist is because newbs insist on "how to move cube in unity without programming" type of hand-holding. It's not actually helping them, on the contrary I see much learned helplessness in the young'uns.

From those basics you can dive into whatever concrete you need for whatever you want to do, you'll have the necessary background to not be lost at sea. To further build that background knowledge it's a good idea to have acquaintance with a broad selection of standard data structures, algorithms, and their properties. No need to go in real depth but you should have an at least intuitive understanding of why they have the properties they have, like, don't be surprised if your game stutters if you're using hashmaps. O(1) and amortised O(1) are not the same thing.

Last, but not least, never write your own datetime or unicode handling code.