Monday, January 28, 2013

Learning new things is stupid

I'm tired of learning.  I want to do something.  This may come out of the fact that I started (briefly) with Ruby, then actually got started programming with Python.  Our CS program did a rather obtuse about-face and taught us Java for two years, then had a rather abrupt plunge into PHP as I tried having a real job and finally am settling down with JavaScript.

Along the way, I've had all sorts of cool projects [0].  Most of these projects were fairly basic.  Along the way, I learned several things that were building blocks for the next "level" of project (which you'll notice is the whole basis behind my project learning model).  I jumped onto a different language before I could make that the next jump in learning.

I was forced back into the basics after every language switch.  See, learning's different at the basics.  Time spent programming is mostly time spent learning programming.  There's less time spent learning as you tackle each subsequent language but that advantage only goes so far as you've learned in the previous language.  If I spend 50% of my time learning Java while I'm "programming" and then switch to JavaScript, I'll have a speed advantage until I hit that 50% time.  Roughly.  Things like data structures and design patterns tend to stick beyond languages.

As we move from spending our time learning to building, a curious change happens.  More of the learning time is spent fixing mistakes, rather than determining how to do things the first time.  I'm only qualifying part of debugging (mistakes due to language/framework) as learning here.  For instance, Jade allows inline JS as control flow for HTML output, but the indentation's wonky.  I lost no small amount of time to this, eventually creating a StackOverflow question/answer pair so others could figure out what went wrong.

These debugging moments are different than others because of the technicalities learned.  If I spend a day because I wrote var hammerTime; instead of var hammerPants; then my time was spent learning how to code better rather than if I had misused var, which would be me learning to code.  Got it?  [1]

Alright, back on track.  Learning new things is a tedious process, not to be undertaken lightly.  Half the point of coding today is to become the person who'll want to strangle your now self.  I've written "Hello World" in everything from lisp to Java.  I'm coming very close to actually building something worthwhile.

Or at least I think so.  Every project has been worthwhile in a sense.  Sure, coming up with crummy haikus that only occasionally explode doesn't feed the hungry, but I enjoyed the project and it's provided people with some entertainment.  I certainly have created wealth, if only a small amount.

So when I say "I hate learning [the basics....again]" what am I saying?   What's this "worthwhile" project I keep pursing?  I'm beginning to believe that this project that'll actually do something is my next  project, and always will be.  I'm ok with that.

Working on a current project is absolutely fun but there's a certain dissatisfaction with a solved problem.  The dissatisfaction differs among developers as well as the definition of "solved."  Speed isn't that much of an issue to me but others may see anything as unsolved if it can go faster.  Either way, problem solving, not learning, is the priority.  The best learning happens to be a blissful side effect of the problem solving.

What I want to do is learn clever ways to do things I already know how to do, instead of the basics.  I'm tired of "solving" problems in a new way.  I want to go deeper instead of wider in the T paradigm.  Thanks to Node's help, I finally have a language to do it in.  Now, where do I start?

console.log('hello world!');


[0] For various levels of cool in various completed states.
[1] Yeah, there's lots of semantic games you could play with those two paragraphs for karma on Hacker News.  You could also do something productive with your life.  It's your choice.

No comments:

Post a Comment