Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 9 years ago.
Improve this question
This semester, I will be a TA for an introductory computer science course at my university. As part of TA training, I'll be doing something called Microteaching, which is where I teach for 5-7 minutes in front of a small audience (4-5 people) and I am reviewed on my teaching style. Among being critiqued on my personal things like confidence and eye contact, I will be critiqued on how well I know the subject material, as well as how interesting it is to the audience.
So my question is: Can you offer me any suggestions of computer science related topics that:
I can begin and finish teaching in a span of 5-7 minutes
Are fun to learn about
Are accessible to a general engineering (but not necessarily computer science) audience
Some topics I have considered:
Teaching how to write Hello World in some simple language
Introducing a synchronization problem like dining philosophers
How about a simple graph algorithm like shortest paths? People will be interested because this is more or less how MapQuest, Google Maps, Garmin, and TomTom work. And if you draw a small map of your University campus you can do a quick example and there's your 5 minutes.
5-7 minutes isn't a long time at all. A quick intro or overview of something interesting might be a good choice. You could:
introduce a programming language paradigm like functional or logical with a demo of Prolog, Lisp, OCaml or Haskell.
give an overview of how HTTP requests and responses work
describe the basics of object-relational mapping
It would be good to have some resources to give them afterwards, so they can learn a lot more if they're interested.
I am a TA, but in a different subject. I think Hello World is too boring, many students may already have some experience (the hacker type), and those are fun students. Maybe you could create some quick examples in Python, that will grab the attention, maybe something like simple graphics (fractals), simple networking (maybe send SMS to phone?). I think those can be done in a few minutes if you supply instructions.
I'm trying to merge engineering types and basic computer science subject matter. To me this sounds like the sort of audience you want to present a simple application to not just theory.
Five minutes goes fast. My best advice is to practice the presentation a couple of times as a dry run and don't talk too far down to the audience.
How about: Introducing conditionals along with functions in some sort of regulation function. A quick example is a smart battery charger that needs to look at voltage to figure out how to charge Li-ion cells properly or declare them bad (think exploding laptop batteries)
How to log and watch current trends in something (gather data) and analyze it. Say a quick weather prediction example using data available from the United States National Weather Service or something along those lines.
Walk through implementing an algorithm to do some basic calculation functions useful to engineers. Perhaps a volume of water a tank can hold sort of thing.
Related
Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 11 years ago.
Improve this question
I have volunteered to give a one hour lunchtime briefing at my workplace to our user experience team. I have a passion and love for human factors and user interface design and have had my hand in it for entire (albeit short) career.
The problem I am having is it has been very difficult for me to decide how to focus this discussion so that I can convey some good information but within the one hour time limit. I was hoping to get input from SO on what you would be interested in hearing about that can also be contained within one hour. Here is what I have so far:
Introduction to Human Factors
Psychology Behind Human Factors
UID Principles
Usability Testing
Standards
Everything at this point is very high level. I am not sure if I should cut down the topics and dive in deeper, or if it would be better just to give an entire high-level presentation and encourage individuals to come talk to me for more information.
Update About Audience
The audience (the User Experience team) is made up of a number of individuals who already have a high-level understanding of what user experience entails. Many of the individuals are software developers and some are designers. However, not all the individuals are trained designers and it may be necessary to re-hit some high points. There are areas I see for improvement (which I could talk to). Unfortunately, I am not directly part of the group, so I don't know about the internal workings of the team (which would also help me better focus this presentation).
The scenario sounds a bit worrying to me. You have a UX team, yet they aren't that hot on UX. And you've got one hour to deliver stuff like an intro to human factors?
Find out where each of their weaknesses are send them on training courses. One hour is going to achieve very little.
Given your audience already has some background in UX, I’d use the time to present one to three case studies and lessons learned from your personal work experience. Describe a design or user performance problem, how you dealt with it, and what the outcome was. Select cases without easy answers, such as one where compliance with standards conflicts with usability test results, or where a general human factors design principle conflicts with theoretical or formal analysis (e.g., GOMS).
For each case, try to engage the audience to discuss the problem and how it can be resolved. Get them to identify the pros and cons of each solution, and see if they can come up with one that addresses all issues, for example how the design can comply with standards yet still achieve high performance in testing. It’s okay to present a case where you’re not confident in the actual implemented solution. The point is the get your audience thinking about usability and design.
By working with concrete examples, you provide the audience a chance to exercise the high level stuff it already knows. This approach will cover the basics but keep you from boring individuals that already know them at a theoretical level. If the case studies serve as good illustrations of areas you think the team can improve, so much the better. If it allows you to present a new principle or process beyond the basics, that’s good too.
In other words, treat your audience more as peers, like an academic presenting a paper at a conference, rather than like a professor lecturing to undergraduates.
I'd be sure to include examples of what you're talking about as it applies to your primary product(s). High-level for part of it is fine, but examples make it real.
Also show how human factors can aid in readhing the UE teams goals faster (X% customer satisfaction, faster time to market, etc.) Whet their appetite by giving them solutions to their challenges.
I'd suggest having a progressive customer viewpoint of the user experience in terms of
Basic Features (Must-Have)
Add-ons/Enhancements
Simplicity & Convenience
How to indicate the experience is Risk free (Security)
Coolness
Green factor
If this is for you UX team, I would think they have at least the 10000 foot overview already. If this is going to be a series of lunch-and-learn talks, then do the basics first and dive into specifics in subsequent talks.
If this is stand alone, I would hit the highlights fast (5 - 10 minutes) and then choose a specific topic.
I think a lots of DOs and Dont's is both usefull and fun to see.
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
I'm an undergrad who finds computer vision to be fascinating. Where should somebody brand new to computer vision begin?
Check out this book
http://research.microsoft.com/en-us/um/people/szeliski/book/
it is in beta stage right now and available for free.
Richard Szeliski, the author, is a a well known researcher in the field of computer vision. He is also behind the Photosynth project.
Get your hands dirty! What language do you program in? I would recommend looking at OpenCV, which is an open source library that comes with many functions you can use to build interesting systems. It is written for C++ but also has bindings for Python. It comes with many demos that you can run right away and hack around with.
For complete overview of the field books are the best way to go.
For any particular topic you want to know more about, survey papers found through Google Scholar are the way to go.
For most recent research, look at papers from CVPR, which is a vision conference:
http://www.cvpapers.com/cvpr2010.html
You definitely need a solid math background: calculus, linear algebra, signal processing, probability and statistics.
You also need to understand what specific problems are studied in computer vision: recognizing an image of a particular object, recognizing a general class of objects ("cars"), detecting whether an object is present in an image, locating an object in an image, tracking moving objects in video, reconstructing a 3D object or scene from an image or a set of images, etc.
I was once told by a professor of a good way to get into a new field. Go to the library, find the main journal for that field, and start reading abstracts to papers, until you get the lingo. In the case of computer vision, good journals to look at are IEEE Transations of Pattern Analysis and Machine Intelligence, aka PAMI, and International Journal of Computer Vision (aka IJCV). By the way, the two major conferences in computer vision are CVPR (IEEE International Conference on Computer Vision and Pattern Recognition) and ICCV (International Conference on Computer Vision).
Topics that are related or heavily overlap with vision are image processing and machine learning.
If there is a course in computer vision offered at your school, take it. Get some books on the subjects I've mentioned. If there is vision-related conference near where you live, sneak in and look at the posters.
Oh, and Matlab is a great environment to play with image processing and vision algorithms.
Some resources:
Learning about Computer Vision
Must have background on signal processing methods - Transform - Fourier - Hough -etc
May use a better environment such as MATLAB for image processing
Pattern classification methods
Neural Networks is an important and widely use tool in Computer Vision
As with all other things at school.... start by taking up a course with a good amount of project work. Explore ideas and implement algorithms in those projects that you find interesting. Wikipedia is a good beginners resource as usual. If you want books, the most popular ones are:
http://www.amazon.com/Multiple-View-Geometry-Computer-Vision/dp/0521540518
http://www.amazon.com/Computer-Vision-Approach-David-Forsyth/dp/0130851981/
http://research.microsoft.com/en-us/um/people/szeliski/book/drafts/SzeliskiBook_20100423_draft.pdf
But I would suggest before you jump in to books, take a course/go through some course slides at one of the top ten universities or via iTunesU.
I found this guide to be pretty good at introducing the novice to computer vision, but you really need to go for a MS for that. Electrical and Computer Engineering Departments offer it under a Digital Signal Processing Program, from which you can choose to specialize in Machine Vision or Digital Imaging (whatever they may call it).
SOCIETY OF ROBOTS - COMPUTER VISION TUTORIAL
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
I am looking for some good text books in the public domain, which could be used to teach computing to school kids aged (10-15). I couldn't get any googling for it. Can somebody out there point me to good links. If text books are not available any information on what is taught commonly to this age group as part of computing curriculum will be helpful.
"Computing" is an awfully broad topic. Do you mean teaching them how a computer works (like on the inside), or how to use computer applications (word processing/spreadsheet/internet), or how to program them? I think all three would be good topics for 10-15 year olds.
My dad, a computer engineer, taught me much of the above on my own around that age (of course, it depends upon how motivated your students are). Mostly it was through experimentation, and asking questions. I'll point out a few good resources that I went through when I was that age. While these books aren't public domain, they're not that expensive (you can purchase all the books I mention below for under $100US at the time of this answer, cheaper than a single college textbook; the movies you could try finding at your local library). Note some of these are from MS-DOS 3.x era of 10-12 years ago, but honestly, the basic concepts haven't changed that much. The IBM PC platform still has the same architechture, it's just been upgraded. Applications have changed though.
How a computer works
You might want to teach about all of the different parts in a modern computer tower by opening one up and explaining to them what each part is and does, and how they hook together. It doesn't even need to work, you just need to be able to show them stuff. A good, simple book that explains the parts of a computer is How Computers Work by Ron White. I believe there is also a Magic School Bus episode on this ("The Magic School Bus Gets Programmed", Episode 50 From Season 4).
After that you may want to explain about the startup process, and how the computer first turns on, and doesn't know anything. Then you could explain about how the BIOS chip finds all the various things hooked to the motherboard, and then uses the hard-drive to start the Operating System (Windows/OS X).
There are some interactive programs that describe how all of these things work, although I can't think of any off the top of my head. There was an old learning program called "What's in that Box" that I used, but it's so outdated now its useless.
If you have really motivated students, you may want to introduce them to the electronic foundations of the computer, and binary numbers and gates. A good (teacher level) introduction to these things is Charles Petzold's Code. You try explaining how computers talk about things using 1s and 0s. Also, there is a Bill Nye the Science Guy episode on this (Season 4, Episode 78).
How to use applications
Honestly, I'm really not sure what to tell you here, but I imagine you can find lots of tutorials on this if you google. Explaining Word, Excel, etc. to students is beneficial and I imagine widespread.
NB: Teach students how to touch-type at that age. I didn't learn how to touch-type until I was in middle of HS, and it was hard. By that time, I had already learned how to do stuff on computers and play games on the keyboard, and so had my fingers memorized to go to all the wrong spots. If you catch them early, they'll do well.
How to program
The way I learned how to program at
age 10 was this way using a language called BASIC (BTW, that
link gives lots of other ideas for
learning how to program at a young
age). I'm certain others will have
good answers on this too. A book that I used to learn from after that was QBasic by Example, that a computer bookstore owner gave to me when I was 12 from his throw-away pile. That was my programming bible, and I read it cover-to-cover.
Note, though, that some students will want to do "cool" things when learning how to program; admittedly, how I learned would not be classified as cool. My old computer science prof from undergrad is involved in a program with inner-city kids that teaches them how to program robots using a language called LOGO, Sun's SunSPOTS, and LEGO Mindstorms NXT (depending upon the class focus). You basically give commands to the robot and it does them, and you can watch the robot do what you told it to do. Very cool, and interactive. It can get them thinking about programming, and how its about telling the computer/robot what to do, and how you can be a "robot commander" or "computer commander." This is, essentially, what computer programmers do everyday.
The new children's show Cyberchase teaches critical thinking skills that are a foundation to programming skills.
Just some thoughts to get you started. I think many kids would appreciate a hands-on approach; most of those in the industry got started because of hands-on exposure and not rote book-learning. The above early education, along with some books, worked for me, most of that stuff I rattled off from memory.
Also check out Woz.org; Steve Wozniak (programmer/hardware engineer, designer of the Apple ][) now teaches grade school children computers.
Try How to Design Programs: An Introduction to Programming and Computing, by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi. The book uses a language called Scheme, which is freely available and designed to be used by students. The book is available online at www.htdp.org.
The book was designed to be used by high school and university introductory programming classes and is intentionally written to teach how to design a program, not just how to use the syntax of a particular programming language. It stresses things like how to design readable programs, thinking about the structure of your program before typing anything, and general programming concepts such as recursion and encapsulation.
Think Python would be my first choice for teaching programming. The book is free, python is free, and some really good IDE's are free - Stani's Python editor or Wing IDE 101. This provides a really good environment and set of resources for teaching programming to kids in that age range. If programming is a bit much for the younger kids, PyGame can be used to get simple graphics on the screen fast - and that is a great way to hold onto attention span.
EDIT: I just ran across a great book for introducing computer programming to kids (and other beginners): Hello World! Computer Programming for Kids and Other Beginners. This book uses Python as the programming language, and the projects are all simple games. Overall, this is a great book for introducing kids to computer programming.
In the UK schools tend to have some affiliation with Microsoft so:
Word
Excel
What is a network
Dinner-time Java class (if lucky)
What areas are you trying to focus? MIT open course ware offers a few good open texts on different programming languages - but doubtlessly intended for an older audience. I think that finding books specific to this age group on general computing will be a challenging task, but there are always good websites that the kids can explore addressing a variety of different topics.
As mentioned, unless you know the kids to be at a more advanced level (which many that age are now days) I'd focus on word processing, web use (searching & responsible surfing) and things of that nature. Googling "introduction to for kids" will often yield useful websites on things of such nature.
Check out Squeakland. It's specifically about computers & teaching.
Not a book, but could looks like a pretty good resource.
KidsDomain.com
The C# Yellow book by Rob Miles is a good and free resource to teach students C#. It is used by the Department of Computer Science in the University of Hull as the basis of the First Year programming course
For younger kids especially ToonTalk is an awesomely cool introduction to programming. It even does concurrent programming from the very beginning. ToonTalk teaches foundational principles while being extremely engaging with a 3D interface, animals to carry out computations and so on. I recommend it very highly!
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 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