Carlos Fenollosa — Blog

Thoughts on science and tips for researchers who use computers

You only do it when nobody else will do it

October 03, 2014 — Carlos Fenollosa

Maybe the difference between a junior and a senior programmer is that the first will sometimes say "I don't know how to do this", while the second will always say "Give me a week".

When you finish college with a computer engineering degree, everything seems possible. You just learned how to design a computer from the zeros and ones up to the applications. From logic gates up to a CPU, from TCP to HTTP, from assembler to Java.

Then, time passes, you get a regular job, and regardless of its awesomeness you start forgetting stuff. Furthermore, you discover super smart people who are light years ahead of you, and for some reason, your mind thinks of them as superheroes, almost magical creatures who can write an ultrafast x86 emulator or make a disk drive play the Imperial March

Don't get me wrong, these are amazing feats. But psychologically you start to feel dumber and dumber up to the point where you believe that the only thing you can aspire to is write webpages and some normal stuff. Even if you have great skills and do a great job at a great company, it's difficult not to feel just a tiny peg of the machine.

I didn't know how to do anything else, and I thought I'd fail if I tried. In college, I suffered a lot with some courses, and to date I still don't know how I passed. But the truth is that college is very dense, and without all the stress from exams and projects, and thanks to age and experience, things actually get easier to learn.

That's why side projects are important.

Three years ago I launched my first successful project to the Internet, bashblog. It's no big deal, but it's a commitment. People use it, contribute patches, discuss ideas, and I have the responsibility to make it work.

Then I started learning things that have always tickled my curiosity. It started with functional programming, one of the academic topics which has been discussed since the 60s but never took off. Then I did more courses on astrophysics and statistics.

This year I left my job to take a sabbatical and start new projects. In some countries it's normal to take a sabbatical before starting college to travel and learn. But almost nobody thinks about a sabbatical when you're 30. You can choose a wrong career path when you're 18 and fix it, but the 30s are critical and one needs to be really sure that they want to spend the rest of their life doing what they love.

I have recently found, don't know how to put it, some change of mind, new strength, inspiration. I want to learn how to write an OS. I started writing mobile apps. I want to launch a product. I'm contributing to an industrial patent to do really cool stuff with cellphones.

As usual, every of these projects hides many challenges. I've had to read RFCs, learn how to extract voice patterns from an audio file, write device drivers, deal with lawyers and read formal documents 1

We live in the information age. There are plenty of resources, some of those University-grade, to learn new skills. Discipline and planning can go a long way. There is no excuse.

Github and other websites have also made it effortless to collaborate with total strangers. It really makes me happy and proud to see other people commenting on things I've done. Years ago you had to go to a computer hobbyist meeting to show your work, now you can do it online... and others will improve it.

Stack Overflow will provide code samples and guidance. I've now started hearing undergrads utter "Did you really code programs without Stack Overflow?" in the same way that I used to say "Did you code programs without the internet?" to people who had to read manuals and go to a library.

Hacker News and Reddit can guide you on what's cool nowadays. Live in the future, then build what's missing.

I guess that it's comfortable to dismiss some ideas just because "we don't know how to do it". And that's a waste of our university degrees. We have some responsibility to do cool stuff. If we don't build it, who will? If we can build it, why wait? If you don't have the skills, learn them. Just Google it. Work on it for a week, and you will succeed.

Do you miss the adrenaline rush that you used to get when you first discovered something? The "oooh" and the "aaah"? Learn something new, something radical, something cool and futuristic. Start a project, and release it. It doesn't need to be complete.

The greatest force that pushes us to build things is the knowledge that nobody else will build them for us.

~~~~~

[1] One of the multiple things that managers usually do and engineers don't appreciate enough

Tags: programming, life

Comments? Tweet