fiddlemath comments on Learned Blankness - Less Wrong

130 Post author: AnnaSalamon 18 April 2011 06:55PM

You are viewing a comment permalink. View the original post to see all comments and the full post content.

Comments (186)

You are viewing a single comment's thread. Show more comments above.

Comment author: David_Gerard 18 April 2011 07:41:50PM *  9 points [-]

"People who can't or won't think for themselves" is how a friend of mine characterised his customers as a freelance Windows NT admin (a very good one - and good NT admins aren't cheap). "There's a lot of money in sewage."

Outsourcing thinking to anyone who can be convinced or coerced into doing it seems quite common to me. People will so often do things just because someone else demands it of them. I have commented before on how my ridiculously charming daughter [1] is remarkably creative in intellectual laziness, and how I have to be sure not to let her get away with it. She will damn well learn not to be lazy just because she can!

I blank on programming, which is not so good for a sysadmin to a development team. I don't write anything more than shell scripts and I have the algorithmic insight of someone who doesn't. I suppose I should learn more.

Too many people consider computers malevolent boxes of evil completely unamenable to any rational consideration, even in theory. Your "Sandra" example is many programmers I've worked with.

[1] and it works on people other than me, e.g. the man in the coffee shop at 5pm yesterday she asked to get her a babycino (frothy milk with chocolate on top). He switched the machine back on after he'd switched it off and cleaned it just because the cute little girl asked for a 50p drink.

Comment author: fiddlemath 19 April 2011 04:02:29PM 22 points [-]

I'm a researcher in programming languages, and I've dabbled a little in discrete math and algorithms research. Though my advice may be a little slanted, "algorithmic insight" is what I'm most expert in. Perhaps, then, the following is right.

If you "blank" on programming, but already know system administration and shell scripts, then the "lack" you're describing is probably pretty small.

I strongly believe that what might look like "algorithmic insight" is mostly the product of obsessively picking apart designs and implementations - not just computer programs, but any engineered mechanism. It's a great habit to inculcate, and (I think) leads naturally to gradually understanding how everything works.

I bet, though, that you could massively boost your own algorithmic insight by the following program of reading and practice:

  • First learn (if you haven't already) a worthwhile programming language. C has a certain simple charm, but most industry-standard languages are pretty horrible. Java is mediocre, but limiting. I suggest starting with Python, and learning C, Racket, and either Haskell or OCaml. (Again, though - I'm a PL researcher, so this is possibly biased.)
  • Actively, carefully read CLRS. It's detailed, doesn't assume much prior knowledge, and covers 98% of the algorithms any good programmer ever uses outside specialties like graphics or scientific coding. By "actively read", I mean to actually do some of its exercises, and actually implement some of its algorithms. Rephrase its ideas in your own words; stop and review whenever any idea is unclear.
  • Work some of the exercises on Project Euler or SPOJ. These are excellent sources of small, algorithmically-rich problems. You can do them in essentially any language you like, and they give good feedback.
  • As a sysadmin, you've probably already learned some of the pragmatics of managing complex systems. Other than algorithms, as above, and the most core-basic ideas about computers, good programming is about managing system complexity. Thus, implement at least a full program or two that you'd like to see exist. Games and toys are nice, as they're rich with creative opportunities, and so the work you're duplicating isn't so irritating. Demand of yourself the freedom to fiddle with and re-implement that program until the code feels clean - until it feels like solid mathematics, where every piece connects to every other piece for only sound, solid, logical reasons with fairly short descriptions.

I'd mix these activities all together. Learn algorithms and languages by implementing with them; learn the techniques of good implementation by implementing interesting algorithms and programs that you want to exist, and (eventually) solving problems with code.

Comment author: David_Gerard 19 April 2011 04:04:03PM *  2 points [-]

fiddlemath originally sent this as a private message, and I suggested they post it publicly because it is an excellent comment! I might even do some of the stuff in it ...