So you want to be a video game programmer? – part 3 – Getting Started

…CONTINUED from PART 2. Or start at Part 1.

Some kid is always asking me, “I love video games, how do I learn to program them?”

First of all, a warning. Reaching the skill level to be a professional video games programmer takes years. There are no shortcuts. You can not possibly go from nothing to professional grade skills in less than perhaps 2-3 years — and for that you’d have to be an uber-genius — usually it takes 5-10.

The good news is that you can start very young (8-10 — I started at 10) and you can do it on your own with common equipment and readily available information.

There are two basic approaches: home training and school. And while I personally recommend both, I’m going to use this post to give my own “origin story.” In followups we can apply these lessons to the present (programming itself hasn’t changed all that much in 30 years — there are just more libraries).

[ BTW, if you’re new to the blog and wondering who the hell I am in this context, click ]

Rewind to 1979. Some of my favorite things in the world were Dungeons and Dragons and arcade games. I was really too young to actually play D&D accurately, but I loved reading the books and modules (besides my regular diet of fantasy novels). I went to the Apple Store (not actually owned by Apple or nearly as glamourous as they are today — in fact, the owner resembled Gandalf) and saw the game Akalabeth running on an Apple II (not a + or an e, but an old school II). Boy did that set me to dreaming!

Then in 1980 my science teacher brought into class a Heathkit H8 her husband built (yes built). This early computer ran a lousy version of BASIC and possesed the world’s worst storage device: the audio tape drive. Actually punch cards were worse, but with the tape drive, saving your program bordered on impossible (at least for the sharing audio tapes with the rest of the class) and so you had to type it in repeatedly. We were given a single mimeographed sheet of paper with the BASIC commands. I read this a couple times and then wrote out longhand the first draft of a text-based RPG where you wandered around and fought orcs and trolls for gold and tretchure (this is how I spelled treasure at 10). During lunch I typed in and debugged the game, editing my paper copy as needed. I used my friends as beta-testers. It may seem overly ambitious to try and recreate D&D as one’s first program, but it illustrates the programmer principle of: program what you love.

Then my best friend got himself a brand new Apple II+ (just released). This was a slick update of the Apple II. It had a whole 48k, came with BASIC, and was often (but not always) accompanied by a 143k floppy disk drive! Low low price of $900 just for the floppy drive! In any case, the II+ was so much more awesome than the Heathkit. It even had graphics!

So I began pestering my father for an Apple. This took 9-10 months of continuous harassment — the machine was expensive — and all sorts of creative techniques to convince him. I offered to mow the lawn for free. I explained how various accounting software would make balancing his checkbook a breeze, etc. Once I was victorious (Jan 1981) we got the accounting software, but he never used it, leaving me to my own devices on the machine. And I think I kept getting paid for the lawn. Still, this episode illustrates another important programmer principle: persistence.

After the Apple arrived, I spent nearly all of my free time (perhaps 6-8 hours a day) on the thing for years. This is essential. You must offer up blood onto the alter of the programming gods. Principle: sacrifice. I used this time in many ways. I played a lot of games. I used every piece of software. I taught myself to program. I hacked. Principle: market research. But I couldn’t afford as many games as I wanted and in those early years the available library was small, so I was always trying to make my own.

I wrote totally lame versions of nearly every arcade game ever made. In BASIC at first (we’ll get to the issue of environment later). I would generally spend a day or three banging these out until they were marginally playable and then move on to new projects. Lesson here: practice. I chose more and more ambitious games and would use each one to teach me something new. I did this in incremental steps, mostly 1-2 day projects. By way of example, I might upgrade something or I might add a load/save system (requiring learning about I/O). My early games didn’t have much in the way of collision, later ones did. I started with text, then moved up to lores graphics, then highres, then shape tables, then bits of assembly language subroutines for blitting. Principle here: baby steps.

Baby steps are incredibly important. You can’t learn everything there is to know in computers in one shot. Each little area takes multiple projects and days — at least — to learn and master. Take file I/O. I’m sure I got something up and going the first day or two back in the early 80s when I decided to add a load/save system, but I was still learning about file I/O 25 years later on Jak 3 (of course then I was inventing new ways of doing stream I/O, but it was learning nonetheless). Your first pass might work, but often you barely understand any of the principles involved.

