Hideo Kojima: Pragmatic Programmer
“Kojima: – I’m not a game producer because I want to make money – I
just want to MAKE something. There weren’t any good producers at the
time I was looking for one, so I did it myself. I live and breathe for
gaming, and if my job was just to lead a company meeting or something,
I would never ever do it.”
I am often asked, when I go in for interviews, what my goals
are for the next 5, next 10 years. I think what these interviewers are
really looking for is a reply like:
“Well, I hope to work on some
certifications, continue my education as a developer, and work on
project management at some point, blah, blah…”
Oddly, working as a project manager has never crossed my mind
as a serious possibility. I can’t even fathom the idea (at least at
this point in my career) that I’d move away from the code, away from
the act of creation.
My mother always asks why I’m crazy and don’t go to/stick with big companies like JPMorganChase or Merrill Lynch,
where I can make almost double what I’m making now. I think part of
that is because I like to create things. When you go to companies like
that, you don’t create so much as do things. Yeah, I guess I could
always satisfy my Lego-maniac side on my own time, but when you work in
NYC, the commute really eats into your free time.
“Programming is, above all, a creation act.
In this sense, writing a good program is not so very different from
designing a usable interface, or producing an aesthetic work of art, or
writing a clearly articulated essay, or any of the other myriad
creation acts humans delight in…For the programmer essentially works
with concepts alone, he builds abstractions that have no real basis in
And that is truly what I enjoy about programming and software
development: the idea that I am creating some piece of code that
someone finds useful. It is for this reason that I find that it is not
nearly as satsifying working in the product space (i.e. working with
SharePoint, Plumtree Portal, etc.).
“Kojima: – The technological development is
also going so fast now. If you keep away from the development team for
a period of time, you can’t just pop back in. You just don’t know what
they’re talking about. That’s why I can never leave the development
phase of games.”
When I first arrived here at Immedient, I had a talk with one
of my then co-workers, Kent Brown, about his design philosophy and his
approach to software. It had arisen out of a discussion about Rockford Lhotka’s
CSLA framework, which he chose to build upon for a project that I was
shadowing on. Kent explained to me that he had chosen this framework to
build from because Rocky seemed like he was very close to the code;
Rocky had an understanding of the real problems and challenges that
developers face when building applications. I had just come from my
horrible experience at Factiva
where I had to deal with a so-called “architect” who was, to me, no
more than a one time developer who now focused more on the business
than on the technology, essentially, a manager. It was refreshing to
hear Kent’s perspective, though, on the subject of being an architect.
His sentiment mirrored the words of Mr. Kojima: you must
always be deep in the code and the technologies with which you choose
to build your creations with. Otherwise, you risk losing touch with the
act of building, the act of creation and all of the difficulties and
joy that go along with it. Kent also emphasized that he felt that one
could not be a successful architect without knowing the technology
inside and out since then there would be no base from which to design;
any design born of such circumstances is doomed to failure. Such was
the case with John, the self proclaimed “architect” at Factiva who had
never in his days developed a single ASP.Net application and somehow
ended up as our architect on this project, responsible for making
technical design decisions regarding a technology with which he had no
foundation in apart from a few introductory classes.
In The Pragmatic Programmer, Hunt and Thomas offer this as tip #8:
“Invest Regularly in Your Knowledge Portfolio”
Extrapolating on this, they add that, as developers, we should always try to:
- Learn at least one new language every year.
- Read a technical book each quarter.
- Read nontechnical books, too.
- Take classes.
- Stay current.
- Get wired.
ASP.Net is not even 4 years old yet and we are on the verge of an
entirely new paradigm in developing web based applications with ASP.Net
2.0 (re:Atlas; okay, not entirely new, but just incredibly painstaking and
difficult before). Just as Kojima points out in the game development
space, in the web/desktop applications space, the technologies change
so rapidly nowadays that, as developers, we really have to keep our
nose to the grindestones and hold close to ourselves the passion for
creation and self improvement.
I think Kojima’s words and my recent work with the beta bits of
.Net 2.0 and VS2005 have helped reinforce in my mind that it’s okay to
not want to head towards a management career path 🙂