Hacker News new | ask | show | jobs
by capstone 5533 days ago
There is one big problem with JS's paradigm of Smart and Gets Things Done that I never see addressed. It's right there in the title. If a programmer Gets Things Done, what does Smart add to the equation? Say you have a cat who habitually walks all over your keyboard and bangs out perfect code, every time. Do you really care?

No one would praise a program that takes 2 steps to do something that can be done in 1 step. So why does Smart and Gets Things Done get so much credit? I'd understand Gets Things Done and Gets Along much better.

4 comments

If you've ever dealt with code that Gets Things Done but is not Smart, you'll know why it's in the title. There are a million ways to skin a cat with programming, and you can pick a stupid(er) way or a smart(er) way. I'd much rather work with the person(s) who pick the smart(er) way.

The "perfect code" part of your comment above implies smartness. Dumb people don't write "perfect code".

That reminds me I once came along code written like this:

  function MakePrintable(nr as Int) 
  {
    Str as string
    if nr=1 then Str="1"
    if nr=2 then Str="2"
    if nr=3 then Str="3"
    ...
    if nr=27 then Str="27"
    if nr=28 then Str="28"
    if nr=29 then Str="29"
    return Str
  }
This code worked in the program it was used in (it Got Things Done), but in a dumb way (lazy? ignorant?).

I admit this is a rather extreme example, but it provokes the universal feeling when you look at gravely suboptimal code: "What did the programmer think when he wrote this? Didn't he know that ...., it's so obvious!"

Buffer Overflow Exploit Prevention?
Smart people don't write perfect code either (this is obviously relative to program size and complexity), no one does :-(
Sure, you're right. I'm sorry if I implied smart people write perfect code, they don't either, but I'll prefer their code.
I guess it depends on your definition of "done". If something is sorta slapped together in a way that is hard to read/debug or non-performant, to me that's not "done". So perhaps it's a matter of semantics.
Joel addresses why he titles that in the book. People that aren't smart and get things done usually do "stupid" things, that someone else will have to come along and clean up. Here's a link to the post that discusses it: http://www.joelonsoftware.com/articles/fog0000000073.html
Oh I get that (did read the whole thing) however conversely, couldn't it then just be titled, "Smart" with an explanation further down that smart people know that they have to get things done or else it's just talk? I mean, you can redefine and contextualize anything, but I think if you promote a slogan as strongly worded as Joel's quote below, you have the responsibility to make it complete without a further explanation.

The #1 cardinal criteria for getting hired at Fog Creek:

Smart, and Gets Things Done.

That's it. That's all we're looking for. Memorize that. Recite it to yourself before you go to bed every night.

He wants us to memorize a short slogan, and that slogan, in programming speak, is buggy and wasteful (wasteful in the sense that I described above, and buggy in that a smart gets-things-done a-hole will single handedly kill your project). Gets Things Done and Gets Along on the other hand is complete in and of itself.

There are a lot of smart people who worry so much about getting things perfect, or doing things in a too-general way (i.e. "architecture astronauts") that they never actually get anything useful done, or they take far too long to get things done. These people often lack pragmatic business sense.
You can argue that it's a matter of semantics whether "getting things done" implies "smart" if you start defining "done" to mean more than what most people assume from the word, but it's definitely not true that "smart" implies "getting things done" even if you start to stretch meanings. There are plenty of people who are really smart, but who do not get anything practical done.
Smart people solve difficult problems that less smart people either (a) couldn't solve or (b) would take a relatively long time to solve. This is what smart people "get done". If you're lucky they'll even write the code for the majority of the system by way of proving to you that their idea works. (By definition it is easier to implement a skeleton solution than it is to explain the idea to someone who wasn't smart enough to originate the idea.)

People who merely "get things done" are conscientious in their attitude to work but do not have the spark of intellect that would help them identify quicker ways of getting a task done. This lack of spark also means that they will frequently say that problems are impossible to solve (or prohibitively time consuming to solve), whereas in fact a smart person would identify it as a problem that they could solve.

Example from my own experience within a government accountancy department:

- The person who merely "gets things done" happily spends two weeks each year calculating the cross-charging amounts between all the departments and eventually produces the correct figures.

- The smart person does the same task in 30 seconds using pivot tables and lookups in Excel.

I think Steve Yegge wins here: Done, and gets things smart. That's what you want.