
Programming is Terrible - benwerd
http://programmingisterrible.com/
======
kenjackson
This guy gets it wrong in his last post on reliability (but the other posts
seem reasonable).

Reliability is hard because we continue to move the goalpost. I can write a
pretty reliable program to compute sin/cos tables or to sort a phonebook or to
do some basic projectile trajectory. But those aren't even table stakes
anymore. Today a first year undergrad student might be expected to write a
program that in 1970 the most advanced programmer in the world couldn't do
with a large team and millions in funding.

I hate the analogy to other fields of engineering (and this author doesn't
fall down that trap, but plenty do). Bridges haven't changed in the past 10
years the way programs have (in terms of functionality or complexity).

And lastly, this is IMO, a corollary for why ageism is so persistent in our
field. Experience means very little. Why? Because I can capture 70% of your
experience in your code -- in your library -- and build directly on top of it.
I don't actually need you. There are few other fields where as much of your
experience can be captured in something so reusable (despite our constant
protests that code isn't reusable -- it's more reusable than any output from
my plumber).

Programming is terrible because we obsolete ourselves by moving technology out
of our own grasp. The fact that newer programmers don't understand the
foundation they build on is irrelevant, since few need to look behind the
current. Unfortunately, I think it is simply the nature of the beast. It's why
we love it and do it -- and probably why we'll all eventually stop (or at
least move into management).

~~~
jiggy2011
That last point rings quite true with my experiences. I've been writing PHP
and some other languages off and on for about 10 years now.

Looking at current jobs listings it's difficult to find things that I am
particularly well suited for, even in web programming.

Since I was using PHP well before the current crop of mature frameworks and
CMS the majority of my experience is in trial and error development of my own
database access patterns , anti XSS , anti SQL injection and all of that other
stuff that you used to do yourself in the early 2000s. As a result I have
handwritten countless numbers of CMS systems and frameworks and am comfortable
taking a bunch of hardware , building a Linux server out of it and mounting it
in a rack.

But nowadays the conversation is not so much about that stuff, it's "what do
you know about EC2?" , "What do you know about codeigniter?" , "What do you
know about Wordpress?". So, my knowledge has been abstracted (generally by
people who would do a better job it than I did).

It's quite a hard thing to explain to your family when they say "But you've
been doing programming for years! You must know everything about it now!"

~~~
Tarential
I had to log in just to reply to this because it very well could be me writing
this post. I taught myself PHP in grade 7 (around fifteen years ago, it must
have been near the v3 release) and sold websites in high school. I hand built
everything on web servers I compiled from source.

Then I made the terrible mistake of taking a long break from professional
programming through university (I worked as a tech writer instead, the money
was good). When I came back two years ago I found that I had to learn a whole
new set of tools. Javascript was now the norm instead of a disabled annoyance.
Browsers supported incredible display features using stylesheets which made my
table-and-images based designs obsolete. All the sites were built using some
sort of CMS.

I spent a year learning front end design, WordPress, Magento, Joomla, and
Drupal theme design. Then I went back to my old do-it-yourself ways and wrote
my own CMS [0]. Suffice to say that it wasn't necessary. I learned a lot about
back end programming and MVC related design patterns while creating it, but
the most valuable piece of knowledge I gained was "Don't reinvent and try to
sell the wheel when other people are offering it for free." It should have
been obvious, but it seems I'm much smarter in hindsight than I was in
planning.

I'm still learning today. Now it's the Ruby on Rails world and a whole
plethora of new technologies come into play. I'm using Haml, SCSS and
CoffeeScript on top of the RoR / PostgreSQL back end. My first web app will be
ready for release soon. After that it's on to learning Haskell and RethinkDB.

The irony of all this is back when I stopped programming I thought I had a
pretty good grasp on everything I needed to know. I figured I'd step right
back into web development and continue on the way it had been when I left it.
I wouldn't have let my skills atrophy if I had known how important it was to
stay up to date. I think after two years I'm finally catching up, and I don't
intend to let them get rusty again.

