Categories
Game Design Game Development Geek / Technical Linux Game Development Personal Development

LD33: Yeaaaaaaaah! I’m in! #LDJam

I’m in.

Here’s my pre-compo checklist for Ludum Dare, the 48-hour game development competition that starts tonight and ends on Sunday.

I’ll be using C++, libSDL2, CMake/make, the awesome sfxr by DrPetter for audio, my own basic code base, my prototype toolkit, and a secret ingredient: love.

Last time, I did a terrible job of pacing. I focused on creating bad art instead of designing a game, even after I said I would do the opposite.

So this time around, I’ll be focusing on mechanics. For real. I’ll prototype and focus on getting something playable as quickly as possible, and I will iterate on the design so I can feel confident that I will have something to submit by the deadline.

If I need art, I’ll force myself to use circles and rectangles, or I’ll make a quick doodle, take a picture, and turn it into a sprite without worrying about cleanup.

I’m looking forward to making a game with you.

Well, not with you. I’ll be working by myself. But at the same time as you make yours.

As usual, I’ll be cross-posting between here and the Ludum Dare blog.

Good luck, everyone!

Categories
Game Development Geek / Technical

My History of Game Jams, Part III #LDJam

I’ve been writing about my lessons learned from past game jams. In a few short years, I’ve gotten better at finishing more ambitious games, and yet I still had a lot to learn.

If you didn’t read them, see my history of game jams part 1 and part 2.

Mini LDs
Between the major Ludum Dare compos, there are monthly Mini LDs. Usually someone hosts it and has the option of specifying special rules.

Apparently I didn’t blog about the mini compos I participated in. My favorite is from MiniLD #6 in 2009, which had the theme Monochrome and the special rules that you could only use a limited palette of colors. The idea was to combine all entrees into a single game. The other special rule was that each entrant also got a theme. I got Guardian.

I’m not sure how the final result turned out for all the games, but my game was Guardian Fish. I didn’t even plan on participating that weekend, and yet I put together something that people have told me would make a great game for the growing iOS market if I fleshed it out.

GuardianFish

In 2010, right before Ludum Dare #18, I hosted MiniLD #20 with the theme Greed and the optional theme of Fishing with a special rule: “Only one of each.” While programming usually makes it easy to make exact copies of objects, I was insisting that everyone had to ensure there was only one copy of any object.

While there was some griping about the constraint, there were more entrees in this MiniLD than any before it, even though a power outage and my project’s overly ambitious scope meant I didn’t get my own game, The Old Man and the Monkey Thief, done in time. I should have paid attention to my own compo’s constraints and adjusted the scope to fit it instead of trying to create a bunch of content to get around it.

Inventory and Treasure!

I wrote up a post-mortem of MiniLD #20, including both my own project and running a MiniLD.

It turns out that people want closure and it isn’t enough to simply start a compo and disappear.

My favorite piece of feedback:

I must say there were times when I wanted to stuff that glass of juice down his throat.

You can’t buy memories like that. B-)

It’s also when I met McFunkyPants on the Ludum Dare site for the first time. He’s a pretty awesome game developer, game jam enthusiast, and author, and he runs One Game a Month, an awesome challenge now in its third year.

Full-time Indie Jams

The MiniLDs are great practice for the main compo. I missed Ludum Dare #19 due to the holidays, but I was sure to be part of Ludum Dare #20. At the time, I was struggling with how long Stop That Hero! was taking and I wanted a quick win.

The theme: “It’s Dangerous To Go Alone! Take this!”

Ugh. Really? The meme won? Fine.

I had the initial design I went with right away, prototyping it and eventually making it happen, except I didn’t get it done in 48 hours, so I once again took advantage of the third day of the Ludum Dare Jam to submit Hot Potato!, a game of delivering a package while avoiding the agents trying to grab it. You can pass the package to an adjacent courier (the “take this!” part of the theme).

Screenshot - Final with pedestrians

Once again, simple graphics meant getting things done more quickly, although I didn’t get nearly as much done nor as quickly as I would have liked.

