Why schools should be like video games | part 1

Why schools should be like video games | part 1

Why schools should be like video games | part 1

Over the coming weeks, we’re going to be touching on 4 concrete problems that educators face, problems which have come up time and again during James’ year with Games For Good. The first of these problems is the fear of failure. Right now much of the way our educational system is set up inculcates a fear of failure. It teaches you of being afraid of being wrong rather than seeing your mistakes as an opportunity to improve. This does not prepare us for the 21st century. Homework is the quintessential example of this. Imagine how the typical homework assignment goes. You get something assigned to you, you take it home, you do it, and you turn it in. A week later you get it back with a grade on it, no chance to revise or redo because by the time you get it back, it’s time to move on to the next thing. You better have gotten it right on the first try, or you’re simply punished with a bad grade. Often homework serves more of an assessment than a learning opportunity.
Now compare that to how we learn in games. Think about how many times you’ve missed a jump and immediately gotten back up to try it again. Think about how many challenges in games you failed only to try a new tactic or experiment with a different solution. You weren’t trained to fear that failure, you were trained to overcome it, and failure still had consequences. This was no lovey dovey everyone is a winner experience, but you were taught that what mattered was finding a solution to the problem in front of you as quickly as possible rather than just getting it right on the first try. The important thing here is that the problems in video games ask you, can you find a way to solve this rather than, do you know the solution, which is the approach most homework in our schools takes. Each problem in a game is a chance to learn and improve rather than simply a test to see if you already have the knowledge required to solve it. This approach, the approach that games provide, is vastly more beneficial for education as it allows homework to be a learning opportunity rather than simply reinforcement or assessment. It’s pretty much impossible to do that in modern classrooms as they are now.
“Through games, we can get kids experimenting, exploring and discovering freely and perhaps through doing so, get them to love learning rather than fear it.”
Often teachers only have a very limited amount of time, just enough to grade the work they give out. They can’t be giving the type of instantaneous feedback that students need to be able to rapidly iterate on problems and test out new solutions or theories they might have, and that’s absolutely not the fault of teachers, but it is an artifact of our educational system’s past that persists into today. When our educational system was created nearly 200 years ago, this sort of drill was the only option, and schooling itself was preparing young people to enter careers that were much more dependent than learning things by rote, factory work, basic shopkeeping. It was preparing them for a world where you couldn’t just look up something on the Internet or pop onto Wikipedia. Today on the other hand, we need to prepare students to find innovative solutions. We need to prepare them to apply the limitless data we have in front of us to solve whatever problem is at hand. It doesn’t matter if it’s a job in IT or the most esoteric medical research, almost all of our decent jobs today require innovation. They require you to find answers to problems you’ve never seen before and for that, you need to see failure as an opportunity to learn rather than something to be afraid of.

Today with computers and especially with games, we provide the opportunity to take a lot of the workload off teachers to free them up to actually teach instead of being tied up in the busy work of grading homework that could be done by a machine, a machine that could respond instantly and tell the students the moment they try something whether or not they’re correct. With games, especially digital ones, we provide the opportunity to create that rapid feedback cycle that allows students to focus on iterating on their mistakes and learning through their failures. We don’t simply present them with assessments but rather use our assessment time not only to assess but to provide learning opportunities. When somebody asks you why we should consider using games in schools, absolutely tell them how much more engaging we can make the classroom, but that’s something they probably already know.

Also tell them that we can finally do away with a classroom that instills in students a fear of failure, that we can finally be done with a classroom environment that discourages students from taking risks that lead to discovery and instead prepare them to innovate for the future, that we can free teachers of the burden of creating rote homework and instead let them focus on their real job, teaching, that through games, we can get kids experimenting, exploring and discovering freely and perhaps through doing so, get them to love learning rather than fear it.

How to be a developer | Part 2

How to be a developer | Part 2

How to be a developer | Part 2

Let’s review what we’ve discussed so far. Development is all about problem-solving. Breaking a problem down and finding the right solution. To do that, you need to be a great analytical thinker and a professional tinkerer who can take apart any digital system, understand how it works and put it all back together. The best problem solvers are explorers, who are constantly learning new tools and techniques on their own and from other developers.

