Computer Games and Traditional CS Courses
drroman22 writes "Schools are working to put real-world relevance into computer science education by integrating video game development into traditional CS courses. Quoting: 'Many CS educators recognized and took advantage of younger generations' familiarity and interests for computer video games and integrate related contents into their introductory programming courses. Because these are the first courses students encounter, they build excitement and enthusiasm for our discipline. ... Much of this work reported resounding successes with drastically increased enrollments and student successes. Based on these results, it is well recognized that integrating computer gaming into CS1 and CS2 (CS1/2) courses, the first programming courses students encounter, is a promising strategy for recruiting and retaining potential students."
While a focus on games may help stir interest, it seems as though game development studios are as yet unimpressed by most game-related college courses. To those who have taken such courses or considered hiring those who have: what has your experience been?
I program games. I'm coding right now in fact.
In less than 6 hours, I will be going to the office to program insurance software.
If you want to program games, do it for fun.
If you want to eat, bone up on your Insert/Update/Select/Deletes.
I think the lines between video games and reality are becoming more and more blurred. There are a lot of really interesting UI interactions I've seen a lot of "serious" apps riff from the gaming community with great success. It think it's important, as a lot of the younger folks these days are learning their computer chops from games, and the transfer of knowledge is pretty significant.
During grad school, I worked in an HCI lab with a pal that used the Doom engine to do experiments on people's ability to wayfind in a virtual environment. I know it's not game development, but it made for a really interesting experiment. I'm assuming there were lots of hours spent "testing the environment" as well.
"Before God we are all equally wise - and equally foolish"
Albert Einstein
While games are obviously the result of lots of code, there is very little that a 1st year college student could learn about how to program Grand Theft Auto in 2 or 3 courses... Pong might be a good start...
Modern day games use loads of very high end CS concepts, that are simply out of reach for novices. While getting people motivated for a discipline is the first step to teaching them, this tactic sounds more like advertising than actual teaching.
Growing a problem solving mind by the use of strict logic, and taking things one step at a time is the way to become a great programmer. Setting out to recreate the Crytek engine on your first day is bound to end in failure, and more important, disappointement.
It seems like that's not the point. The goal of having students write games isn't to turn them into game programmers, but to show them that programming can be fun, and then they can use their new skills to solve all sorts of problems.
"Schools are working to put real-world relevance into computer science education by integrating video game development into traditional CS courses."
Nowhere in the article do I find a statement that supports the claim that traditional CS courses are lacking real-world relevance. Can we please stop taking shots at the four years CS degree? If you don't like it, then don't get it. It's only been five years since I graduated my with my Bachelor's in CS and I can tell you that the course I took are highly relevant. I use it every day when I'm coding and thinking about my algorithms. I need to know what the run-time complexity of my methods and how I can use various data structures to make my code more efficient and what the trade offs are. In fact I do it so much that it's almost second nature. These are things they teach you in the core CS classes, at least where I studied that's what happened. My school was very prestigious but not well known for its CS department so I imagine that my education isn't that extraordinary.
Our CS program offered a set of courses that would have allowed students to create games. In fact, that's what the computer graphics course did. I worked with a couple of students who took that class. They reused those same skills again later during our AI project when we created a simulation where the AI played against itself. We weren't exactly creating the next WarCraft III or Civilization IV but some of the fundamentals are there. Likewise, those same skills could be put to use in other projects. The school doesn't have to have a course called "Game Programming for the Real World" for people to see that its course are relevant to the various sub fields in software engineering.
Also, software engineering is a more expansive field than just making games. Programming an O/S or network programming are both very relevant skills even today.
EvilCON - Made Famous by
... I'm kind of wondering why nobody in the game industry has thought of taking User interfaces in games and fully develop them for other software apps as spinoffs for alternate sources of revenue?
I was pretty impressed by Deadspace's in-game UI, now if they could take some great UI concepts and apply them to other applications outside of games the expertise gained in the industry could probably take userinterfaces to the next level.
I've seen things like:
http://www.taggalaxy.com/ ... and always wondered what some guys in the game industry couldn't do if given the time to develop some kick ass UI.
http://cooliris.com/
I have a bachelors degree in Game design, and using games was a big part of how programming was taught at my school.
A lot of people are going to say "but how are they going to learn, games are complex, etc etc"
They don't have to be. A few examples from how I learned...
In my networking fundamentals, we covered opening sockets, threading to take care of the sockets, passing information back and forth, etc. At the point in a normal course, you'd probably do something like...make a lame chat client, or an FTP program or something. Instead the professor said, ok, I want you to make a game that uses these concepts to pass information between computers. I wrote a pong game that used a client / server type setup. One computer ran the server and both ran the clients. The server computed all the stuff and returned data to the clients on where to place the ball, paddles, and the score. I also had a lot of fun doing it.
Another good one. For my programming fundamentals class (eg, first class the freshman took to learn programming) they used python. After we covered the basics, such as arrays, if statements, loops, and so on, we got into user input. Then the instructor turned us loose on a simple header he'd made that let you move ASCII characters around the screen and asked us to make a simple game, such as a maze the user had to move through via the directional keys. It was amazing, because the next class students came in with some really awesome games using pretty complex stuff they'd looked up and taught themselves. By the end of the year long series of classes, freshman were making sprite based games on par with Super Mario Brothers 3 and other scrolling type games using PyGame.
I also learned Direct3D and OpenGL and wrote a few simple games with them to learn how to work with a rather complex API. Then we picked up Ogre and a physics engine (I can't remember the name off the top of my head). My final project was a bowling game that head realistic physics, and you controlled the spin and movement of the ball via the mouse. I showed it to my current employeer (I started out as a co-op) during my interview, and it really set me apart. Granted my job requires very little programming, but it still really made me stand out when I was able to show them something flashy, rather than a program that did a lot in the background but not much in the userland end of things. Not that theres anything wrong with that, but people tend to like flashy cool looking things.
It doesn't have to be a game. Any simulation is fun to create. Especially if it is interactive.
Game design oriented courses are a waste of time. It's an attempt to turn a difficult creative process into a trade school education.
That said, appliying game principles to CS is completely the opposite. How better to learn about trig than working with 2d graphics/games? Or more advanced concepts like matrix math and quaternions? Instead of learning abstract math, students learn how this math is applicable to real world applications and how to make it do interesting things.
I develop business software. Insurance and banking (mostly banking now), I'd love to develop games. What I don't want is 80-100 hour weeks as standard (pay for 30 hour weeks), competition with every upstart that thinks playing Quake for 20 hours straight makes them leet, companies that go bust and never pay you, a large percentage of projects cancelled, and fighting a perception that you're not doing anything serious with your life because all you do is play games. It just isn't for me.
By all means add more gaming components to the CS courses. Game programming is difficult and challenging and is an excellent excercise. Game physics is unforgiving and requires a good grasp of science. The creative side requires people to develop some very subtle skills. However don't expect your students to all like it or to become game programmers. That'll certainly be one path, but its not for everyone. I'd rather see this as an elective that can be taken early rather than having it forced as some incorporated part of a CS1/2 course. Access to the tools and mentoring on the methods would be useful to those interested in the field.
These posts express my own personal views, not those of my employer
Rite of Passage
Classical Liberalism: All your base are belong to you.
In my opinion, programmers are born, not taught. People who naturally break their decisions down into logic structures will immediately see the usefulness in programming and find it interesting from the start. People who don't think this way will never enjoy or become proficient at programming. Changing the way that you present the introductory material isn't likely to change this. Advertising an intro class on "video game programming" might cause your enrollment to swell, but I doubt it will noticeably affect the number of people who make it through the program. If a student doesn't already intuitively understand basic constructs such as if-else chains, loops, variables, etc. in their own decision-making process before they take the class, they aren't going to be able to suddenly start thinking that way once you give them a lecture on the subject.
Isn't the editorial a non sequitur? Using gaming based examples instead of Hello World or business based problems in a traditional CS course is not anything like a game design course. I have a problem with doing this though as while it may be good for the university it is bad for the students who get suckered into a career thinking they will be making games (or that working in the games industry is like making a game for an assignment). This is actually a problem infesting nearly all of modern teaching where "student involvement" is increased by making it fun at the expense of helping kids develop a work ethic*. Being able to work even while bored and disinterested with the task is a much higher predictor of future success than getting good grades because the topic was interesting.
The problem with this is that real world work is often rarely fun unless you are lucky enough to be able to achieve a dream job. Most of us have jobs that while they may be fulfilling have substantial portions that are not fun, and indeed are often gruelling*. This kind of tactic seems like a bait and switch to me. If you don't enjoy the maths and problem solving involved in CS it is not the career for you, no matter what kind of shiny veneer they put on it.
* There is a balance to be had. But I find that too often in early schooling the teachers are using this method instead of instilling in kids a desire to learn and to work hard for future reward.
** I enjoy playing games and analysing movies, but doing that as a job would not be the same as doing it for fun.
========
CINC, 4th Penguin Legion
From my experience, writing games is really quite tedious and not nearly as rewarding as solving programming puzzles and such.
That's your opinion mate. I quite enjoy it, which is why I do it for a job. There is a lot of problem solving if you work on the right games.
I didn't realize we were all bored to tears with our CS courses.
Personally, I went into the introductory programming course at my school (as a music major) expecting the worst. I was taking the course because it was required for some music technology-related courses I wanted to take later on. It was a very traditional class. By the second week, I had changed my major to computer science.
You don't need to make math and science and technology "fun". That attitude is patronizing and obnoxious. If you have competent, passionate instructors then you can teach students.
Making a game isn't necessarily more fun, accessible, interesting or inspiring than making something else. For example, In my second programming course, which was titled Data Structures and Algorithms, two of our major projects were making a text-based Arkanoid clone, and making a text-based spreadsheet application (all C++, by the way). One of the requirements for our spreadsheet was that it be able to save and load 200,000+ cells of data, in a hash table we implemented ourselves. It was much more impressive to me to create an application that could scale like this than the small, limiting world of the Arkanoid game.
It's my fear that we would be dumbing down the discipline for the sake of accessibility. It's something that requires balance, and a good project and a good instructor are necessary. It should not necessarily be, nor not be a game. It should be appropriate to demonstrate the techniques and theory to build upon to foster an understanding of computing.
I don't know what sort of mind it would take to not be awestruck by the power afforded to one by programming modern computers. It speaks for itself.
Long live the BSD license
Yes, in one course in the local IT Engineering degree, we were tasked to create a "game" over the course of a few weeks in Java. No, don't be fooled.
We were told exactly what had to happen when why, we just had to make the Java classes and translate the directions into code. There was nothing about balancing, nothing about making the game actually fun, very little about user training (my nethack-like interface was accepted without any problem)... simply nothing about the actual "game" part.
They just wanted us to make us interact a bunch of classes. The "game" part was just a cloak to make people go "wow" for those couple nanoseconds.
When ideas fail, words become very handy.
Almost nobody taking the CS Assembly Language course ends up getting a job writing in assembly either. Almost nobody taking an Operating Systems course ends up getting a job writing their own kernel.
CS is not a Vo-Tech program. The point is to understand how things are done, not nessecarily to train you to do that for a career.