You have to start simple, build up blocks, and go from there. That’s why interpreted languages and text programs are a good way to begin. You need to learn about variables, scope, and flow of control before you can jump into 3D graphics. And forget about complex unforgiving environments like C/C++ or assembly to begin with. Those come later and are just one more thing to spend a series of baby steps on. Just learning about makefiles or projects and compile options could stop a novice dead. So don’t — yet. Each task (and thing to learn) should be broken into some chunk that only takes a couple days at most to digest — or at least make some headway on. This leads to a virtuous feedback loop of progress and learning.

I kept writing those lame little games for about 3 years (100s of them). Of all my friends with computers (we all programmed in that era because computers didn’t do much if you didn’t program) my games were the coolest. I used them to invent all sorts of excuses to develop new skills. I wanted to learn about interpreters so I made an engine to allow the creation of text adventure games using a custom scripting language. Once I got this going I upgraded it to graphic adventures, which proved to be a perfect excuse to implement an idea I had seen in the Sierra games where line drawing and fill commands were used to compress images to a fraction of their raw size. On the Apple II a raw graphics screen was 8k. So a floppy only fit 17. A normal compressor (ancestor of zip) might squeeze this to 3-4k but that is still only 30-35 images. This “save the drawing commands” style made them a fraction of that. But for it to work I not only had to create the “renderer” (including an assembly fill routine) but I also a whole “paint program” to allow the recording/creation of these proprietary images.

However, each of these sub-steps resulted in satisfying progress on its own. Principle: chunking. For example that fill routine. It took several days, and my mastery of recursion in assembly wasn’t the best so it left little corners unfilled, but it was cool in of itself. My first fill routine (in BASIC) took 5 minutes to do a fill, and the assembly one only a second or two. Plus, I was to keep using it in all sorts of programs for years (with improvements). Principle: reuse. Building on the tools you make is essential to programming.

In 1982, I met Jason Rubin. He also programmed. He was an amazing (by the standards of the time and our age) artist and his games LOOKED REALLY COOL. But they crashed a lot. Mine rarely did. From the beginning I hated crashing. Still can’t tolerate it. I have trouble leaving the keyboard if a crash bug is still outstanding. Principle: perfectionism. My programs also did much cooler “programming” stuff. They just didn’t look cool. When we combined our talents, things really took off! Our games now looked cool AND ran decently. Impressive stuff. Lesson: partnership. Not everyone can be good at every aspect of computers. Nor even of programming itself.

CONTINUED with Part 4 – School!

_

Parts of this series are: [WhyThe Specs, Getting Started, School, Method]

Subscribe to the blog (on the right), or follow me at:

Andy:  or blog

Or more posts on video gaming here.

And what I’m up to now here.

The Hillel Sandwich

The Hillel Sandwich is a a traditional passover specialty. Simple in concept, it is a potent and delectable seasonal item.

The base is matzah, unleavened bread (cracker-like). Seder participants recall the slavery that reigned during the first half of the night by eating matzo (the “poor person’s bread”), maror (bitter herbs which symbolize the bitterness of slavery), and charoset (a sweet paste representing the mortar which the Jewish slaves used to cement bricks). In the process of fleeing from the wrath of Pharaoh, there was no time to leaven the bread, and hence what was probably a flat risen bread like pita, became matzah (even flatter and denser).

My mom’s homemade horseradish (the pink color comes from beets mixed in). This is known as the bitter herb and symbolizes the bitterness and harshness of the slavery which the Jews endured in Ancient Egypt. This concept is extended to represent the bitterness of any kind of enslavement or bondage, throughout the whole world and all peoples.

Horoset, a mixture of apples, nuts, cinnamon and other spices. This is representative of the mortar used by the Jewish slaves to build the storehouses of Egypt.

We lay everything out.

Start with the horseradish.

Throw some of the horoset on top, and enjoy.

On the symbolic level: During the Passover Seder (the annual commemoration of the Exodus from Egypt), one re-enacts ancient customs in the Haggadah. In the section of Korech, or ‘sandwich’, participants are instructed to place bitter herbs between two pieces of matzo and eat them after saying in Hebrew: This is a remembrance of Hillel in Temple times — This is what Hillel did when the Temple existed: He enwrapped the Paschal lamb, the matzo and the bitter herbs to eat them as one, in fulfillment of the verse, “with matzot and maror they shall eat it.”(Numbers 9:11) In modern times, when there is no paschal lambAshkenazi practice is to emulate this by making a matzo, maror, (horseradish or lettuce) sandwich. Philo has called this sandwich a “moral migration from wickedness to virtue. Repentant sinners at first brood bitterly (maror) over their past misdeeds. Then matzah, the healing food, brings them to humility and contentment.”