Today, I want to start by talking about the third primary skill of an effective developer: communication. If you’re going to be working with other people, and you are. At some point, you’re going to have to talk to them. Most developers don’t really like this; they like to imagine themselves as the lone wolf hacker, tearing through code into the wee hours of the morning. Free of stupid time syncs, like meetings, but the reality is that real development almost always happens in the context of a team, because there’s a limit to what one developer can do. A well-coordinated team can tackle bigger problems, play to each person’s strengths and solve problems faster and better than if any of them had done it alone.

One developer who’s bad at communicating can wreck all of that. When people aren’t talking to each other, the various pieces don’t line up, the wrong problems get solved. Assumptions are made. Bugs creep in and projects run late. This is just as true for working with non-programmers, as with fellow developers. Somewhere on your team, there will be a manager or an artist or a marketing person who is vital to getting the project finished and out to the end users. If you weren’t communicating with them, they can’t do their jobs and the product will suffer.

“The best problem solvers are explorers, who are constantly learning new tools and techniques on their own and from other developers.”
How do you get better at communication. First, treat it like any other problem and examine the tools at your disposal: meetings, phone calls, Skype, chat, email, passive-aggressive check-in comments. These are ways to stay coordinated with the rest of the team, so don’t neglect them. You don’t wan to treat it just like any other problem, because now you’re dealing with people. That means listening to their ideas, giving the benefit of the doubt. Not assuming your way is always the right way. This is especially true when working with non-programmers, since your tendency will always be to assume that the programmer mindset’s right and the artist is just insane.

Take a deep breath, listen to what they’re saying again. Assume until proven otherwise that they’re just as good at their job as you are at yours. A team that communicates well will always get better results than a team who doesn’t. At this point, we’ve pretty much covered what it means to be a good developer. Of course, there’s much more to it than just the big picture stuff. Here are some more specific tips and skills you should pick up as a developer.

Number 1: math, at least through algebra and geometry. You don’t have to be great at math to be a programmer, but you will need to use it. Most developers won’t do a lot of advanced math, but you’ll definitely use algebra, trigonometry, geometry and basic probability in the course of your career. If you’re going into game development to finance, higher math is even more important.

Number 2: estimation. The software industry is famous for blowing through deadlines, sometimes by months or even years. Some of the is feature creep. It’s very hard to resist adding just one more feature, but just as often it’s due to developers who are bad at realistically estimating how long something will take. Actively work on your estimation skills. Break down each piece and estimate each component. Record your estimate and see how long it actually took you and figure out where you went wrong. If you’re not evaluating yourself, you’re not going go to get any better at it.

Three: microeconomics. If you can’t talk the basic languages of economics: supply, demand, opportunity cost, game theory and all that, you and the suits are just going to be talking past each other. Most of the real decisions on a project will be influenced by money. A lot of the programmers make themselves irrelevant in the decision making process by insisting on only thinking about making the software perfect instead of what’s best for the business.

Four: basic user interface design. It’s basically unavoidable. At some point in your career, you’re going to have to make something that an actual person will use and most bad interfaces come from programmers. Understand common UI metaphors and when to use them. Accordions, modal dialogs, buttons, icons, tabs, folders, all that. Learning to see it from the user’s perspective can make all the difference. You may not be enough of a designer to make it beautiful, but every programmer should be able to make something usable.

Number 5: low-level languages, like C and Assembly. You may not use them everyday. In fact, you may never use them, but the abstractions of all the higher level languages are built on the same basics of pointers, branching and arithmetic. At some point in almost every industry, performance becomes an issue. Understanding how the code works at a low level is the only way to get high-performing code.

Six: understand how computers work. This means understanding computing hardware, networking and operating systems. Most of the details of these things are nicely abstracted for you 99% of the time. Some day your team’s going to have to deal with packet loss or page faulting or hardware failures. You don’t want to be playing catch-up then. Having a solid understanding of how all these systems work will make you a better developer.

Seven: just start programming. If all of this seems like too much to figure out right now, it’ll never hurt to just get more programming experience under your belt. If you’re watching this on a computer or over the internet, you already got everything you need to start programming so get to it.

