Behind the controller: An interview with CodeBeast's co-founder Steve Anichini
- select the contributor at the end of the page -
Steve Anichini is a veteran programmer in the video games industry who’s work on such titles as BioShock Infinite as the Principle Graphics Programmer and John Woo Presents Stranglehold as a Systems Lead, to name a few.
He possesses a BS in Math/Computer Science from Carnegie Mellon University and is currently serving as the Chief Technical Officer at CodeBeast, a company he co-founded.
Thanks for taking time for this interview, Steve. Can you start by describing what guided your interest in games and was this something you decided to do before attending college or did it materialize out of the opportunities you had after graduation?
I had a roundabout path to games. I started programming at about 10, when my parents bought a Commodore 64 for me. I played a lot of games and decided I wanted to make my own. I learned BASIC, then tried C64 assembly for a little bit, then jumped to C when I got an Amiga. I wrote one game and released it as freeware while I was in high school - it was an Amiga version of the board game ‘Abalone’. For a high school project I also wrote a software 3D renderer.
When I got to college, I decided I needed to do “real software”. I had a couple of internships at Microsoft, and one at a company called Trilogy, all in business software and all very respectable. I still took some graphics classes because it still interested me.
Sometime during my senior year I had an epiphany that while the internships I had were fine and I was glad to have done them, that world wasn't for me. After graduating, I worked at a startup that was building 3D scanning hardware. After a little while, I got my first games job at Jellyvision working on the You Don't Know Jack series. From then on, I never looked back and stayed with what sparked my original passion for programming.
Did anyone near you influence your decision to pursue engineering in games?
My dad had been involved with computers in one way or another since the 60s - from operating computers for the Air Force, to doing so for Playboy of all places, and then years working as a recruiter specializing in technical fields. My parents were very supportive of getting me a computer in my early days and just having one was a huge impact.
For high school, I went to the Illinois Math and Science Academy, which had amazing computer resources at the time. It was one of the first high schools on the internet, and in a time period when most schools would be lucky to offer a BASIC class they were offering advanced classes in C++ and Pascal.
Carnegie Mellon has a very strong CS program that I benefited from. For example, I wrote RenderMan shaders in a class the late Andy Witkin taught, which exposed me to the idea of programmable shaders years before they were available on commodity consumer hardware.
Are there any books you’d recommend to beginning engineers?
In no particular order Code Complete, The Pragmatic Programmer, Knuth's The Art of Computer Programming and Brooks' The Mythical Man-Month. There are many other great books but I would start with these.
The most important thing for any beginning engineer is to always be learning. Even now, I’m constantly reading the latest tech blogs, graphics papers, hunting Twitter for articles, or reading things off of programming aggregators like Hacker News or /r/programming on Reddit.
Do you have a favorite programming language?
I'm generally comfortable in different languages, but I'd say I'm most comfortable in C++ just because that's what I use the most on a day to day basis.
If you want to do games, you really should learn C++ at some point. I enjoy C# quite a bit; it's my go-to for quick and dirty utilities. Writing shaders in HLSL/GLSL is quite fun. I'm intrigued by Rust but haven't had a chance to use it much.
In the past I've used functional languages such as Lisp, Scheme and ML – I’d recommend every programmer give a functional language a spin, you learn different ways of thinking about code. These days more modern functional languages would be Haskell or F#.
Do you think there will always be ways of improving or expanding the code used in games or are we just using the same tools in different ways?
We're always improving the tools and engines. Console games are a great example of this - a console lifecycle can last 10 years now. The hardware doesn’t change at all during that time, but the difference between early titles and later titles in the cycle is night and day.
Much of this is artists and designers getting the most out of the limitations, but quite a bit is improved tooling and better engines. Deferred rendering wasn't really on a ton of people's minds at the beginning of the 360/PS3 cycle, and toward the end many games were using it.
Physically-based shading has taken the industry by storm in just the last few years. I imagine in five years we'll have new and better techniques.
Another way the tooling has improved over the years is game development is a lot more democratized than when I started, due to engines like Unity and Unreal Engine 4. I see small indie teams producing games on a shoestring that 15 years ago would have cost hundreds of thousands or millions of dollars to make.
One tradeoff is the tools themselves have become so complicated they are platforms in themselves, which creates a lot of opportunities for companies like CodeBeast who have deep knowledge of how the engines work and can help teams get the most out of them.
Looking at the future of games, what areas of improvement do you think we need most? Is there anything on the horizon of engineering or games that you’re looking forward to?
Content creation is always very expensive and often the limiting factor in game development. I think any tools we can make to empower artists and designers can have a big impact. 'Procedural' content sometimes gets a bad rap, but I find if you take something procedural, make it direct-able, avoid the 'p' word and call it a tool it gets a lot more acceptance.
In BioShock Infinite, nearly half of the buildings in the game were made by artists using a procedural system we adapted from Epic's ProcBuilding tool and extended to make usable in production. The Skylines were created using a procedural tool we developed based on spline deformation, so artists and designers could just draw out paths for the Skylines directly.
What I'd like to see is more toolkits to help engineers make these sort of procedural tools - in my experience the needs are often game-specific and it'd be nice to be able to quickly cobble these tools together.
As far as what's on the horizon, I don't know. Will VR or AR catch on in the mainstream? What will the mobile or console market look like in five years time? Will micro-consoles ever really find success as gaming devices?
One constant in my time in the game industry is five years from now, everything will be different, but anyone who's predicting exactly how it will be different is usually wrong.
If you could add a feature to the programming language you use the most, what would it be?
I'd probably remove some! C++ would probably be easier to use if it could break backward compatibility with C, but this will never happen, there's too much legacy code out there.
What brought about the idea for founding CodeBeast with your business partner Steve Ellmore?
Steve and I have worked together for ten years, and we first started talking about doing something like CodeBeast while Midway was in its death throes. At the time we decided we weren't ready and took a big chunk of the Stranglehold tech team with us to work at Irrational as the tech team for BioShock Infinite.
It was the right call. The project had its ups and downs but in the end we produced the type of game you maybe only get a chance to work on once in your career. After Infinite we started talking about doing something like CodeBeast, because we realized one of the favorite things for us in this business is getting games out the door.
We live for that last six months to a year, where you're optimizing, fixing bugs, just getting a game in shape to ship. We still do a fair amount of early feature work and tooling, but our bread and butter is we know how to ship games.
After the Irrational layoff, we had the opportunity to start CodeBeast and take a big chunk of the Infinite tech team with us - including some people who've been working with us as far back as the Stranglehold days.
Are you working on anything that you can talk about?
We're about a year into CodeBeast, and in that time we've already helped ship the PS4 and Xbox One versions of Borderlands 2, and helped ship Gears of War: Ultimate Edition on Xbox One.
In that same time, we've nearly doubled in size, and opened a second office in Chicago. It's been a pretty exciting time for me personally because I'm learning a whole new part of the business I really only had brief glimpses of before.
Sometimes the strangest previous experience can prove relevant -- when I opened up QuickBooks Online for the first time, I realized that years of playing Railroad Tycoon had actually prepared me to read a balance sheet!
Owning and running a business is hard but in a fun way: it seems like every day has a new challenge or new thing to learn. It certainly helps to have a business partner I've worked with for a decade and trust deeply, and to have a core team we've worked with for years. I'm very excited for the company's future!