The culinary  interest is in the combination of flavors and textures. The crunch of the matzah, the often savage punch of very good horseradish, and the sweetness of the apples. For me, both the matzah and the apples allow one to withstand a higher does of horseradish. At home I like to mix the sweeter red (because of the beets) radish with Atomic Horseradish. The later is often lethally potent, and good for some good table pounding during the 10-15 seconds required to “endure” the experience.

iPad 2 – Less is More

Second Generation iPad

Being the consummate gadget man, I succumbed to the iPad 2 upgrade. In fact, I even ordered it at 1:01am, only 1 minute after they went on sale (at the Apple online store). Despite my jumping on the bandwagon, it took 13 days to come too. Mostly because I got a 3G model and those were slow to ship.

In any case, over the last year I have been pleasantly surprised at how incredibly useful the iPad is. I’ve already written one article about it, which is all still true. I owned a kindle before the iPad and found that to be of very limited use. Primarily it was good for long vacations where I previously would have dragged 20-30 paperbacks (weighing down my suitcases). With the kindle, just one little device covered that. And the thing had a tremendous battery life. But reading on it was annoying, mostly because the page turning was so slow and the screen only held about 60% of s single paperback page.

Enter the iPad. Seemingly just a giant iPhone, it’s actually radically different. As a book reader it holds a full page, and it’s fast. You can flick back and forth fast enough that it’s “browsable.” This was excruciating on the kindle. The screen is a little harder on the eyes, and the battery life only 10-12 hours instead of weeks, but the speed and size are more important to me. Plus, when you get an email, or feel the obsessive compulsive need to check today’s blog stats, you can just flip over instantly (IOS 4.2 on — so useful I was running the beta for months). It’s also just a darn comfortable way to do all your casual computer crap in bed, in the kitchen, watching tv, etc. There are a number of reasons why. Unlike even a laptop, it’s instant on, you can tuck it in the couch and grab it when an email comes in or you feel the need to look up actors on imdb (which I now do constantly). The battery life is such that as long as you charge it while you sleep, you can do whatever the hell you want with it during the day and not worry. This is so not true of any laptop, including the amazing MacBook pros and airs with their long battery life. You still have to plug them in if you are going to use them all day. The iPad isn’t a necessity, but it sure is convenient.

The First Generation, in a Tuff-luv case

Now as to the iPad 2. If you don’t have an iPad and are at all interested (plus have the disposable $500-829). Get one. The first gen ones are going on sale cheap now too. But if you already own a first gen iPad, it’s more about personal tolerance for being slightly outdated. The new one doesn’t do anything the 1st can’t except for video chat. But it is thinner, lighter, and about twice as snappy. For me, that alone is worth it. As I said, I’m a gadget freak and I use the pad all the time, everyday. The thinness and weight are noticeable, as is the speed. It’s certainly snappier. Apps load faster, the muitasking flips between apps much more smoothly. Not that the first iPad was slow, but this is faster. If you are into the games the GPU is supposedly 9x faster. Infinity Blade and the like seem very zippy now, and they weren’t bad before.

One other thing worth mentioning is the developer only multitouch gestures added to iOS 4.3. Now to use these, you have to connect the iPad to your Xcode 4 enabled Mac and turn on developer mode. This is a free download for devs, or a $5 purchase from the new Mac AppStore. I’ve only been using these for a few days but they’re awesome. Here’s yet another example of how Apple likes gets the little things right. There are 4 gestures. One to bring up and down the multitasking bar. Another to go back to the home screen, and a pair to flip back and forth between apps. It’s surprising how convenient and natural these are.

I haven’t gotten used to the subtle button changes on the new iPad yet. There is more angle to the bevel and this gives the physical controls, including the docking jack, a slightly increased inset, but I’m sure in a couple of days they’ll seem normal.
I got one the the crazy new covers too. I love the cool magnetic lock and the auto turn on / turn off feature. We will see how well the cleaning component does. The thing is ultra slim and light in the cover, particularly compared to the cushy but bulky full leather case I had on the old one. But on the other hand it’s a bit slick, and I’ve already fumbled it once and certainly don’t want to drop it. I might have to see if someone sells some sticky little tape/decal. That was a nice thing about my old case.  I have a thin sticky rubber case on my iPhone 4 for just for the texture.

All and all the iPad 2 is like everyone says, a typical Apple evolutionary tuneup to an already brilliant product. Certainly it’s better in nearly all ways, and the combination of Apple design, software, and heavy vertical integration makes it hands down the only tablet worth considering. I’m writing this blog post on it while out on the town, and while theoretically I could do that on my phone, I never would.