That’s about it. Once again, very big thank you to our friends at gamedev.stackexchange.com for their insights into game development. Again, if you’re interested in becoming a programmer, definitely make some time to check them out. Even if you don’t want to be a programmer, StackExchange has opened up a pretty neat site to ask and answer more general questions about games, which you can find at gaming.stackexchange.com. Thanks again fellows. I think you may have helped at least a few people better understand how to pursue this career. We’ll be back next week to kick off another multi-part series.

How to be a developer | Part 1

How to be a developer | Part 1

How to be a developer | Part 1

Hi, everyone. We’ve been wanting to do one of these episodes for programmers and developers forever, but none of us have ever worked as one, so that made writing this episode a little tricky. Fortunately for us the guys down at StackExchange have heroically stepped in and offered to make this episode happen. In fact, they offered up so much great information that we’re going to make this a two part-er. For those of you who’ve never heard of them, StackExchange is a great resource for developers. Pretty much everyone I know goes there when they have questions. Especially if you’re starting out, put it on your list of places to visit. All right, onward, programmers, or as many of them prefer to be called, developers. What do they actually do? Most people have a vague image of a guy sitting in a basement in front of a computer typing arcane commands into a terminal and chugging Mountain Dew. Of course, there’s much more to it than that. What does it mean to be a developer?

Like most jobs, developing software takes on a lot of different forms, but the heart of it comes down to problem solving, designing a new system architecture, implementing a feature, finding and fixing bugs, all of these come down to analyzing a problem, breaking it down into its essential pieces and coming up with a solution. As a developer on a team, you can pretty much consider yourself chief problem solver. What does that kind of problem solving look like? David here had a pretty helpful anecdote. The third class he took in his computer science program was designed to introduce students to real world software development, and he thought that sounded great. They’d get to work on some real world problems that people have, so he was a bit surprised when they got their big group assignment that counted for most of their grade. He and his partner were told to build an M&M sorting robotic arm using Legos, a pair of servo motors and a webcam. This was very different from other classes he’d taken up to that point. Those were pretty straightforward, here’s a loop, now go write a bunch of stuff using loops.

This class was asking him to do things they had no idea how to do. There was no chapter in the textbook on sorting M&Ms. There was no website they could go to with a tutorial on how to build a robotic arm out of servos and Legos, at least there wasn’t then, there probably is now. They just had to figure it out. Now one way to look at this would be to say that he spent four weeks learning some truly useless skills and since that class he’s never worked with servo motors, webcams, path finding algorithms or M&Ms but in reality this turned out to be exactly what real world development is like. The next summer he got an internship at a real software company, and the first day he showed up, he was given an assignment working with technologies he’d never heard of, solving problems that nobody at the company had solved before. Real development is about solving problems whether you’re a game developer working on a physics system, a web developer working on a user interface or a quantitative finance developer working on a new financial model, it all comes down to breaking down the problem and finding a solution.

“Real development is about solving problems whether you’re a game developer working on a physics system, a web developer working on a user interface or a quantitative finance developer working on a new financial model, it all comes down to breaking down the problem and finding a solution.”
If that’s what being a developer is, what makes someone really great at this? First, a great developer is someone who is exceptionally good at analytical and abstract thinking. You need to be able to take a system apart, analyze each piece and figure out how it all fits together. If you’re the kind of person who even thinks about being a developer, you’ve probably done this from an early age. Growing up, David here would spend hours in his best friend’s garage taking things apart, computers, vacuum cleaners, TVs, whatever they could get their hands on. If analytical thinking is at the core of being a developer, how do you get better at it? Simple, by finding ways to feed the analytical side of your brain. Study math, science, logic, proofs, even puzzles, anything that emphasizes understanding and applying concepts rather than just memorizing facts and figures. Dive into existing systems and figure out how they work. Ask yourself what problems the designers were trying to solve here and why they solved it the way they did. Take things apart and put them back together, literally and metaphorically.

Analyze the games you play and the software you use to figure out what makes them work, why did the designers did it the way the did, how they could’ve done it better. All of these things will build up your analytical thinking and make you a better developer. This touches on the second most important trait of a developer. Every developer has to solve problems but what separates good ones from great ones is their ability to solve them quickly and elegantly and often what makes the different there is having a wide body of tools and experience to draw from. Think of it this way, I’m pretty sure that if you gave me the tools, I could make something resembling a tree house. Now give those same tools to a real carpenter, and he would do it much faster and end up with something much less likely to kill you. The different between me and the professional is that the professional knows what tools to use for each job, specific techniques for solving problems he’s seen before and a whole lot more about what needs to be done. The same applies to programming. What separates the experts from the novices is a wide knowledge of what tools and techniques exist and a deep knowledge of when and how to apply them.