It would be over a year before I would participate in another game compo. Ludum Dare #24’s theme was Evolution, the Susan Lucci of Ludum Dare themes that never won until it did.

I managed to have something playable very quickly, and I iterated the development well. I didn’t get everything I wanted, but when the 48 hours were up, I had something fairly solid to submit instead of trying to rush something that resembles game play at the last minute.

Evolution Game Play

It turns out that Ludum Dare had been getting quite popular, and it has been hard to get people to rate games. In the past, you were given a random list of 20 games, and you were expected to do your best to rate at least those games. Now, they introduced a coolness rating, which increases as you rate other games, and it’s value determines if other people see your game when they get their random list of games that need a rating.

I didn’t plan on setting aside time to play and rate games, which hurt me in this compo.

In my post-mortem of Ludum Dare #24, I wrote:

If I could do LD#24 over again, what would I do differently? I’d spend more time upfront trying to create a design better suited for the theme that is also simple enough for me to make. I’d make sure my list of tasks was prioritized so that at all times I was working on implementing something that served the core design. And I’d make sure that I had set aside time after the compo and Jam to rate other games. People worked hard on their entries, and with over a thousand of them submitted, it’s unfortunately easy to get buried. I think the coolness rating does a great job of making things fair, and the name is perfect. I want to be cooler next time.

Another Long Absense Before the Next Compo

But it would be another two years before I participated in another game jam. By this time, I had a day job again, progress on Stop That Hero! was indefinitely on hold, and I had spent some long and dark evenings figuring out what direction GBGames should go in.

And I apparently forgot my previous game jam lessons.

I came up with a lot of ideas for Ludum Dare #32’s theme, An Unconventional Weapon. Some of them were used by other participants to great effect.

I loved the idea I ran with, though: getting a giant monster to follow your character so you can lead it towards your enemies while avoiding death yourself.

LD #32 Giants And Ogres

My strategy was to doodle when I wasn’t coding, and rather than use my poor digital art skills, I would use my less-poor pencil drawing skills and digitize them.

LD #32 - Controllable Character

And then I threw out that strategy for some reason and tried to create sprites that face four directions, taking up the lion’s share of the time I spent on this compo.

LD #32 A Giant Weapon

What’s worse is that while the animation helped, it looked worse in screen shots and didn’t look much better in motion. So all that time I could have spent on actually getting game play in was wasted.

It was hugely disappointing Ludum Dare compo for me. You could say I was rusty, but I handled my pacing badly and focused on assets instead of game play.

At the time, I was hard on myself and felt like it was proof that I still suck at game development. On the other hand, a few years ago, I would never have been able to quickly put together the limited game play that I did. I had a character that moved where you clicked in a very intuitive way, which is something people complimented me on, and I had a monster that you could attract either by getting in its vision or yelling out to it. The animations helped make it easier to see where the monster was looking, but I could have simplified them and had something working much faster.

So to be fair to myself, yeah, it sucked I didn’t submit a game, but I’ve come a long way from FuseGB and my first game jam.

Immersed Learning Experiences

My time working as a full-time game developer were definitely very good in terms of how much skill I developed and experience I earned in a couple short years, but the next best thing is a weekend dedicated to creating a game.

When you fully immerse yourself in the work, and when the constraints are that you need to have something finished in a short amount of time, you don’t get to procrastinate or be idle. You don’t read how to do things.

You spend your time doing.

And in the end, you have either a completed game that never existed before or experience to leverage for next time.

Getting that game finished is a great feeling. You get to point to a real game and say, “I made that. I’m a game developer. I developed a game.”

I’m looking forward to the next game jam. It’s another opportunity to grow with an entire community of game developers.

Categories
Game Development Geek / Technical

My History of Game Jams, Part II #LDJam

Last time, I talked about my first ever game jam and my first year’s worth of Ludum Dare events. After many years of thinking about it, it was nice to finally get some wins under my belt as well as a couple of good lessons. If you didn’t read it, see my history of game jams part 1.

