So would you suggest I start learning with C or (my preference) with Racket, particularly How to Design Programs.
Haven't read HTPD, just had a quick look a while back but it seemed like good and fun introduction to Racket.
I'm not really concerned with the idea that this or that language is better: I want the most efficient and helpful path to learn to start making games that aren't buggy pieces of shit.
That's a good attitude
Just curious, Rincewind: why do you suggest Racket or LISP over Python? I think I have a good idea as to why, but it would be interesting to hear a more expert opinion.
I suggest LISP/Scheme over anything else because of the sheer mind-reprogramming it will do to you, for the better. Hard to explain really, but if you dutifully work your way through the exercises in SICP, it will change your outlook about programming forever and it will make you a better programmer in
any language. When I first read that book, I was doing Java full time, and I was quite surprised how my Java style had changed
as if by magic just after working through the exercises in the first few chapters. I know, it sounds weird and a bit esoteric, but maybe I got you interested enough to give the book a go and see it for yourself
People used the word "enlightened" a bit pejoratively earlier in this thread, but that is what learning LISP/Scheme for the first time is: an enlightening experience about computation.
Python is okay I guess, it's good for everyday scripting and it has tons of useful libraries (one of the best things about is in fact the ecosystem), but the core language is a far cry from the sheer power of a LISP/Scheme. Having said that, I kinda like Python for what it does.
Some highlights of things unique to LISPs that are missing from Python:
- working on a program
while it's running (that's right, changing data/functions/whatever on the fly)
- ability to write expressive DSLs (invent your own mini-programming language that describes the task you're solving much better than a generic language)
- macros (programs generating programs)
- no distinction between code and data (!); they're the same thing
-----
One more thing about writing game engines: if you're 100% sure that's what you want to do, that's of course fine and by all means go deep in C/C++. But probably there's hundreds (if not thousands) of non-engine developers to every single engine developer nowadays in gamedev (I don't work in gamedev, so I'm just making numbers up... maybe some working gamedev folks want to chime in on that. But there's a similar trend in practically every area of computing; for example, there are very few people working on actual web servers, but tons of developers writing web apps using those web servers etc. Similarly, how many people work of video/audio codecs in the world today? Very very few, but lots of programmers use those codec libraries, which is easy.)
If I personally wanted to write a game, I'd just use some existing engine. The thing with engine development is that it is very technical, low-level and math heavy, and you'll spend years just learning about the theory and tech involved. It's a very narrow, and all-consuming area, so if you're that kind of super technical and very much math-focused person, then maybe it is for you. But chances are that you're a person who just wants to create games and you are more interested in design, gameplay and such, in which case you'd be better off using some existing engine. I might be wrong, but engine development seems to be something that doesn't leave room for much else, and the barrier entry is quite high. I don't think it's a good idea for most solo devs, except for geniuses who only need 4 hours of sleep or something
Ah, and all that is assuming we're talking about 3D engines. Non-3D game engines can be definitely much simpler, but pretty much everything uses 3D nowadays anyway, unless it's 100% pre-rendered. So probably you'd be better off using some 3D engine anyway, but in theory you could write your own much simpler 2D engine from scratch.