964 karma · joined December 12, 2010
http://all-things-andy-gavin.com
This principle is why Caesar, Alexander, and Napoleon were all beloved by their men. They dug in there with everyone else. Slept on the ground. Rode first into battle. All that. It seems silly, but don't underrate it. I can't tell you how many times someone would come to me at 4 in the morning before a deadline and say how much they appreciated that I was there. No one wants to feel used.
It's less so at the big corporate studios where marketing and big company policy has heavily infiltrated the system.
http://all-things-andy-gavin.com/2011/08/05/more-game-of-thr...
Cool stuff.
http://all-things-andy-gavin.com/category/games
or the first of the Crash series:
http://all-things-andy-gavin.com/2011/02/02/making-crash-ban...
As far as I know, the games we did at Naughty Dog (Crash 1-3, Jak 1-3 + X), and later Uncharted were the only major console games which large amounts of runtime Lisp. The Jak & Daxter series was 99% written in my Scheme dialect GOAL, including all the assembly. The only parts that weren't were libs talking to Sony's libraries (C++).
I have all sorts of articles on Crash 1 on my blog: http://all-things-andy-gavin.com/category/games/
For Jak & Daxter 1-3 + Jak X I did a new Scheme based compiled language (GOAL) in which 99% of the games were written. I haven't yet done a big write up on that for my blog, but I will one of these days.
http://all-things-andy-gavin.com/2011/03/26/crash-bandicoot-...
or the HN link:
http://all-things-andy-gavin.com/2011/02/10/crash-bandicoot-...
http://all-things-andy-gavin.com/2011/02/16/crash-bandicoot-...
Not that the process hasn't gone well for them -- Uncharted and UC2 are totally awesome, and watching the UC3 trailer gives me goosebumps. Dan (head gameplay programmer) did miss it so bad that he went with Scheme for their scripting :-) There are many ways to skin a cat, and the truth is that as long as you have good people (which they do in spades) and make decent decisions decisively, things tend to work out. Forward progress is one of the most important things.
There is a type of programmer who could be great, but is merely good because they refuse to use or deal with annoying techs. Sometimes, you just have no choice, and brute forcing past the annoying is by far the most efficient solution.
You all know this type. They are the kind of guy that exclusively used the Next (or Amiga), and ran windows in VM Ware on a bleeding edge Debian install in 2000 -- When the software they were being paid to develop was compiled in Visual Studio!
That's the thing. I hate MSFT. I hate Windows. I'll avoid using it. But... if the task requires that a regular PC GUI app be written, I'll use Visual Studio. Although I have been known to ask less PC phobic employees to handle this part of the job :-)
Of course, I also decided for an entire series of Playstation 2 games to forego doing the normal thing (using C/C++) and wrote my own Scheme compiler/debugger/environment. And of course, this quickly spiraled into several man years of work (on my part). It did come out pretty well. We did four games, and they sold tens of millions of copies -- dozens of programmers used the system and it was pretty cool. But boy was it stressful. I really should have figured out a way of solving my problems that didn't require so much custom programming to solve a sub-problem of my task.
My main task was: Program an absolutely fantastic 3D action game in 2-3 years.
I got sidetracked by the theory that "C/C++ sucks for writing highly customized game code" and that the compile/link/run cycle of 10+ minutes made iterative testing (which is the mother of all good gameplay) slow. This is all true, but it's a less focused problem than making a great game.
Avoiding this or that technology, or using this or that more fun one is not the same as getting the job done.
That being said, programming in Lisp, or Ruby feels like walking on water compared to C/C++'s being wrapped in chains and pushed off the boat. You just don't want to stroll off toward Australia when your gig is in Japan.
But, it does require some computer savvy to setup and operate. You need programs, you need to sometimes figure out your feed URL's. Good reader has a really weird and lousy interface.
As a computer guy I don't care, but I rarely recommend it to even medium tech savvy friends because I don't see them dealing.
We switched to Ruby. Sure ActiveRecord was buggy too, but in a totally different way. The bugs didn't crash it, or put weird data into the tables -- they merely generated sloppy or incorrect queries (this was 2006). I could spot these and work around. And there were libraries for a LOT of stuff. Fixing bugs in the libraries was easy too.
Ruby also seems to have been designed as a practical language. There is a bit of distain in the Lisp world (or used to be) for I/O, as if it's dirty. Look at Scheme, it doesn't even have I/O in the spec (or didn't last time I looked). I/O is inherently a side effect, which to the functional thinker is BAD! Well I have news. Writing real programs is all about I/O.
Eventually, it was Ruby that got me off Lisp. It does most of what made Lisp great, and the support factor is huge. There are clean standard libraries for everything, the garbage collector is good (the one in ACL is was so awful and dated -- I last used it in '07 -- you pretty much had to turn it off.
I miss the S expressions and the macros. But you can do most macro like things with a good block expression in Ruby, and you can even do auto-generated macro like functions with strings. It just isn't as elegant as Lisp.
The Ruby class system is a bit baroque, but it's actually better in many ways than CLOS, which suffers from being too dated. In Ruby you can do a lot of very cool things with extend and include. It's just a slightly different way of thinking.
The implementation isn't the fastest, but it's good. The Lisp implementations were all clunky and felt like 80s codebases. Oh wait, they are.
Support. The rate of change in Ruby is 1000x that of Lisp. Some new website has an API -- someone writes a Gem immediately. In Lisp you don't even have a really standard networking library!