Skip to main content

Learning a New Language

Today I'm going to share something about myself that most developers probably don't want to admit about themselves, but I suspect I'm not alone.  If I'm not alone, this might be able to help someone, so here it is.

I find that the hardest part of learning a new language is starting.  I find that my competence in most languages follows a curve along time that looks like this.
This demonstrates that the really challenging parts of the language are early on.  When first starting out with a language, it usually takes me a crapload of time just to get to the point of a working "Hello World".  Now there are exceptions to that rule (Ruby comes to mind), but I find that this early time is important to my understanding of the language.  I am learning compiler/parser tricks and understanding little nuances like the need for semicolons, or that every method must be in a class (C# but not C++) even if namespaces aren't necessary to get the application to compile.

I'll admit, I find this slow progress time to be extremely frustrating.  I like to see the progression of my skills, and when I can spend 5 minutes in C# and learn some major defining principle or spend 5 minutes in assembly and learn whether to use a backtick(`) in a certain location it seems like very minimal progress and can grind on me over time.

That said, there are times, like now, when I'm in the zone of slow progress.  I'm ok with reading 10 pages of a book and typing 8 lines of code.  I feel like I'm growing as a developer in just as many important ways.  Still, it would be nice to writing some complex GUI and spending more time learning about UX tricks, but that doesn't make this less nice.  This is more of a zen coding feeling.  I'm very mellow as I read little lines of stuff and understand everything about them, wrapping my head around each side of everything before moving forward.  If learning == enlightening, then this could be considered a feeling of enlightenment.

Still, it's important that I note here that this feeling was not brought on by some mysterious magic.  I didn't drink some magic energy drink or sit under a tree for months.  This was brought on by something much simpler than that.  My home laptop has become unusable for some reason or another.  For the past 2 months I've been saving up for a new one, a really nice one.  It's exciting, but it's also painful.  I've spent 2 months unable to code at home, which is a big part of my release and so I've been stressed, pulling my hair out in agony thinking of the things I want to code.  After two months unable to code, unable to get that quick satisfaction, I've gained an appreciation for the slower, stable satisfaction of reading through books and coding small amounts in a new language.

Of course, any zen teacher would say that's the trick.  By taking away your instant-satisfaction you will suffer for a while until you gain an appreciation for slow, long-term joy.  Anyway, that's how I got myself to delve deeply into C++ and start really understanding it.  I'm hoping to gain a lot from it, given that it's the basis for two of the most popular languages out now: C# & Java.

For those of you struggling in the early part of that timeline.  Trust me, it gets better.


Popular posts from this blog

Teams and Complexity

Let's pretend you're a car mechanic (I don't know, maybe you are).  But you don't work at some shop in town, you work at a bigtime auto-maker onsite at the factory.  You help build cars from scratch.  You work with a lot of other car mechanics, and various engineers of different levels.  If we were looking at the 1910s, you might be working for Henry Ford on one of the first ever assembly lines.  Either way, you have a specific part of the car you're responsible for.  Your skills probably extend beyond that, and you might work on a different part of the car each day as your manager moves you around to keep the factory efficient.

One of your coworkers, Bob, is a superb engineer.  He is very good at building cars, far better than you, and he does it faster than everyone else.  Your boss really likes him.  You often get stuck after him in the assembly line, so you know exactly what sorts of things he does.  He's not sloppy, but he likes to do things his way.  He w…

Managing Programmers

Working with other programmers is tricky.  That said, it's nothing compared to the job of managing programmers.  One of my favorite quotes about Perl is that (paraphrased) "a Perl developer is like a rockstar.  Now imaging having a bunch of rockstars in one room together and you will understand why you don't want an entire team of Perl developers."  It's not about Perl here though. What's important to understand is that any developer worth his salt is going to be like a rockstar.  And yes, there are a lot of professional developers out there who aren't worth their salt, but that's for another post another day.  Rockstar may not be the right term here, but think of it this way.  These guys are smart.  They may not be geniuses, but there's going to be things that they know that you don't and probably never will.

I've seen it more than once and it's not going to make some Product Managers happy, but I'm going to state a fact, an eleph…

How to identify a skilled programmer during an interview

How does one identify a skilled programmer?  No company that has interviewed me could tell the difference between myself and other programmers they'd interview.  The interview process is truly a game of luck in this industry--on both sides.  Both the programmer and the company are basing their actions entirely on luck.

Companies have come up with numerous methods to attempt to discern a good programmer from a bad one.  The best tricks they have include a series of math problems, algorithms, problem solving technique tests, and even obscure programming questions, some without definitive answers.  As an example: Is there an authoritative source of information on the core principles that define object oriented programming?  I've heard everywhere from 3 to 7.  In a field of research about a synthetic concept, an authoritative answer is almost impossible to obtain.

Programmers were then forced to study to the interview.  Careercup is one of my favorite sites for this.  This almost …