My second Ludum Dare year

April 17th, 2009 was the start of Ludum Dare #14. The theme, Advancing Wall of Doom, was announced while I was out at a party for way too long, which meant I got a late start.

I remember thinking about something along the lines of Rampart, and eventually settled on a design in which you are trying to capture resources with your walls while preventing your opponent from stealing them. I had some neat design ideas and concepts, but almost no code after the first 24 hours. Oof.

Back then, Ludum Dare had medals for each category, and not only can your game be ranked, but the fun side competitions were the Community and Food compos. I got gold for my food pictures, and it was the only reason I submitted anything, because when the deadline hit, I had nothing else to show for the weekend but a button you could click.

Screenshot-Walled Off by GBGames

Since I was writing everything from scratch, and my previous attempts had either keyboard input or paid attention only to mouse movement, I learned how hard simple GUI elements such as buttons were to implement. It turned out that they have a lot going on under the hood.

I really wish I had written a post-mortem for this failure, too. I think it would have been insightful today.

That year’s August, Caverns was the theme for Ludum Dare #15. I had a good idea right away, and I ran with it.

Prototype Update

I took advantage of some new prototyping lessons I learned from Ian Schreiber’s free Game Design Concepts course, and I think I was able to put those lessons to good use. The final game had a lot of help getting finished because I spent some time figuring things out with paper and wooden pieces.

CavernGameFinal

My Mineral Miner post-mortem shows that rapid prototyping works well, and writing good, non-buggy code would help too. Graphics and sound are great for polish, but a lot can be done with terrible placeholder art. I also need to work on my pacing so I’m not wasting time figuring out what to do at any given moment. With only 48 hours, every minute counts. Even though I took in a soccer game and still managed to get a game finished, I could probably have used those few hours to make things better. I would try to make sure my calendar was blocked for for Ludum Dare weekends from then on.

Full-time Indie Game Jam

I missed Ludum Dare #16 and #17, but Ludum Dare #18 was a special one in my heart. It was the first one I participated in as a full-time indie game developer. In 2010, I had quit my job earlier that summer to be an independent game developer, but I had no dream game I was trying to make. When August came, I knew I was participating in Ludum Dare.

The theme was Enemies as Weapons, and I normally don’t like to think about the potential themes before it is announced, this one was standing out in my mind. I wanted to make a reverse Super Mario Bros in which you were Bowser sending Goombas and Koopa Troopas after the AI-controlled hero. I had just been learning a lot about game artificial intelligence, and this kind of project would be perfect for putting it into practice, except I would then also have to learn platformer physics.

So I changed the concept to a reverse Legend of Zelda, in which you were sending out minions to stop the hero from storming your castle and destroying you.

I spent some time coming up with other concepts before settling back on the reverse Legend of Zelda. My prototypes look very much like the end result.

More prototyping

Stop That Hero! is finished

I created a project backlog because I knew this project was going to be ambitious. I was making an epic game.

The game has a title!

As my Stop That Hero! post-mortem says, I missed the original 48-hour deadline, but luckily the 72-hour jam compo was introduced and so I used my Monday (because I was full-time indie and could use my days however I wanted) to finish the game.

I spent too long on the UI again, and I had to scale back on my ambitions, but I was very pleased with my casual strategy game. Unfortunately, the jam compo wasn’t very popular then, so not many people played or rated my game, but the October Challenge proposed by Mike Kasprzak was coming, and now I had a game I wanted to make. I made this game in 72 hours. What could I make in another month?

It turns out that it took me another year to make Stop That Hero! into a more fleshed out game. Oof.

Stop That Hero!

More Game Jams

I was a full-time indie by this point. I had all the time in the world to participate in game jams, but I also had to do work that brought in money. What did I do next in terms of game jams?

I’ll write about it next time.

Categories
Game Development Geek / Technical

My History with Game Jams #LDJam

If you want to be a game developer, you need to develop games.