My previous iPad article can be found HERE.

Side by Side

The thickness

 

Ultimate Pizza – The Birthday

For the second half of my mother’s birthday weekend we hosted a small pizza party. I’ve already detailed the entire process involved in the making of my Ultimate Pizza (CLICK HERE for the index page). This party was merely a refinement of the process, but one which succeeded in taking the art to even higher levels.

This whole format makes a really great party. Newcomers don’t know what to make of it because pizzas come off the line slowly at first, in series, and everyone grabs a slice. No one sits down, but instead hovers around the kitchen island participating in the three hour frenzy of pizza making. Very fun and interactive.

First off the presses is this completely basic tomato and mutz pizza for my two-year old. He doesn’t appreciate complexity yet, although I have progressed him from generic orange cheddar to 2-3 year aged special reserve cheddar, which he is now very fond of :-).

 

Opening with some whites: a nice champagne, and a very nice riesling.

“The 2000 Brut Millesime Cuvee Speciale comes across as excessively heavy and almost sweet in its ripe fruit. Something is not quite right about the balance here. Disgorged: December, 2006. Anticipated maturity: 2009-2011.”

Parker gives this riesling 91 points, “An almost confectionary sense of sweetness and ripeness pervades the Prum 2009 Wehlener Sonnenuhr Spatlese, making it something of an exception in a vintage collection generally noteworthy for the restraint of residual sugar. Apple candy, caramel, and vanilla mingle on a creamy palate, with hints of salt, stone, and apple pit happily offering some counterpoint in a long and otherwise soothing finish. This showed more grip as it opened, and perhaps time will lend more cut and complexity to a Spatlese that on the basis of track record is likely to thrive for another quarter century or more. Incidentally, this represents the first of three lots of “regular” Wehlener Sonnenuhr Spatlese, the last of which was still in tank in September.”

And the first red. Parker 93, “Super-ripe aromas of cookie dough, spices, and black cherry syrup can be found in the nose of the medium-bodied 2002 Nuits-St.-Georges Les Pruliers. Its fabulously satiny texture, concentration, and purity are immensely impressive. This medium-bodied wine coats the palate with innumerable black fruits, minerals, and spices. Projected maturity: 2008-2018.”

Here is the evolution of my wife’s favorite pizza. Fresh tomato sauce (HERE for details and recipe), black mission figs, corn, mushrooms, roma tomatoes, and marcona almonds.

This is actually the second pizza of the night, as I had made my creme fraiche salmon pizza, but I forgot to get a photo. Fortunately, details can be FOUND HERE.

Cheese: mozzarella, parmesan, pecorino.

And then out of the oven. This time around I was trying to concentrate on slightly less irregular shapes, with some success. I have not mastered the art of “spinning” the pizza to get it very round, and the soft “00” based dough makes them very fragile.

This pizza employed a base of my special herb oil (detailed HERE at the end of this post). Then pesto (RECIPE HERE), steamed asparagus, almonds, tomato, various cheeses (including Bucheron), mushrooms, basil.

Out of the oven.

Caramelized onions, gorgonzola, figs.

Dressed with balsamic glaze. A very yummy sweet and salty pizza.

Besides all this pizza there was also a very yummy salad my mom made, with micro greens, granny smith apples, and a fresh homemade meyer lemon vinaigrette. I unfortunately forgot to take a photo, must have been running to the oven and back.

Here is a new one. One of my friends brought two new cheeses, a 5 year old aged Gouda and a 7 year old cheddar. Both cheeses were used here, along with breadcrumbs. This made fore a very yummy crunchy pizza, not unlike cheesy garlic toast.

My mother likes her pizzas fairly simple and veggie. This has classic tomato and mutz, plus mushrooms, basil, and julienned zucchini. I got to practice my knife skills with the julienne. She did throw a bit of the aged Gouda on.

It looks pretty different out of the oven, but it sure tasted great. The Gouda turned out to be a great sophisticated pizza cheese and melted here with the parm and mutz into a really great cheesy mess like on a good New Jersey style pie.

Gelsons was out of the Tikka Masala Sauce I used on New Years (HERE FOR DETAILS), but I bought a “coconut curry” sauce by the same company. It’s arrayed here with mutz blocks, corn, chaneterelle mushrooms, basil, red onion and bucheron.

