

The Ultimate Code Kata - bdfh42
http://www.codinghorror.com/blog/archives/001138.html

======
hugh
_...replying to mail isn't practicing your typing. You have to set aside some
time once in a while and do focused practice in order to get better at
something._

An odd example, since I'm pretty sure we've all got a lot better at typing
without really trying.

I just did a test to find out, and it turns out that in the last fifteen years
that I've spent _not_ learning to type, I've gone from about 35 wpm to 81.
Fifteen years ago, 81 wpm would have been a pretty impressive typing speed,
but nowadays I guess it's pretty normal, since the whole world has got better
at typing. It doesn't seem so long ago that people were still putting their
typing speed on their resumes, but nowadays high-speed typing is taken for
granted -- it's gone from being a skill to being a reflex, for most people.

I'm not sure about programming, though. I'm sure it's possible to get better
without really trying, but really trying will get you there faster. I guess
the real difference is that typing is an "easy" skill where you can reach the
maximum reasonable level of competence quite easily (who really needs more
than 60 wpm?), whereas programming is a "hard" skill where there's far more to
learn than you can possibly fit into one lifetime.

~~~
jauco
I guess the articles author is not talking about strokes per minute but rather
how well you're able to put your thoughts into words.

That's a skill that's more on the same level as programming.

~~~
hugh
In that example I would have thought "typing" just means, well, typing.

------
projectileboy
FWIW, my "code kata" is to try exercises from SICP in whatever language I
happen to be playing with, which is really just an excuse to re-read portions
of SICP. Always a pleasure...

~~~
Tamerlin
That's one of mine also; I'm using How to Design Programs as a way to learn
Scheme, and also doing some small Rails project work on the side to de-rust my
Rails skills...

And getting started on a web site for myself. But that one will be
considerably more visually oriented than most of the stuff I work on, so it's
going to be a bit longer in coming. :)

------
edw519
Very interesting post.

Reminded me of an argument between 2 great billiards players, Willie Mosconi
and Minnesota Fats. Willie was the best player in the world at the time,
winner of many championships. Fats was a hustler who never won anything except
money. Each vowed to kick the other's butt in a match. Of course, Willie
kicked Fats's butt, to which Fats responded, "So what. If there was money on
the table I would have won."

This article made me realize I am more like Fats than Willie. I have
interviewed and worked with many great programmers, but hardly consider myself
in their class. They may know 27 ways to sort data, but being like Fats, I
only need to know one to get the job done (and take the money).

If there was a competition, they would kick my butt. But if a client had to
get something done, I could hold my own against any of them.

The advice in each person's list was excellent. To become a better
practitioner of the art and science of "programming". Which is not quite the
same thing as "getting the job done".

A typical scenario I have seen over and over: Competitor A is doing B, so we
have to do C. This means that we'll have to modify our app to get data x from
source y and present it to certain people so they have what we need to
compete. We're losing $10,000 per day by not doing this, so we need it ASAP.
My solution is rarely optimal, sometimes clever, sometimes not, and often a
hack. But it gets done quickly, it works, and it "does the job".

That makes me more like Fats. But since I still aspire to be more like Willie,
I'll start doing a few more things on these lists.

~~~
gcv
_My solution is rarely optimal, sometimes clever, sometimes not, and often a
hack. But it gets done quickly, it works, and it "does the job"._

Quite frankly, I hate "solutions" like that. I have spent way too much time
supporting code written by people who "get the job done," but do so
inefficiently, and cause the system to keel over two months later. Or do so
poorly, and so the system mysteriously breaks when the "hacks" don't quite
work.

Penny-wise, dollar-foolish. Sure, you save some time up-front coming up with
the hack, and "get the business up and running." In my experience, it never
takes long for "the business" to come back and say "I thought you fixed this."

~~~
gaius
The real world is often messy, and solutions that work in it are often messy.
The best you can hope for is that someone uses a lookup table/config file
instead of a tangled nest of hard-coded "if" statements. But seeking elegant
algorithms to address real world problems is often a wild goose chase.

~~~
Tamerlin
No one's looking for elegant algorithms for real world problems here.

The reality is that most real-world problems are not particularly complicated,
yet most have exceedingly complicated solutions, and as a result,
disproportionately large maintenance overhead -- and that maintenance is
largely code archeology (wow, what idiot came up with this bit dumbass
approach? Why does this framework require 6 new classes in order to add a
simple pair of pages to the site?), not productive time.

------
pavelludiq
The point about learning more languages that are different from one another
seemed interesting. I know that knowing more languages makes you better, so i
wish to learn more. I know python and started to learn scheme, can any one
suggest me a 3-rd language?

~~~
PieSquared
C. Or some form of assembly. Both of them get you closer to the hardware than
any high-level language would, and it's important to know what scheme and
python and any other language are really doing for you automatically.

~~~
hugh
Definitely. I hate to sound like an old curmudgeon (especially since I'm only
28) but it's scary the number of people nowadays who call themselves
programmers but have never even had to worry about allocating memory.

~~~
eru
Yes, all those 60 year old Lispers.

------
wenbert
I have been doing pet projects (some of my dumbest ideas) and some freelance
work to "practice". This has been going for at least 3 years now ^_^ so far so
good...

------
Tichy
Does reading Hacker News count as training?

~~~
eru
Too easy.