How do you get better at this? By being an explorer. Computer programming may have been around a while, but it’s still very much in its infancy. New techniques and approaches are being developed all the time. If you want to be a great developer, you need to stay on top of these changes. When new languages, frameworks, techniques or methodologies surface, explore them and see what they can tech you. Don’t just read about them, get your hands dirty and write some code. You may find a new tool that’ll be perfect for a job someday or a new library that does exactly what you need, a language that’s tailor made for particular problems, or you may just learn a new approach to solving problems. The goal is to accumulate as many tools on your tool belt as possible so that when the time comes, you’ll know exactly what to use. Unfortunately, exploration is generally discouraged in the workplace often for good reason. Your boss doesn’t want you to be constantly trying out the latest technique or language on a critical production system, so most of your exploration will happen on side projects outside of work, and that’s just part of being a good developer.

The best developers are constantly writing code and exploring new tools and techniques in and out of work. Of course, exploration also means learning from other people. Everybody approaches problems differently so looking at how other people solve problems is essential to widening your perspective and learning to be a better developer. There are a few different ways to do this. First, read other people’s code. There’s a wealth of sample and open source code available on the Internet. Don’t be afraid to take an existing project apart and see how it works. You’ll learn how they structure the project, how they solve particular problems and probably what they could’ve done better. Second, find smart developers to work with. If you’re a student, try to get an internship at a company where you’ll be writing production code. Find an open source project that interests you and start submitting fixes and suggestions. When you’re on a team, seek out the more experienced developers. Look at their code and ask them to critique yours.

Finally, get involved in the broader community. There are a dozen places to do this online, Hacker News, GitHub, IRC, even good old Slashdot or Stack Overflow. Better yet, get involved in open source and give back to the community. If you’re in a major city, find a local developer group to meet up with. All of these will help you to explore the wide, wide world of programming. They’ll teach you new ideas, new techniques and new ways to solve problems. That’s it for part one. Next week we’ll be back to talk about the importance of communication, as well as many other skills a developer needs.

Minecraft is changing the future of gaming

Minecraft is changing the future of gaming

Minecraft is changing the future of gaming

Up until this point we’ve refrained from talking about Minecraft because we felt we didn’t have that much to add to the conversation. There is a lot to dig into about Minecraft, but so much has been said about the game by so many insightful people. That said, there is one thing that hasn’t been touched on much: what effect is this going to have 10 years down the line? Once in a rare while a single game comes along that affects the entire game industry, and Minecraft is definitely one of those phenomena. It’s such a behemoth in the game space, of course it’s going to make waves. Usually though when a game becomes a mega-hit like this, its influence is seen largely in the number of people trying to clone the game to make a quick buck. In extreme cases, these mega-hits can lead the whole game industry to focus their efforts around the genre they popularize. We saw it happen with first person shooters, it happened with MMOs, it’s currently happening with MOBAs.

I think Minecraft is a fundamentally different situation, and I think that because Minecraft has gained massive popularity with a particular group that almost none of these other mega-hits do, and that group is young children. That is important, because Minecraft is radically different than the types of games most of us grew up playing. You see, for most of us we grew up with action games, reflex-based games. Kids of the Nintendo era grew up with platformers, and so when they reached their teenage years and became the principal target market for the triple A industry, many of them looked for high action play. Later some of these kids inevitably also joined the industry and brought with them the experience and the knowledge that all those years of play had given them, as well as the biases and ingrained ways of thinking. This led to an industry increasingly focused around action play, about adrenaline games. We’ve moved from platformers to first person shooters, generation to generation. NES kids grew up to give us things like Halo for the next generation to grow up. In fact for almost the entire history of the medium most of the games that are hits with a younger audience, that people would start picking up by the time they were 7 or 8, have had the same core engagement: reflex challenges, adrenaline and mastery.

