Jul 012013
 

I answered a whole lot of questions on Quora in the last few days, and thought I would share some of them here on the blog over the next little while, since I have been pretty quiet.

The question on this occasion was, what programming languages should an aspiring game designer learn? And the answers tended to be around things like “C++.” But I suggest a different approach to the problem.

Learning new things is hard. Programming calls for a new mindset, if you have never done it before.

Therefore, you should learn whichever one you will stick with. And that means, the one that is easiest for you to learn first. The one that will give you positive feedback quickly.

Don’t jump to C++ because you are “supposed to,” even if you are aiming at working in AAA console. Don’t jump to C# because it’s the current hotness or what Unity uses. Pick the one that you feel like you personally can make progress in.

Any good programmer will learn many languages over the course of their career. Heck, I am not a good programmer, and I have worked with BASIC, C, C++, Python, Lua, modern BASICs like Blitz (three members of that family so far), three homegrown scripting lnaguages, JavaScript, PHP, and Java.

Pick one that is easy and cheap to get started in. It doesn’t need to be powerful, because you don’t know how to use that power yet. Instead, what you want is something that will let you get a picture on screen very quickly. When you are starting out, positive feedback is the hardest thing to come by, because you suck. So you want a language that will make iteration fast and your failures obvious, and your success gratifying to you.

Don’t worry, you may graduate to a language with greater complexity and power. (You may not… designers don’t need to be great programmers. They need to be able to try ideas out).

So high level languages will work best for a beginner. I would try out things like

  • Gamemaker
  • Flash
  • One of the versions of Lua with a simple graphics library. I used to use one for PSP homebrew development that had a simple API like “screen:draw(“picture,jpg”). That is the level of complexity you want.
  • Same goes for one of the versions of python with a graphics libray.
  • One of the many BASIC variants aimed at indie game developers: BlitzMax, DarkBasic, whatever. I am currently using Monkey, a cross-platform language by the maker of Blitz.
  • If you have an iPad, a neat Lua variant is Codea – you can code right on the iPad! I’ve used it for a couple of prototypes. There are similar apps for Python, and other languages.

Remember, your first game is going to be on the order of Hangman, Pong, guess the number, not Uncharted. You want a “toy” language, as the pros will derisively call these., because you want to play around.

