
The Mature Programmer - jblow
http://cbloomrants.blogspot.com/2011/11/11-22-11-mature-programmer.html
======
knieveltech
"The Mature Programmer would say that "clever code is almost always dangerous
code". But fuck him. The problem is that when you get carried away with being
"mature" you suck the joy right out coding."

I counter this with the following:

Fuck the joy of programming. On every occasion I've seen a multi-million
dollar project crash and burn it was directly attributable to PM's lending
credence to developers bitching about "boring" technology.

Here's the real joy of professional coding: 40 hour work weeks with no after-
hours crisis pager. The only way you get those is through a rock solid
codebase that's so boring you can ramp up the new guy in two days.

~~~
absconditus
This is exactly why I still believe that what we do is not engineering. How
long would a civil engineer be employed if he refused to use proven techniques
and complained that he was not having enough fun on the latest bridge project?
This nonsense might be fine for game development, but there is a great deal of
software that affects people's lives. It is time for our profession to grow
up.

~~~
randomdata
I'm not certain we know enough about the domain to say the profession can grow
up. We're still building bridges by placing downed trees across rivers. It
works, well even, but we're still trying to build a multilane causeway and it
is going to take a lot more trial and error to get there.

I believe it is a good thing that we have people working with all types of
mentalities. People building software to power airplanes can use the downed
tree and know it is going to work, even if it is not pretty and requires a lot
of extra effort. People building web startups can experiment with the cutting
edge technology and see how it fares, slowly passing the good back to the more
conservative groups.

I think we're pretty lucky that we, as an industry, don't need to completely
grow up. It keeps us constantly trying new ideas, some of which are good.

~~~
wladimir
Completely agreed. Software engineering is not mature yet itself, so
pretending to be all-mature about it by sticking to 30-year old rigid "best
practices" can be counter-productive at best.

People sometimes forget that new techniques might be _more_ robust and safe
than old ones, as various insights have been gained over the years.

Your other point is also good. The technology to choose depends on the domain.
Web startups and airplanes/weapons being the extremes. There is no feelgood
overall advice that applies to everyone.

------
rickmb
You take that attitude to almost any other job, and you'll quickly will be
told to leave.

The joy of being a professional, _well paid_ developer is in creating the
product, not the code. The joy of programming for programming's sake is
something you do in your own time. Sure, any smart company will reserve work
time for that, but not in the middle of building a product.

Same goes for the "healthy" opposition of a producer. If you need to be
managed like that, please fuck off back to the playground, and don't dare call
yourself "mature".

Most of this article reflects a "we are such special an unique snowflakes, we
don't need to take responsibility for the consequences of our actions" that
has become all too common in our business.

I'm all for spending truckloads of money on getting programmers the best tools
and work-environment with all the nice toys, and giving them all the freedom
in the world to do their job in any way they are most comfortable with. But
the one thing I expect from them in return is to take responsibility for
delivering results. Not to fuck around and be creative and "artistic" _at the
expense_ of those who are signing their paychecks.

~~~
nessus42
I'm actually surprised that anyone could disagree with the OP, other than to
nitpick. I found most of what he said to be so obviously true as to go without
even saying.

Maintainable code is elegant code. Too much emphasis on the straightest line
to results results in inelegant code, full of boilerplate, which becomes
progressively harder to maintain. The line between elegant reusable libraries
and impenetrable abstractions, however, is a fine one, and figuring out where
that line is doesn't come without engineers who are willing to experiment a
bit and refactor when they were wrong. Understanding of the tools and language
features that allow the creation of elegant reusable libraries doesn't come
without experimenting with them. Those who don't strive to continually learn
new things and grow their skills become jaded with what they are doing, and
eventually end up unengaged and consequently less productive, or they go do
something else instead. There's a reason that the half-life of being a
software engineer is 15 years. (Assuming the 15 year half-life story is true.
It sounds about right to me.)

~~~
einhverfr
"The line between elegant reusable libraries and impenetrable abstractions,
however, is a fine one, and figuring out where that line is doesn't come
without engineers who are willing to experiment a bit and refactor when they
were wrong."

Hence my point about design being a creative act in itself, and where a lot of
the joy really is to be had. Anything can be formalized to the point of
killing the creative spark, but generally a mature approach to software
development, but one which recognizes the fact that not only should we not get
away from programming as a creative act _of design_ but that in fact no matter
how we try we cannot do so anyway is the best approach IMO

------
wwweston
Lots of negative reactions here, some of which might be coming from
extrapolation.

I'm reading his main points as:

1) Enthusiasm can be as important to productivity as adherence to "best
practices." Doing something fun/interesting feeds enthusiasm.

2) It can be helpful to have someone else taking on the cognitive load of
managing the project.

3 & 4) Offloading decisions to conventions and heuristics can also reduce your
cognitive load, even when you're an expert who knows when/why to depart from
them.

Still seem controversial?

------
_m4
I disagree to reduce programmers to geeks that only have fun when there is a
ton of new technology and a fancy feature that only they like. Most people
I've worked with have fun when the project goes well, customers are happy and
the like.

A really post-mature programmer understands the values behind so that he does
not need rules any more.

~~~
biesnecker
Exactly. There is much joy to be derived from a codebase that works, that is
maintainable, and that is understandable.