And when I look back on what games I’ve made, I realize that most were originated during game jams. What follows is a trip down memory lane with links to my game jams of the past, complete with links to post-mortems. Those are hard-earned lessons learned from a game jam veteran, kids.

2005: Game in a Day

Garage Games used to host the 24-hour game jam Game in a Day. I participated in my only Game in a Day on June 10th, 2005. The GID theme was Fusion, and I came up with an ambitious design.

I’ve been warned by TomB in #gameinaday on irc.maxgaming.net that I really should pick something simple for my first GID. The fact that I feel I need a design means that it is too complicated. Perhaps he’s right, but we’ll see how I do.

It would be an ambitious design for me today to complete in a 48-hour game jam such as Ludum Dare. I was young and naive, I was not very knowledgeable about the programming language or the 3rd-party libraries I was using. I had no experience with pacing in game jams. Even so, it seems even this early I learned a lesson that would serve me well to remember:

About 10 hours later, I finally have the main character moving about the screen according to the arrow keys. He only moves in four directions, but I’m not going to draw up more images for diagonal movement this late in the GID. I’d rather spend my time getting the fusion part of the game going.

Smart move, Self from 10 years ago!

What I recall most vividly during this jam was an overwhelming sense of fear the likes of which I have never known before. Early in my 24 hours, I started worrying that I didn’t know what I was doing and wouldn’t be able to finish, and I felt like I should quit. Logically, I knew it made no sense, that if I stopped, then it was a self-fulfilling prophecy, but it was a cold, numbing feeling I couldn’t easily ignore. Fear is the mind-killer, the little death that brings total annihilation, and I was apparently facing it head-on for the first time in my life.

But I did it! My first game jam ended with a playable game, the creatively-named FuseGB. It does not resemble my design at all, but I pushed forward and managed to make a playable game in 24 hours.

I gained a lot from my Game in a Day participation, including first-hand experience I never had before that would serve me well.

2008: Ludum Dare

Three years later, I was getting ready to participate in Ludum Dare for the first time, back before it had a dedicated domain name.

LD11 Minimalist by GBGames

Even though I spent a lot of my precious development time trying to get basic infrastructure together, I had a finished game with six hours left to polish it up before the deadline. I purposefully picked a simple set of mechanics so I had the best chance of finishing. While today’s Ludum Dare competitions see thousands of entries, in 2008, there were 70. I earned my first LD trophies in this compo, including my prized “Amazing Pickle Sandwich” award from HybridMind and The “Thanks for Epilepsy” Award from keeyai.

You can read my Ludum Dare #11 post-mortem for Minamilist, which eventually became a slightly better game Walls and a short-lived Facebook game called Sea Friends. It even inspired Maximalist, a game by pansapiens I enjoyed.

Later that year in August, the 12th Ludum Dare compo started with the theme Tower with the optional theme of Owls. I had successfully submitted games to two game jams, so I went in quite confident. I was also dabbling in test-driven development at the time, and I thought that a timed competition was the perfect time to practice my TDD skills.

Ludum Dare #12 was the birth of the ridiculously obtuse Towlr games, but I managed to submit what amounted to a tech demo. It had an owl, and a lot of people were inspired by my user interface. I got “The Palm Of RSI Prevention” trophy from Hamumu for it.

Tower Defender Game Play

But it wasn’t a complete game, and in fact it had bizarre bugs, such as the enemies climbing up the tower into the sky and getting stuck. As you can see, apparently I thought this bug was a good thing to show in the screenshot.

There was no way to lose, and no way to win. According to my Ludum Dare #12 post-mortem for Tower Defender, I wrestled with technology more than with game development, something I still struggle with because I insist on doing everything from scratch instead of using existing tech.

Months later, coinciding with the Winter Olympics, Ludum Dare #13’s theme was Roads, and early on I had a concept that I saw to completion.

Road Lockdown design

These design notes eventually turned into these guys:
Road Lockdown

driving around in this game, Road LOCKDOWN!:
The final screenshot

