Monday, June 29, 2009
Game Programming: Harder than Ever?
I learned computer programming when I was twelve years old, purely (at the time) to make games. I wanted to create my own clones of my favorite arcade games. And write adventure games and make games that emulated the D&D experience. Some dreams never die, I guess. But originally, it was all about the games. Software development (both gaming and non-gaming) has been putting food on my family's table for fifteeen years. So I guess as far as hobbies go, I did pretty good for myself.
As I mentioned in passing last week, I've been looking over some old books on game programming - including the ancient tomes that effectively taught me programming: Basic Computer Games and More Basic Computer Games, which are pretty beat-up but still in (mostly) one piece on my bookshelf.
It occurs to me that I kinda hit the 'sweet spot' in learning to program games. I started in an era where "home computers" had just become affordable, and many of them were built with the idea that the "users" would be programming. There just wasn't much of an industry out there at the time (especially within the first year of release) to support computer owners with software. Many systems had the BASIC programming language built in or shipped with the core package.
It was simple - relatively speaking. Other than saving and loading your single-file program, you wouldn't need to worry about files. Basic was an interpreted language, so you didn't need to worry about compiler settings, the executable, or anything like that. In fact, you could write a simple one-line program (like 10 PRINT "HELLO, WORLD!") and then type "RUN" and see your code in action right after the computer booted (or after you booted the BASIC disc).
You had very few options, tools were virtually non-existent unless you rolled your own, and the machines were dog-slow, barely capable of handling much more fancy than a Breakout clone in real-time unless you learned to write some machine code subroutines. You had - at best - sixteen colors to work with, very limited sound options, and a lot of the more advanced things you wanted to do required you to dig "down to the metal" and set hardware values via a memory map. You had to learn to avoid any unnecessary division or non-integer values (because they were very slow).
But, on the other hand, you usually didn't have to worry about upgrading drivers or tools, or having multiple programs running that interfered with your own, or sizing the window, or what weird hardware combination the user might be using, or how much memory they had, or whether or not their video card supported certain features, or whether or not you had something flagged wrong in your project settings for the compiler. It was a bare-bones experience, but the simplicity let you focus on the important things.
Contrast this with what an aspiring game developer has to do today. Sure - we no longer have to create spites on graph paper and manually convert that into byte values (well, okay, most of us wrote our own tools to do that back in the day anyway). But just learning how to use the tools available can be staggering. Take something like using PyGame to write a game (which I used for Hackenslash). A learner would need to do the following (for Windows):
* Make sure video and sound drivers are up-to-date
* Download and install the latest version of Python
* Download and install the latest version of the Windows Python extensions (1)
* Download and install the latest version of PyGame (1)
* Choose an editor for Python - learn how to use it. (I'm partial to PythonWin, but I haven't tried Eclipse with good Python plug-ins).
* Create a directory structure for their development area
* THEN - learn to program games in Python / PyGame
* ALSO learn the basics of your tools to create any content assets - though admittedly plugging in numbers for bit values for sprites is a WHOLE LOT harder in the long run than just learning to create .PNG files in The Gimp.
(1) - And make sure that the versions are compatible with each other - sometimes a problem shortly after a new major Python release.
Granted, maybe PyGame would not be necessarily for a purely text-based game of the kind found in Basic Computer Games. And, alternately - Microsoft Basic Express edition (or Visual C#) plus DirectX might make make a simpler installation - but IMO those aren't as easy or as straightforward to learn to use as Python.
Then there's another option, which is to use a game development toolkit like Game Maker or RPG Maker to construct a game. This is probably the easiest option that I can think of now - but it limits you to a very restricted universe. There's definitely a lot of valuable game development knowledge to learn going that route - especially in terms of game design - but I'd also worry that a lot of that knowledge wouldn't transfer very well to using more general tools.
So - since we have some development-folks who do hit this blog from time to time: What would be your suggestion for the easiest / smartest tool for someone learning to *program* (not just design) games?
Labels: programming
Comments:
Links to this post:
<< Home
Game Maker. Hand down the best tool to start making games (as long as we are talking about 2D games).
Yes, it's a limited tool, but you can work around things like not having structs or pointers or the inneficiency of the whole thing.
Still, it has it's weird advantages, mainly that since it's interpreted you can load a text file full of code and execute it while running the game =)
And remember: Game Maker let's you use dlls, so if you are like me and detest the music player that comes with game maker, then you can simply download a library that plays oggs and does all the fancy things that you needed and then some.
My point is: with 4 lines of code, a room and an object you can make a game where you move a ball around the screen, it's THAT easy. Or even better: you don't need to know how to code to start using game maker because it gives you most of the programming stuff in a drag and drop menu, which is far more friendly than staring at a blank page waiting for you to start typing.
Still, I no longer use the drag and drop features since they clutter the screen once you try to do complicated stuff. Nonetheless, I started with the drag and drop and I'm not sure I would have stayed with the program if it didn't have something as newbie friendly.
At the end of the day, the only disadvantage to using game maker for a 2d game is that the final product will be resource inefficient. So if you are trying to do a physics game (which you can) with 4000 objects on screen... maybe game maker is not what you are looking for, unless you only want your game to function on NASA servers.
Yes, it's a limited tool, but you can work around things like not having structs or pointers or the inneficiency of the whole thing.
Still, it has it's weird advantages, mainly that since it's interpreted you can load a text file full of code and execute it while running the game =)
And remember: Game Maker let's you use dlls, so if you are like me and detest the music player that comes with game maker, then you can simply download a library that plays oggs and does all the fancy things that you needed and then some.
My point is: with 4 lines of code, a room and an object you can make a game where you move a ball around the screen, it's THAT easy. Or even better: you don't need to know how to code to start using game maker because it gives you most of the programming stuff in a drag and drop menu, which is far more friendly than staring at a blank page waiting for you to start typing.
Still, I no longer use the drag and drop features since they clutter the screen once you try to do complicated stuff. Nonetheless, I started with the drag and drop and I'm not sure I would have stayed with the program if it didn't have something as newbie friendly.
At the end of the day, the only disadvantage to using game maker for a 2d game is that the final product will be resource inefficient. So if you are trying to do a physics game (which you can) with 4000 objects on screen... maybe game maker is not what you are looking for, unless you only want your game to function on NASA servers.
I can't say that I agree; Game Maker is no way to start programming.
I also don't agree that programming is any harder than it was back in the day... if anything, creating the same product is much easier. The problem, of course, is that the bar keeps going up, and many newbies don't have their expectations properly set.
Anyhow--thanks for the thought-provoking post. I've gone into more detail, and tried to give some decent advice, in a post about where I feel aspiring game developers should start.
Best,
Kevin
I also don't agree that programming is any harder than it was back in the day... if anything, creating the same product is much easier. The problem, of course, is that the bar keeps going up, and many newbies don't have their expectations properly set.
Anyhow--thanks for the thought-provoking post. I've gone into more detail, and tried to give some decent advice, in a post about where I feel aspiring game developers should start.
Best,
Kevin
It's not free, but probably the closest thing to the good old days would be to pick up BlitzMax.
You can start out just as half-assed as we used to back in the day, and progress to professional, maintainable code. Including basic OO, Lua scripting, FFI for access to C libs, OpenGL, etc.
You can start out just as half-assed as we used to back in the day, and progress to professional, maintainable code. Including basic OO, Lua scripting, FFI for access to C libs, OpenGL, etc.
I learned programming in the 80s too. My first computer was a TRS-80 CoCo with 16k RAM and after that it was a C64.
The cool thing about programming back then was that it was relatively simple to test out something and see the results right away. The CoCo even had a basic frame buffer/page flip functionality built right in so you could do smooth animation for your game. Also, there were built in drawing functions so you could LINE(x1, y1, x2, y2) (I hope, it's been a few decades) and see results right away. With the commodore 64 it was a little harder. You could use the custom petscii graphic set or dive into ASM and build your subroutine to be called by your BASIC program (SYS anybody).
It was easier to write spaghetti code back then but it was also easier to move forward as BASIC was so forgiving.
Now days is a lot harder even if you use a "simple" language like python. Just getting everything set up can be daunting for some people.
If I had to recommend something for beginners I'd say python would be a good start especially if you are just learning and are trying to figure out how 'programming' actually works. Don't mess with any game libraries. Instead make a simple text adventure. If you can handle making a parser, setting data for rooms, objects and critters and move around your world you will be doing pretty good. Doing that in BASIC made me feel pretty darn good.
After that, when you feel comfortable move to C or Pascal. Get comfortable with the basics of the language (especially pointers) and forget about special libraries. Try to port your python text game to C or Pascal. I learned a lot about programming games this way. Trying to port a BASIC text adventure to C was a challenge but was rewarding when it went right.
After that you should feel comfortable to start adding libraries, extending into C++ and looking at OOP if you want too. For 2D stuff Allegro isn't too hard to pick up. I wouldn't recommend going 3D unless your math skills (geometry, trig and calculus) is up to snuff. The first time I ever saw the math behind matrices almost made me want to quit computers.
Another good starting point is FreeBASIC. It's BASIC but you can compile it. You can write procedural code or you can go OOP. It's probably worth a checkout too. I believe you can extend it with libraries too.
Anyway, that's my 2 cents other than don't try to create the next WoW, UT, (insert other AAA title here) and find a group of people/friends with the same sensibilities to encourage each other on.
The cool thing about programming back then was that it was relatively simple to test out something and see the results right away. The CoCo even had a basic frame buffer/page flip functionality built right in so you could do smooth animation for your game. Also, there were built in drawing functions so you could LINE(x1, y1, x2, y2) (I hope, it's been a few decades) and see results right away. With the commodore 64 it was a little harder. You could use the custom petscii graphic set or dive into ASM and build your subroutine to be called by your BASIC program (SYS anybody).
It was easier to write spaghetti code back then but it was also easier to move forward as BASIC was so forgiving.
Now days is a lot harder even if you use a "simple" language like python. Just getting everything set up can be daunting for some people.
If I had to recommend something for beginners I'd say python would be a good start especially if you are just learning and are trying to figure out how 'programming' actually works. Don't mess with any game libraries. Instead make a simple text adventure. If you can handle making a parser, setting data for rooms, objects and critters and move around your world you will be doing pretty good. Doing that in BASIC made me feel pretty darn good.
After that, when you feel comfortable move to C or Pascal. Get comfortable with the basics of the language (especially pointers) and forget about special libraries. Try to port your python text game to C or Pascal. I learned a lot about programming games this way. Trying to port a BASIC text adventure to C was a challenge but was rewarding when it went right.
After that you should feel comfortable to start adding libraries, extending into C++ and looking at OOP if you want too. For 2D stuff Allegro isn't too hard to pick up. I wouldn't recommend going 3D unless your math skills (geometry, trig and calculus) is up to snuff. The first time I ever saw the math behind matrices almost made me want to quit computers.
Another good starting point is FreeBASIC. It's BASIC but you can compile it. You can write procedural code or you can go OOP. It's probably worth a checkout too. I believe you can extend it with libraries too.
Anyway, that's my 2 cents other than don't try to create the next WoW, UT, (insert other AAA title here) and find a group of people/friends with the same sensibilities to encourage each other on.
Sorry for the double posts Jay but I was looking at the links you gave for your books. I didn't realize that they had the source code in there too. SWEET!
I'd download FreeBasic (it's free). Get the FBIDE as it's a pretty good IDE and it comes with the latest version of FeeBASIC. The nice thing is the ability to get up and going right after the install.
Then I'd enter the games in links you provided and debug until the game worked and then I'd change stuff around until I knew how each game worked.
I'd download FreeBasic (it's free). Get the FBIDE as it's a pretty good IDE and it comes with the latest version of FeeBASIC. The nice thing is the ability to get up and going right after the install.
Then I'd enter the games in links you provided and debug until the game worked and then I'd change stuff around until I knew how each game worked.
Well, I think Torque is still one of the easiest ways to get started. If you can get a copy of "3D Game Programming All In One", Ken Finney covers it all in a friendly, easy-to-understand manner, from learning to program to creating art. And pretty much everything you need, including a version of TGE, comes on the CD... Here's a link to the book online for those that want to check it out:
3D Game Programming All In One
3D Game Programming All In One
(I did not spell check this)
This comment is targeted at ANYONE starting to make games or starting programming. I really hope you read this comment since I'm going to tell you all about my thoughts dealing with the subject of programming/game development.
I feel that I'm at a prime point to write about this since I started out developing games with A LOT of game kits/engines but more recently I really started programming A LOT and I feel that I'm now about the script-kitty stage.
In order to give anyone reading this as many details as possible I'm going to start with my story from the very beginning till the present. That way you can compare how similar my journey has been compared to yours. Hopefully at some point in my story you can relate to me and take the rest of the story as advice.
During my early childhood computers were probably the last thing on my mind (besides playing SimCity or Organ Trail in elementary school). I was active in sports and spent my free time playing outside (mainly sports). To save time I will just say that after some life events I wasn't really able to play sports anymore becuase I lived too far away from practice among other things. So I found myself getting tired of playing alone outside and started to spend more time indoors toying with old electronic things like RC cars. I enjoyed seeing what I could create with some electronics and a soldering gun. One day at a garage sale I found a computer for $50 and the lady promised it worked so I convinced my mother to buy the computer for my 12th birthday. Well I had gotten it home and tried to fire it up that night but it didn't turn on. So the next day we went to tell the lady that sold us the computer but she had already moved. I didn't mind becuase I actually wanted to take the computer apart.
So despite from my mothers wishes I took the computer apart. I was amazed at how many things were in the computers. I had no clue what anything was but I started fiddling around and took everything apart. I then couldn't seem to get it back together. I called my uncle since he was attending college for computers and asked him about it. Well he wasn't of much help but he came out a few days later and took me to see his professor. I remember walking into the classroom and being almost in shock. For the first time in my life I was in amazement. The whole room was FILLED with computer parts and open computers. I just remember staring at all the motherboards. I don't remember a word the man said since I was too interested in looking at the computers. The guy have me a pair of speakers from the trash and my uncle let me borrow his large book about computers (I think it was a book about hardware or something). I took the book and looked through it until I could identify each part in my computer and knew what it did.
(Continued in next comment)
This comment is targeted at ANYONE starting to make games or starting programming. I really hope you read this comment since I'm going to tell you all about my thoughts dealing with the subject of programming/game development.
I feel that I'm at a prime point to write about this since I started out developing games with A LOT of game kits/engines but more recently I really started programming A LOT and I feel that I'm now about the script-kitty stage.
In order to give anyone reading this as many details as possible I'm going to start with my story from the very beginning till the present. That way you can compare how similar my journey has been compared to yours. Hopefully at some point in my story you can relate to me and take the rest of the story as advice.
During my early childhood computers were probably the last thing on my mind (besides playing SimCity or Organ Trail in elementary school). I was active in sports and spent my free time playing outside (mainly sports). To save time I will just say that after some life events I wasn't really able to play sports anymore becuase I lived too far away from practice among other things. So I found myself getting tired of playing alone outside and started to spend more time indoors toying with old electronic things like RC cars. I enjoyed seeing what I could create with some electronics and a soldering gun. One day at a garage sale I found a computer for $50 and the lady promised it worked so I convinced my mother to buy the computer for my 12th birthday. Well I had gotten it home and tried to fire it up that night but it didn't turn on. So the next day we went to tell the lady that sold us the computer but she had already moved. I didn't mind becuase I actually wanted to take the computer apart.
So despite from my mothers wishes I took the computer apart. I was amazed at how many things were in the computers. I had no clue what anything was but I started fiddling around and took everything apart. I then couldn't seem to get it back together. I called my uncle since he was attending college for computers and asked him about it. Well he wasn't of much help but he came out a few days later and took me to see his professor. I remember walking into the classroom and being almost in shock. For the first time in my life I was in amazement. The whole room was FILLED with computer parts and open computers. I just remember staring at all the motherboards. I don't remember a word the man said since I was too interested in looking at the computers. The guy have me a pair of speakers from the trash and my uncle let me borrow his large book about computers (I think it was a book about hardware or something). I took the book and looked through it until I could identify each part in my computer and knew what it did.
(Continued in next comment)
So technicality I had assembled my first computer before really using one. A few months later I remember going over to someones house and seeing his older brother play a game on the computer. This was interesting but what really got me was when he starting watching a video online. So after a few more times going over to the kids house I got the chance to create an account for this browser game called "Out War" so I could play with them. Well after a short time we came up with puddinpop but it was taken so we used Puddinlover. Since then I have used Puddinlover for almost all the online games I have played.
After seeing how fast this "DSL" was I tried to convince my mother to get it but she refused to give up AOL. So instead she upgraded to Unlimited AOL. I started spending more time on the internet and at some point I decided that I wanted to make my own website. I honestly thought that you could create a site by pasting pictures in Word but I was obviously wrong. So after a little searching I found a few tutorials talking about HTML so I started learning about HTML. After awhile I created my own site in notepad.
So the first time I coded anything it was HTML in notepad around the age of 12. I'm sure I didn't really understand it much but I remember being excited when I made a site with pictures.
From that point on I basically spent most of my computer related time playing with old computer parts from all kinds of junk PC's I acquired over the years. Once again I was over at someones house and his older brother was on the PC playing Counter Strike. So I started playing Counter Strike on my PC. Well this sorta leads into my whole gaming phase.
(Continued in next comment)
After seeing how fast this "DSL" was I tried to convince my mother to get it but she refused to give up AOL. So instead she upgraded to Unlimited AOL. I started spending more time on the internet and at some point I decided that I wanted to make my own website. I honestly thought that you could create a site by pasting pictures in Word but I was obviously wrong. So after a little searching I found a few tutorials talking about HTML so I started learning about HTML. After awhile I created my own site in notepad.
So the first time I coded anything it was HTML in notepad around the age of 12. I'm sure I didn't really understand it much but I remember being excited when I made a site with pictures.
From that point on I basically spent most of my computer related time playing with old computer parts from all kinds of junk PC's I acquired over the years. Once again I was over at someones house and his older brother was on the PC playing Counter Strike. So I started playing Counter Strike on my PC. Well this sorta leads into my whole gaming phase.
(Continued in next comment)
From about 14 to 17 I spent most of my free time playing online games. Over the years I started playing more and more. Besides spending most of my time playing mmorpgs I attended the local Tech school for CIS. I was in the course for two years and during the course I spent most of my time programming code right from the book. I really didn't gather much from this. It actually made me think that I should become a network admin since coding wasn't too much fun.
During that time I also attempted to create games many times. Mainly with Game Maker and RPGToolkit at first. Wasn't until I was about 15 that I really set out to try and create a game. I thought that I could actually create an mmorpg with my little amount of programming knowledge. Well after saving up I bought Realm Crafter and actually used the scripting language to create the beginning of an mmorpg but I gave up becuase I couldn't texture worth crap. I learned to 3D model fairly well but when it came to creating textures I failed. So I gave up and played more mmorpgs.
The thing about creating an mmorpg is that I spent more time googling things like mmorpg engines than I did actually creating one.
Wow I just happened to look over at the scroll bar and see its pretty long so I'm going to wrap things up a lot faster haha.
Ok lets start where it counts. Once again besides playing countless mmorpgs countless hours from about ages 14-17 I attempted to create games a good amount of times. I used MANY toolkits and never got too far. I also researched way too many engines and never actually took the time to learn the code behind them. I never really thought this was a bad thing. I just wanted to make a game and I kept trying to kind an easier toolkit so I could create more complex games without much knowledge.
(Continued in next comment)
During that time I also attempted to create games many times. Mainly with Game Maker and RPGToolkit at first. Wasn't until I was about 15 that I really set out to try and create a game. I thought that I could actually create an mmorpg with my little amount of programming knowledge. Well after saving up I bought Realm Crafter and actually used the scripting language to create the beginning of an mmorpg but I gave up becuase I couldn't texture worth crap. I learned to 3D model fairly well but when it came to creating textures I failed. So I gave up and played more mmorpgs.
The thing about creating an mmorpg is that I spent more time googling things like mmorpg engines than I did actually creating one.
Wow I just happened to look over at the scroll bar and see its pretty long so I'm going to wrap things up a lot faster haha.
Ok lets start where it counts. Once again besides playing countless mmorpgs countless hours from about ages 14-17 I attempted to create games a good amount of times. I used MANY toolkits and never got too far. I also researched way too many engines and never actually took the time to learn the code behind them. I never really thought this was a bad thing. I just wanted to make a game and I kept trying to kind an easier toolkit so I could create more complex games without much knowledge.
(Continued in next comment)
I don't think I'm really explaining too well how many times I tried various engines and toolkits always moving around becuase I didn't want to learn how to do something that I didn't already know.
Another thing I should mention is that I spent a good amount of time in the more recent years creating sites using templates in a futile attempt to make money online. I don't regret this too much becuase I spent some time learning how to code.
So you might be asking, "when did you actually start programming and whats the point to reading this"? Well like I said the local Tech school CIS program didn't really spark any interest in programming but I did retain a little bit of the BASIC fundamentals (VERY little, like hello world and if statements in QBaisc). So I used this to try and branch out a little bit. Basically failing every time becuase I tried getting too far ahead of myself and expected too much. Since I was getting a little overwhelmed with how much more complex C++ was compared to QBaisc I decided to learn a scripting language. For the first time I sat down and learned a game engines scripting language in FULL. This was Game Makers scripting language. It wasn't any special feat but I felt a little good about the fact I coded a full game using scripting for almost all the events. After I finished the game I wanted to have some form of protection against piracy so I found an installer that did online database checks. They included a default script but it didn't really do what I wanted so I googled around and couldn't find a clear answer as to how to change what I wanted so I decided to try and learn PHP.
By luck I found a great series of videos on youtube about PHP and I decided about 10hours to watching them all while also coding what I was learning. For the first time since the very beginning of QBasic I was enjoying coding.
(Continued in next comment)
Another thing I should mention is that I spent a good amount of time in the more recent years creating sites using templates in a futile attempt to make money online. I don't regret this too much becuase I spent some time learning how to code.
So you might be asking, "when did you actually start programming and whats the point to reading this"? Well like I said the local Tech school CIS program didn't really spark any interest in programming but I did retain a little bit of the BASIC fundamentals (VERY little, like hello world and if statements in QBaisc). So I used this to try and branch out a little bit. Basically failing every time becuase I tried getting too far ahead of myself and expected too much. Since I was getting a little overwhelmed with how much more complex C++ was compared to QBaisc I decided to learn a scripting language. For the first time I sat down and learned a game engines scripting language in FULL. This was Game Makers scripting language. It wasn't any special feat but I felt a little good about the fact I coded a full game using scripting for almost all the events. After I finished the game I wanted to have some form of protection against piracy so I found an installer that did online database checks. They included a default script but it didn't really do what I wanted so I googled around and couldn't find a clear answer as to how to change what I wanted so I decided to try and learn PHP.
By luck I found a great series of videos on youtube about PHP and I decided about 10hours to watching them all while also coding what I was learning. For the first time since the very beginning of QBasic I was enjoying coding.
(Continued in next comment)
After I turned 18 I started looking at colleges and like I had planned since I was younger I would just go to a 2 year school for Networking Administration. Well something happened that I started considering programming as a career. So I gave it a few months and I had stopped playing games to dedicate all my time to learning code. Something just clicked and ever since then I just knew that I want to be a programmer. It's hard to explain but in a nutshell I finally seen programming beyond its 'face value'. I think CIS hurt my view of programming since it really wasnt about true problem solving and coding. I had the view that coding was a task and wasn't too fun since I just programmed what the teacher said to program right from the book. The only time I had any fun and retained any knowledge from that class is when I got the chance to code my own programs and solve problems.
So yes I have spent almost all of my free time learning more about code. At first it was really hard since the toolkits and easy scripting langauges gimped me (I will explain this later) but I'm glade that I took the time to sit down and start learning programming. The thing about programming is that the more I learn about it the more I'm amazed. Once you get to the next step in programming "skill" you see how much more complex things are but at the same time you just "mastered" the last step so you know its do-able. Computer Science is very fascinating and I'm glade that I chose to pursue programming.
(Continued in next comment)
So yes I have spent almost all of my free time learning more about code. At first it was really hard since the toolkits and easy scripting langauges gimped me (I will explain this later) but I'm glade that I took the time to sit down and start learning programming. The thing about programming is that the more I learn about it the more I'm amazed. Once you get to the next step in programming "skill" you see how much more complex things are but at the same time you just "mastered" the last step so you know its do-able. Computer Science is very fascinating and I'm glade that I chose to pursue programming.
(Continued in next comment)
Now I can go on even more but I figured I would create a little list of the things you should take away from this... I really lost sight of what I was trying to get across but this list should clear things up.
(This list if for people that want to just make games and have no intentions what so ever of learning code)
1. Well the attitude of not wanting to learn code but yet you want to make games isn't "wrong" but you really need to dedicate some time to something other than game design. Try to model or make pixel art. If you don't find the code appealing what so ever try the art side. Honestly everyone is a "game designer" but the real game designer don't just design games they make them. (Unless your working for a large company with a big team... but I assume you arn't at that point haha)
2. Don't shy off from learning something becuase your too lazy or it seems too hard.
3. Use Google, honestly almost all of your beginning questions have been asked before.
4. START SMALL - The sooner you learn to start small the sooner you will be able to start big... think about it (read the programmer list to get a good understanding of this)
(Continued in next comment)
(This list if for people that want to just make games and have no intentions what so ever of learning code)
1. Well the attitude of not wanting to learn code but yet you want to make games isn't "wrong" but you really need to dedicate some time to something other than game design. Try to model or make pixel art. If you don't find the code appealing what so ever try the art side. Honestly everyone is a "game designer" but the real game designer don't just design games they make them. (Unless your working for a large company with a big team... but I assume you arn't at that point haha)
2. Don't shy off from learning something becuase your too lazy or it seems too hard.
3. Use Google, honestly almost all of your beginning questions have been asked before.
4. START SMALL - The sooner you learn to start small the sooner you will be able to start big... think about it (read the programmer list to get a good understanding of this)
(Continued in next comment)
(This list is for people that are even REMOTELY thinking about programming ANYTHING, career or hobby)
1. Do NOT start on something easy! I really regret learning QBasic becuase it really wrapped my mind when thinking about how a program works. I know if your new to programming your not going to take this seriously and thats what it matters. I think most first time programmers try to find something easy and in turn wind up making lower-level programming so much harder. If I had to restart my brain FRESH I would learn C first. Now if your impatient like I was then learn Python and use the PyGame library. Python is a very gentle way to learn the concepts behind game programming.
2. Do NOT use a game engine... now I'm sure I will get yelled at for that statement but think about it... if your new to programming you shouldn't be learning how to program around an engine, you should be learning how to make your own. It took me awhile to accept this becuase I really didn't care to make my own little engine but it has helped so much doing so. Game engines are a great way to speed up the development process but if you don't already know a programming language fairly well than you might get too used to how that engine works and you might have a hard time wrapping your head around the code that actually makes the engine work.
3. Learn what coding is before learning a language. I think too many people including myself get caught up in learning the syntax of the language that the basic methods behind programming are ignored. A simple example of this is when I decided to learn Python... It was my first real OOP project and I thought if I learned the Python syntax that it would be easy... well I "wasted" time learning the syntax so I decided to pick up a general OOP book and I learned soo much more from the theory behind the language than actually learning the syntax.
4. JUST DO IT! No this isn't a 90's Nike ad... really don't spend so much time thinking and planning... and do not fear anything... just get out there and start doing it but keep the next guideline in mind.
5. START SMALL - If you just take one thing away from this I ask that this be it becuase this is so important. I know that more then likely you don't care to start small... or you might think you don't need to but you do. Starting small really gets you to your goal faster. If your not sure if your starting small enough look at your current project idea... if you planning to make a 3d game have you ever created a 2d one? If you want to make a breakout clone have you ever made a simple text game? If you want to code the next Facebook have you ever created a simple community site?
Trust me... I'm not that old (I'm currently 18) I still jump too far and get over my head with projects but I realize I need to start smaller. If I would have taken the time 5 years ago to start small I would be SO much further than I currently am but I'm glad that I learned before college to start small. In just the last year I have learned more than I did in all my years of fiddling around and never starting at point one.
So if someone asked me "How do I learn to program?" I would tell them to start learning C while learning the theoretical side to programming (well Computer Science). Another good way would be to watch the Standford CS106A lectures (I will be posting a link in my blog if you care to find them).
I have been posting comments on this blog for a little bit now and I don't feel too bad to give myself a plug... if you care to see what I'm up to with programming I encourage you to stop by my blog CodeJustin.com and check me out!
1. Do NOT start on something easy! I really regret learning QBasic becuase it really wrapped my mind when thinking about how a program works. I know if your new to programming your not going to take this seriously and thats what it matters. I think most first time programmers try to find something easy and in turn wind up making lower-level programming so much harder. If I had to restart my brain FRESH I would learn C first. Now if your impatient like I was then learn Python and use the PyGame library. Python is a very gentle way to learn the concepts behind game programming.
2. Do NOT use a game engine... now I'm sure I will get yelled at for that statement but think about it... if your new to programming you shouldn't be learning how to program around an engine, you should be learning how to make your own. It took me awhile to accept this becuase I really didn't care to make my own little engine but it has helped so much doing so. Game engines are a great way to speed up the development process but if you don't already know a programming language fairly well than you might get too used to how that engine works and you might have a hard time wrapping your head around the code that actually makes the engine work.
3. Learn what coding is before learning a language. I think too many people including myself get caught up in learning the syntax of the language that the basic methods behind programming are ignored. A simple example of this is when I decided to learn Python... It was my first real OOP project and I thought if I learned the Python syntax that it would be easy... well I "wasted" time learning the syntax so I decided to pick up a general OOP book and I learned soo much more from the theory behind the language than actually learning the syntax.
4. JUST DO IT! No this isn't a 90's Nike ad... really don't spend so much time thinking and planning... and do not fear anything... just get out there and start doing it but keep the next guideline in mind.
5. START SMALL - If you just take one thing away from this I ask that this be it becuase this is so important. I know that more then likely you don't care to start small... or you might think you don't need to but you do. Starting small really gets you to your goal faster. If your not sure if your starting small enough look at your current project idea... if you planning to make a 3d game have you ever created a 2d one? If you want to make a breakout clone have you ever made a simple text game? If you want to code the next Facebook have you ever created a simple community site?
Trust me... I'm not that old (I'm currently 18) I still jump too far and get over my head with projects but I realize I need to start smaller. If I would have taken the time 5 years ago to start small I would be SO much further than I currently am but I'm glad that I learned before college to start small. In just the last year I have learned more than I did in all my years of fiddling around and never starting at point one.
So if someone asked me "How do I learn to program?" I would tell them to start learning C while learning the theoretical side to programming (well Computer Science). Another good way would be to watch the Standford CS106A lectures (I will be posting a link in my blog if you care to find them).
I have been posting comments on this blog for a little bit now and I don't feel too bad to give myself a plug... if you care to see what I'm up to with programming I encourage you to stop by my blog CodeJustin.com and check me out!
(This list is for people that are even REMOTELY thinking about programming ANYTHING, career or hobby)
1. Do NOT start on something easy! I really regret learning QBasic becuase it really wrapped my mind when thinking about how a program works. I know if your new to programming your not going to take this seriously and thats what it matters. I think most first time programmers try to find something easy and in turn wind up making lower-level programming so much harder. If I had to restart my brain FRESH I would learn C first. Now if your impatient like I was then learn Python and use the PyGame library. Python is a very gentle way to learn the concepts behind game programming.
2. Do NOT use a game engine... now I'm sure I will get yelled at for that statement but think about it... if your new to programming you shouldn't be learning how to program around an engine, you should be learning how to make your own. It took me awhile to accept this becuase I really didn't care to make my own little engine but it has helped so much doing so. Game engines are a great way to speed up the development process but if you don't already know a programming language fairly well than you might get too used to how that engine works and you might have a hard time wrapping your head around the code that actually makes the engine work.
3. Learn what coding is before learning a language. I think too many people including myself get caught up in learning the syntax of the language that the basic methods behind programming are ignored. A simple example of this is when I decided to learn Python... It was my first real OOP project and I thought if I learned the Python syntax that it would be easy... well I "wasted" time learning the syntax so I decided to pick up a general OOP book and I learned soo much more from the theory behind the language than actually learning the syntax.
4. JUST DO IT! No this isn't a 90's Nike ad... really don't spend so much time thinking and planning... and do not fear anything... just get out there and start doing it but keep the next guideline in mind.
5. START SMALL - If you just take one thing away from this I ask that this be it becuase this is so important. I know that more then likely you don't care to start small... or you might think you don't need to but you do. Starting small really gets you to your goal faster. If your not sure if your starting small enough look at your current project idea... if you planning to make a 3d game have you ever created a 2d one? If you want to make a breakout clone have you ever made a simple text game? If you want to code the next Facebook have you ever created a simple community site?
Trust me... I'm not that old (I'm currently 18) I still jump too far and get over my head with projects but I realize I need to start smaller. If I would have taken the time 5 years ago to start small I would be SO much further than I currently am but I'm glad that I learned before college to start small. In just the last year I have learned more than I did in all my years of fiddling around and never starting at point one.
So if someone asked me "How do I learn to program?" I would tell them to start learning C while learning the theoretical side to programming (well Computer Science). Another good way would be to watch the Standford CS106A lectures (I will be posting a link in my blog if you care to find them).
I have been posting comments on this blog for a little bit now and I don't feel too bad to give myself a plug... if you care to see what I'm up to with programming I encourage you to stop by my blog CodeJustin(.)com and check me out!
1. Do NOT start on something easy! I really regret learning QBasic becuase it really wrapped my mind when thinking about how a program works. I know if your new to programming your not going to take this seriously and thats what it matters. I think most first time programmers try to find something easy and in turn wind up making lower-level programming so much harder. If I had to restart my brain FRESH I would learn C first. Now if your impatient like I was then learn Python and use the PyGame library. Python is a very gentle way to learn the concepts behind game programming.
2. Do NOT use a game engine... now I'm sure I will get yelled at for that statement but think about it... if your new to programming you shouldn't be learning how to program around an engine, you should be learning how to make your own. It took me awhile to accept this becuase I really didn't care to make my own little engine but it has helped so much doing so. Game engines are a great way to speed up the development process but if you don't already know a programming language fairly well than you might get too used to how that engine works and you might have a hard time wrapping your head around the code that actually makes the engine work.
3. Learn what coding is before learning a language. I think too many people including myself get caught up in learning the syntax of the language that the basic methods behind programming are ignored. A simple example of this is when I decided to learn Python... It was my first real OOP project and I thought if I learned the Python syntax that it would be easy... well I "wasted" time learning the syntax so I decided to pick up a general OOP book and I learned soo much more from the theory behind the language than actually learning the syntax.
4. JUST DO IT! No this isn't a 90's Nike ad... really don't spend so much time thinking and planning... and do not fear anything... just get out there and start doing it but keep the next guideline in mind.
5. START SMALL - If you just take one thing away from this I ask that this be it becuase this is so important. I know that more then likely you don't care to start small... or you might think you don't need to but you do. Starting small really gets you to your goal faster. If your not sure if your starting small enough look at your current project idea... if you planning to make a 3d game have you ever created a 2d one? If you want to make a breakout clone have you ever made a simple text game? If you want to code the next Facebook have you ever created a simple community site?
Trust me... I'm not that old (I'm currently 18) I still jump too far and get over my head with projects but I realize I need to start smaller. If I would have taken the time 5 years ago to start small I would be SO much further than I currently am but I'm glad that I learned before college to start small. In just the last year I have learned more than I did in all my years of fiddling around and never starting at point one.
So if someone asked me "How do I learn to program?" I would tell them to start learning C while learning the theoretical side to programming (well Computer Science). Another good way would be to watch the Standford CS106A lectures (I will be posting a link in my blog if you care to find them).
I have been posting comments on this blog for a little bit now and I don't feel too bad to give myself a plug... if you care to see what I'm up to with programming I encourage you to stop by my blog CodeJustin(.)com and check me out!
Adobe Flash/Flex. ActionScript3 is actually quite a good language (even though it drove me mad toward the end (I was pushing elements into an array, and it pushed undefined!)) and Adobe's display list is brilliant (more or less). It provides all the basics for programming your own engines, with the display list (something which I've had to write in SDL/PyGame), event listeners, a sound interface, and some other good stuff. Not only that, but flash is a web format that is very easily shared (think Newgrounds, AddictingGames, Kongregate) which makes it easier to monetize.
Also: if you complain that you have to buy Adobe Flash for $600, you're wrong. I used FlashDevelop and the Flex SDK to write my code, and GIMP to make the graphics. 100% free.
Also: if you complain that you have to buy Adobe Flash for $600, you're wrong. I used FlashDevelop and the Flex SDK to write my code, and GIMP to make the graphics. 100% free.
I'm going to give a second vote for Flash/Actionscript3/Flex. The Flex SDK is free and opensource. I found a tutorial that is extremely helpful for game programming in Flex: http://www.brighthub.com/internet/web-development/articles/11010.aspx
The tutorial is geared toward making games the old-fashioned way, where you render to a bitmap yourself and double buffer. You certainly can add in all of flash's nifty features and filters, but it's nice to have the option of leaving all the fancy performance-killing stuff out.
I've gotten back into making a game after a break of a year or two, and it's been lots of fun to use Flex. Oh, and the fact that it all works just swell in linux is nice too, since that's what I run now.
The tutorial is geared toward making games the old-fashioned way, where you render to a bitmap yourself and double buffer. You certainly can add in all of flash's nifty features and filters, but it's nice to have the option of leaving all the fancy performance-killing stuff out.
I've gotten back into making a game after a break of a year or two, and it's been lots of fun to use Flex. Oh, and the fact that it all works just swell in linux is nice too, since that's what I run now.
I also have to disagree about game maker. As long as what you want to make is 2D, construct is what I reccommend.
Really, it's the best 2D game maker out there, tho I suppose that might be a matter of opinion. :) Not only is it powerful (hardware accelerated, pixel shaders, etc), flexible (can make any type of 2D game), open source (can write your own plugins) and easy to use, but the way it works teaches real programming.
I can't even get though a basic javascript tutorial but after using construct I can talk real programming with professional programmers and they can give me suggestions and I can implement them - and they work, without them knowing anything about construct.
There are still some bugs (as it's still in beta, but it's completely usable), but aside from that that, construct is really where it's at.
I think the important point is what type of game the person wants to make, since almost no one playing the game really cares what engine it was made in. Picking the right tool for the job is very important. Sometimes writing your own engine is necessary - but if it's not, then why bother? Grab a game maker/engine and get to the game making!
Really, it's the best 2D game maker out there, tho I suppose that might be a matter of opinion. :) Not only is it powerful (hardware accelerated, pixel shaders, etc), flexible (can make any type of 2D game), open source (can write your own plugins) and easy to use, but the way it works teaches real programming.
I can't even get though a basic javascript tutorial but after using construct I can talk real programming with professional programmers and they can give me suggestions and I can implement them - and they work, without them knowing anything about construct.
There are still some bugs (as it's still in beta, but it's completely usable), but aside from that that, construct is really where it's at.
I think the important point is what type of game the person wants to make, since almost no one playing the game really cares what engine it was made in. Picking the right tool for the job is very important. Sometimes writing your own engine is necessary - but if it's not, then why bother? Grab a game maker/engine and get to the game making!
I'm going to join in the chorus of "Wow" re. CodeJustin's lengthy comment... er, article. :)
Since we seem to be talking 2D game engines, I'm creating a thread in the forums to maintain a list of 2D game engines, and I wanted to mention [url=http://www.flatredball.com/frb/]Flat Red Ball[/url] - a C# / XNA engine built by mainstream game development professionals. And it's free.
Since we seem to be talking 2D game engines, I'm creating a thread in the forums to maintain a list of 2D game engines, and I wanted to mention [url=http://www.flatredball.com/frb/]Flat Red Ball[/url] - a C# / XNA engine built by mainstream game development professionals. And it's free.
RE: ActionScript - I agree that it's a great choice. It really makes many things quite easy, with easy to use filter based effects, decent bitmap handling, etc.
Speed can be an issue, though that's gotten to be less of a problem with Flash Player 9 and 10. Still, many games bog a bit on my netbook, where a native version (Blitz, C or whatever) would not.
Speed can be an issue, though that's gotten to be less of a problem with Flash Player 9 and 10. Still, many games bog a bit on my netbook, where a native version (Blitz, C or whatever) would not.
For posterity:
The Rampant Games 2D Game Engine Forum Thread
I didn't want to lose some of the suggestions made here!
The Rampant Games 2D Game Engine Forum Thread
I didn't want to lose some of the suggestions made here!
We're starting our kids with scratch, which is not too far off the Logo that was my first programming language.
I'm supposed to know C and C++ from my high school. Seems I can't get my mind wrapped up around these languages.
But, using RPGMaker with friends, we made a demo game that lasted maybe 2 hours. We never went farther, sadly, but we had many great ideas, and we tweaked the engine to do some great things.
Currently (and CodeJustin will scream), I'm banging my head on NWN Editor.
This is easier for me than going headlong into a language, because at least, I can quickly see the results of what I'm doing. And this helps me not despair...
But, using RPGMaker with friends, we made a demo game that lasted maybe 2 hours. We never went farther, sadly, but we had many great ideas, and we tweaked the engine to do some great things.
Currently (and CodeJustin will scream), I'm banging my head on NWN Editor.
This is easier for me than going headlong into a language, because at least, I can quickly see the results of what I'm doing. And this helps me not despair...
Wow, CodeJustin just cast 'wall of text'.
I'd highly recommend starting out with C# and XNA. C# is one of the easiest high level programming languages around, and XNA is basically a DirectX wrapper that can be used to make professional level games. You can download Visual C# Express and XNA Game Studio 3.1 for free, and that's pretty much all you need. Also Microsoft is putting its full weight behind these, so the amount of information available to beginners is phenominal. There are even (semi) complete games that you can download and look through the source code, as well as a number of excellent examples for everything from collision detection to shaders. Sites like http://www.riemers.net/ and http://www.ziggyware.com/news.php are also excellent places to get started. Also, when you've completed your game, you can then move it to the xbox, and for a small fee, can sell it on xbox live indie games.
If you're interested go to http://creators.xna.com/en-us/news/xnagamestudio3.1
I'd highly recommend starting out with C# and XNA. C# is one of the easiest high level programming languages around, and XNA is basically a DirectX wrapper that can be used to make professional level games. You can download Visual C# Express and XNA Game Studio 3.1 for free, and that's pretty much all you need. Also Microsoft is putting its full weight behind these, so the amount of information available to beginners is phenominal. There are even (semi) complete games that you can download and look through the source code, as well as a number of excellent examples for everything from collision detection to shaders. Sites like http://www.riemers.net/ and http://www.ziggyware.com/news.php are also excellent places to get started. Also, when you've completed your game, you can then move it to the xbox, and for a small fee, can sell it on xbox live indie games.
If you're interested go to http://creators.xna.com/en-us/news/xnagamestudio3.1
I agree that the path is more convoluted than it used to be in the days of BASIC. But to balance that out, today's beginner has literally a million times the help and information available at their fingertips to get started. The variety of help on offer can be baffling and the standard isn't always high, but I think that a person with the persevering and experimenting mindset to have coped in the 80s would cope equally well today.
Looking at your list of steps has made me think that there might be some merit to a pre-packaged Python distribution set up for making games with. Run the installer, you get an icon. Click the icon, and you get a simple IDE, one that creates a new directory for each project and automatically saves all your files in that directory. It'll never be as simple as writing a BASIC program at the interpreter but it would be a big improvement over the typical scenario.
Personally, I'm a Python + Pyglet fan, since PyGame is getting terribly dated now. But as Pyglet adds more features, it starts to gain complexity, which may be offputting for some. That's another way in which modern programming is difficult - writing simple programs is not much harder than it was 20 years ago but the new programmers have wildly inflated expectations and expect to have animated 3D models, particle effects, and tone-mapped HDR after a couple of days, often supporting 400 players simultaneously with inperceptible latency. Any system that goes some way towards facilitating all that naturally makes itself harder to use for the person who just wants to blit some sprites.
Looking at your list of steps has made me think that there might be some merit to a pre-packaged Python distribution set up for making games with. Run the installer, you get an icon. Click the icon, and you get a simple IDE, one that creates a new directory for each project and automatically saves all your files in that directory. It'll never be as simple as writing a BASIC program at the interpreter but it would be a big improvement over the typical scenario.
Personally, I'm a Python + Pyglet fan, since PyGame is getting terribly dated now. But as Pyglet adds more features, it starts to gain complexity, which may be offputting for some. That's another way in which modern programming is difficult - writing simple programs is not much harder than it was 20 years ago but the new programmers have wildly inflated expectations and expect to have animated 3D models, particle effects, and tone-mapped HDR after a couple of days, often supporting 400 players simultaneously with inperceptible latency. Any system that goes some way towards facilitating all that naturally makes itself harder to use for the person who just wants to blit some sprites.
I suggest runtime revolution, there will be a free version coming out this autumn, which can be used to learn, and only invest money when one is satisfied with the experience.
Its main advantage is the abstraction respectively lack of many of the boring parts of programming like file management, type casting, cross platform deployment or picture showing. The main drawbacks are the lack of 3d, and slow animation capabilities (screen refresh).
With this tool, learning the basics of programming is easy, and then one can go to more in depth topics (or tools/languages) later on.
Its main advantage is the abstraction respectively lack of many of the boring parts of programming like file management, type casting, cross platform deployment or picture showing. The main drawbacks are the lack of 3d, and slow animation capabilities (screen refresh).
With this tool, learning the basics of programming is easy, and then one can go to more in depth topics (or tools/languages) later on.
when I teach my kids, if they are intrested, they will have their own PC that autoboots vice. They can live in the c64 expereice, get basic and have a huge stash of d64 images to play with.
people recommending C# (sorry steve) just have no idea.
I also disagree with python.
If I cant reccomend line oriented basic ;) it would have to be some form of Lua with SDL, maybe LOVE.
I cast TLDR on wall-of-text response, so it may of had some good ideas but.. TLDR.
Things certainly are different, as I think most of us grew up with line oriented basic on a c64 or apple ii and our expectations were ultra low (hamurabi, lemonade stand!) now its quad core crisis / WoW.
people recommending C# (sorry steve) just have no idea.
I also disagree with python.
If I cant reccomend line oriented basic ;) it would have to be some form of Lua with SDL, maybe LOVE.
I cast TLDR on wall-of-text response, so it may of had some good ideas but.. TLDR.
Things certainly are different, as I think most of us grew up with line oriented basic on a c64 or apple ii and our expectations were ultra low (hamurabi, lemonade stand!) now its quad core crisis / WoW.
@stu
Have no idea about what? I admit I haven't tried to learn every language on the planet, but C# has so far been the easiest (Out of Basic, Aida, Java, Pascal, Modula, Perl, Lisp, Javascript).
Generally if you're trying to learn a language it's in order to accomplish something. If you want to learn how to program c64 games, then sure, your way is fine. If they want to program a game that they can release and maybe make a bit of cash from, then XNA is definatly the best way.
Or at least, if it's not, it'd be nice to hear why you think so.
Have no idea about what? I admit I haven't tried to learn every language on the planet, but C# has so far been the easiest (Out of Basic, Aida, Java, Pascal, Modula, Perl, Lisp, Javascript).
Generally if you're trying to learn a language it's in order to accomplish something. If you want to learn how to program c64 games, then sure, your way is fine. If they want to program a game that they can release and maybe make a bit of cash from, then XNA is definatly the best way.
Or at least, if it's not, it'd be nice to hear why you think so.
steve; I was talking about KIDS. You want to sit an 8yr old down and give them C#? That is just ridiculous.
8yr old kids dont go 'I want to learn C# to release a game on xbox live to make some extra cash'.
you listed 9 languages you know and you say C# was the easiest... but I bet it wasn't the very first language you ever learnt right?
C# has a learning curve that's an order of magnitude steeper than basic or pascal or modula.
here is some valid c#
unsafe {
fixed (uint *p = &ev.dwData) {
eObjType = *(p + 1);
}
}
Steve, ever tried to explain pointers to someone, let alone an 8yr old?
C# is so great for beginners.... not complex or hard to understand at all. Its too much power for a beginner.
When you buy your first motorcycle its recommended to get a 200-250cc bike, even tho everyone wants the 1200cc harley or 1400cc sportsbike like a gixxer will just get you killed.
giving kids basic or pascal doesn't let them shoot themselves in the foot, and basic is great because it doesn't have that edit/compile cycle, its just a fully interactive repl with immediate feedback.
8yr old kids dont go 'I want to learn C# to release a game on xbox live to make some extra cash'.
you listed 9 languages you know and you say C# was the easiest... but I bet it wasn't the very first language you ever learnt right?
C# has a learning curve that's an order of magnitude steeper than basic or pascal or modula.
here is some valid c#
unsafe {
fixed (uint *p = &ev.dwData) {
eObjType = *(p + 1);
}
}
Steve, ever tried to explain pointers to someone, let alone an 8yr old?
C# is so great for beginners.... not complex or hard to understand at all. Its too much power for a beginner.
When you buy your first motorcycle its recommended to get a 200-250cc bike, even tho everyone wants the 1200cc harley or 1400cc sportsbike like a gixxer will just get you killed.
giving kids basic or pascal doesn't let them shoot themselves in the foot, and basic is great because it doesn't have that edit/compile cycle, its just a fully interactive repl with immediate feedback.
You don't need to teach pointers to anyone starting c#. I'm currently programming a game in C# and XNA and I don't use pointers or unsafe code at all (I do use HLSL though, but only because I went mad and started doing 3d stuff, if I had stuck with 2d it would be even easier).
I'd probably start with Console.WriteLine("Hello World");
You could start a C# project by going File>New>Consle app and then type that in followed by Console.ReadLine(); then press the big green play button.
True, you can use pointers and unsafe code and talk about garbage collection etc, but the beauty of C# is that all of that is pretty hidden away.
I'd probably start with Console.WriteLine("Hello World");
You could start a C# project by going File>New>Consle app and then type that in followed by Console.ReadLine(); then press the big green play button.
True, you can use pointers and unsafe code and talk about garbage collection etc, but the beauty of C# is that all of that is pretty hidden away.
8- and 9-year olds aren't going to want to learn something that's really useful for contemporary game development anyway. It's a patience thing; unless you have a kid that's utterly absorbed by logic (which happens, but rarely), it'd be futile and they'd lose interest. Rightfully so. :)
As far as what to learn -game- programming on... I think the question needs a bit of thought. In order to pick up actual programming in a way that'll be useful for gaming, you're almost certainly going to be looking at libraries, meaning you'll need an actual foundation to start from.
For theory, I think C++ is still the best place to start; I do think understanding C's pointers and their nuances makes me a better programmer, but these days it's almost completely useless to really know C.
From being a C/C++ hard-liner, I started with Python and am utterly absorbed... it might be a good place to start, but given its relatively odd syntax (particularly its heavy use of lists, dicts and tuples) and lack of the ubiquitous braces, while it's extremely powerful and useful, it's not a great primer on general-purpose syntax and programming. It is, however, a great place to see the power of OOP in action, even inside a language itself.
I'm not familiar with C# beyond my Java experience (as I understand it they're similar)... personally, I would not recommend that new programmers learn the art/science on a single-platform technology. In the case of .NET there's mono, but I don't know how good the compatibility is.
As far as what to learn -game- programming on... I think the question needs a bit of thought. In order to pick up actual programming in a way that'll be useful for gaming, you're almost certainly going to be looking at libraries, meaning you'll need an actual foundation to start from.
For theory, I think C++ is still the best place to start; I do think understanding C's pointers and their nuances makes me a better programmer, but these days it's almost completely useless to really know C.
From being a C/C++ hard-liner, I started with Python and am utterly absorbed... it might be a good place to start, but given its relatively odd syntax (particularly its heavy use of lists, dicts and tuples) and lack of the ubiquitous braces, while it's extremely powerful and useful, it's not a great primer on general-purpose syntax and programming. It is, however, a great place to see the power of OOP in action, even inside a language itself.
I'm not familiar with C# beyond my Java experience (as I understand it they're similar)... personally, I would not recommend that new programmers learn the art/science on a single-platform technology. In the case of .NET there's mono, but I don't know how good the compatibility is.
If we are talking about 8 year old kids I think they should be playing with a visual tool, maybe something like Alice.
For teens (like 12 to 15) I would say that they should learn some real code, maybe VB or Java
Anyone over 15 I would recommend learning C if you have time on your hands becuase after you learn C things just get easier and you can appreciate that... now if you start with like Python and then try to learn C you will have a very hard time at first since there is so much abstraction.
My point is that you shouldn't start 'easy' just becuase you can understand it fast. Since really in the end your just going to spend more time trying to understand lower-level concepts when it comes time for you to use them.
For teens (like 12 to 15) I would say that they should learn some real code, maybe VB or Java
Anyone over 15 I would recommend learning C if you have time on your hands becuase after you learn C things just get easier and you can appreciate that... now if you start with like Python and then try to learn C you will have a very hard time at first since there is so much abstraction.
My point is that you shouldn't start 'easy' just becuase you can understand it fast. Since really in the end your just going to spend more time trying to understand lower-level concepts when it comes time for you to use them.
Not sure I agree. I think some things are easier. I "learned to program" in a typing class (that makes me sound old!) and I got done early so the teacher let me type in a BASIC program in the Apple II computer in the back as more practice. It was a game, and after I was done I got experience in debugging. From that humble start I was hooked. Later I took any of the offered computer classes I could.
While I think it may not be quite as easy to get into things, I think that the appreciation for programming is better now, so there are more opportunities to get into it as a kid, rather than stumbling into it as many of of the rest of us did. There are also many more resources for people learning programming. There are actually options beyond BASIC or assembler.
As for a language, I think proscribing one is the wrong way to go about it. Let kids sample a bunch of languages and see what they like. Different languages have different strengths, and there is no "one true language". Anyone who is going to take to programming will eventually figure out how to transfer skills from one language to another.
My thoughts.
While I think it may not be quite as easy to get into things, I think that the appreciation for programming is better now, so there are more opportunities to get into it as a kid, rather than stumbling into it as many of of the rest of us did. There are also many more resources for people learning programming. There are actually options beyond BASIC or assembler.
As for a language, I think proscribing one is the wrong way to go about it. Let kids sample a bunch of languages and see what they like. Different languages have different strengths, and there is no "one true language". Anyone who is going to take to programming will eventually figure out how to transfer skills from one language to another.
My thoughts.
Wow, such a useful slate of responses in here---I just gained a ton of additional bookmarks for things to look into and read up about down the line. Thanks so much everybody, even the giant post has some in it.
Don't suppose anybody can explain to me the likes of DarkBasic and Hot Soup Processor in the context of the above mentioned? Google seems either uncooperative or only has old musings from any objective sources..
Don't suppose anybody can explain to me the likes of DarkBasic and Hot Soup Processor in the context of the above mentioned? Google seems either uncooperative or only has old musings from any objective sources..
RPGToolkit
Easy syntax, very similar to C++ and not much different from Java. No worrying about compilation settings. Just the programming logic.
So if you like RPG's (or anything, really... oddly enough, most of the recent finished products made with the RPGToolkit are sidescrolling or platforming games), and have never coded, it's a good place to start. You have to learn variables, arrays, functions, loops, etc. It also does objects (classes and structs, though with an annoying glitch or two).
So basically, it's a toolkit that requires you to learn programming to make anything good, but doesn't make you fiddle with compiler settings and make your rendering engine from scratch.
Of course, I learned a (tiny) bit of C and PHP, some Java, and a toolkit that used C++ in school before I really did anything with the toolkit.
Easy syntax, very similar to C++ and not much different from Java. No worrying about compilation settings. Just the programming logic.
So if you like RPG's (or anything, really... oddly enough, most of the recent finished products made with the RPGToolkit are sidescrolling or platforming games), and have never coded, it's a good place to start. You have to learn variables, arrays, functions, loops, etc. It also does objects (classes and structs, though with an annoying glitch or two).
So basically, it's a toolkit that requires you to learn programming to make anything good, but doesn't make you fiddle with compiler settings and make your rendering engine from scratch.
Of course, I learned a (tiny) bit of C and PHP, some Java, and a toolkit that used C++ in school before I really did anything with the toolkit.
Flash and AS2 to start with, then AS3 to learn OOP. From there you can branch out to any language.
Create a circle on stage. Convert to MovieClip. Name it "ball".
Add code to frame 1:
onEnterFrame = function()
{
ball._x ++;
}
I'd like to see any other language/technology make programming that accessible.
Flash and AS2 is the modern equivalent of BASIC. Actually, it's much more accessible when you consider the timeline and asset library, for those who remember converting drawings on grid paper into hex values like I did 20 years ago.
Create a circle on stage. Convert to MovieClip. Name it "ball".
Add code to frame 1:
onEnterFrame = function()
{
ball._x ++;
}
I'd like to see any other language/technology make programming that accessible.
Flash and AS2 is the modern equivalent of BASIC. Actually, it's much more accessible when you consider the timeline and asset library, for those who remember converting drawings on grid paper into hex values like I did 20 years ago.
Casting my mind back to my programming start in the '80s, I think the key to getting started was a) a programming environment - ANY programming environment, and b) plenty of sample programs.
You could grab any computer mag off the mag rack and type in a working program. If it didn't work, you learned something by getting it to work. If it worked, you had something to start with, evolve forward in different directions, or fix limitations.
Another plus of the "old days" was that everything was text: graphics were represented by textual resources, side stepping any question of graphics/sound tools. If you wanted to change the appearance of something, you had to learn how the graphics format worked at a detailed level.
So I think that more working, high standard examples are important, no matter the language or tool. Show how to do it right and give new users something to leverage, and they'll make more progress. [And set their expectations appropriately!]
Post a Comment
You could grab any computer mag off the mag rack and type in a working program. If it didn't work, you learned something by getting it to work. If it worked, you had something to start with, evolve forward in different directions, or fix limitations.
Another plus of the "old days" was that everything was text: graphics were represented by textual resources, side stepping any question of graphics/sound tools. If you wanted to change the appearance of something, you had to learn how the graphics format worked at a detailed level.
So I think that more working, high standard examples are important, no matter the language or tool. Show how to do it right and give new users something to leverage, and they'll make more progress. [And set their expectations appropriately!]
Links to this post:
<< Home



