Asif Ghafoor is the founder and CEO of a Hong Kong based online real estate portal called Spacious. Spacious is trying to improve the process of buying or renting an apartment for everyone.
In the past couple of weeks I received two applications for a part-time web development position at Spacious, both candidates aged 12 and 15 respectively. At first, I was blown away by the audacity of the applications but after further reading it was obvious these two chaps had a deep and genuine interest in software development. Both having already built and deployed mobile apps on the Apple app store "for fun". I'm meeting their teachers next week to talk about how we might move forward.
In the past two years I have also come across many people, including plenty of former banking colleagues, who have made the brave decision to shift careers and learn how to code.
I firmly believe you are never too old or young to learn to code. It's not easy but it can be done.
I wanted to write a post on what I think are the essential ingredients of becoming a good coder.
First I wanted to share my own story with computers. My first experience with a computer was at the age of 6, when my dad gave me my first computer: a Tatung Einstein. I became obsessed with the classic game Chuckie Egg and played it 24/7. The next one I got was a spectrum 128k, a major upgrade at the time. Not sure if anyone out there can even remember the days of computer programs loading from cassette tapes?
I started writing simple programs at an early age. In my teens I developed an obsession with building the fastest computer imaginable... to the point where I started selling homemade PCs to my neighbours. I wanted to be the guy NASA called if they had a failure with their systems. I studied Computer Science at university and subsequently went on to work in software development in investment banking for over a decade.
I think computers have always appealed to me because they operate at the intersection of science and art. Building computers and writing good software is as much an artistic endeavour as it is a scientific one. Solving difficult problems in an efficient and optimal way requires imagination and creativity. "Given enough time, anyone can write a program to do anything. The best coders are the ones who can solve the same problems with the least amount of code," one of my UCL professors once said, and this was one piece of advice I have never forgotten.
Coding and understanding computers is also a form of superpower; the ability to create something out of nothing is exciting and invigorating. Perhaps the ability to understand something that many others find baffling also appeals to me :)
So with that in mind, here is what I think you need to find or become a great coder.
Learning to code is tough. Anyone who has ever run a marathon will tell you to accept that it's going to hurt before you start. With coding, you need to go through a lot of trial and error, most of which won't come to anything. Having the ability to pick yourself up again and again to keep going requires a lot of mental strength and deep commitment to completing the task at hand. I've had many occasions in my career where I have sat for 15 hours straight in front of a computer and not made any progress in my program in that 15-hour duration. Coming back the next day to take that on again takes a thick skin.
In my experience, there is a clear correlation between how many hours a coder has put in and how effective he/she can be. The only way to get better is to make as many mistakes as you possibly can by experimenting with different ways of problem solving.
No shortcuts!
A good coder for me is someone who is constantly looking at different coding languages and technologies. It's important to understand how the next generation of coding languages might make you more efficient or help to build a better product. If you get stuck in your ways then that creates an opportunity for disruption for your competitors.
The term to describe this person is a "hacker". Before "hacker" became a dirty word associated with crime, its original meaning was that of someone who enjoys playing with new toys (not just tech) to understand all of the different ways in which it might be applied. Especially things the original creators had not envisaged.
I absolutely love working with these types of people.
Fundamentally, coding is a tool to achieve a goal. It's important not to lose sight of that fact. Don't fall in love with any particular computer language or you risk being left behind.
Be a hacker, not a dinosaur.
As a technologist, I feel most other jobs in the world are relatively boring (sorry!). Sure, in other professions, factors like regulations, rules and laws change on a regular basis. But imagine if you had to learn a new spoken language to cater to those changes every 4 years... that's fundamentally how the coding landscape is - constantly changing and evolving every couple of years.
You need to be excited by this constant change.
If you choose a technology career, you need to accept (and relish) the fact your current skill-set will be superseded by something cooler, faster, and more resilient typically every 4 years. I'm sure Ruby on Rails and NodeJS will be replaced with something within the next 2-3 years. Meteor maybe? Answers on a postcard please.
The low level theory of how any language is implemented is fundamentally the same as the laws of physics don't change (at a low level coding is electrical signals being pushed around), but how you apply a technology and the level of abstraction can change dramatically. Every generation of coding language, combined with increasingly powerful hardware and now The Cloud for example, can change the paradigm of how you build software. The good news is the more coding languages you know, the easier it is to learn another.
If you want a steady "dentist’s life," then think again.
With the Internet these days you can find almost anything you need online. Resources like quora or stack-overflow allow you to access databases of coding examples and ask questions to a community of coders.
The trick here is being able to ask the right question. Most developers are friendly and very willing to help you out, but you need to show them that you have given it a shot yourself.
Asking for help doesn't mean getting someone to do your work for you.
The points I have described all really boil down to one thing – to become a great coder you need to have a fundamental enthusiasm for technology. The only way you can stay determined, continuously refresh your skill-set and have the energy to engage a global community of developers is if you LOVE what you do.
A lot of hiring managers I know look for this trait above all others.
I remember when I went for my graduate interview at Goldman Sachs in 2001, I was asked by one of the interviewers what I had learned about computer science outside of my university major. I was taken back a little at the time, as I didn't think this was relevant question.
I answered with the story of the WW2 Bletchley Park enigma code-breakers. This story above all others has always been a favorite of mine as better computing power on the part of the allies was a decisive factor in winning the war.... wow!
The point of the question was to understand how much of an interest I had in computing, over and above paying the bills. As the years have gone by, that question has made more sense to me. I now ask that question myself when I interview people.... so be prepared!
So that's it.
What do you think? Have I missed anything?
Asif Ghafoor, CEO at www.spacious.hk
Recommend to a friend