I find this odd, but somehow I never wrote a post-mortem for this game jam. The final entry post and development time lapse don’t really say much about what happened, but I recall getting the game finished and submitted at the very last minute, getting “The Photo Finish” trophy from Doches. The game earned me The “I Can’t Get You Because You’re In The Bike Lane” Excuse trophy from demonpants, poking fun at how you have limited controls available to steer only at intersections so your squad car and the criminal’s car can be driving towards each other but in different lanes of traffic.

But the important thing is that I finished a playable and complete game again. That’s 3-ish out of 4 game jams, and that ain’t bad!

More Game Jams to Come

Thanks for reminiscing with me. Rereading my old posts reminds me of how far I’ve come.

Soon I’ll write up what happened in the next year and beyond!

Categories
Geek / Technical Personal Development

Remember the Good Ol’ Days Before Social Media?

Web 2.0 was all about changing the Internet from a solitary experience to one in which you are a consumer of content to one in which you are creating and sharing as par for the course.

Today’s social media took it to an extreme. Tweets drive Twitter. Facebook made sharing cat pictures and status with your friends easier, before making it difficult to see unless you opt-in twice, once by liking and once by saying, “Yes, I mean it, I want to see this account’s updates, please.” Pinterest became a huge force in its own right, and it’s all about pinning interesting things you find elsewhere.

Recently I’ve been seeing quite a bit written about the downsides of social media. Steve Pavlina wrote last month about taking a year off from social media and feeling much more conscious and in control of his life. He could concentrate on what’s important, such as planning out how he was going to accomplish important goals.

Social media gives us instant feel-good rewards for doing next to nothing of value. When those rewards are no longer so easily accessible, we have to work harder for those same feelings. When we accomplish something meaningful to create that dopamine surge, the feelings can positively guide our behavior, and those feelings can stack up and create lasting motivation to tackle more sizable goals and projects.

MMO designer and author Brian Green of Pscyhochild’s Blog is writing daily posts for Blaugust, and he’s focusing on what he doesn’t like about social media this week, analyzing how it works and what the repercussions are for discourse in society.

…the nature of social media is that it polarizes people. Often if someone doesn’t appear to directly support a position, some assume they must support the opposite and are therefore the Great Satan. Nuanced views are often looked at with suspicion. This causes a lot of frustration, as it closes off useful discussion.

See Social Media: What gets promoted? and Social Media: It leads to the darkside for more of his thoughtful analysis.

While I’m a fan of social media, I find myself agreeing. I’ve had to make the decision to stop checking Facebook first thing in the morning because I found it to be a time suck. I get more important things accomplished when I focus on them than on seeing what funny video was shared today or what notifications I should check. It took me awhile to resist the urge to type “f+TAB+Enter” in my browser first thing when I sit in front of the computer, since Facebook showed up as the first entry every time. I find myself checking notifications on Twitter on my phone throughout the day, and when my app is not pushing them, I go in and check anyway in case the notification function is broken. It’s bizarre and makes it hard to concentrate.

And the content is generally terrible. <insert picture of Grumpy Cat here>

I see clickbait headlines that promise things that will blow my mind that usually garner no more than a shrug, yet I’ve already clicked on the bait and wasted my time. At some point, I got fatigued by it and stopped clicking, but I admit it took me awhile to catch on.

I see friends posting hateful statements in public view that they would never say in person, or at least I would hope they wouldn’t.

Every so often I see something genuinely inspirational, but it can be buried among the vapid motivational quotes and celebrity put-downs.

Why do we spend so much of our time actively looking at this stuff? And why do we seem to keep distracting ourselves with it when we know we have more important things to do? How else is it changing our behavior?

Social media makes it easier to share, but I get confused by the work flow of blog readers these days. Someone will click on a link in Facebook or Google+ to a blog post, read the post, then instead of commenting at the bottom of the actual blog post, they go back to the social media platform they came from and comment there. And the thing is, I do this, too. Instead of treating the blog post as the source of the conversation, it’s as if it is the social media platform that is the driver and the blog is a temporary stop.

