View Full Version : Book recommendations for aspiring games programmer?
Helboi
05-15-2008, 12:24 PM
Though I know I'll eventually go to school for a CS degree, I am currently teaching myself to program. As I've said before in other posts, my goal is that someday I'll be working in the video game industry as a programmer.
I'm starting with C++ and have already been studying a few books I purchased. The books I'm working with right now are:
C++ Primer Plus (5th Edition) (http://www.amazon.com/C%2B%2B-Primer-Plus-Stephen-Prata/dp/0672326973/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210875437&sr=8-1)
by Stephen Prata
Game Coding Complete (2nd Edition) (http://www.amazon.com/Game-Coding-Complete-Mike-McShaffry/dp/1932111913/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210875502&sr=1-1)
by Mike McShaffry
Code Complete: A Practical Handbook of Software Construction (2nd Edition) (http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_2?ie=UTF8&s=books&qid=1210875502&sr=1-2)
by Steve McConnell
Are these good books to start with? I did my research before buying them and they seemed to be solid books. So far I've really enjoyed them and I'm learning a lot. My focus is on the C++ Primer book, but I've read the first chapter or so of the other two as well.
Do any programmers out there have other good books to recommend? I have a few on my list, but I'm interested to know what working/studying programmers have to say.
beloved one
05-15-2008, 12:35 PM
Don't read books, experiment, use google and read blogs :)
Helboi
05-15-2008, 12:37 PM
Don't read books, experiment, use google and read blogs :)
I do all of the above. Why not read books? Why limit yourself to just Google, blogs and experimentation? Why not learn from those who went before you?
biclops
05-15-2008, 12:40 PM
Good luck. I'm a casual programmer with an interest in game development but I lack the commitment to do it seriously. That said, I've learned an awful lot about development over the last few years.
Having a good C++ reference book along with McShaffry's Game Coding Complete is a great way to get into it. Depending on your experience, McShaffry's stuff may be a bit difficult to follow. Make sure you know C++ going into it.
Beyond that: it depends on what type of game you are programming. There are books and online resources for very specific things. Don't be afraid to use open source toolkits for UI/Physics/Graphics handling, especially early on when you're trying to get a grasp on the game logic code. The free popcap (I think it's called sexyapp) toolkit is a good start.
gamedev.net is also a great resource.
Helboi
05-15-2008, 12:41 PM
Good luck. I'm a casual programmer with an interest in game development but I lack the commitment to do it seriously. That said, I've learned an awful lot about development over the last few years.
Having a good C++ reference book along with McShaffry's Game Coding Complete is a great way to get into it. Depending on your experience, McShaffry's stuff may be a bit difficult to follow. Make sure you know C++ going into it.
Beyond that: it depends on what type of game you are programming. There are books and online resources for very specific things. Don't be afraid to use open source toolkits for UI/Physics/Graphics handling, especially early on when you're trying to get a grasp on the game logic code. The free popcap (I think it's called sexyapp) toolkit is a good start.
gamedev.net is also a great resource.
Excellent advice...thank you!
beloved one
05-15-2008, 12:46 PM
I don't like books because they are not searchable, its harder to find feedback on them, and they can easily become out of date.
I'm sure there are some great books out there, but its not my preference. I hope some people do point you to some good books... I responded to emphasize the importance of doing, and when you do feel the need to research, stay current and focused.
Brian Seiler
05-15-2008, 12:50 PM
Just as an open question, why start with C++? I'm not sure what your degree of programming expertise is, but there's a lot of housekeeping and lower-level stuff that doesn't get done for you in that language, and if you're at the point that you're just trying to learn concepts....well, it might be a little much. Is XNA a viable alternative? I'm an applications developer now with not much intention to break into the fabulous world of games development for less money than they could possibly pay an entry level guy, so it's not really an issue for me, but I would think that working in what's basically .NET would be a little bit cleaner for self-teaching.
For what it's worth, though, I do prefer C++ for guided teaching, because you do need to learn that housecleaning at some point to know why your code explodes.
Helboi
05-15-2008, 12:56 PM
Just as an open question, why start with C++? I'm not sure what your degree of programming expertise is, but there's a lot of housekeeping and lower-level stuff that doesn't get done for you in that language, and if you're at the point that you're just trying to learn concepts....well, it might be a little much. Is XNA a viable alternative? I'm an applications developer now with not much intention to break into the fabulous world of games development for less money than they could possibly pay an entry level guy, so it's not really an issue for me, but I would think that working in what's basically .NET would be a little bit cleaner for self-teaching.
I started with C++ because it seems to me a fundamental and universally learned language. It also seems that the concepts learned in the process would be applicable to other languages as well (not one for one, but you know what I mean). Also, I'm working on a Mac in Xcode, so I don't think XNA is a viable option for me.
biclops
05-15-2008, 12:58 PM
I don't like books because they are not searchable, its harder to find feedback on them, and they can easily become out of date There's a certain truth in that, but it really depends on the book. I keep a copy of Herb Schildt's C++: The Complete Reference by my desk because I can refer to it without having to muck with my windows on the computer to look something up. Also: I find the information more reliable than any online source I've found, but that really is a matter of personal taste.
Books like Game Code Complete are useful because it is meant to be read from end-to-end and gives a full picture of how one can go about constructing a game in an object-oriented language.
mittens
05-15-2008, 02:02 PM
The first step for me was to just pick up a couple of books on C++ programming, stick with those for a year or so, get an understanding of the language, and then move on. When starting out, the language is the biggest obstacle, so getting a firm handle on that is an absolute necessity. And, yeah, I think C++ is a good place to start. It has all of the necessary fundamentals and when you move to other languages you'll be thankful about how much simpler things are to get done. I've had friends who have started using C++ after learning Java or C# and simply can't grasp the necessary concepts; I learned C++ starting out and jumping into another language tends to be fairly straightforward.
And books are fantastic, don't let anyone tell you otherwise. I'm an entirely self-taught programmer and my ability to figure things out on my own (and not having to rely on other people to get help) is probably my single greatest asset as a developer. I have a job as a game programmer in the industry as well, so don't feel like any path you take getting started somehow ruins your opportunities in the future.
Helboi
05-15-2008, 02:14 PM
The first step for me was to just pick up a couple of books on C++ programming, stick with those for a year or so, get an understanding of the language, and then move on. When starting out, the language is the biggest obstacle, so getting a firm handle on that is an absolute necessity. And, yeah, I think C++ is a good place to start. It has all of the necessary fundamentals and when you move to other languages you'll be thankful about how much simpler things are to get done. I've had friends who have started using C++ after learning Java or C# and simply can't grasp the necessary concepts; I learned C++ starting out and jumping into another language tends to be fairly straightforward.
And books are fantastic, don't let anyone tell you otherwise. I'm an entirely self-taught programmer and my ability to figure things out on my own (and not having to rely on other people to get help) is probably my single greatest asset as a developer. I have a job as a game programmer in the industry as well, so don't feel like any path you take getting started somehow ruins your opportunities in the future.
Thank you for some very uplifting advice. Much of the advice I've been getting so far on these forums has been negative and depressing. You've confirmed so much of my own thoughts on what path I'll take. Teaching myself is the only viable option I have right at this moment, so I'll keep heading down that path until a more viable, and logical, option comes along.
I really resonate with your comment about the ability to get things done on your own. That's a talent I have as well and one that I think will serve me well as a programmer. It's also the main reason why I struggle through formal schooling; I just can't stand to sit there and wait to be given info I could have found and learned myself in half the time. It's like jumping through hoops just so you have that bullet point on your resume.
Thrag
05-15-2008, 02:15 PM
Code Complete is a good book for any type of software development. I've read a number of books by Steve McConnell and all of them are good.
Learning how to program is one thing, learning how to be a disciplined engineer whose code won't be made fun of by his co-workers behind his back is quite another.
Jasper
05-15-2008, 02:18 PM
Some subjective opinions, from a professional programmer:
1) C++ is not where I'd start off, although it's important to (later) understand what it means to get so close to the bare metal. Something like Python or C# is probably better. Take into account the preferred language of any experienced programmers you know.
2) Programming Books are a good idea, definitely better than random blogs.
3) Game Programming books, not so much. That said, you need a project you'll be passionate about.
Some solid yet still approachable books, off the top of my head:
Design Patterns (http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210882415&sr=8-1)
Refactoring (http://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Technology/dp/0201485672/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210882457&sr=1-1)
Anti Patterns (http://www.amazon.com/AntiPatterns-Refactoring-Software-Architectures-Projects/dp/0471197130/ref=pd_bbs_1?ie=UTF8&s=books&qid=1210882496&sr=1-1)
User Stories Applied (http://www.amazon.com/User-Stories-Applied-Development-Addison-Wesley/dp/0321205685/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210882525&sr=1-1)
Also, make sure you learn how to use a source control system like Subversion. This is the first thing you should do -- it is essential if you're serious, and will save you a bunch of grief down the line. The second is to make sure you're not editing in Notepad. ;-)
Helboi
05-15-2008, 02:38 PM
Some subjective opinions, from a professional programmer:
1) C++ is not where I'd start off, although it's important to (later) understand what it means to get so close to the bare metal. Something like Python or C# is probably better. Take into account the preferred language of any experienced programmers you know.
2) Programming Books are a good idea, definitely better than random blogs.
3) Game Programming books, not so much. That said, you need a project you'll be passionate about.
Some solid yet still approachable books, off the top of my head:
Design Patterns (http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210882415&sr=8-1)
Refactoring (http://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Technology/dp/0201485672/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210882457&sr=1-1)
Anti Patterns (http://www.amazon.com/AntiPatterns-Refactoring-Software-Architectures-Projects/dp/0471197130/ref=pd_bbs_1?ie=UTF8&s=books&qid=1210882496&sr=1-1)
User Stories Applied (http://www.amazon.com/User-Stories-Applied-Development-Addison-Wesley/dp/0321205685/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210882525&sr=1-1)
Also, make sure you learn how to use a source control system like Subversion. This is the first thing you should do -- it is essential if you're serious, and will save you a bunch of grief down the line. The second is to make sure you're not editing in Notepad. ;-)
Thanks for the great advice and recommendations; 'Design Patterns' and 'Refactoring' were already on my list, but I added 'Anti Patterns' and 'User Stories Applied'. Gratsi!
StGabe
05-15-2008, 02:44 PM
I'd recommend starting with C and moving up the chain to C++, C# or Java. I'm biased however as a low-level programmer so take the following with a few grains of salt.
IMO, it is best to start from the ground up. C has a very low barrier-to-entry, will let you do a lot of stuff, and gives you a good low-level understanding of how things really work. It's a good compromise on assembly which is good to understand but too painful to work with to be much use for practical learning.
Once you start trying to make fairly sophisticated stuff you may decide to move over to higher-level languages. IMO there are some very good reasons for choosing to work in a language like Java but they have more to do with software engineering strengths and less to do with pedagogical strengths. Learn to lean on a strong API and higher-level language concepts after you learn the basics, not before. When you are starting you want to spend your time learning the logic and flow of programming and not worrying about all the details, pouring over API docs, etc. Something like C is going to give you a good, clean environment in which to do that.
And you won't really need a lot of books to start with C. I would pick a few projects to do. Start with some simple text-driven applications and work your way up to developing an ASCII version of Tetris, for example.
StGabe
05-15-2008, 02:46 PM
P.S. in that same vein, I would say that design patterns, etc., are something to focus on later. At first you really want to spend all your time getting really good at writing simple, direct code with little more than if's, for loops, functions and structs. There you'll learn the concepts that are going to underpin everything you do later with larger, more ambitious projects.
Talisker
05-15-2008, 02:47 PM
Do you want to learn how to be a crack-shot programmer, or do you want to start toying around with spiffy game ideas? If the latter, consider Flash/Actionscript. (Not that the two are mutually exclusive, but it's waaaaay less work to start driving widgets around the screen in flash).
Helboi
05-15-2008, 02:49 PM
I'd recommend starting with C and moving up the chain to C++, C# or Java. I'm biased however as a low-level programmer so take the following with a few grains of salt.
IMO, it is best to start from the ground up. C has a very low barrier-to-entry, will let you do a lot of stuff, and gives you a good low-level understanding of how things really work. It's a good compromise on assembly which is good to understand but too painful to work with to be much use for practical learning.
Once you start trying to make fairly sophisticated stuff you may decide to move over to higher-level languages. IMO there are some very good reasons for choosing to work in a language like Java but they have more to do with software engineering strengths and less to do with pedagogical strengths. Learn to lean on a strong API and higher-level language concepts after you learn the basics, not before. When you are starting you want to spend your time learning the logic and flow of programming and not worrying about all the details, pouring over API docs, etc. Something like C is going to give you a good, clean environment in which to do that.
And you won't really need a lot of books to start with C. I would pick a few projects to do. Start with some simple text-driven applications and work your way up to developing an ASCII version of Tetris, for example.
Now I'm starting to get confused. I've heard from many sources that starting with C++ is a good plan. And now I've heard starting with a high level language like Python or C# is a good idea, and then you're recommending going with a lower level language like C. What gives? hehe.
Can someone please explain what the advantages are in going starting with the various languages? Say, C, C++, Java, Python and C#? Taking into account of course that I eventually want to be programming games, AI, physics, etc.?
I figured going with a lower level language like C++, but not the lowest levels like assembly language, would be a good way to learn the fundamentals and how things actually work at the lower levels, while still being manageable for a newb.
Helboi
05-15-2008, 02:50 PM
Do you want to learn how to be a crack-shot programmer, or do you want to start toying around with spiffy game ideas? If the latter, consider Flash/Actionscript. (Not that the two are mutually exclusive, but it's waaaaay less work to start driving widgets around the screen in flash).
I'm more interested in learning the art and skill of programming in general than I am in getting right to games, which is part of why I chose C++.
IndridCold
05-15-2008, 02:50 PM
While I don't work in the games industry, I do some 3d graphics programming as a hobby. Professionally, I write business software.
Some time ago I took a couple of courses from the Game Institute:
http://www.gameinstitute.com/
I found the material to be very clear and concise. At the time, the 3d courses they offered were geared for DX9, but that was a while ago - they may have expanded their repetoire since. They also offer introductory courses on required mathematics and programming in C++. I didn't take these personally, so I can't comment on the content.
For the 3d courses that I DID take, the information they provided was extremely helpful.
I had read a number of books on game development previous to this, and I found they tended to quickly gloss over more complex subjects (e.g. when/why to use quaternion calculations for vertex rotations over matrix transforms - and good luck finding a book with a decent explanation of mesh animation) in order to quickly get something up on the screen.
I can see why they do that, as some of the concepts are quite complex and might require 100+ pages of pre-amble to sufficiently communicate what's going on. When they skip over it though, you're left with knowledge of how to build exactly what they were attempting to demonstrate, but no clear idea on how to take that knowledge and build your own game.
All that to say that the courses I took at GI were very helpful in establishing foundational knowledge that could be applied in building your own stuff.
Helboi
05-15-2008, 02:54 PM
While I don't work in the games industry, I do some 3d graphics programming as a hobby. Professionally, I write business software.
Some time ago I took a couple of courses from the Game Institute:
http://www.gameinstitute.com/
I found the material to be very clear and concise. At the time, the 3d courses they offered were geared for DX9, but that was a while ago - they may have expanded their repetoire since. They also offer introductory courses on required mathematics and programming in C++. I didn't take these personally, so I can't comment on the content.
For the 3d courses that I DID take, the information they provided was extremely helpful.
I had read a number of books on game development previous to this, and I found they tended to quickly gloss over more complex subjects (e.g. when/why to use quaternion calculations for vertex rotations over matrix transforms - and good luck finding a book with a decent explanation of mesh animation) in order to quickly get something up on the screen.
I can see why they do that, as some of the concepts are quite complex and might require 100+ pages of pre-amble to sufficiently communicate what's going on. When they skip over it though, you're left with knowledge of how to build exactly what they were attempting to demonstrate, but no clear idea on how to take that knowledge and build your own game.
All that to say that the courses I took at GI were very helpful in establishing foundational knowledge that could be applied in building your own stuff.
Thank you for the recommend; I've been looking for a school I could take some introductory classes from that'll give me a real basic foundation from which to do more self directed studies.
StGabe
05-15-2008, 03:24 PM
Can someone please explain what the advantages are in going starting with the various languages?
Sure. It's a hot topic and there are a lot of opinions on it. Like I said, I'm a low-level programmer myself, so I'm biased. I do have some experience teaching programming though so I'm not pulling this completely out of my ass.
Basically a higher level language is going to give you more to work with. More functions, more data types, more abstractions and more features. With C++ as opposed to C you are getting things like classes, objects and templates which will allow you to structure your code in more interesting, higher-level ways. You're also getting a deeper library of functions from which to create your code. Moving up to a language like Java is going to give you even more of that. A deeper API, some powerful concepts like reflection, and features like garbage collection.
Stuff like that can be really useful. There are good software engineering reasons why a person might choose to use a more sophisticated language. For example, I wouldn't want to make anything with a GUI in straight-up C. I'd probably use Java or C# depending on what I was trying to do. Similarly, you can create a very simple server in a language like Java or Python with very few lines of code just by leveraging the existing API.
The cost is two-fold:
1. You are further away from how the computer actually works. All of these abstractions are conceptually valuable but don't map directly to what's going on under the hood.
2. You're jumping into the deep-end. While you might be able to write a more sophisticated program with fewer lines of code, that will require you to spend a lot of time learning how the API works, learning design patterns, etc. With something like C there is very little that you need to learn up-front in order to start programming and you are forced to keep things simple and focus on writing raw code.
Arguably you can obtain the same environment by programming in something like C++ or Java and just restricting yourself to what features you use. In practice I think it can be useful to restrict yourself to a low-level language to start with and then build your way up.
Later on when you start using more complicated abstractions, design patterns, etc., I think you'll have a better appreciation for them and better fundamental coding skills. Going the other way around, learning high-level programming first and then trying to pick up a low level language later is going to be harder. It's easier to add new concepts as you go then to try and figure out how to program without the features that you've become accustomed to.
IMO, when you're done you will almost certainly pick a more sophisticated language but you should know WHY you are picking that language and you should have the ability to write most of the code on your own if you really have to. Otherwise, you're going to making most of your decisions "in the dark" without a real understanding of what is going, what the costs are, etc.
Jasper
05-15-2008, 03:26 PM
I'd recommend starting with C and moving up the chain to C++, C# or Java. I'm biased however as a low-level programmer so take the following with a few grains of salt.
IMO, it is best to start from the ground up. C has a very low barrier-to-entry, will let you do a lot of stuff, and gives you a good low-level understanding of how things really work. It's a good compromise on assembly which is good to understand but too painful to work with to be much use for practical learning.
Well, this ventures into the subjective and even religious, but I could not disagree more. Similar arguments were made that Real Programmers (http://www.pbm.com/~lindahl/mel.html) learned with assembly in days of yore, and this is just as crazy. ;-)
Starting out dealing with manual memory allocation and memory stomping errors is not the way to go. You'll also do yourself a disservice putting off the basics of object orientated programming, and developing a reliance on procedural coding that you'll have to unlearn. I agree that you should start off with the basics of control loops, etc. -- but this is better done in a high level language like Python, where you can concentrate on the logic and avoid nasty and intermittent memory corruption errors . I've had C/C++ errors that expressed themselves based on the length of the code file, i.e. whether I included comments or not affected execution. Memory errors are insidious!
All that said, I disagree with curriculum that leave out C/C++, as it's important that you understand what's going on, even though in practice you want to dip down to low level programming as rarely as possible. It's just not the place to start, in particular if you're doing it on your own, in your spare time.
StGabe
05-15-2008, 03:39 PM
Memory errors are insidious!And yet you'll learn a lot from having to deal with crap like that. A lot of stuff that you'll never learn if you try and teach yourself later. And really you're not going to spend that much time on stuff like this anyway. It's an overstated fear.
It's just like any sport. When you are learning you want to spend a lot of time on the fundamentals. You throw the fancy tricks, strategy, etc., in later.
Also, object-oriented programming can definitely wait. I've known a lot of object-oriented programmers who were crippled if they couldn't use their favorite design patterns. Meanwhile procedural programming is complementary to object-oriented programming. I didn't touch objects until I'd been programming for half a dozen or so years. While there were some new things for me to learn, the transition was pretty seamless and I operate just fine in a language like Java. I certainly didn't feel that I really need to "unlearn" anything.
Jonathan Blow
05-15-2008, 03:43 PM
I tend to fall into the "All programming books are basically crap" category, but I went to a good university for computer science, so maybe if you don't have that background it's not the same. I don't know.
I wouldn't bother with a book like Design Patterns, and you don't ever, ever, ever, ever want to get anywhere near a book that contains the words "Game Coding". In fact, any programming book that uses the word "Coding" in a straight-faced way is a fast-path to mediocrity, unless it's about compression or signal processing.
So, my recommendation is to not really bother with programming books at all. If you want to read books, read math books (recommendation: Linear Algebra Done Right by Sheldon Axler).
Other than that, just start with an open-sourced program that does something pretty simple, and play with it. If you need to figure out what any functions or whatever do, then google the documentation for those. Have some friends who are pretty good programmers that you can ask questions of.
That's it, really.
Kyle Wilson
05-15-2008, 03:47 PM
Now I'm starting to get confused. I've heard from many sources that starting with C++ is a good plan. And now I've heard starting with a high level language like Python or C# is a good idea, and then you're recommending going with a lower level language like C. What gives?
If this is just for your own entertainment, you can probably put something on screen faster using a higher-level language like C#. If you ever hope to find employment as a programmer in the game industry, you're better off acquiring expertise in C++. In that case, I'd suggest all of Scott Meyers' books, followed by all of Herb Sutter's books.
Linoleum
05-15-2008, 03:51 PM
I'll be cantankerous and retro and recommend learning programming/programming languages in the following order:
Pascal (for the fundamentals)
6502 Assembly Language
ANSI C
C++
zimmitti
05-15-2008, 03:53 PM
I started with C++ and for me that was absolutely the right choice. I had tinkered around for years with some of the easier stuff but until I got into the full monty of what you get with C++ it never really clicked. Later on, I needed to get up on C# for some scripting and that took a couple days because I already had a great background in C++.
I would just go for it with C++. It is a crucible of sorts but if you get your sound fundamentals down in terms of coding a good interface and really writing useful code you will have a leg up on a ton of programmers. That said, if you can find 3-5 other cats that are looking to work on the same project you'll go through the trials that are necessary to get good team chops down (that might actually be the most important thing).
I can't stress enough how important it is to get some experience working a code base with other people. Once you get a gig working on a game you're really going to want to stand out as someone who writes code that others can use/interact with.
To actually answer your question, Design Patterns is a great one to keep on your desk.
LesJarvis
05-15-2008, 03:56 PM
Though I don't have a lot of perspective on the matter, I approve of Linoleum's suggestion of starting out with Pascal, in no small part because it's where I got my start. It's fairly rigid about structure, unlike C variants, so it'll force you to do things in ways that will benefit you later. It's a lot easier to develop bad habits starting with C. There are probably other languages out there that aren't hopelessly outdated that accomplish the same thing, however.
(I should qualify this by noting that while I'm a decent enough PHP programmer, I don't do hardcore app development like most of the other folks posting here.)
EvilIdler
05-15-2008, 03:57 PM
Read Thinking in C++ (http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html). Absorb. You shouldn't be needing more than this and a reference.
Pick up some pattern books (C++ patterns and game programming patterns). Sample books recommended already.
If you're on a Mac, SFML (http://www.sfml-dev.org/) is a lovely framework. More stuff than in SDL.
IndridCold
05-15-2008, 04:04 PM
No matter which path you choose, be sure to stay far, far away from Visual Basic.
Jasper
05-15-2008, 04:05 PM
This is great, like asking for fantasy book recommendations! Until you've read a wide selection of fantasy yourself, how do you judge which of us is recommending Robert Jordan? ;-)
Alan Au
05-15-2008, 04:10 PM
I'll second what pretty much everybody above has said. Yes, even the contradictory advice--do what works for you. Use whatever tools you're comfortable with, but try and learn some new stuff too. C++ is probably overkill for indie projects, but it's an employable skill for large-scale development. Read some books, but also get some hands-on experience because in the end, experience trumps everything. Finished projects count double.
Also, I recommend checking out Tom Sloper's game industry advice site, which is more intended for aspiring designers but also good advice in general: http://www.sloperama.com/advice.html
- Alan
Jasper
05-15-2008, 04:18 PM
Read some books, but also get some hands-on experience because in the end, experience trumps everything. Finished projects count double.
This bears repeating. When I interview a prospective developer, I want to talk about what they've done, how they did it, and why. Major Bonus Points for the wherewithal to actually finish anything substantial.
Talisker
05-15-2008, 04:19 PM
Have some friends who are pretty good programmers that you can ask questions of.
That right there is the best advice.
I started in Java, because that's what my University taught as it's freshman course. I then moved on to ARM Assembly, then C/C++, C#, X86 assembly + other bits and bobs.
Personally, if you're going "higher" level, I'd definatley recommend Java or C#. Probably the latter, though I'm not as familiar with it's API as I am with Java. BUT! you get the benefits of being able to upgrade your knowledge to XNA later!
After doing something "high", I would definatley sink right to the bottom. C, or even better, some form of assembly. This gives you a great overview into how memory works, especially if you're doing assembly. (In fact I learn about memory and pointers and such easier and quicker with Assembly than I imagine I would have done in C).
Or start at the bottom and work up. Who cares? As others have said, pick one and stick with it. It doesn't really matter which - if you're a good programmer the language should be transparent and all you're dealing with is concepts. Memory, objecions, functions, interactions, threads blah blahblah. All of these things can be done in ANY language. You can write perfectly object orientated code in assembler, it's just that the compilation program doesn't know about it.
One last point: Try and get a "course textbook" - ie one that gives you exercises. Hell, get a friend to mark them if they're a good programmer ;) There's nothing worse than having learnt a new concept but not having a clue how you should use it next..
ARogan
05-15-2008, 07:28 PM
Yeah i started with pascal too back in my college days. It's pretty good for getting structured programming basics down. I also took an advanced data structures class in pascal though to this day I have yet had a need to create my own linked list or huffman tree.
After that it was event driven programming.
OO I picked up on my own since I don't think it existed yet back then (or at least nothing was offered at my college).
Though I still don't see why you couldn't learn all this in a higher level language as long as you ignored a lot of the high level stuff. Plus, if he learned something like c# he could always have a fall back in doing boring business apps and become completely burnt out in 15 yrs like me. I guess a degree would help there though.
As far as books go my favorite C# reference is Professional C#:
http://www.amazon.com/Professional-C-2008-Wrox-Guides/dp/0470191376
I have the first two editions, and I just ordered this new one.
Matthew Gallant
05-15-2008, 08:09 PM
http://ecx.images-amazon.com/images/I/51Q34Fj8fnL._SL500_AA240_.jpg
antlers
05-15-2008, 09:49 PM
C++ is good because there are some real, open-source game engines you can look at for free in C++.
1. Learn the basics of C++.
2. Try and code a game.
3. Fail utterly.
4. Study the design of one of the game engines for insight into where you went wrong.
5. Repeat steps 2-4 as needed.
Damien Neil
05-16-2008, 02:11 AM
C++ is a fucking nightmare of a language. It's the best choice for certain things, but it's still a terrible, terrible language. Read Effective C++ and More Effective C++ for a good idea as to why.
The basic problem with C++ is that you need to know what not to do as much as you need to know what to do. It takes a great deal of knowledge of the laguange to understand what language features are essential, which ones must be avoided at all costs, and which ones are useful in exactly the right circumstances but no others.
The problem with C++ for the neophyte programmer is that, as a beginner, you want to acquire a deep understanding of your tools. C++ is complicated enough that acquiring that understanding from a cold start is difficult.
The right way to approach C++, I think, is from C. C is small enough to be comprehensible, and every aspect of it that you learn will carry right over to C++.
All that said, if C++ pushes your buttons, jump in and go for it. The language you choose to learn is utterly unimportant compared to your passion for learning it.
IndieInIndy
05-16-2008, 07:18 AM
I disagree with the "learn an easy language then switch to another" approach. The problem with this is that when you switch languages, you end up writing code in the old language, using the syntax of the new language. If you learn C first, then switch to C++, you'll just be writing C code with C++ syntax. If you learn C++ then switch to C#, you'll be writing C++ code with C# syntax. It takes time to learn the ins and outs of a language. Assuming you're spending several hours a day writing code, it'll take at least a year to really become comfortable with a new language. While the conventional wisdom is true that any competant programmer can learn a new language easily, it takes time before you're really using the features of that language properly.
Pick one language, and only use that language. Unless you're a professional programmer, or simply love to tinker with other languages, it's not worth the distraction of trying to learn multiple languages. Pick either C# or C++, and focus on just that language. (Personally I'd recommend C++, but I'm a low-level programmer, and C++ is very oriented to the way I think and the problems I solve every day.)
I'll get flamed for this, but I'll say it anyway: If you go with C++, completely avoid templates (especially STL and Boost) and exceptions. While they might make it easy to write code, they make debugging far harder. As a beginner, wrassling with the debugger will be enough of a challenge. You don't want the headaches templates and exceptions add to the mix.
As for good books on game programming... There are none. I have a couple hundred books on the subject, and none of them really do a good job at covering the whole subject. There a quite of few good books on specific areas of game design (AI, physics, shaders, etc.). But there you need to specify exactly what subject you're interested in -- and frequently which subsection within that subject.
For general reference, get the Game Programming Gems and AI Programming Wisdom books. These are excellent reference books, but they focus on specific little details. Pick up a few other books instead of these, learn as much as you can, then start reading these. There's 12 or so of them now, and at around $50 a pop, they can be pricey. If you're really going to be writing game code, it helps to have a reference library, and this is the best place to start. But don't feel bad if you ignore them at first. The more background you have before reading them, the more you learn from them.
If you like tutorials, check out flipcode.com. The site isn't active any longer, most people have forgotten about it, and you may need to poke around to find a working google link to some of the tutorials, but there's a lot of topics to be found here. Arguably, lots of them are dated, but are useful to know.
As for other books, if the title includes the words "Ultimate", "Complete", or "For Teens", you can skip them. They're always shallow introductions, with writing mannerisms aimed to amuse teens (though personally I have to think most teens must be insulted by the juvenile language), and they all cover the exact same material. There are a few exceptions to this rule, like McShaffry's books, but you'll save yourself money and insults to your intelligence by ignoring these books.
One book I would recommend is Danial Sanchez's "Core Techniques and Algorithms" This is a purely intro book. It has wide but shallow coverage of most subjects in game programming. Very good for beginners to learn what all subjects there are, but virtually worthless as a reference book. Very much a "read once then ignore forever" kind of book.
If you're more interested in the graphics side of things, Akenine and Haines "Real-Time Rendering" does a great job of covering all of the subjects, but its coverage is condensed, lacking details a beginner would really want. Its greatest value is with all of the references to other books/articles/html that cover things in greater detail.
Ken Eberly has written a few books on game design, detailing some of the game engine implementations he's done. The biggest problem is that he loves presenting everything as mathematical formula instead of pseudo-code, making his books a real PITA to use for reference when you're looking for an example of a working implementation.
One other name worth mentioning: Andre LaMothe. If at all possible, avoid any books with his name on them. His books have a wealth of implementation details and really useful examples. Horribly coded and with lots of "Oh wow cool!!!" and "Whew this math is hard!!!" and emoticons and multiple exclamation marks. His books are the only ones I've ever seen with smileys and <BG> and <GRIN> and other mannerisms suited more for IMs than books. He also injects these throughout all of the books he edits (and man, has he afflicted many a book this way), though he's finally stopped using emoticons. Do not touch any of his books until you're comfortable writing code, know a fair bit about game programming, and are able to pick out and avoid the many bad things contained within his books. I've used a few of his books for their technical details -- and they're quite useful if you can filter out the idiocies -- but damn they're annoying to read.
shang
05-16-2008, 07:36 AM
Well, this ventures into the subjective and even religious, but I could not disagree more. Similar arguments were made that Real Programmers (http://www.pbm.com/~lindahl/mel.html) learned with assembly in days of yore, and this is just as crazy. ;-)
Starting out dealing with manual memory allocation and memory stomping errors is not the way to go. You'll also do yourself a disservice putting off the basics of object orientated programming, and developing a reliance on procedural coding that you'll have to unlearn. I agree that you should start off with the basics of control loops, etc. -- but this is better done in a high level language like Python, where you can concentrate on the logic and avoid nasty and intermittent memory corruption errors . I've had C/C++ errors that expressed themselves based on the length of the code file, i.e. whether I included comments or not affected execution. Memory errors are insidious!
All that said, I disagree with curriculum that leave out C/C++, as it's important that you understand what's going on, even though in practice you want to dip down to low level programming as rarely as possible. It's just not the place to start, in particular if you're doing it on your own, in your spare time.
I basically agree with everything Jasper wrote. Having to deal with all the low-level headaches when just starting out will get in the way of learning the basic concepts and algorithms. I'd start out with Python and learn to write basic game-related stuff like the main loop, handling user input and displaying graphics (using the pygame library, for example). At the point where you can easily and naturally express your ideas and algorithms with a higher level language, you can start learning C/C++/C# and compare how things are done there.
FWIW, I'm a self-taught programmer who started experimenting with BASIC at the age of 6 or 7, then moved up to Pascal -> C -> C++ and later Python and Java. I got my first job in the software industry purely based on my programming hobby, spent 8 years writing business applications and then leveraged that working experience (and a few game programming projects done as a hobby) to get into the game industry last September.
Helboi
05-16-2008, 08:16 AM
1. You are further away from how the computer actually works. All of these abstractions are conceptually valuable but don't map directly to what's going on under the hood.
2. You're jumping into the deep-end. While you might be able to write a more sophisticated program with fewer lines of code, that will require you to spend a lot of time learning how the API works, learning design patterns, etc. With something like C there is very little that you need to learn up-front in order to start programming and you are forced to keep things simple and focus on writing raw code.
Arguably you can obtain the same environment by programming in something like C++ or Java and just restricting yourself to what features you use. In practice I think it can be useful to restrict yourself to a low-level language to start with and then build your way up.
Later on when you start using more complicated abstractions, design patterns, etc., I think you'll have a better appreciation for them and better fundamental coding skills. Going the other way around, learning high-level programming first and then trying to pick up a low level language later is going to be harder. It's easier to add new concepts as you go then to try and figure out how to program without the features that you've become accustomed to.
IMO, when you're done you will almost certainly pick a more sophisticated language but you should know WHY you are picking that language and you should have the ability to write most of the code on your own if you really have to. Otherwise, you're going to making most of your decisions "in the dark" without a real understanding of what is going, what the costs are, etc.
You make some very, very good points. I hadn't thought through some of this, but much of what you said here did inform my decision to go with C++ first. As you said, I can always add on to the concepts I've learned in a lower level language, but it's not as easy to go back down the chain.
Helboi
05-16-2008, 08:19 AM
I tend to fall into the "All programming books are basically crap" category, but I went to a good university for computer science, so maybe if you don't have that background it's not the same. I don't know.
I wouldn't bother with a book like Design Patterns, and you don't ever, ever, ever, ever want to get anywhere near a book that contains the words "Game Coding". In fact, any programming book that uses the word "Coding" in a straight-faced way is a fast-path to mediocrity, unless it's about compression or signal processing.
I couldn't disagree with you more. You're making a judgment on the content of a book based on one word in its title? That's inane.
Helboi
05-16-2008, 08:21 AM
I started with C++ and for me that was absolutely the right choice. I had tinkered around for years with some of the easier stuff but until I got into the full monty of what you get with C++ it never really clicked. Later on, I needed to get up on C# for some scripting and that took a couple days because I already had a great background in C++.
I would just go for it with C++. It is a crucible of sorts but if you get your sound fundamentals down in terms of coding a good interface and really writing useful code you will have a leg up on a ton of programmers. That said, if you can find 3-5 other cats that are looking to work on the same project you'll go through the trials that are necessary to get good team chops down (that might actually be the most important thing).
I can't stress enough how important it is to get some experience working a code base with other people. Once you get a gig working on a game you're really going to want to stand out as someone who writes code that others can use/interact with.
To actually answer your question, Design Patterns is a great one to keep on your desk.
Thanks for the advice. I do plan to work with others as soon as I can. In fact, someone from these forums contacted me via my blog the other day; I'm sure we'll find some things to collaborate on.
Helboi
05-16-2008, 08:22 AM
If you're on a Mac, SFML (http://www.sfml-dev.org/) is a lovely framework. More stuff than in SDL.
Thanks, I've bookmarked that and will look into it soon.
Helboi
05-16-2008, 08:25 AM
I'll second what pretty much everybody above has said. Yes, even the contradictory advice--do what works for you. Use whatever tools you're comfortable with, but try and learn some new stuff too. C++ is probably overkill for indie projects, but it's an employable skill for large-scale development. Read some books, but also get some hands-on experience because in the end, experience trumps everything. Finished projects count double.
Also, I recommend checking out Tom Sloper's game industry advice site, which is more intended for aspiring designers but also good advice in general: http://www.sloperama.com/advice.html
- Alan
Yes, hands-on is the goal. I'm already putting some of the stuff I've learned into practice doing real basic little programs (you know, "hello world" stuff and conversion programs). And I expect to keep working as hands on as possible, eventually modding or doing my own little game to show.
Thanks for the website recommend; I'm always looking for good stuff online.
Helboi
05-16-2008, 08:27 AM
One last point: Try and get a "course textbook" - ie one that gives you exercises. Hell, get a friend to mark them if they're a good programmer ;) There's nothing worse than having learnt a new concept but not having a clue how you should use it next..
Yes, the one I'm reading now has a test at the end of every chapter, and a set of programming practices that exercise what you've just learned (sort of a hands-on test).
Helboi
05-16-2008, 08:28 AM
http://ecx.images-amazon.com/images/I/51Q34Fj8fnL._SL500_AA240_.jpg
Are you saying college is the only way to go? Or are you justifying your student loan debt?
Helboi
05-16-2008, 08:37 AM
This is a little off topic since it has more to do with game design than programming, but has anyone checked out the Game Development Essentials books? For example, Game Development Essentials: Game Artificial Intelligence? (http://www.amazon.com/Game-Development-Essentials-Artificial-Intelligence/dp/1418038571/ref=wl_it_dp?ie=UTF8&coliid=I32DM2SGSHSECZ&colid=YGUB73BRUX5V) There are about 10 or so in the series and I have them all saved on my wish list for later purchasing, but I'd like to know what anyone who's perused them thinks. Worth checking out later on?
Mike O'Malley
05-16-2008, 08:38 AM
Ken Eberly has written a few books on game design, detailing some of the game engine implementations he's done. The biggest problem is that he loves presenting everything as mathematical formula instead of pseudo-code, making his books a real PITA to use for reference when you're looking for an example of a working implementation.
That would be David Eberly. I've got his books on my shelf.
Well worth the investment if you share his areas of interest.
Matthew Gallant
05-16-2008, 08:41 AM
Are you saying college is the only way to go? Or are you justifying your student loan debt?
I don't have any student loan debt.
Chris Nahr
05-16-2008, 08:54 AM
Best C++ tutorial: Andrew Koenig & Barbara E. Moo, Accelerated C++
Best C book: Peter van der Linden, Expert C Programming
I've put my reviews (http://www.kynosarges.de/DevBooks.html#CppBooks) of these and other books up on my website.
That said... if you're going to bury yourself in programming books as if you're going to read and digest them all within months, you're only setting yourself up for a disappointment. Put off any advanced subject such as AI programming for a good long while until you've learned the fundamentals.
Mordrak
05-16-2008, 08:55 AM
Are you saying college is the only way to go? Or are you justifying your student loan debt?
You should definitely look at college. What prompted your interest this late in life? If you had this interest for awhile and are just now acting on it, trying to jump start your progress by yourself probably isn't going to work. At the same time, if you do go to college, you still need to get in the habit of working on projects beyond just your assignments. The amount of debt you'll have is also a consideration when starting later in life.
Helboi
05-16-2008, 08:59 AM
Best C++ tutorial: Andrew Koenig & Barbara E. Moo, Accelerated C++
Best C book: Peter van der Linden, Expert C Programming
I've put my reviews (http://www.kynosarges.de/DevBooks.html#CppBooks) of these and other books up on my website.
That said... if you're going to bury yourself in programming books as if you're going to read and digest them all within months, you're only setting yourself up for a disappointment. Put off any advanced subject such as AI programming for a good long while until you've learned the fundamentals.
Thanks for the recommends.
No, I don't plan on burying myself in books. I am a very fast and effective reader, so I could read multiple books in one period without a problem, but I don't intend to do so since much of what I'm doing is also hands on. I plan to focus first on the language, then move on to thinks like AI and physics. And of course I'll eventually focus again on a new language.
Helboi
05-16-2008, 09:01 AM
You should definitely look at college. What prompted your interest this late in life? If you had this interest for awhile and are just now acting on it, trying to jump start your progress by yourself probably isn't going to work. At the same time, if you do go to college, you still need to get in the habit of working on projects beyond just your assignments. The amount of debt you'll have is also a consideration when starting later in life.
I've had an interest for a long time. I had an interest in at a young age but had no guidance/assistance in getting started beyond school classes. I got involved other areas of interest for many years and am now getting back to what I truly love now that I have the time and ability to go through with it.
I'm not saying I'll never go to school, but school isn't my strong suit. I'm a much better self taught student than I am a school student. And I really don't want to go too far into debt to do it (no to mention, I have a family to support and a good job that'd be hard to quit just so I can attend school full time).
IndieInIndy
05-16-2008, 09:05 AM
This is a little off topic since it has more to do with game design than programming, but has anyone checked out the Game Development Essentials books? For example, Game Development Essentials: Game Artificial Intelligence? (http://www.amazon.com/Game-Development-Essentials-Artificial-Intelligence/dp/1418038571/ref=wl_it_dp?ie=UTF8&coliid=I32DM2SGSHSECZ&colid=YGUB73BRUX5V) There are about 10 or so in the series and I have them all saved on my wish list for later purchasing, but I'd like to know what anyone who's perused them thinks. Worth checking out later on?
I've only read a couple of those (Interface Design and... one other I can't recall offhand). They're pretty much "for teens" books, with an emphasis on showing lots of screen shots of games, pictures of devs, and brief interviews, very little content. I wouldn't consider buying any more of them without a detailed perusal in the bookstore before buying.
Helboi
05-16-2008, 09:18 AM
I've only read a couple of those (Interface Design and... one other I can't recall offhand). They're pretty much "for teens" books, with an emphasis on showing lots of screen shots of games, pictures of devs, and brief interviews, very little content. I wouldn't consider buying any more of them without a detailed perusal in the bookstore before buying.
That's what I wondered about them. I've never picked one up, just seen them online. If this is all they are, they're being taken off my list today.
Alan Au
05-16-2008, 11:24 AM
One other name worth mentioning: Andre LaMothe. If at all possible, avoid any books with his name on them.Seconded.
- Alan
peterb
05-16-2008, 11:46 AM
I wrote an article about this topic some time ago: What Programming Language? (http://tleaves.com/2004/02/27/what-programming-language/)
Generally speaking, any book on "learning a programming language" is not going to help you become a competent programmer. The reason people keep suggesting going to school is that school is a good way to learn the underlying concepts which are, to be frank, about 6,135,511 times more important than the question of how to program in any particular language.
The other way to learn things like this is to work on real projects and ship software. That's generally harder than going to school. But there certainly are people who do it that way.
Let me put it another way: I don't really know anything about Ruby. But I'm 100% positive I could walk into any job interview for a Ruby job at a serious company and say "No, I don't know anything about Ruby. Never wrote a line of it. Here are the projects I've developed in other languages, and this is what was challenging about them" and have a better chance of getting the job than someone who was 25 years old, knew Ruby inside and out, but didn't have as strong a grasp of the underlying issues in software development.
If I was recommending specific books on underlying challenges in software development, I'd suggest a good algorithms book (Rivest), and a general book on programming languages (rather than a book about _a_ programming language) such as Sethi's "Programming Languages: Concepts and Constructs". Other interesting but optional reading would be the Aho/Sethi/Ullman compilers book (aka the "Dragon" book) and Silberschat's classic "Operating Systems Concepts". Those last two are a bit far afield, but demonstrate the way software developers think about extremely complex and large projects.
Hope that helps.
Helboi
05-16-2008, 11:52 AM
I wrote an article about this topic some time ago: What Programming Language? (http://tleaves.com/2004/02/27/what-programming-language/)
Generally speaking, any book on "learning a programming language" is not going to help you become a competent programmer. The reason people keep suggesting going to school is that school is a good way to learn the underlying concepts which are, to be frank, about 6,135,511 times more important than the question of how to program in any particular language.
The other way to learn things like this is to work on real projects and ship software. That's generally harder than going to school. But there certainly are people who do it that way.
Let me put it another way: I don't really know anything about Ruby. But I'm 100% positive I could walk into any job interview for a Ruby job at a serious company and say "No, I don't know anything about Ruby. Never wrote a line of it. Here are the projects I've developed in other languages, and this is what was challenging about them" and have a better chance of getting the job than someone who was 25 years old, knew Ruby inside and out, but didn't have as strong a grasp of the underlying issues in software development.
If I was recommending specific books on underlying challenges in software development, I'd suggest a good algorithms book (Rivest), and a general book on programming languages (rather than a book about _a_ programming language) such as Sethi's "Programming Languages: Concepts and Constructs". Other interesting but optional reading would be the Aho/Sethi/Ullman compilers book (aka the "Dragon" book) and Silberschat's classic "Operating Systems Concepts". Those last two are a bit far afield, but demonstrate the way software developers think about extremely complex and large projects.
Hope that helps.
It does help, thank you. I'm getting some invaluable advice on this thread and the forum in general. I've added a few books you mentioned to my list. Thanks for the link to you article as well; I'll read that right away.
One thing I can't quite wrap my head around though is why school is so much more effective than learning on your own? I mean, what did the Atari boys do back in the day before there were CS programs and design schools? Why is a textbook and a teacher any better than a solid book, hands on experience, hard work, and determination?
Matthew Gallant
05-16-2008, 12:05 PM
I mean, what did the Atari boys do back in the day before there were CS programs and design schools?
They made dirt simple games, the entire stable of which in one year made Atari profits that one title nowadays makes in one hour.
Helboi
05-16-2008, 12:06 PM
They made dirt simple games, the entire stable of which in one year made Atari profits that one title nowadays makes in one hour.
Sure, the games were dirt simple, but was the programming of them dirt simple?
Jason McMaster
05-16-2008, 12:07 PM
Yeah, that's like comparing a movie today to Charlie Chaplin
Matthew Gallant
05-16-2008, 12:08 PM
Sure, the games were dirt simple, but was the programming of them dirt simple?
Yes, they could make games in a few days.
Mordrak
05-16-2008, 12:09 PM
Yeah, that's like comparing a movie today to Charlie Chaplin
If you mean special effects (more accurately post-production CGI stuff), sure. I'm not sure if Chaplin is the best example either, because IIRC he constantly reworked his films while filming them. He was very much an iterative filmmaker.
Helboi
05-16-2008, 12:20 PM
Yeah, that's like comparing a movie today to Charlie Chaplin
Ok, how about someone like John Romero. Now, I don't know him personally, and I might be totally ignorant of his history, but what little I do know about him suggests that he's self taught.
peterb
05-16-2008, 12:34 PM
Yes, there are people in the world who are self taught. Some of them are good. Some of them suck. What are you trying to ask?
I get the feeling that you're unhappy with the answers you're getting because they involve expending a lot of effort: going to school, or creating your own projects to practice on and to demonstrate your productivity. But that's how it is. There is no shortcut to becoming a competent software developer. Some people have a knack that others don't have, but the knack only takes you a very, very short way. After a very short while, the question stops being "Are you talented?" and starts being "What have you done?"
When making hiring recommendations, I'll take a drone who has shipped 10 products over a genius who has shipped nothing every time. And feel no guilt whatsoever. So by all means, teach yourself how to program, but don't confuse a hobby with a viable career path.
Jason McMaster
05-16-2008, 12:36 PM
Ok, how about someone like John Romero. Now, I don't know him personally, and I might be totally ignorant of his history, but what little I do know about him suggests that he's self taught.
Oh, I was referring to the Atari comment not the self taught. I'm self taught (my degree is in a completely unrelated field) and have done a lot of work (programming and other). I admire people who have the gumption to go do it, but it's certainly hard work.
IndieInIndy
05-16-2008, 01:03 PM
Yes, they could make games in a few days.
That's a bit misleading. The processors they worked with were very simple, had limited resources, and no 5000-function APIs like we have to deal with today. They also recycled ideas and code. Most games were iterations on existing games with different sprites and movement patterns. They essentially existed in a rapid-prototyping environment. They existed in a time/place in the computing industry that allowed them to quickly iterate existing software into new games at a very rapid pace, many of which never saw the light of day.
Google up some interviews with Ed Logg (can't recall any other names off the top of my head) for some insight on how different things where then. Richard Rouse's Game Design book has a good interview with Ed.
Helboi
05-16-2008, 01:04 PM
I get the feeling that you're unhappy with the answers you're getting because they involve expending a lot of effort: going to school, or creating your own projects to practice on and to demonstrate your productivity. But that's how it is. There is no shortcut to becoming a competent software developer. Some people have a knack that others don't have, but the knack only takes you a very, very short way. After a very short while, the question stops being "Are you talented?" and starts being "What have you done?"
You sure are making a whole lot of assumptions about me. I have no problem expending considerable effort and fully expect to do so (and really, I already have). I have no problem going to school if that's what I need to do; I just don't think that school is the only way to learn to program. I fully intend to build and collaborate on as many independent projects as I can, regardless of whether I teach myself or go the school route (or both).
Just because I question any advice I'm given, it doesn't mean that I am "unhappy" with it. It just means I don't swallow things whole hog without making my own mind up about it.
So yeah, based on your post, you have me all wrong.
Helboi
05-16-2008, 01:07 PM
Google up some interviews with Ed Logg (can't recall any other names off the top of my head) for some insight on how different things where then. Richard Rouse's Game Design book has a good interview with Ed.
I'm currently most the way through a rather detailed and extensive book on the history of video games, so I'm quite familiar with how things were back then. I played tons of those games as a kid, so I'm well aware of how derivative they were.
Conrad
05-16-2008, 01:52 PM
I have no problem going to school if that's what I need to do; I just don't think that school is the only way to learn to program.
You're obviously down on school, but there's a whole lot more to a programming career, games or otherwise, than generating code. I submit that the book learnin' approach will be far inferior in terms of overall career preparation.
Helboi
05-16-2008, 02:00 PM
You're obviously down on school, but there's a whole lot more to a programming career, games or otherwise, than generating code. I submit that the book learnin' approach will be far inferior in terms of overall career preparation.
I'm not really down on school, I'm just down on the idea that school is the be-all end-all of learning to program.
I'm also not taking the "book learnin'" path. Books are simply one of the many tools available to someone aspiring to teach themselves a new skill.
Talisker
05-16-2008, 02:31 PM
Another reason to go to school: not having a bachelor's degree == resume goes to the bottom of the pile (or worse, straight into the trash) for many, many job postings.
peterb
05-16-2008, 02:34 PM
School is, in fact, the be-all end-all of learning the skills necessary to become a good software developer in a reasonable amount of time.
Yes, there are plenty of us out here who have become competent software developers without higher education. To a man, those who I know have done it have spent more time, not less, than they would have had they gone to a 4 year school.
There's absolutely no shame in not going to school, or in learning through doing. I'm just saying that if your objection to going to a CS program is that you don't want to spend the time, I think you're misunderstanding the scope of the undertaking.
As Conrad said, generating code is only a small part of software development. In fact, it's the easy part. A good CS program gives you a grounding in some (though not all) of the less obvious hard parts.
Conrad
05-16-2008, 02:48 PM
I'm not really down on school, I'm just down on the idea that school is the be-all end-all of learning to program.
Ok, great. I agree with you. But frankly, in terms of your stated goals, that's a trivial and unimportant observation.
Also, like I said, "learning to program" does not a successful programming career make.
I'm also not taking the "book learnin'" path. Books are simply one of the many tools available to someone aspiring to teach themselves a new skill.
They are indeed. Plus they make fine hats.
Helboi
05-16-2008, 02:55 PM
1
There's absolutely no shame in not going to school, or in learning through doing. I'm just saying that if your objection to going to a CS program is that you don't want to spend the time, I think you're misunderstanding the scope of the undertaking.
It's not about the time investment, it's about the financial investment and the fact that it just doesn't fit into my life at this exact moment. And then of course there's the simple matter that I do not learn best in a school environment. It looks like that's a personal shortcoming I'll have to overcome though.
VegasRobb
05-16-2008, 03:37 PM
There's something to be said for obtaining a degree as a failsafe just in case the Game Industry doesn't work out. You seem to be gearing up for a change in your career path so why not create as much positive leverage as possible.
The idea that a degree program will provide the needed structure to get you where you need to go in a short amount of time shouldn't be taken lightly.
Also, look around and see if there are degree programs that might be a better fit. Perhaps there's a program that offers the self-direction and freedom from restrictions that you're looking for in an education.
Helboi
05-16-2008, 03:50 PM
There's something to be said for obtaining a degree as a failsafe just in case the Game Industry doesn't work out. You seem to be gearing up for a change in your career path so why not create as much positive leverage as possible.
The idea that a degree program will provide the needed structure to get you where you need to go in a short amount of time shouldn't be taken lightly.
Also, look around and see if there are degree programs that might be a better fit. Perhaps there's a program that offers the self-direction and freedom from restrictions that you're looking for in an education.
All great advice. In fact, another poster pointed me to GameInstitute (http://www.gameinstitute.com/); what little research I've done on them so far seems to indicate they'd be a good fit for me, for beginner stuff anyhow, considering that full time University just isn't feasible for me right now. Do you know anything good/bad about them?
Damien Neil
05-18-2008, 02:45 PM
I disagree with the "learn an easy language then switch to another" approach. The problem with this is that when you switch languages, you end up writing code in the old language, using the syntax of the new language.
You seem to be saying that people should only learn one language. That's crazy talk.
If you learn C first, then switch to C++, you'll just be writing C code with C++ syntax. If you learn C++ then switch to C#, you'll be writing C++ code with C# syntax. It takes time to learn the ins and outs of a language. Assuming you're spending several hours a day writing code, it'll take at least a year to really become comfortable with a new language. While the conventional wisdom is true that any competant programmer can learn a new language easily, it takes time before you're really using the features of that language properly.
It takes me about a month to become comfortable with a new language and start using it idiomatically. If it takes you a year to learn a language, you need to learn some more languages.
mouselock
05-18-2008, 04:28 PM
I have no problem going to school if that's what I need to do; I just don't think that school is the only way to learn to program.
The only way? No. However, it's a lot more efficient, and here's why:
You remember that response on this thread or another one where someone told you to program in whatever language a friend who knows a lot about programming knows? You remember how you thought that was a good idea?
Good. Now consider what a decent school actually is: It's a collection of a lot of people (professors) who have already learned the basics well enough to progress through advanced degrees. It's also a collection of even more people who look at the exact same problems you just ran across trying to understand a concept or idea from a unique viewpoint in each and every case.
You know how you're trying to mine for data amongst the collective knowledge of people here? Well, a school with a good CS program is like that, except all you have to do is walk in and say "Hey, this is what I think is going on, am I right?"
Now, tack on a bit of enforced discipline (you're paying for it) and timed requirements (tests) and focus (lesson plans/lectures), and, well, you've got a decent chunk of value going there.
Is just any school a good idea? Probably not. Is a decent school a better idea than just trying to be self-taught? Probably. But in general, if you're really serious, school is better than learning it yourself because you have reliable resources to correct misconceptions, help you work through confusing bits faster, and give you a variety of structure that's arrived at without restricting yourself to one (or a handful) of author's personal viewpoints.
Chris Nahr
05-19-2008, 01:33 AM
It takes me about a month to become comfortable with a new language and start using it idiomatically. If it takes you a year to learn a language, you need to learn some more languages.
Or take a CS course. That's one significant benefit of learning the basics of computer architecture and algorithmics: you recognize the patterns as they appear in each language, so that a new language is just a different coat of paint over the same mechanisms.
I imagine that's much harder if you learn your first language by rote, as it were, simply memorizing snippets that you read or googled. You have no mental background to map them to first principles and then to another language. Visual Basic programmers are notorious for that, but also hacker types who know only C/C++ (the kind who think one can't program without macros and pointer arithmetic).
Jasper
05-19-2008, 03:35 AM
Absolutely agreed. I've gotten jobs programming in Java and C# without having any experience in either, and done just fine. The main issue with picking up a new language is the time it takes to get to know a new set of libraries.
Johan A
05-19-2008, 04:28 AM
Reading books is always a great compliment to "try, test, code".
http://www.amazon.com/Writing-Solid-Code-Microsofts-Programming/dp/1556155514/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1211192807&sr=1-1
is one of my favorites when it comes to programming, and I'd wish every new programmer had read it...
Matt Perkins
05-19-2008, 09:05 AM
Absolutely agreed. I've gotten jobs programming in Java and C# without having any experience in either, and done just fine. The main issue with picking up a new language is the time it takes to get to know a new set of libraries.
This is very true.
Helboi
05-19-2008, 09:28 AM
The only way? No. However, it's a lot more efficient, and here's why:
You remember that response on this thread or another one where someone told you to program in whatever language a friend who knows a lot about programming knows? You remember how you thought that was a good idea?
Good. Now consider what a decent school actually is: It's a collection of a lot of people (professors) who have already learned the basics well enough to progress through advanced degrees. It's also a collection of even more people who look at the exact same problems you just ran across trying to understand a concept or idea from a unique viewpoint in each and every case.
You know how you're trying to mine for data amongst the collective knowledge of people here? Well, a school with a good CS program is like that, except all you have to do is walk in and say "Hey, this is what I think is going on, am I right?"
Now, tack on a bit of enforced discipline (you're paying for it) and timed requirements (tests) and focus (lesson plans/lectures), and, well, you've got a decent chunk of value going there.
Is just any school a good idea? Probably not. Is a decent school a better idea than just trying to be self-taught? Probably. But in general, if you're really serious, school is better than learning it yourself because you have reliable resources to correct misconceptions, help you work through confusing bits faster, and give you a variety of structure that's arrived at without restricting yourself to one (or a handful) of author's personal viewpoints.
Now there's a post that understands my own feelings about school. My issue isn't with school per se, it's with the idea that "school is the only way". So, we're in complete agreement with everything you type up there in that post.
Linoleum
05-19-2008, 09:29 AM
That's a bit misleading. The processors they worked with were very simple, had limited resources, and no 5000-function APIs like we have to deal with today.
Let me put it this way: the Atari 2600 had 128 bytes of RAM.
vBulletin® v3.8.4, Copyright ©2000-2009, Jelsoft Enterprises Ltd.