TL;DR: Don't get cozy because you think you know everything now. Even if you
do, the state of the art changes quickly.

[0] <http://saintcms.com>

------
wallflower
Maybe rockstars isn't the best term, _legendary_ is better [1].

John Carmack (Doom), Dave Cutler (Windows NT), Jeff Dean (Google's competitive
advantage) [2], Bill Joy (Unix, vi), Peter Norvig, Larry Wall (Perl), Steve
Wozniak (Apple II), Jamie Zawinski (Netscape), and many more who I may have
missed...

All of these programmers/engineers are legendary. For example, Steve Wozniak -
read how he hacked a floppy disk and color into the early Apple computers [3].

[1] <http://news.ycombinator.com/item?id=1017939>

[2] <http://research.google.com/people/jeff/> Not just Jeff, also Sanjay
Ghemway: <http://research.google.com/pubs/SanjayGhemawat.html>

Craig Silverstein: <http://www-cs-students.stanford.edu/~csilvers/>

[3] <http://www.foundersatwork.com/steve-wozniak.html>

------
j45
Programmers who can say "I don't know, but I want to." are the type that build
things of worth in my books.

Beyond this, this post brings up an interesting question when examining the
unpalatable extremes of the programmer personality spectrum:

Do Programming fundamentalists share ignorance and intolerance tendencies like
racists or bigots?

\- us vs. them

\- the preference of my language/framework vs your language/framework

\- there's no way anything can be true or possible if I don't understand it or
hold it as my current view point

If we notice, fan boys quickly can get defensive, or worse, assault others
that don't fit their way, group, or mould. It's sad, but this is done as much
covertly as overtly.

The test: Bring up a tool, process, language or framework that's not in vogue
right now but may be perfectly capable. Notice how some (mostly inexperienced
and insecure themselves) may scoff, belittle, deride, and denigrate others.

I just think it's a shame.

We have in our hands and our minds a way to leave the world better than we
found it.

Instead too many of our kin are busy needing to be told we're special rockstar
ninjas who are the growth cutting and bleeding edge that are busy crushing and
killing things, but continue procrastinating and searching aimlessly here.

------
unimpressive
> The only supporting evidence for the “uberhacker” was a study on batch
> processing vs interactive programming, in 1960. On a handful of people, in a
> half hour session. The rest of the noise is untamed adolescent egotism.

I present exhibit A: Richard Mathew Stallman before he got RSI.[0] The stories
of those early computer pioneers should make computer users everywhere take
pause and seriously think about the damage they're doing to their tendons.

[0]: In fact, if you type "uberhacker" into wiki it redirects to him.

~~~
Intermernet
Must be a random selection from a list. When I tried it I got Linus Torvalds
:-) That, Wikipedia, is very cool!

~~~
TeMPOraL
Not really; someone changed the redirect moments ago:

