I wonder who you are, if you would, say something interesting about yourself and/or a hello!
I have learned so much this year. 2010 will go down as one of the most productive years of my life, but not in the way I ever would have thought. In a nutshell, in May of last year, I quit my full time job, the first one since college, go far out of the USA for a month with my wife, and when I get back, immediately land a contract with some interesting folks.
Their goal was to take advantage of the window of time where electronic gambling games were still legal, "internet sweepstakes". I massively helped them get a start, but when I saw the end result, actually with the customers, I felt bad and left them, after only 3 months. I was paid handsomely, but when I returned home with several large checks in hand, I had kicked off a process that would continue for awhile.
Before I found any more work, and because I had enough saved up to live off of for a few weeks, I began thinking deeply about what I actually wanted to do with my life. Video game programming was very difficult, the technology broken, and the good technology requiring a large upfront investment (emacs/slime, Eclipse + plugins, build a TextMate bundle to interact with swank, lisp in general).
I used Flash exclusively, because I learned well from my previous job how the client was never content to hear that "oh, these things just happen sometimes with C++, but its really fast and powerful". One thing that I loved about Flash was how quickly you could get something cool up and running. If you have an idea of what you want and you are either a quick artist, or already have the art ready to plug in, you can easily get a game running in 1 week, that is, untuned, resources need polish, and some edge cases and menu states aren't complete, but the gameplay itself has no outstanding issues.
Ain't Murphy's law just the truth. This planet really is cursed, and because of how what you envision in your head either:
- is very difficult to transcribe cleanly to code
- requires weaving libraries together with a complex dance of polling, event handlers, and callbacks
What I am learning about life is that although new information (wisdom) that changes the game almost implicitly makes you feel like an idiot for not catching on sooner, your best bet is to forgive yourself quickly and just begin implementing the required changes in your lifestyle so that you grow and begin enjoying a new freedom in life.
Lisp forces me to also think in the same way. I program, I notice patterns, and when I see them, I adapt to them, creating macros that encompass the new patterns that emerge from the code. Macros are like habits. You do something so often, you begin to think about the process as just the inputs and outputs, and you don't worry how it works in the middle, as long as you write it cleanly. For example, gensym in your macros will save you lots of heartache. I had to learn that one the hard way. Never happened again.
After I got out of the funk that I was in about video game programming (felt very burnt out!), I was somewhat receptive to finding some new work, and I was working on a game concept. Near the end of the year (2009), I agreed to work, starting in January 2010 with the awesome guys that built GateGuru. I learned constantly and worked on very short deadlines. They were awesome and kept communication open in a way that accelerated us all. Eventually, I wondered if the iPad would be a great platform for some of my game concepts, requiring more screen area than an iPhone has. I left them on good terms after just a few intense weeks of pressure and exhilaration and growth.
I worked even harder for myself, pushing with every last bit of effort in my mind, trying to eat healthy, without slowing down or stopping work, and trying to stay awake as long as possible, but go to sleep when I knew that in the long run the sleep would be more valuable than the staying up. The iPad would be released in just a couple of months, and I had to take the Flash version to a state where I could release it as advertisement for the iPad, but the iPad would have all new levels and even better gameplay, because of the touch aspect. I came very close, literally in the middle of uploading my first successfully built binary that ran and shut down without crashing (ported from AS3 to Objective C in the course of a few days) when the iPad first-release application submission deadline expired.
One gamble was correct, it was better to write the entire game in Flash and port it, than to write the program directly in Objective-C. For those who insist that video games are just like any other software, they should have a testing framework, I can definitely say that a high level testing framework like Cucumber is required, and due to the nature of physics based games (can be non-deterministic from one run to the very next on same PC, due to leftover state in the FPU and other small variances) I would have trouble seeing how writing methods to verify tests of that nature would be worth your time. You can just see the mistakes, literally staring at you on the screen. First step, reproduce bug. Second step, figure out how to do it with regularity if clues from first step weren't enough to solve the problem. Debug the problem as much as possible. Don't be afraid. Just find the line of code where you can still figure out what is going on, and when you step over that line of code, the program begins to "crash", whatever that means in your situation. If you can't solve the problem directly, grab senior engineer, or search/post on an active newsgroup. I use GameDev.net, some more active newsgroups, and Box2d forums. I found Objective-C to incorporate all the hairiness of C/C++, with some of its own wonderful talents, and then a little more oddities for the interactions between the two languages. Pick, crappy std containers, or serialization/deserialization to/from NSArray and its ilk. You lose. Oh, and if you like Objective-C's syntax, I do have a nice house to sell you in Hillsborough.
(love :target '(belinda lisp) :source *me*)
How do I define this function? Why is it so easy in life to get unenamored with the good qualities of someone/thing that you could interact with on a daily basis? Why are the good things so hard to get, and why do I insist almost from the beginning before I can really think it through, to do so many things the hard way, and then act proud of myself when I catch myself being foolish like that?
So after I failed on my game, because art is expensive, not easy to come up with that kind of cash, I was very discouraged, because that was my life dream, I gave it a shot, and I understood that I needed significantly more funds to make something releasable, or I could work on something that could be cool for free, but I was already feeling burnt out, and programming for no profit didn't seem worth my time.
I had left my wife estranged throughout all of this, but after a difficult period of decision making (I had been trying to live two lives at once, and both weren't that great), I began to make decisive choices and start changing habits and change situations around to protect progress and encourage further growth. I had worked almost nonstop for a full year, and I was completely burnt out on programming. I began to fall back in love with her, and spent time with my dog, and began exploring new hobbies and upping my cooking skills, doubling the garlic/ranch/lime when appropriate.
Now suddenly, a few week old application to Joystick labs that I just sent out on a hunch is resulting in a phone call from one of the founders. I may just have to get back up and do this thing.
0 comments:
Post a Comment