I actually miss the old days when bloggers would write comments on each other’s blogs, when a response to your post would as often as not be a post on someone else’s blog linked back to yours instead of disappearing into the hard-to-find social media comments section.

I miss people blogging because they had something to say, not because they were part of a blogging collective interested in selling you on some narrative, trying to get you to see and click on ads while giving you feel-good or feel-angry notions for a few seconds until you click on the next thing.

All that said, social media is probably here to stay, and luckily it is amazing because while it can seem like nothing but pictures of breakfast and pithy sayings to some, it means getting around authoritarian censorship for others. That is, real and dangerous censorship, not the kind that people made up to mean they don’t like the consequences of their free speech. It means keeping in touch with people you met at a conference. It means meeting new, like-minded people.

Social media allows the invisible to become visible. Hashtags such as #BlackLivesMatter are used to raise awareness of racial injustice. Many people of privilege are more aware that they even have privilege than before. Major accomplishments in science, such as NASA’s New Horizons flyby of Pluto, means a lot of excitement and hope for humanity that may translate into children today becoming the scientists of tomorrow. People no longer limit their social circles to geographic locations, which is great for us in the flyover states.

So, there’s a lot of good in social media as well.

But social media makes all of us publishers. Did we waste each other’s time with what we put out into the world? Will we be proud of it when we look back?

Or will we simultaneously feel glad that no one can easily find it a few days after we hit the Share button and feel worried that it’s out there for someone to find if they really dig for it?

Categories
Geek / Technical

Keeping a Programming Journal #nfjs

Yesterday at the No Fluff Just Stuff conference, I went to the Learning to Learn presentation by Raju Gandhi.

He talked about the nature of knowing and learning, and he shared a number of techniques for learning more effectively.

But then he said something that especially piqued my interest. He mentioned keeping a programming journal, partly to be able to celebrate what you’ve accomplished, and partly to have something to reference when you inevitably forget a key detail.

Whenever you learn something new, log it.

And I thought, “Blog it!” That way, you aren’t the only one who benefits from your new education.

It’s something I already do, but not consistently. For instance, when I was implementing my own physics code for a game, I ran into a crash bug when sorting my objects, and when I realized what I had done wrong and fixed it, I wrote about it.

What’s funny is that later in the week, I ran into the same exact problem at the day job and knew exactly what was going wrong.

Five years ago, I wrote up all of my research into component-based entity systems when I was looking into implementing it for my own game project, and people still find it useful today. Heck, I still find it useful today. Thanks, Past Self!

Sometimes I do things that I haven’t written about. For instance, when I ported my existing game engine code and cross-compiling build scripts from SDL to SDL2, I didn’t blog about it. I had to do some research and figure out what’s really different, but for some reason I thought it wouldn’t be interesting enough for anyone but me. Now I wish I had a way of seeing how much effort there was to do so because most of it is forgotten.

So going forward, whether I deliberately set out to learn something like a new programming language or learn how to fix an annoying bug, I’ll make sure to publish it, both for your benefit and for my own.

Categories
Geek / Technical Marketing/Business Personal Development

I’m Going to the No Fluff Just Stuff Conference Today #NFJS

I’m not a Java developer, but I am going to the “The conference series for JVM software developers” called No Fluff Just Stuff today here in Des Moines, Iowa.

Why? My main tool has been C++ for years. I haven’t programmed in Java since college, and that was over a decade ago.

Partly because it’s a local conference. I don’t have to travel or get a hotel.

Partly because my day job is paying for it. When you are offered free training, you take it.

And partly because I didn’t actually know it was a Java-specific conference when I signed up for it. /me looks down at his shoes sheepishly.

The itinerary I put together for the next few days is geared towards the general talks about software architecture, metrics, and other topics that can translate well outside of a specific programming language or platform. I am especially interested in the microservices architecture session, ever since I first heard about it at an Agile Iowa presentation.

There’s even a magician among the speakers, so it should be entertaining.