“In fact an entire generation are perhaps for the first time being trained not to expect instant gratification from their games.”
Now, all of a sudden that’s changed. All of a sudden we have hundreds of thousands of young people being introduced to gaming with a low fidelity game about building. The ripples from that are going to be enormous. Think about the patience that Minecraft takes to start. You can’t really just button mash, you can’t just slam on the controls and watch things explode. This is a wholly different expectation than most of the games for youth have had in the past. In fact an entire generation are perhaps for the first time being trained not to expect instant gratification from their games.

Imagine what that does to design, especially mass market design, 10 years down the road. Imagine if we could expect a little more patience from the player before they hop into the action. Imagine if we could count on the player being willing to do a little more work before the game really opens up. This creates an incredible breadth of new play opportunities. It doesn’t mean we’ll have to fundamentally change the genres of games we produce, but it lets us do more with them. Games like the old Thief or Mech Warrior or games in the vein or Rainbow Six become much more viable for the first person shooter designers working at triple A companies if we can expect players to come into games with a willingness and maybe even an expectation to have to put in a little bit of work up front to really get the most out of their games.

It also potentially changes what genres we build. Look at the triple A space today. It’s filled with games that are an evolution on what that audience played when they were a little bit younger, games which can bring the existing audience from one title to the next because they’re already familiar with it, already comfortable with the genre and the mechanics. Now look at the indie space. For every wildly innovative indie game we see a dozen games playing to our nostalgia, our fond recollections of earlier days.

Imagine what happens when that audience’s nostalgia, when the genre and the mechanics they are comfortable with, centers around a building/crafting game. It may well become a lot more viable for genres that haven’t seen triple A budgets for 20 years to return to the triple A spotlight. It may become reasonable for companies to branch into genres that we haven’t seen big teams work on since the original heyday of the PC. Of course this doesn’t mean we’ll lose our first person shooters or our racing games, but it does probably change the percentage of the industry that’s going to be focused on strictly action oriented play, and in 15 years when many of the people who are entering the industry are the people who grew up putting in their 10,000 hours on Minecraft, you better believe it’s going to change what they create. Will it radically alter how we fundamentally understand games? No, probably not, but can you perhaps expect to see more crafting systems in your shooters, can you expect to see more digging and mining and building in your RPGs? Almost certainly. We are an industry of human beings, human beings influenced by what we grew up with and what we grew up loving, and today’s generation has grown up with Minecraft, so can we expect this Minecraft generation to change the industry? Absolutely. As the creators and consumers of the future, their voice will weigh in on what games get made and how they’re crafted.

When looking at the Minecraft phenomena, it pays to stop and take a moment to look at the broad view and think about how the games of tomorrow might be influenced by the wild success of one game with the children of today.

Why Candy Crush is so popular

Why Candy Crush is so popular

Why Candy Crush is so popular

We want to talk about Candy Crush, but not for the reason that you’re probably thinking. We had to talk about Candy Crush Saga sooner or later. It makes over a million dollars a day on just the app alone. It eclipsed Farmville as the most popular Facebook game, and it’s almost certainly the most played game of this year in terms of raw hours spent. Yes, if you put together all the ours spent on Call of Duty or League of Legends, I’d wager it still pales in comparison to the total amount of time humanity has spent poking away at Candy Crush.

The thing we actually want to discuss today is this. Why is Candy Crush so popular? After all on the surface it just looks like another bejewel to clone. How come it’s doing so much better than Pop Caps owned by Bejeweled Blitz? Which while it does quite well isn’t clearing anything like the astronomical numbers Candy Crush has been. Let’s dig into this.

First we have to talk about pacing. In a previous episode we talked about differences in kind and how they’re used to modulate a player’s interest curve. This is something that Candy Crush does substantially better than most of its competitors. In Bejewel-ed’s main play mode you’re fundamentally performing the same set of actions level after level. You’re simply matching things in order to hit a score goal. Candy Crush gives you a plethora of goal types from level to level. That combined with Candy Crush’s hand crafted stages means the player experiences something different every level. Each new stage is intended to invoke in the player the thought, I wonder what the next level will be, which is immediately followed by the thought, I’ll try it once just to see what they do. Which is of course immediately followed by 30 more minutes playing Candy Crush.

