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

Managing Developers is HARD

I've been a software dev for a long time.  I've also been running my own software company for a few years now.  This is important information because of why I do these things.  I am a sofware developer because I love learning.  I slack off when doing a job that bores me, and software development always has something new to experience which keeps me excited and interested.  Why start a software company then?  That puts me in the role of manager rather than developer.  The truth is simple.  I've worked for a lot of companies, and I don't see any of them doing a great job of managing their software development.  That's not to say none of them have done a good job, but no one out there seems to be doing a great job.

How are they different?
A lot of companies get this part right.  Software developers are different from other employees.  The distinction is important in the same way it's important to acknowledge that an insurance agent is different from a construction…

When Is Software Done?

I have some very exciting news.  A piece of software I've been working on for over 2 years is released to the general public!  This is a little exciting if it were software I'd been working on for some big company.  It's very exciting because it's software I have been working on for my company.  That's right!  My company is ready to start selling software and start making money!

I'm not gonna use this blog post to talk about my company and what it does.  You can read about that in our press release.  Instead, I'm going to talk about the software industry and the concept of done.  Because, as with everything, it's more complicated than it seems.

Software is never really done
Actually that's a misnomer.  Software can really be done.  But done is sort of a quantum state--there and not there at the same time.  First and foremost, anyone can understand that software that works is complete.  If the software's purpose is to process a credit card, if th…

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 …