I finished it with cilantro pesto (we had two different kinds of pesto this time around, DETAILS HERE). The purpose of the cilantro pesto was to mirror the finishing of a curry dish with a handfull of coriander (cilantro) leaves. The net affect on this pizza was less in your face than the Tikka Masala, but still very Indian, like Naan bread dipped in curry. Yum!

Pounding through the wines, had to crack a pair of brunellos.

Parker 91, “The 2004 Brunello di Montalcino is a fresh, vibrant offering bursting with dark cherries, violets, underbrush, minerals and sweet toasted oak on a medium-bodied frame. The wine reveals terrific balance in an energetic, focused style, with firm yet ripe tannins. The finish is long, clean and refreshing. This is a gorgeous effort from Loacker. Anticipated maturity: 2011-2019.”

Parker 93, “The stunning, single vineyard 1997 Brunello di Montalcino Montosoli, exhibits more new oak than its sibling, as well as more power, concentration, alcohol, and extract. A deep garnet color accompanies huge, sweet aromas of roasted herbs, red and black currants, cherries, earth, incense, tobacco, and soy. This is a wine to lay away for 5-6 years. This chewy, full-bodied, spectacular Brunello will be at its finest between 2010-2022.”

 

This was a great pizza made by a newcomer to our culinary circle. Pesto, red onion, bucheron, herb oil, some various cheeses, and I think a bit of acacia honey.

I sold her on finishing it with Burrata (details on my favorite fresh cheese HERE), and then single vineyard olive oil and balsamic must.  It was REALLY good.

This puppy, also by a newcomer, used a sauce base of both the crushed tomato sauce and homemade romesco (I had made it two days before for my special eggs, DETAILS AND RECIPE HERE). We also used both the aged cheeses, and some good aged parm.

Also a very yummy pizza, with the romesco lending an extra bit of tanginess to the sauce.

Another newbie with this novel shaped pizza. Basic stuffs, a lot of basil, lots of cheeses and onion.

Out of the oven.

Scott, one of my most regular partners in pizza crime, tried to make this “mexican pizza.” The sauce is actually salsa, not regular tomato. Then corn of course, various cheeses, tomato, red peppers, and some sliced jalepeno I think.

Finished with burrata and cilantro. We wanted to use avocado too, but our farmer’s market avocados were hard as rocks, they needed another week or two to ripen.

My mother liked her basic veggie so much (as did many others) that she whipped up another one.

This is a highly experimental pizza. It used a port wine cheese and aged gouda, along with chopped farmer’s market dates, and even some splashes of the currently open wine (either a brunello or a very good cote de rhone — below).

Then it was finished with fig jam (not shown). This made it a very interesting sweet pizza, even if the color was a putrescent pink.

I decided to experiment with my own caramelized onion based pizza. I added Bucheron, sharp cheddar, marcona almonds, cherry compote, and a bit of harrisa.

After cooking.

Dressed with burrata and balsamic glaze. This was not my most successful combo, and I think the problem was the cheddar. It added a tangy sharpness that just didn’t work.

This used romesco alone as the sauce, along with all sorts of vegetables, figs and cheeses, including bucheron.

Finished with burrata and balsamic and olive oil. Yum!

More wine. Parker 90, “The 2006 Fonsalette Cotes du Rhone exhibits meaty, herbal, tapenade, pepper, animal fur, and damp earth-like notes. It is soft, round, lush, and best consumed over the next 10+ years.”

For a finale Mirella, another regular and adventurous pizza chef, concocted this baby. The sauce is a mix of Moroccan Harissa and caramelized onions! Aged cheeses, onions, sliced garlic, and gorgonzola dolce.

Cheesy, spicy, sweet, this was a delicious finisher.

But we weren’t done drinking. Parker 97, “The 2004 Reserva, according to Remirez is “a great vintage, a lot of nerve, like 1994, that needed a long aging period”. Opaque purple in color, it offers up a splendid bouquet of sandalwood, incense, Asian spices, balsamic, and black cherry. Layered, opulent, and impeccably balanced, it is a monumental effort.”

My mom’s birthday cake, yes she is one year younger than my toddler.


And after that cheese bomb of a meal, nothing like a little gelato/sorbetto to polish off the palette. We experimented with this gourmet store brand, Talenti. Pistachio, Lemon, Raspberry, Double Chocolate, and Blood Orange. For store bought ice creams these were very good, but it still doesn’t hold a candle to what you get at a good gelateria. Sigh. All were good, personally I thought the blood orange was the best.

Finito.