[http://en.wikipedia.org/w/index.php?title=Uberhacker&act...](http://en.wikipedia.org/w/index.php?title=Uberhacker&action=history)

------
chrisbennet
Bitter much?

I've been fortunate to have never worked with bad programmers. Some were not
super experienced but still they _cared_. They did their best. A bad
programmer would be someone who didn't care about the next guy.

As for "A" players, they exist. They develop code that others can understand
yet probably wouldn't haven't have come up with themselves.

Hard work does not make you an "A" player. _Intelligent_ work does.

~~~
recursive
It's possible to care and do your best and still turn out worse code than
someone who doesn't care. I've seen it.

~~~
endlessvoid94
Yep. Passion, unfortunately, doesn't equal quality.

------
johnbender
"Another hope might be academia, but much of the focus is on program
verification, rather than reliability. Well typed software will eliminate some
failure classes, but it doesn’t give you robustness."

For anyone who's curious, academic research into verification extends far
beyond "Well typed software". For example:

Klee: Unassisted and Automatic Generation of High-Coverage Tests for Complex
Systems Programs [PDF, very approachable]
<http://www.stanford.edu/~engler/klee-osdi-2008.pdf>

That paper is a nice example of how constraint based model checking can
provide code coverage well beyond what a human developer can accomplish.

~~~
eru
And there's also proving code correct. Like the recent example of seL4.

------
CoolGuySteve
Finally, a reasonable programming blog post.

I'm so tired of the inane myths coming out of the programming community like
the recent 'liberal/conservative' thing and the 501 manifesto. It seems like
every 2 months I have to stop visiting hacker news and proggit while another
one of these seemingly intuitive but unsupported link-bait blog posts comes
around followed by a deluge of links saying NUH-UH.

Here's the thing, if there is no research supporting your intuition, it's just
bullshit. Bullshit is all fine and good until it gets repeated as fact, after
that it hurts our professional integrity and enforces biases and
discrimination. Fucking stop it.

~~~
jacquesm
Lots of research gets started because of intuition. If there is no research
supporting your intuition it may simply be that nobody got around to doing
any, not that your intuition is 100% certain bullshit.

So when you find your intuition is not supported by research go do some
research. Don't automatically assume it is bullshit or otherwise lots of
research will never get done.

And then share the outcome of that research (positive _and_ negative) along
with your intuition.

------
moocow01
Programming is honestly a very tricky sector of work to understand how to make
progress in the practice of it from here on out.

You have essentially an almost infinite number of ways to get to an endpoint
with very few real constraints... this is good and bad.

We have lots of creative freedom within the constraints of code to achieve a
certain piece of functionality. For example, authentication - Ive seen it done
somewhat differently on every product Ive worked on not to mention the
different languages and coding styles used. Most programmers enjoy the mental
process of crafting their own implementation and there is usually a real
reason for custom development - every product is a little bit different.

The bad... we seem to have to continually be rewriting custom implementations
of very similar things which equals cost and usually mediocre reliability. We
barely even have adhered to guides for something as common as authentication
(at least that anyone pays attention to). This is quite vastly different than
other professions. Take for example plumbing - while not every job will be
done the same by every plumber, there are a set of standards that all plumbers
leverage - specs on pipes, fittings, etc. Or take for example healthcare, most
doctors have at most a few different treatments that are agreed upon as
effective.

But its not like certain sections of the programming community haven't
tried... we have open source libraries, plugins, published recommendations,
etc but the problem is that the landscape is a mess not to the fault of any
individual... programming languages, technologies, business requirements come
and go every day effectively erasing much of the work/libraries/best
practices/etc that were just starting to get established.

Its as if we need to only have one universal unchanging language and a set of
universal devices we all agree on with an unbiased committee that organizes
open source modules - I also live in the real world so realize this is a bad
idea that will never come to fruition for a 1000 and 1 reasons but I have to
agree with the author and dont have much hope in short term "real" advances in
how software development gets done.

~~~
rohamg
I see this as a positive, not at all a negative. Programming is rare in that
the field lends itself very well to creative destruction / natural competition
/ evolution, for many of the reasons you describe. The process is chaotic on
an individual level but the population as a whole moves forward far more
intelligently than any centralized process could hope to mimic.

------
shadowmint
hm.

Correlation and causation aren't the same thing.

You _can_ correlate good programmers with all kinds of things, but that _does
not_ mean that those things make good programmers, necessarily.

...but, you know. There's probably a pretty strong causation in some cases
(eg. write code in spare time, play music, speak a second language, believe in
TDD, whatever), and if you're trying to be a better programmer, looking at the
things that other good programmers do is the right way to get better at it.

Some correlations are obviously stupid though (gender, politics) and I'd be
vastly more interested in data mining life-analytics of good programmers for
interesting useful correlations (eg. play sport? hand-eye coordination?
memory? write c++ for fun? know how to write assembly?) rather than just
saying, well, all correlations are probably arbitrary and don't have any
relation to causation.

Pity there isn't really any way to get hold of that sort of raw data to play
with~

------
aut0mat0n1c
It seems like to me the problem is not that academia isn't interested in
reliability, its just that they are solving the wrong problems. I am thinking
about Byzantine Fault Tolerance specifically, as from what I understand it is
a hot topic of research at the moment. That seems to me to be an example of
academic research that is next to useless for practitioners.

BTW that quote is from Leslie Lamport, maybe its so obvious he didn't think it
needed a credit.

------
rayiner
This blawg has much potential. Love the post about marginal expected value.

~~~
joesb
On the other hand, many if not most businesses run just fine getting only
20-40% profit. Some business even run on being able to get only 2-5% profit
for each investment, but re-invest tens of times per month. Why must software
project have 500% profit before it makes sense to kick-off.

~~~
rayiner
Software projects need more than a 10% margin for the same reason constructing
a skyscraper does. Some types of investments are inherently less predictable
than other types.

------
artsrc
> Really, we don’t know how to write and maintain software, let alone reliable
> software, without throwing vast amounts of time or money at the problem.
> when we come up short we’re left with the inevitably bug-ridden fruit of our
> labours.

The way to write software efficiently is to have a small team of skilled,
experienced and motivated people deliver it incrementally.

The space shuttle team developed a process to deliver software that was not
bug-ridden. This was costly.

And there are collections of patterns to improve robustness of systems that
are discussed in books about Erlang.

------
Permit
I wonder if the author is simply trolling with the first post. He says:

"This myth has many forms, with many attempts to explain the magic power away
in terms of some physical characteristics–

1\. Programmers who have a penis are good

2\. Programmers who do not have a penis are bad

If you believe in this in any way, it is highly likely that you are not only a
terrible programmer, you are a terrible person too."

Then on his Twitter he proudly displays in all capitals "Ｉ ＡＭ Ａ ＴＥＲＲＩＢＬＥ
ＰＥＲＳＯＮ"

<https://twitter.com/tef/>

~~~
bonzoesc
There's an undercurrent of gallows humor you're missing. Recognizing and being
mindful of your shortcomings is wisdom.

------
codeonfire
So true. You have to learn that programming is politics from day one.
Unfortunately, unlike the sciences where there is a framework for determining
who is good and who is bad, in programming it is left up to sometimes immature
people to make their case. The best way to silence them is with working
software.

~~~
rayiner
This can be said for nearly every white collar job besides maybe trading or
something similarly measurable.

~~~
codeonfire
With sciences you have citations, peer review, credentials, etc. What do you
have when management absolutely loves their immature high school dropout
rockstar because they fooled investors enough to bring in big money? I think
that programming is a bit of a special case.

~~~
tkahn6
> With sciences you have citations, peer review, credentials, etc.

You should read this:
[http://en.wikipedia.org/wiki/Dan_Shechtman#Work_on_quasicrys...](http://en.wikipedia.org/wiki/Dan_Shechtman#Work_on_quasicrystals)

~~~
codeonfire
I'm not saying that the sciences are not political, its just that you have to
do decades of work before you can even begin to criticize your rivals. Even
then, you are trying to convince smart peers in writing. In programming, the
thinking on the street is that the younger, less educated, and less
experienced you are, the more awesome you are.

------
chrisringrose
TLDR:

Don't bother making anything - there's no chance it will be successful, no
matter what. Life sucks, then you die.

------
coaxmetal
hey cool I thought of tef when I saw the title of the post and it was tef!

~~~
benwerd
I'm so pleased tef is blogging this stuff. It's fun to see it in one place.

------
dschiptsov
Programming is a Joy.. Ignorant cowboy-coding is suffering.) Read (learn)
before you write. 80/20 rule works here.

------
tesko8482
As a programmer young in my career, it's interesting to get this type of
perspective.

------
kzahel
DNS is centralized? Not as I understand it.

~~~
steveklabnik
They mean 'hierarchical': <http://en.wikipedia.org/wiki/Root_name_server>

------
jhuni
No.

~~~
jhuni
Programming is just terrible for you because you don't have the awesome Emacs
setup I do.