Now as a designer, when we look at Candy Crush it’s important to note that the crafting of the stages is just as important in delivering the interest curve as varying up the goals. One of the things that sets Candy Crush apart from many of its competitors is that they freed themselves from only using a rectangular play space for a bejeweled type game. This in turn meant that they were able to have actual level design in this game which is essential to Candy Crush. Otherwise, they would have to introduce new game play elements too quickly and it would have resulted in information overload for their audience.

“From there directly integrating their game design and their monetization, rather than viewing them as two separate things, took them over the top.”
If every time they wanted to modulate the interest curve they had to either present the player with new goals or give them some new mechanic to play with. It would, at the very best, prevent the player from ever really getting comfortable enough with specific set of mechanics to truly experience depth of play. At worst it would just fall into the incoherent and overwhelming space that many games do when they toss new mechanics at you or change up your goal continuously in a desperate attempt to keep you interested. Candy Crush provides far better modulation of their interest curve than most match three games, because they’re aware that getting cherries and hazelnuts to the bottom of the screen in a level that’s shaped like an inverted pyramid, feels much different than trying to do the same thing in a level that’s just your standard rectangle.

None of this would work without the random factor. Very often you will see match three games include puzzle levels. Those levels always start with the same pieces in the same places. They are simply a logic problem for the player to work through. The genius of Candy Crush is that they have crafted puzzle like boards for the player to play on, but the starting set of pieces the player gets to solve the pieces with is randomized. This means that when a player loses instead of getting frustrated or just deciding that they don’t know how they’re supposed to beat the level and giving up, they’re much more likely to hop right back in hoping that this time they get a better draw. It also means that every time a player has to replay a level, they’re presented with a new and interesting problem to solve. The player doesn’t have to figure out how the designer wants them to solve the problem, but rather has to assess the board they’ve been provided and figure out how they want to approach the challenge ahead of them.

All right, Candy Crush manages a much better interest curve than most match three games through judicious use of play modes coupled with wildly varying board types. That still doesn’t explain how they monetize so well. Well, it comes from the fact that Candy Crush may be the most exquisitely balanced free to play game I have ever played. Ask any Candy Crush player and they’ll tell you that often they’ll end up losing the game when they’re very clearly only one or two moves away from a win. That’s really hard to achieve in a game that involves this level of randomness. Of course, the goal of that balanced design is monetization. You see, when you loose a level in Candy Crush they offer you a few extra bonus turns. While they don’t make the numbers publicly available, I’d wager that this is one of their best selling offers. This isn’t chance either.

If you look at the two main game play modes in Candy Crush, it’s quite clear that this is part of the core design of the game. In most match three games the player’s goal is simply to achieve a specified score on any given level. Not so on Candy Crush. In Candy Crush score is secondary. The two main game play modes involve either getting specific pieces to the bottom of the screen or making matches in specific squares on the grid.

candy-crushYou now what’s special about those two types of mode? What ties it in to their monetization so well? It’s the fact that it’s incredibly easy to see exactly how close you were to winning when you run out of turns. Score is a nebulous thing. It’s not easily trackable especially with all sorts of bonuses and modifiers to factor in. Plus it’s generally not the thing you’re staring at the entire time you’re playing. With modes like these, it’s right there in front of you. You can’t miss it. You were so close. Two more moves and I would have had it. With victory so tantalizingly near you’re way more likely to consider buying those bonus turns.

There’s a lot that went on in terms of marketing and corporate strategy to make Candy Crush the phenomenon that it is today. Looking at it strictly from a design sense, the game’s success comes from the fact that they created a much better interest curve than most of the competing match three games. By abandoning some of the standard conventions of the genre, and having custom designed levels with enough randomness to allow players to want to play them again and again. From there directly integrating their game design and their monetization, rather than viewing them as two separate things, took them over the top.

Hopefully that answers some questions for those of you pondering Candy Crush’s success and I really hope it goes to show how valuable building ways to modulate your interest curve directly into your systems and mechanics really is. I also sincerely hope that by the time this comes out Candy Crush has also proven that being a complete jerk and wielding copyright law like a club against smaller developers is a great way to loose your sales, destroy your company’s reputation, and prove to the world that you’re worth nowhere near the seven billion dollars you value yourself at.

SCHOOL OF GAME DESIGN