And who knows? Maybe I’ll pick up some cool ideas from the Java practitioners.

I’m a bit disappointed that the Android tablet I’m bringing doesn’t seem to have as full-featured an app as the iOS version. Somehow at a Java conference the Java-oriented platform doesn’t let you download slides? One of the Play store’s reviews for the NFJS app complained about needing to carry around not only his own Android tablet but also the conference-provided iPad, which was awkward. I wonder if I’ll be doing the same today.

Anyone else going?

Categories
Geek / Technical

What Do You Wish You Knew More About?

As a child, I consumed information around me. When I discovered a topic existed, such as the Pacific Theater of World War II or how to create your own pop-up books, I wanted to learn everything about it. I read books, watched the History Channel back when they actually showed history (oh, the History Channel is this generations’ MTV, isn’t it?), asked questions, and pretty much did whatever I could to feed my passion for learning.

As I got older, I found I had to be more selective with my attention. I had more demands on my time. I couldn’t immerse myself in a single topic unless it was for school or work.

Or at least, I felt that way.

I have friends, grown-up friends, who I can say are still passionate about things I used to love. A few of them geek out when NASA or the ESA publicize their latest successful missions. Another loves all things dinosaurs.

And I realize how much I have missed about being passionate about a topic to the point of becoming an amateur scientist or historian.

The cool thing? I can immerse myself in something now, and I’m old enough to understand it a lot more than when I was a child. And we know so much more today than we did just 10 or 20 years ago, so there’s more to learn.

And even cooler, we’re still learning. We now know what Pluto looks like, and soon we’ll know more about the makeup of Jupiter. We found a regaliceratops in Canada last month when we didn’t even know it existed before.

Do you wish you knew more about theatre? About movie-making? About the lives of authors? How to start a business? Weigh-lifting and nutrition? Sustainable gardening? Game design and development?

Did you ever wonder what was in the ocean, whether here on Earth or on Neptune? Or have you ever thought about how thinking actually works?

And did you ignore the curiosity, or did you let it lead you to answers and more questions?

Categories
Geek / Technical

You Have to Actually Do the Work to Claim You Can Do It

Yesterday at the day job, a coworker and I were discussing coding challenges. He was talking about how he came across one that, even though he knows how he would approach it, it would still be fun to do.

He said at one point, “I’ve never actually written a program to solve Sudoku.”

Another coworker chimed in to say, “Yeah, but you know you could write one.”

First coworker: “True, but while I know I could, I never have.”

And they went back and forth for a bit, with one arguing that he’s more interested in tackling the unsolved problems of the world rather than work on problems he knows he can solve.

I thought about his position, and I have concluded that he’s wrong.

I agree with the desire to work on something worthwhile. Writing your own Sudoku solver when others already exist isn’t likely to result in any significant, lasting impact. Solving engineering problems such as aiming NASA’s New Horizons at Pluto accurately over the course of almost a decade? That’s gratifying work.

But there’s a difference between knowing you could write a “Hello, World” program and being able to say you’ve done it, and it’s not just about bragging rights.

Here’s a “Hello, World” in C++ that took me a mere moment to write just now:

#include <iostream>

int main()
{
   std::cout << "Hello, World!" << std::endl;
   return 0;
}

I’m confident I don’t need to run it through a compiler to make sure I wrote it correctly. I write C++ code often enough that something this simple usually works just fine the first time, although feel free to tell me I made a mistake if you spot one.

But it wasn’t always this easy for me. Before I wrote code regularly, I’d make mistakes that would seem boneheaded to me today.

For instance, I might forget to include the iostream header in the first place. Coming from a QBasic background, where PRINT was a built-in command, it was odd to have to include a separate header to do something so basic as output text.

Another example is forgetting which way the streaming operators go for output versus input. << or >>? When I wasn’t writing code daily, I would have a hard time writing new code that used cin or cout because of this issue.