------
wwkeyboard
And yet again a 10 year old article[1] from Spolsky captures most of the rants
in both the post and the comments. What works for a game developer does not
necessarily work for an internal cooperate developer.

[1] <http://www.joelonsoftware.com/articles/FiveWorlds.html>

~~~
JabavuAdams
Fantastic article! I'd forgotten about that one.

------
apaitch
I would like to think that there's a happy medium between these extremes,
especially considering that cleverness is not necessarily equal to
incomprehensibility. Choosing the best tool for the job and writing clean code
can be just as satisfying as writing clever code, and the two are not self-
exclusive. I think one can take joy in writing quality software - one that
works, one that does its job, and one that other people can understand and
extend.

~~~
j_baker
I think that was actually his point.

------
Joeri
I would say that the mature programmer has learned that there is only one
priority, UX, and that code must be built in the way that helps the user most.
Depending on the use case, it can be pretty or ugly, fun or boring, oo or
procedural. Sometimes the best choice is even to refuse to write a piece of
code at all. Sometimes the best solution doesn't involve a computer.

------
epo
That may have been fun for him to write, it wasn't fun to read. Given his
attitude, I wonder if the same could be said of his code.

------
lalalalaXX
I read this as "A mature programmer mangles their time and productivity well"

------
akkartik
The first comment is teh awesome.

[http://cbloomrants.blogspot.com/2011/11/11-22-11-mature-
prog...](http://cbloomrants.blogspot.com/2011/11/11-22-11-mature-
programmer.html?showComment=1322119268519#c1769436585410313740)

------
codeonfire
I have to object to this blog. While some points I agree with, this is more
formulaic drivel where some self absorbed person tries to tell everyone else
what makes a [great|rockstar|mature|senior] [programmer|hire|architect|genius]
and how he/she is one because why else would he/she be writing this blog? And,
by the way, even experienced people are dummies because they do/don't do
[testing|agile|documenting|coding|time management|getting things done] that
I/we do/did at ACME corp.

Don't believe me? Google 'great programmer' and peruse the 75 million results
and ask yourself why it's such a popular topic.

~~~
georgemcbay
I have to object to your post because you're arguing against some general
situation which does not apply here. Charles Bloom _is_ a great programmer.
I've seen his code.

<http://www.cbloom.com/3d/galaxy4.zip>

<http://www.cbloom.com/misc/index.html>

etc.

Also FWIW he was the lead programmer at Oddworld on games such as Oddworld:
Stranger's Wrath, which while not particularly well-known to the mainstream is
one of the greatest modern console games ever made and which was also very
technically impressive at the time of its release. He's also kind of a big
deal in the compression world.

If you want to argue specific points he's made, bring them up and debate them
on the merits, but don't handwave him away like he's one of those kids just
learning Ruby who decided to put up a blog to show everyone how smart he is.

~~~
skeptical
I disagree. It doesn't mater how much credibility the author has, if
subjective matters are presented as facts because the author puts himself in a
position of unquestionable knowledge, a reader may very well argue that this
is pretentious and has zero value.

Know, for many people, the author has enough credibility to write like this
because they know his work. If you're one of those persons then you should
read and take the author's word. But it still pretentious. Just because
someone 'has the' to be pretentious doesn't mean that he/she won't be.

But most importantly, why would you care about those opposing this article?

~~~
jblow
Wait, what? Is there no such thing as someone who has enough experience that
they are allowed to speak directly and clearly about an issue? Rather, you
think people are supposed to be all mealy-mouthed so that you don't feel like
they are too presumptuous?

That doesn't make sense. There are people in the world who are worth listening
to. The "democratic" nature of the web means that a lot of people post a lot
of crap, and maybe some people are so used to reading crap that they have just
forgotten what it's like when people really know what they are talking about.
I don't know.

There's a huge difference between Rails Bros and smart guys who attack the
hardest problems they can, whenever they can. Charles is one of the latter
people and has been for, I don't know, 16 years? I don't want to live in a
world where someone like that is not permitted to speak in an uncushioned way.

~~~
skeptical
You missed my point.

Even rails kids can write in such fashion if they want. The fact that nobody
cares makes it pathetic though.

Obviously, many people will care about Charles Bloom's opinions. _That_ is the
difference. Out of respect of his work they don't mind whatever style he uses.
That's enough for them. Why wouldn't it be? Why would they care if others find
it pretentious? I suspect the author itself could care less about those who
find his writings pretentious.

Why do you care? All I am saying is that you cannot impose on others the
respect you give to a third person.

~~~
jblow
Sure. But if you expect that everyone should engage in mediocre speech, just
because you don't know whether you should respect them or not, the result is
kind of a sucky world.

------
skeptical
I agree with some of his points, with others not so much.

I have myself to blame by following a link with such a title. This kind of
writing is too pretentious for my taste. Everyone wants to have their own blub
programmer blog entry. I do not like that attitude, from the beginning the
author puts himself in a position of almost absolute knowledge, entitling him
to point out other people's defects almost as facts.

I would much prefer an exposure of a practical example in reasonable detail so
we all can clearly see such problem instead of the usual "the [insert
adjective] programmer often does this mistake".

