Related
I want to learn the basic concepts like collision detection, rendering and others in a general way (keeping the library usage minimum). I believe that once my basic concepts are clear, it would help me in learning different libraries easily, like OpenGL, etc.
I know without libraries it will take long time to build things. I am doing this for learning so I don't care about productivity.
I would love if the solution is using JavaScript (HTML5 Canvas) or C/C++ (DOS mode) since I believe I will have to deal with a bit of low level stuff which would help me in learning. Other solutions are also welcome. I know Java as well.
Note: 2D games are sufficient for me.
Good question - A decent place to start is
http://www.gameinstitute.com/
They have some pretty fun courses, no time limit and a decent forum. I actually met some good local dev's there and since have done some stuff together.
I'd also look at getting into the yearly Global Game Jam (http://globalgamejam.org/).
It's a really great experience for novice and professional devs. You can also meet local people.
I mention "local people" cause sometimes its very difficult to do a game on your own - it really helps to have people to collaborate with. Though it brings in problems of its own (schedule conflicts, motivation, etc).
I'd take a look at the following books:
http://www.amazon.com/Ultimate-Guide-Video-Writing-Design/dp/158065066X/ref=sr_1_2?ie=UTF8&qid=1306204693&sr=8-2
http://www.amazon.com/Game-Design-Workshop-Second-Playcentric/dp/0240809742/ref=sr_1_8?ie=UTF8&qid=1306204693&sr=8-8
http://www.amazon.com/Masters-Doom-Created-Transformed-Culture/dp/0812972155/ref=sr_1_2?ie=UTF8&s=books&qid=1306204765&sr=8-2
http://www.amazon.com/Programming-Game-Example-Mat-Buckland/dp/1556220782/ref=sr_1_1?ie=UTF8&qid=1306204779&sr=8-1
http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135/ref=sr_1_1?ie=UTF8&qid=1306204798&sr=8-1
This are just a few books on the top of my head that I've enjoyed in my travels.
I'd focus on a language like python that'll get you up and running quickly. Not C++ - I think you lose a lot of productivity on the language it self, templates, smart pointers, vtables, etc. And then you have all the different version of DX, Win32 GDI etc. I think you'll be more productive in a different language. Maybe lua + python?
Also, I'd seriously look into mastering an engine. I wrote my own, and it was a great journey, but we never completed the GAME! We spent 6 months writing the engine, 2 months writing the game and got burnt out. Next time I'd use an engine for sure!
Unity3D works on iphone, web, desktop.
Torque is another leader, though I didn't find this one as slick as Unity.
Cocos2d is a iphone specific framework, based on a python framework. Really slick.
Another option is taking an existing game that allows Mods (HL2, Quake, etc) and build some mods for it. You can probably find tons of forums and groups already doing it and perhaps contribute to an existing project or start your own.
Another really gnalry idea would to be to get the Blue Book
http://www.amazon.com/gp/product/0321498828/ref=pd_lpo_k2_dp_sr_2?pf_rd_p=486539851&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=032117383X&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=01F2GM7XZD56GCFW0AJT
And don't stop till you understand and have worked through it!!! You'd be a pretty good openGL / C coder by the time you made it through that book (cover to cover). Set aside a few months...heh.
Don't forget - you can always start with paper-prototyping games, you don't have to start building computer games.
Good luck!
I think you should focus on making games that are fun. Yes, you'll understand more as you work with low-level tools. However, you'll understand more about making fun games as you make more games.
Make a list of ideas for games.
Go down that list and pare things
down until they can be implemented
in 16 hours of work or so.
Pick one of the ideas, and learn
new libraries, technologies, et
cetera as you go. Don't overengineer your game.
Let other people play it. Try to
get honest feedback.
Improve your game. Stop when you
need to start from scratch to
improve it.
Go back to step 3, and try not to
make the same mistakes :)
I am doing CS undergrad, with the intention of pursuing a masters and maybe later a phd in neural networks, so that is certainly my main area of interest, but I am also good in fine arts and enjoy gaming so I want to start a little bit of 3d artwork and game dev in my free time. Problem is I don't know where to start.can anyone in the field of game dev list step by step how I should progress down this road? thanks
ps: not sure if this is something that matters but I have a copy of xna gaming studio so I'd prefer to use that instead of buying something else
There are some open source games that are currently in progress (and some completed) on sourceforge. When I first started looking at game programming, I looked at working games and their source. It'll be more informative in the long run to look at these kinds of things rather than trying to start from scratch.
Some of them are even looking for contributors if you wanted to try to help out.
There are plenty of XNA resources at Ziggyware, and there are many ways to do 3D art like the XSI Mod Tool and others. You can find many free engines at Codeplex which will help you get started and you can use things like the FlatRedBall engine to help you along. Don't forget the Creators Club which has plenty of samples and info on making XNA games.
Look on those sites, get some samples and games and try them out, and then select a simple game to clone (say asteroids or tetris or something). Then if you get that done pretty well you can move onto 3D. Honestly, i wouldn't recommend jumping right into 3D as it involves a lot of messy dealing with effects and such (although there may be frameworks out there that alleviate that). As others have said, learning a lot of 3D math is a good idea even though the framework can handle most of the stuff like matrix math and things like that.
http://www.sloperama.com
http://www.igda.org
get as much 3d math as you can
make what games you can in your spare time, as many as you can finish.
Learn by doing, and show that you can see something through to completion
Edit:
Some good starters are Ogre and XNA, or make your own
Also, I notice now you said part time. Other than hobby work or volunteer work there's not much in the way of "part time" game dev work other than maybe QA testers.
Don't pay for a framework (well, not for a while). You can get a great start for free with XNA, like you mentioned, or Ogre (to name another free option). Torque is cool and all, but you should start small.
Build Tetris. Seriously. Think of it as stretching before the real game. It's impossible to get everything right the first time, so start out with a simple, bite-sized target.
Mod the existing starter kits XNA provides. Once you've worked with someone else's "engine," you'll have a better sense of what you do and do not want in your code.
Look around for other tutorials. One of my favorites for XNA is here. It's a 3D engine, with a solid object-oriented design.
As one of two programmers of the Threewave Capture the Flag mod for Quake 3, I can attest to working on (and shipping) a mod as being an incredibly rewarding introduction to gaming.
Working on a mod situates you next to production code, with all of its conventions and warts. It also introduces you to an already-working codebase that is, at a minimum, a few hundred thousand lines of code. This teaches you to be able to search and read code and primes you for working on a team.
You also get to work with quality art assets and ship a product that garners attention for you and your small group.
Working with XNA or downloading libraries and hanging out in forums is alright, but neither of them give you the starting point of a defined product, already commercially successful.
These days, Half-Life 2 seems like a great starting point. Lots of C++ code, community support and a history of Valve and other studios hiring top talent from their own community.
Best of luck!
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
Does anyone have any idea how it would be possible to transition from business to game programming? How would anyone get a start in game programming? It seems much more exciting and rewarding (better paying too?). But it seems like most of the jobs out of school are for business programming. Any advice or insight on how to do it or if it can be done?
This is not a direct answer to your question, "How can I transition?" But instead I'd like to recommend you not go down that road or at least be realistic about what it is like. To back that up I'll quote some stats from the 2004 igda survey on quality of life for game developers:
34.3% of developers expect to leave the industry within 5 years, and
51.2% within 10 years.
Only 3.4% said that their coworkers averaged 10 or
more years of experience.
Crunch time
is omnipresent, during which
respondents work 65 to 80 hours a
week (35.2%). The average crunch work
week exceeds 80 hours (13%). Overtime
is often uncompensated (46.8%).
44%
of developers claim they could use
more people or special skills on
their projects.
Spouses are likely to
respond that "You work too much..."
(61.5%); "You are always stressed
out." (43.5%); "You don't make enough
money." (35.6%).
Contrary to
expectations, more people said that
games were only one of many career
options for them (34%) than said
games were their only choice (32%).
Many years ago I created a couple of game development websites on my own and then was one of the founders of GameDev.net. One of the reasons I did it was to make contacts and get into game development professionally. It definitely worked, a couple of the people who were co-founders have gone on to work in the industry and I'm sure I could have gone that way too but everything I learned about the industry taught me the following things:
There is an endless supply of developers out there who believe game development would be really cool. The people hiring for the industry know this and aren't going to pay you nearly as well because they rely on this basically inexhaustible pool of people.
Many of the developers within the industry may be good with 3D or sound or many other topics but often they are inexperienced with basic software practices that you or I might consider essential. In that category I would put things like source control, test first design, design patterns, etc. Even when they know better the time crunch to get stuff out the door often makes them toss good software practices in a foolish attempt to save time.
Working on a game for two years can quickly become no different than working on any other program for two years. That is, when you have to dig around in the guts of the program day after day and deal with its bugs and only with that one game it's not going to seem all that fun anymore. In fact, you may find yourself playing other games just to get away from it for a while.
What says you are going to be working on Half-Life X or one of the few dozen cool games that come out every year anyway? Remember, somebody is out there building the game that goes with the next Will Farrell movie and it's probably going to be you. Look around at most of the dreck that comes out. That stuff doesn't develop itself.
It's quite a transition! The biggest difference in mindset is moving away from the business world's reliance on abstraction to one where you're focused much more on the particular hardware you're targeting and getting things to run within strict budgets of time and memory. Game programming is a lot more like embedded programming than it is like web programming -- you have to think about the exact memory footprint of everything and CPU time is at a huge premium.
This is even true of being an MMO server programmer, because a) the server has to answer to each client command within 80 milliseconds to feel responsive, and b) the bigger the footprint of the game on the server, the more hardware you have to buy, and that costs real money.
First up you should learn C++ if you haven't already. Almost every game is written in C or C++ these days. Game consoles have strictly limited memory, and if you allocate one byte past 512mb it doesn't slow down, it crashes; at the same time, each trip through the main app loop has to complete in 33ms or less, so we can't rely on garbage collection and smart pointers. The game-development world is one of those special applications where you really need to do all those optimizations that people here say you never need to do any more.
Also, bone up on your math. Games are built out of linear algebra and kinematics -- not just the graphics, but the state of the world and the behavior of every character and object. I like Eric Lengyel's book for game math; it's been my bible for years (though there are many other good ones).
You could try to learn some graphics math and programming as well, but this is sort of a subspecialty now and typically only a couple of people on a game team are really working at the level of DirectX calls. I suspect you're more interested in game logic and server backend, which is less specialized.
Make games. There are many frameworks to help you get started. XNA has the advantage of being a real-world product that actual games are shipped with, unlike PyGame or SDL which are quick to get up and running but have vanishingly little commercial support.
A common route people take transitioning into the game industry is starting as a game development team's Tools Developer.
These tools are often written in higher level languages like C# and are used to aid in the development of the games. For example, you might help maintain or modify the teams in-house map level editor or help develop the tools that convert one media file format into their propriatary file format.
After you have spent some time as a tools developer you can start picking up domain knowledge on the side and naturally transition into one of the many types of game programmers:
Game physics programmer
Artificial intelligence programmer
Graphics programmer
Sound programmer
Gameplay programmer
Scripter
UI programmer
Input programmer
Network programmer
Game tools programmer
Porting programmer
Technology programmer
Lead game programmer
Modern games are often made by huge and highly fractionated teams in terms of roles. So, it might be worth it to pick one of the above specialities and begin studying right away as you attempt to get your foot in the door. It almost goes without saying that you should be proficient in C++ and one of the major graphics libraries (OpenGL, DirectX, etc). Don't stress about learning both, just pick one and learn it. Generally people who know one very well can transition to the other if they need to.
If you're a good programmer you can do it, game programming requires much better understanding of the platforms and tools you use to develop the games.
I think it's much harder to get into the game programming industry than just the regular industry.
The best alternative is to create your own games, get exposure, if you're good enough you'll find your way.
There are many really good competitors though, just check out the many sites that offer free flash games, you can start posting your work to those sites.
The general story is that the way to get into game programming is to start doing it. There's no point in even showing up on a game company's doorstep without a demo of whatever you want them to pay you to do.
If you're coming out of business programming, that'll count against you and be a culture shock besides. The game industry runs on single 20-something males who can be taught that 120-hour work weeks are just how things are done.
I'd recommend keeping your current job for a while and finding a mod team or open source game that could use help. Try to find one that looks likely to create a playable game rather than vanish, at a guess I'd say it will look better on your resume than some test demos both because you'll probably be working on something more advanced than you would at home and it shows you can work in a games team.
I was wondering the same thing!
I've noticed there are a number of good game-programming books at Barnes & Nobles, probably not a bad place to start.
In general though, I'd start looking at books, maybe coding some prototypes, and start looking at what companies are in your area, what tools they use, how you could basically make yourself valuable to them!
By the way, does anyone happen to know if there are particular engines similar to what WOW / Guild Wars are using for MMORPG game development in particular (my main interest)?
I think it is not an easy switch. Game programming is not something you can learn overnight. I suspect an entry level will be quite high if you want more than a graduate salary.
A long time ago I worked in a company that worked in the online gambling field. I then decided I wanted to be engaged in more serious activities.
You really need to answer one question - is that what you want because you like it or just because it seems to be rewarding right now. In the latter case you'll need to understand you'll be plating catch-up and noone can promise the salaries will be as high as you wish by the time you get your skills high.
Maybe consider some certifications/training so that you can step-up your current career position in business programming?
If however it is what you really want then just follow you heart. Show your interest and commitment, potential employers will notice it and hopefully prefer you over a guy who has applied just because the salary was looking attractive.
On the other hand, businees developers/consultants (for example in SAP world) earn quite a generous ransom.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
A little backround:I'm a 22 yr old with just a high school degree and a lot of free time (college did not work out). I am completely new to web programming and I have taken a couple day classes in Photoshop, Illustrator, Dreamweaver, Fireworks, and InDesign. Seeing as these are only day classes, I am by no means a pro at any of them but I am getting more familiar with the Adobe programs. My teacher who was a freelance web designer told me that along with those Adobe programs, if I could learn HTML, XHTML, CSS, Flash, and Java that I would be in good shape regarding getting a job. She also told me if I could get good at both the design and programming sides, I could really get a good job.
I was just wondering if anyone has some advice or information for basically a noob who is starting from scratch and really wants to get into this profession. I've gotten on lynda.com to try and get going on the programming stuff and I'm just trying to turn some of these skills into a job. Best case scenario is that eventually I could be doing freelance and supporting myself...But that is obviously very far away. ANy advice would be greatly appreciated....
Advice You Don't Want To Hear
figure out what went wrong with college - at 22, you should have graduated by now, or close to it
fix it!
focus!
go back to college with a new focus and resolve - you now have a goal
If You Can Teach Yourself, You Can Graduate College
if the problem was boring general ed classes, look into CLEP tests to test out of them
if the problem was curriculum, take classes you are interested in first
if the problem was time, start part-time
if the problem was school choices, research different colleges - many online universities are now accredited
if the problem was self-discipline, then freelancing is not a good career choice
I'm not saying that you can't do what you asked about, but your chances of getting a good job are greatly increased with a degree, even a 2-year degree.
Obviously, this is not the only path, but it is arguably the easiest path. Marketing yourself when you have no degree and no experience is difficult, even if you are overflowing with talent and creativity. (It's easier now with the Internet, but by the same token the marketplace is that much more crowded.)
Good luck!
I'm currently a software engineering consultant. Familiarity with the following list of things helped me get an interview and an offer right out of college.
Note: HTML, XHTML, CSS... these are just markup languages, and chances are they'll barely be glanced at if you put them on a resume. Flash (not so much) and Java are more impressive, but you might want to look into the following additional topics/technologies to really spice up that resume:
Get comfortable with OO (Object-Oriented) principles (inheritance, polymorphism, abstract vs concrete classes, encapsulation, etc.)
Java is a great open-source beginner programming language. I'm primarily a .NET developer so I tend to favor that, but I started with Java in my college days and picked up on it very quickly
.NET 2.0, 3.5 -- C# and VB.NET (LINQ, lambda expressions, anonymous methods, etc.) -- You can start with the Express edition of Visual Studio, but may eventually want to get the full version
Move on to higher level programming concepts such as Design Patterns (MVC/MVP, Command, Facade, Adapter, the list goes on and on) -- I'd recommend the Gang of Four book (Google will tell you which book it is)
Database Management Systems
Learn SQL, be comfortable JOINing, using GROUP BY and HAVING clauses, and familiarize yourself with aggregate functions
Tackle DB design concepts (relational modeling especially)
Start with the free ones, like MySQL or PostgreSQL, then...
Focus on Microsoft SQL Server or Oracle (these are the big cats)
Go deeper with things like Normal Forms, data warehousing (OLAP, MOLAP, ROLAP, cubes, etc.)
Testing: look into unit testing and test-driven development
Software quality assurance - defect prevention techniques, etc. (this goes along with some of the points mentioned below)
Look into methodologies like Waterfall, Agile, and XP (eXtreme programming), perhaps even PSP and TSP
Learn to use Source/version control systems such as CVS, SVN, and VSS (Microsofts, unfortunately not free -- the first two are)
You could get really crazy and learn about static code analysis, but definitely look into code reviews and code inspections
EDIT: I thought I'd give you some books to check out (no particular order):
Introduction to Algorithms, 2nd ed.
Thomas H. Cormen, Charles E.
Leiserson, Ronald L. Rivest, and
Clifford Stein, 2002.
Artificial Intelligence: Structures
and Strategies for Complex Problem
Solving, 5th edition. George F.
Luger, 2005.
A First Book of Visual C++. Gary J.
Bronson, 2000.
An Introduction to Object-Oriented
Programming with Java, 3rd edition
(Java 1.5) update. C. Thomas Wu,
2004.
Mathematical Structures for Computer
Science, 5th edition. Judith L.
Gersting, 2003.
Mastering the Requirements Process,
2nd edition. Suzanne Robertson and
James Robertson, 2006.
Data Management: Databases and
Organizations, 5th edition. Richard
T. Watson, 2006.
Software Quality Engineering:
Testing, Quality Insurance, and
Quantifiable Improvement, 1st
edition. Jeff Tian, 2005.
Artificial Intelligence: A Modern
Approach, 2nd edition. Stuart
Russell and Peter Norvig, 2003.
Software Architecture in Practice,
2nd edition. Len Bass, Paul
Clements, and Rick Kazman, 2003.
Unit Testing in Java: How Tests
Drive the Code, 1st edition.
Johannes Link and Peter Frohlich,
2003.
Practical PostgreSQL, 1st edition.
John C. Worsley and Joshua D. Drake,
2002.
PSP: A Self-Improvement Process for
Software Engineers, 1st edition.
Watts S. Humphrey, 2005.
TSPi: Introduction to the Team
Software Process, 1st edition.
Watts S. Humphrey, 2000.
I guess that's all I have for now. If you can get these things down, your skill set should be pretty solid, and you'll be on your way towards being another member of the software engineering world. I'm not sure that anything you do on your own will give you the same level of knowledge as college courses, but I'm sure this is a good start. This is a hefty list; don't be surprised if obtaining these skills takes a couple of years.
As far as your graphic design skills, depending on the type of job you find yourself in, they may be more important than your programming skills. On top of either skill sets, make sure your soft skills are polished and that you are confident in your work.
Don't create websites by exporting to web from your design programs. If you see yourself creating slices and mouseover effects in Fireworks STOP and hit yourself in the head with something heavy and blunt.
Learn XHTML and CSS and learn them well. Try to be as semantic as possible.
Pick an all inclusive framework and build yourself a web app like a blog. As much as I love ASP.NET it is not all inclusive. It is massive. It will throw you in every direction. The same can be said of Java. Try something simple like Django or Rails.
Practice, practice, practice, and realize that all that you know is crap and that you need to get better.
Go back to 4 and do it till you die.
Ok, this may not be popular - but is drawn from my own experience at being a "self taught" programmer. The bottom line for getting a job at a company as a "programmer/web developer" is about "0%" without some type of degree/certification/on-the-job experience.
You may have noticed "the problem" with that statement - without a degree or certification, how do you get "on-the-job experience"? Welcome to "the real world".
My path to becoming a developer started with "the desire" ... and getting a job doing something else (Semiconductor manufacturing if you must know). I learned programming on my own as a "hobby" and continually looked for ways to apply it to my job tasks to improve my "job performance". I eventually applied for positions that would bring me closer to "programming" to make better use of my growing skills until I had enough "job experience examples" to apply for a programmer position.
That took "8 years". Regardless of what you think about college, getting "any" degree related to computer science at one would have cut that in half. You can do it on your own, but until you have some outstanding examples of how you used your programming skills to solve "real business" problems, you won't be considered over anyone with a degree "just out of school". When you finally do make it, you will notice that the "just out of school" folks who don't know jack about solving "business problems" will probably start with a better salary than yours.
The environment is probably better now than when I started (25 years ago - :-)) but the same general principle applies - the degree may not mean you know how to program, but it will get you past the "HR" screening process so you can get the job. :-)
Good luck ...
Create a project that would actually be useful and non-trivial for you: A forum or message board, or a job posting site, for instance.
But here's the important part: Give yourself a firm deadline. You can do quite a lot in, say, 4 weeks, and if you keep to a schedule like
database backend in week 1
login system in week 2
messaging in week 3
and so on, you can broadly cover many related subjects. Your project won't be pretty, but if you start out being a perfectionist, you'll never finish it, and will end up knowing only the first half of the technology in your project really well.
As you get more experience, you can go back and polish things up or rewrite stuff you did wrong, and then you have a portfolio that accurately reflects your current skills.
Learning HTML, XHTML, CSS, Flash, and Java plus several graphical programs is a pretty tall order. You'll overwhelm yourself trying to do that. Pick one and learn it then move onto the next. Grab a book or search the Stack Overflow archives for recommended online tutorials.
The best way to learn is to pick a project and just work on it. Then learn on demand as you find a need. The end product won't be the highest quality, but you'll learn how everything works together.
For serious web developer it is very crucial to understand how websites work inside out.
As you are starting from scratch I strongly recommend W3Schools.
With this website you can learn from Very Good Tutorials, then Try It Yourself and Test your skills.
Here are the steps for an absolute beginner:
html
css
JavaScript (Client Side Scripting)
PHP (Server Side Scripting)
SQL (DataBase applications)
DOM(Document Object Model)
AJAX
Drupal/Joomla/Plone (Content Management Systems)
NOTE: Type the code rather than cut-paste or using tools like Dreamweaver/FrontPage.Use the tools only after you are very comfortable with manual coding.(Believe me this helps a lot)
Enjoy!!!
The best I could suggest is that you create a fake need, for example create a simple file read / write app, or something that can toss information onto a database and retrieve it.
A more advanced project you could start on after would be a tagboard of sorts, with Create/Update/Read/Delete (CRUD) functionality, and add features to it in order to get practice with cookies, login, more database functionality, etc. You could also try using an image editor that just draws a clock showing the current server time the request was recieved as practice with images.
I would recommend learning html and css first. That is the cornerstone of anything you'll do on the web. For graphics, learn photoshop. Once you can make basic html websites, I would then choose to pursue either asp.net or flash. There are good jobs in both fields. I would say pick asp.net if you like programming, and flash if you like the visual aspects of web development more. As an asp.net developer I would say 90% of my day is doing database related work with MS SQL server. Really focus on databases. Finally, if you develop with asp.net, you should program in C# rather than vb.net. I started as a vb.net programmer and had to switch to C#, simply because most of the professional world uses it, hence it will be easier getting a job.
Look into local Code camps and user groups, create a project and build it, start by lerning HTML, CSS and javascript, then look at learning PHP is a great starter language for doing beginning web development the code side.
as far as getting a job without a degree, start a little lower on the food chain, I started in the QA lab, from there you can learn from the development side good practices and the do's and don't. Also as a QA person you learn in a hurry who are good developers and who are not simply by the work they produce.
W 3 Schools is a neat beginner/novice reference and tutorial site.
The site covers most technologies used in web-development.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 9 years ago.
Improve this question
Courses for people who are being introduced to programming very often include a code project, which I think is a nice way to learn. However, such projects often feel too artificial, and are thus not very rewarding to work on.
What are your ideas of rewarding code projects? (Preferably easy to begin, and extendable at will for the more advanced!).
Edit:
#Mark: thanks for the link, though I'm more interested in projects for people who are completely new to programming (the link seems to refer more to people who are already proficient in at least one language, and trying to learn a new one -the typical SO audience I'd say :) -).
#Kevin, Vaibhav, gary: I was thinking of people who are learning programming through one language, so at the beginning of the course some don't know anything about control structures (and even less about any kind of syntax). However, I was thinking in quite a large project (typically in the 1k-10k lines of code range, possibly in groups of 2 or 3 students). This is what was done at my school for the complete beginners, and it sure seemed to work for them... except that most of them found their projects quite boring to work on!
As has been stated a few times, what you are trying to teach the beginner is very important to the project.
My advice to you for planning something like this:
1) Avoid making a computer game
A computer game, while fun to build, doesn't reward the programmer with results early on (it's very complex). You want to concentrate on small but useful application programs, such as a Port Scanner. The example there is a little complex, but it's one of the best learning projects I've seen on the web.
2) Teach graphics early
It's rewarding to see the fruits of your labors early on, and it motivates you to go further. Whether you're using WinForms, MFC or the Win32 API, OpenGL or DirectX, teach it early.
3) Many small lessons with in depth information
This principle is followed by the above linked Port Scanner project, and it works well. Teach each part thoroughly, and give time for the beginner to absorb the lesson. I think that ZophusX had a good format for giving the information. It's too bad he's mostly abandoned his site.
4) It takes time
Don't rush things. Nobody becomes a stellar programmer in a few weeks. Try and make the lessons simple, but engaging, and keep building from your previous lessons.
5) Get feedback early and often
You might think a project is incredibly interesting, or a particular lesson or such, but you aren't the one learning. Your student(s) will greatly appreciate it when you ask them early on how things are going, and what they'd like to know more about. Be flexible enough that you can accomodate some of those requests.
6) Have fun teaching
Have fun. Passion is contagious, and if your student(s) see how much you enjoy the subject matter, some of that enthusiasm will rub off on them as well.
I hope that helps!
Some good rewarding projects, in terms of what you can learn and which are quite scalable in terms of complexity, features are:
Games
A travel and transportation reservation/booking system
Encyclopedia or a Dictionary of terms, articles
Conversion Calculators (Currency, Units, etc.)
The key is to pick a project simple enough, so that some of its features are immediately apparent, when you look at the project title. And when really given a thought, will reveal more features that you can add to it.
The project should have enough difficulty to so that its features seem just beyond the beginner's reach, thereby motivating him to learn something new all the time.
If you are training new people in your company, then attaching them as intern resources on a live project is very rewarding.
This increases the work load of the main developers a little (because they have to review all the work that the intern does), but goes a long way in terms of training and development of the person.
I do think that games and puzzles are a good place to start as they can give great scope for developing more complex versions. For example a tic-tac-toe program can be built as a simple command line program initially that lets two players play the game.
This step can be used to show how a simple data structure or array can represent the game board, simple input to get user commands/moves, simple output to display the game board and prompts etc. Then you can start showing how an algorithm can be used to allow player vs computer mode. I like the simple magic square math algorithm for tic-tac-toe as it's based on very simple math. After this the sky's the limit, UI improvements, using file I/O to load and save games, more advanced algorithms to get the computer to play better etc. More complex and satisfying games can still be produced using text mode or simple graphics.
I've used the Sokoban game as a means of showing lots of techniques over the years.
The simplest game I've used is a number list reversing game. This involves a mixed up list of numbers from 1-9. The player can specify a number of digits to reverse on the left of the list. The aim is to get the list sorted. This is great for absolute beginners. Each little part of the game can be written and tested separately.
It really depends on what you're trying to teach the beginner. If you're trying to teach syntax, then simple "Hello World" programs and ones that spit out every odd number between 1 and 100 are fine to get them started. If you're trying to teach data structures, then maybe something like a 20 questions game or some simple sorting program. If you're trying to teach recursion, then maybe a breadth first search program. If you're trying to teach database manipulation, then something like a order tracking system would be appropriate.
Take a look at code examples in the book Python Programming for the Absolute Beginner
Text Adventure.
It's a console app
You'll need to do some useful things, hold inventory, map and room state and parse input
It's fun and you can give it to others to play! :D