A lot of your game development heroes started out with MS BASIC.

  25 Responses to “Programming languages for aspiring designers”

  1. I have actually started recommending http://learnpythonthehardway.org/ Near the end, you start building a basic adventure game.

  2. I think it’s useful to separate game design and programming as entirely different crafts to be learned. Are you really serious about doing both? It’s certainly possible. Playing around is great at first, it can take you pretty far (I know plenty of mediocre programmers who have made great videogames all by themselves), but eventually you’ll have to get around to learning the fundamentals of data structures and algorithms.

    The language isn’t particularly important, but your approach is. You can only get away with sloppily hacking stuff together for so long. It may be long enough to finish your game, but maybe not. One unnecessary polynomial time algorithm can really bring things crashing down. Or one piece of bad design that gets compounded until you’re unable to make the changes you want. Point is, if you care about programming, learn it properly.

    And if you don’t, Gamemaker and Twine are great tools.

  3. My favorite is Construct 2. https://www.scirra.com/

  4. One of my stock answers on that question is that “All languages, except for a handful of weird ones used only by academics, are basically just a wrapper for the same boolean logic structures.” The details can change considerably, especially when you dive deep into stuff like pointer manipulation, memory management, or GPU shaders, but the fundamental structures are all the same. It doesn’t matter which one you use to learn how to wrap your head around those structures.

    Designers need to know coding so that programmers can’t use technobabble to practice “design by veto”, claiming that the feature the designer wants and the programmer doesn’t can’t be done.

    –Dave

  5. Hangman, Pong? Pwah.

    I recently decided to have some fun and tried to begin building a roguelike. I initially wanted to learn Python, but ended up going with just C++ simply because Python is more abstract and so even harder to grasp for me.

    So I really started from zero and used this tutorial: http://roguebasin.roguelikedevelopment.org/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod

    Doing on my own a hackneyed conversion from that Python code to my messy and juvenile C++ (I essentially bought a book and read the first 150 pages, then I started coding).

    Recently I even put it on github to see how it worked: https://github.com/Abalieno/Fear-of-Existence

    And I’m using Vim to write it! And classic GCC/MinGW.

    So it’s DEFINITELY possible to have fun starting up even with an ambitious project. No need for Pong.

    I mean, I’m doing nothing even remotely interesting, yet. But I already have a shell of turn-based combat, with movement points, initiative rolls based on dice rolls plus speed attributes, and rather complex to-hit rolls with criticals, based on a percent skill based system.

    I just wish there was a better guide to generate some interesting dungeons. Having just random rectangular rooms isn’t that great.

  6. I have to agree with Aerirprown and Construct2 choice.
    Based on JavaScript/HTML5 it’s an awesome engine for beginners to focus on game mechanics at high level, and still is more than a “toy” language that is used by hobbyists and pros alike to publish in modern browsers, node-webkit, iOS, Android, Win 8, BlackBerry, FireFox OS and even more.
    There are a lot of tutorials available, an active and friendly community as well as weekly updates.

    If you haven’t “played” with it yet, it’s a definite must-check for quick prototyping to complete production.

  7. Processing is another good option. It can even export to a web version (if you’re not using any libraries outside the built-in ones) which is nice for sharing the results with other people.

  8. I wrote a Magic: The Gathering deck drawing simulator in Excel macro language (before they integrated VBA). Sometimes you just use the tools you’ve got. The Microsoft Office suite uses Visual Basic for Applications as a scripting language (or it did, at any rate… I don’t know what the newest versions are using), and while there are technical differences between a scripting language and a programming language, there are enough similarities to learn the fundamentals.

    If you can, take some classes. Internet tutorials can give you a good start, but there’s no substitute for somebody picking apart your code and grading you on it. A good course will also give you experience with the rare and valuable talent of coding with a team. That’s both harder than it seems and more important.

  9. how does Gamemaker compare to RPG Maker?

  10. I haven’t actually used RPGMaker, so I don’t know!

  11. considering which to buy. Is Gamemaker too techie for me ya think?

  12. I would try out the demos of all these things. Construct is less techy than Gamemaker, but the snap-together aspect is similar. Gamemaker feels a lot like Metaplace did in several ways: templates, rooms, objects. You snap together behaviors out of icons.

    Construct is basically ALL behaviors.

  13. I would recommend HTML5 over Flash these days. If you like the Flash API, EaselJS is a good HTML5/JavaScript replacement for it.
    Good tutorials here: http://blogs.msdn.com/b/davrous/archive/2012/03/16/html5-gaming-animating-sprites-in-canvas-with-easeljs.aspx
    http://blogs.msdn.com/b/davrous/archive/2012/07/27/everything-you-need-to-know-to-build-html5-games-with-canvas-amp-svg.aspx

  14. HTML5 definitely has more future than Flash. But it’s also a pain in the butt to get started with, and buggy as heck, inconsistent across platforms, etc. It’s exactly the sort of “wait, why didn’t that work??” sort of environment I wouldn’t recommend to a total novice.

    Yet, anyway. :)

  15. Another excellent dev platform for non-programmers/programmers can be visual programming. Like PlayMaker (http://hutonggames.com/), Antares Vizio (http://antares-universe.com/) etc. These are very powerful yet have a lower learning curve and visual feedback. Suitable for the artist in a programmer. Event veteran programmers uses them for productivity and rapid prototyping.

    I’m making games using PlayMaker, loving it so far.

  16. I would say have a experience that if you have learn C++ perfectly you can learn any programming language.

  17. >> One of my stock answers on that question is that “All languages, except for a handful of weird ones used only by academics, are basically just a wrapper for the same boolean logic structures.”

    That’s only true of data structure-oriented languages and in particular procedural and object-oriented ones at that. There’s an entire spectrum of languages that you’d have a hard time re-coding in a language like BASIC or Java. For example, AWK, YACC, XSLT, Prolog, PostScript, Forth, SQL, MAPPER, Erlang, etc. I have used all of these at some point and all are used in commercial products. Granted, I’ve never used any to program a game, but I do know someone who programmed an adventure game in Prolog :-)

Sorry, the comment form is closed at this time.