Software development: Are you in for the long haul?

I’ve been in this industry [front end development] for five years now, and while this doesn’t feel like a lot of time I’ve seen a ton of changes since I wrote my first “Hello World” JavaScript application.

In fact, I started “programming” when I was a little kid. There was this thing called “Microworlds” that provided little kids in school with the ability to generate small worlds filled with interactions, animations and images. It used some sort of pseudo code that allowed you to write simple instructions such as “move forward until you collide with a red line, after that go back”. I used to love this thing and I spent countless hours (even after school) in the lab writing all sorts of crazy interactions and “games”.

Then, when I was 13, I took a course about Visual Basic 6.0 and Access -I know, I know… but I was young, wild and free and, to be honest, VB was considered a very versatile tool back in the day- I did not know yet, but those months spent using that crappy language (in my free time) eventually led me to the decision of getting a degree in Computer Science.

Having worked with small and big companies doing both freelance and full time jobs I have a good understanding of how software development works. You start with a technology and your love for it grows stronger as you learn how to use it. It becomes your swiss army knife and it feels like you’re invincible with it by your side. Then, tragedy strikes:

— Outdated piece of crap! -they’ll scream at you, while staring at that hideous piece of code you love.

OK, maybe is not that bad. But it feels like it is. It just feels like you’re no longer in the game, and that sucks.

There’s something they don’t tell you in college; and even out here, in the real world, I don’t hear as often as I’d like to: if you wanna succeed you need to be willing to invest your free time in your own career. Computer Science, Software Development and other related areas are not the kind of thing you wanna study if you’re not expecting to sacrifice a lot of your time just trying to stay updated. And well, time is the single most valuable asset you have at your disposal so this is a big investment, but trust me, it really pays off.

In most of the cases, what they teach you in college won’t work in the real world and you shouldn’t blame them: it’s really hard to keep the curriculum updated when you have new technologies popping out of nowhere every day.

It’s also true that companies should invest in their employees and their profesional careers but most of them won’t, and you shouldn’t wait for them to worry about this. You should start making something about it right now. After all, letting you go is not such a big deal for them. They can just hire someone else that’ll do the job.

Recently, someone asked me about how did I managed to stay up to date with everything that’s happening around software development, so I decided to condensate some techniques I’ve applied though these years to keep up with the blazing fast pace of this industry in a nine step recipe.

This stuff is nothing really fancy or complicated and most of you guys are probably already doing it but, if you’re new in this world, this might be of some use.

So here it is,

Uncle Carlos’ 9-step recipe to kick-ass at developing for {{ insert_platform_name }}

I’m writing this from a front-end developer perspective and the examples I provide are mostly related to that specific area, but I also did -and still do- a lot of back-end work so this recipe will work for most of the cases. After all it’s only about investing some time in yourself.

1) Go Vanilla first

Have you heard about that super-hip, bleeding-edge framework everybody’s using right now? Of course you have.

Run away! Go vanilla first. Do not attempt to learn how to use a framework if you don’t get the fundamentals of the underlying language. I’m not saying you should become a ninja, I’m just saying that you should, at least, know the pros and cons of using “x” language for that specific situation. Also, avoid using a framework just because everyone else is using it.

Just because it’s trendy it doesn’t mean it’ll fit your needs.

2) Build stuff (and break it!)

Having a side project is the easiest way to keep your skills updated and to learn more about new technologies. Build a Twitter clone, your portfolio page, a custom CMS or even a jQuery rip off -if you’re into web development.

Or something else.

It doesn’t really matter if you’re reinventing the wheel, just build something.

Chances are you’re not going to build the next big thing in software development -you might though, so that’s a bonus- but you get to break stuff without worrying too much and, in the process of fixing it, you’ll learn a ton of useful tricks.

Go ahead, pick a stack of technologies and start building!

3) Contribute to open-source projects

The best place to start is, of course, at Github.

This one does not limit to code, you could just go and help adding documentation, report a bug, provide your own insights or experiences on working around a reported issue, you name it.

4) Read code

Spend some time looking at the source code.

You’d be surprised with the amount of things you can learn by simply going through the code of a well documented project (two good examples of web development related libraries are BackboneJS and UnderscoreJS).

5) Stackoverflow, a LOT

They say that if you can’t find a solution to your problem there probably isn’t one so go ahead and create a profile in stackoverflow. It doesn’t matter if you’re not that good at anything in particular just right now, you can still learn a lot from other users and, eventually, start answering other user’s questions.

Oh, and it also raises your developer street cred.

6) Build a curated list of useful resources

Every person uses a different technique to learn new stuff: some might like video tutorials while others prefer hands on work.

You’ll need to build a list of resources that fulfill your necessities and fits you best.

I’m not only talking about tutorials or videos -those become outdated really fast-, I’m talking about reliable sources of information, and those come in every form ranging from blogs, newsletters, twitter accounts, facebook groups, slack and irc chats, and even real people like Addy Osmani or Paul Irish -again, if you’re into web development.

This will not only allow you to learn stuff but also will improve your ability to keep up with the ever changing landscape we face every day.

7) Read, a lot!

After you’ve compiled your list you should, well, use it.

Allocate a fixed amount of time every day just to go through it and read a couple of good articles. Not only will you stay up to date with new releases and tech news but also you’ll develop a reading habit. Once you’ve developed the habit you can start reading more complex and/or large articles and books.

Never let anyone tell you that theory doesn’t matter; knowing the fundamentals is as important as being able to apply them and build something beautiful.

8) Write (at least every now and then)

Writing is always a good way to help you get your head around a topic and it can be a really useful technique to spot weak areas in your knowledge base, it’s like that old saying:

If you can’t explain it to a kid, you don’t understand it well enough

Try and write an article about a topic that you’re not familiar with or even something that you haven’t used for a while. You’ll probably notice that certain parts of the topic are not clear enough or you’re not able to explain them in a simple way: that means you should go back to the fundamentals, but this time you know where to start!

Also, as you progress in your career is more likely that you’ll end up writing documentation, gathering requirements or communicating directly with clients. Having good writing skills never killed nobody.

9) Keep focused!

Just pick a technology (or stack) and stick with it for a while.

Don’t try to learn everything. Really. It won’t work and you’ll end up learning a bunch of random stuff about every technology without the ability of actually building anything.

Disclaimer: I’m not a native English speaker, so feel free to point out grammatical and/or syntactical errors. Every respectful comment is deeply appreciated.