Andy Gavin, co-creator of Crash Bandicoot at Naughty Dog, writes about how the game was made, including its Lisp-based GOOL language.
Commenters call his Making Crash Bandicoot series a perennial classic and a favorite developer diary, citing the GOOL part and PlayStation techniques like level streaming.
To see how quickly HN changed in the old days, skim the feature requests thread: https://news.ycombinator.com/item?id=363
Some feature requests were a matter of days, like user profiles: https://news.ycombinator.com/item?id=481
A brief essay on some HN design decisions: https://pastebin.com/bSW5dfRQ (from https://news.ycombinator.com/item?id=8424502)
I think the arc codebase is worth studying and understanding, primarily so that you can extend its simplicity into your own projects. The reason HN was such a success is because it handles so many cases in the same way: Stories, comments, and polls are all the same thing: items. If you want to add a new thing, you just create a new item and add whatever fields you want.
These rapid prototyping techniques have downsides, but the cure is to keep in mind what you can't do. (For example, you can't rename item keys without breaking existing items, so be sure to choose good names.)
Like emacs, HN's design is borne out of simplicity and generality. It's what you get when you write the next most important feature as quickly as possible, then cut as much code as possible, every day. Both halves are equally important.
It's fine to say that our modern applications are so much more complicated that the old lessons don't apply. And in extreme cases, that may be true. I don't think SpaceX has the luxury of rapid prototyping their software.
But the typical app is CRUD. For those, data processing flexibility is perhaps the most important…
Okay, so this is gonna be a bit longer, but bear with me, because I think reading this might help you.
I've been exactly where you've been. AND I did almost all the things that people here suggest. Thought I had ADHD and took Ritalin. Thought I had a depression and took Prozac (both of which I definitely cannot recommend, as they screwed badly with my short term memory).
I've tried gazillions of plugins, "hacks", to-do lists and the like, only to see that if you're smart (I assume you are because you're posting here), your subconcious is only smarter. If there's one universal truth I got out of these, it's: You can't shit yourself.
I've personally read Getting Things Done, The Now Habit, Eat That Frog and consumed lots more of self-help from some of the distinguished authors there are, including Tony Robbins, David Allen, Steven Covey, Brian Tracy, Keith Ferrazzi, Leo Babauta etc. (just to name a few).
I can honestly say that all of those books gave me something, some pushed me over the edge for a week, but then I slipped back into procrastination and self-pity. So here's the deal: For some of us, it's just much harder to stay focused on our goals and dreams. All that can and will change, but only with the right leverage, and your missing piece of the puzzle might be a different one that someone else needs. Anyway, I'll be listing the things from all those excellent books above that helped me most (repeating some of the excellent suggestions here), and finishing with my…
From the article,
"Programming languages are not immutable truths handed down from on high, but tools created by people to solve particular tasks."
Or, as the foreword to "Essentials of Programming Languages begins,
"This book brings you face to face with the most fundamental ideas in Computer Programming - the interpreter for a computer language is just another program"
Insightful, but often forgotten, . Great post (and series). There are other thought provoking paragraphs in the other posts in the series.
"my partner and friend Jason Rubin offers the following thoughts on this section:
Andy and I always liked trying to find opportunities that others had missed. Fill holes in a sense. We had done Way of the Warrior in large part because the most popular games of the time were fighting games and the new 3DO system didn’t have a fighting game on it. Our decision to do a character action game on the PlayStation was not only based on bringing the most popular genre on consoles into the 3D, but also because Sega already had Sonic and Nintendo already had Mario. Instead of running headlong into either of these creative geniuses backyard, we decided to take our ball to a field with no competition.
Filling a hole had worked to an extent with Way of the Warrior. The press immediately used Way as a yardstick to make a comparison point against other systems and their fighting games. This gave it a presence that the game itself might never have had. And as a result,…
The future is long. Computers will be around for thousands of years. They've only been useful for the last ~60 years.
A programming language needs at least two things to succeed: a niche, and corporate backing. Almost every successful language has had both.
Lisp's benefit is that it is discoverable. Programmers hundreds of years from now will continue to stumble across the roots of lisp: http://www.paulgraham.com/rootsoflisp.html
http://ep.yimg.com/ty/cdn/paulgraham/jmc.lisp
The axioms are too simple not to discover by accident.
What are some promising niches for Lisp?
I think gamedev is a likely candidate. The whole gamedev industry still uses C++ / C#. But Lisp can be just as fast -- you can even make a statically-typed Lisp, which avoids any possibility that Lisp's performance will bite you.
The benefits for gamedev in particular are immense: http://all-things-andy-gavin.com/2011/03/12/making-crash-bandicoot-gool-part-9/
The reason this hasn't happened is because it takes a certain personality type to write languages. In 99% of cases, your language will fail. Meaning, if you spend 3 years on it, that's 3 years you didn't spend learning React or Vue or %salary-du-jour. You have to love it.
That love is quite the feeling. When you design your own language from the ground up, and break down all barriers of complexity, it stops mattering whether anyone else ever uses your language. Making it was reward enough.
In concrete terms, I think self-hosted Lisps are a…
There is such a difference in coding output. Having had perhaps 50 work for me over the years (and being one myself), the top guys do perhaps 10x the output of the merely "very good" guys. And near infinite with the mediocre ones who on tough projects actually suck more time than they contribute.
The good guys also come in and contribute right off the bat. Like Christophe Balestra, who now is co-president of Naughty Dog. When he arrived on Jak 2 he was pounding out real working stuff the first or second day. By the end of the game (one year later) it was clear he was so kick ass that we promoted him across like 15 others guys to be co-lead with me on Jak 3. And he continues to kick ass to this day. I just site him, but I had the pleasure to work with around half a dozen other totally awesome guys too. Still, the "good" guys will take a system and do a great job with it over weeks. The great guys will knock it out in like 24-48 hours.
Lots of articles on this kind of stuff at my site too:
http://all-things-andy-gavin.com/video-games
One of the level designers for WoW has apparently written a book on the game's original development. The Kickstarter [1] for it failed due to an unrealistic funding goal, but if you're looking for something along those lines it might be something you'd be interested in keeping track of as he's planning on re-launching a funding campaign with a smaller budget.
Not a book, but the blog posts on making the original Crash Bandicoot [2] make for a great read, especially due to some of the issues they ran into in trying to squeeze out every last bit of performance from the original Playstation. [3]
[1]: https://www.kickstarter.com/projects/476291819/the-world-of-warcraft-diary
[2]: https://all-things-andy-gavin.com/2011/02/02/making-crash-bandicoot-part-1/
[3]: https://www.quora.com/Whats-the-hardest-bug-youve-debugged