I had no idea there was a need to flush the output when I first started coding in C++, so I might leave off the std::endl, probably because I didn’t know it existed at first. I would wonder why my program wouldn’t spit out the text I expected to see, or why only part of the text seemed to make it and the rest was missing.

And of course, I might accidentally forget a semicolon or two.

That’s a lot of potential mistakes for a “Hello, World” program, and I am sure I ran into every single one and possibly more.

Before I was considered an expert C++ programmer, I could argue that I know how to write a “Hello, World” program. In general, that is. I knew the trick was to use some command to output a specific string, just like most programming languages.

Boooooooriiiiing! I’m above this. I want to do something more interesting!

I remember feeling this way, but I also remember the feeling the first time I tried to read some source code I found on the Internet. I couldn’t follow it! Everything was more complicated than it needed to be, and they used “advanced” things such as std::vector.

It was around this time that I found a good C++ book and followed the exercises in the chapters. I used to skip them because I thought, “Yeah, I get the gist.”

But actually doing the work helped me internalize the lessons. I didn’t have a vague, general understanding of the code. I KNEW the code.

It’s like the difference between being told about a majestic view of the mountains are and seeing it for yourself. One is story, and the other is experience.

“Hello, World” is pretty easy to master, but writing the code to handle input correctly and spit out appropriate output builds upon the knowledge you have for doing this easy work. And the new code will have its own common pitfalls that experts don’t run into anymore but that trip people up when they first encounter it. Did your stream try to convert the user’s input into an integer and fail? Are you handling this situation correctly?

Yeah, you might get the general idea and know you COULD write the code, but until you do, you don’t get to claim expertise in writing such code. Knowing the mechanics of diving isn’t the same as knowing how to dive. Knowing how to use color to simulate shadows and lighting doesn’t mean you know how to paint a bowl of fruit.

I would love to be involved in a worthwhile, complex, never-before-solved project, but it’s hard to demonstrate competence when I’m struggling with common mistakes in the solved problems.

You have to put in the work. Until then, you’re untested.

Categories
Game Design Game Development Geek / Technical Personal Development

How to Find Indies in Iowa

When I started out as an indie game developer, I found a home on the Internet. It was a set of forums dedicated not just to game development but also to making a living from it.

And while daily online communication, or maybe just procrastination, was helpful, it was nothing compared to the monthly face-to-face meetups we had in Chicago. We met either downtown at a Dave & Buster’s or at a Starbuck’s in Schaumburg.

It was kind of a loose mastermind group, in which we tried to set goals for the next meeting and held each other accountable to them. We had a range of completely newbies to experienced and successful business owners, and we all met, tried out each other’s games, and gave feedback.

So when I moved to Des Moines, Iowa, I immediately wondered where a similar collection of indies were.

They’re hard to find, so I decided to put a summary on this page in the hopes that it will be easier for everyone to connect with groups they might not have otherwise known existed.

The Iowa Game Dev Friendship Club has a mailing list at https://groups.google.com/forum/#!forum/igdf. It’s made up of indies and enthusiasts from all across the state of Iowa, especially out of Ames and Iowa City which is where our major universities are.

There is now an associated Iowa Game Dev Friendship Club Facebook group.

Sometimes a good number of members show up at a game jam, but otherwise they don’t try to organize massive face-to-face meetings. There have been Des Moines-area meetups in the past, such as the Midwest Mingle.

If you’re in Ames or Iowa City, your local university has a game developer organization. Iowa State has the Iowa State Game Development Club, which has an enthusiastic Twitter account at @isu_gdc and a ISU Game Dev Club Facebook page.

University of Iowa in Iowa City has EPX Video Game and Animation Studio, formerly known as Animation and Interaction at the University of Iowa. You can find them at their weekly meetings and at their EPX Facebook group.

UPDATED 2016: The International Game Developers Association has a Des Moines chapter. You can find them on Twitter (@igdadsm) and Facebook (https://www.facebook.com/groups/227434834257939/.

Did I miss anyone? Is there an Iowa indie game developer meetup you’re hosting that I don’t know about? Let me know, and I’ll update this list.