This blog was intended to be cut & dry programming and no commentary as I began to explore iOS development for the first time (I now work full time as an iOS developer for a company in LA). However, I’ve mindfully gone through what I think is an important transformation over the years that could be of benefit to the slightly younger generation of would-be coders.
In the past few years, I’ve risen fairly quickly to being considered “highly skilled” and “very fast” as a software engineer. I get nothing but praise and surprise from clients, employers, peers, mentors. I did not start out this way. 2 years ago I could definitely not do the things I am doing today. I didn’t go to school in order to achieve this level of competence — that was too slow for me… Instead, I took the fast track, which I would like to now describe:
The first thing I had to do when I couldn’t code for shit and wasn’t sure what I would do with my life was to take some time to seriously decide on a path for my life. If you never take the time to seriously contemplate your life & your future, you’re not pushing yourself hard enough. Decide on a path and go. Worst case scenario you find that you made the wrong choice and you go into a different field and excel there instead.
Sacrifice & Commitment
Once I knew I wanted to be great with software—I knew that it would take a huge amount of time investment. I only became good at playing Tribes 1 back in the day because I would invest 6+ hours per day at it. I knew it would take this type of commitment to become a great coder. This means you must sacrifice the things you would be doing otherwise. The fast track isn’t necessarily healthy, or easy. But once you’re great, you can take your life back. You never lose the skills you gain. It changes you and technology just becomes easier and easier to work with.
Remind yourself why you’re doing this. You want to make money? You want to be secure & in control of your life? You just want to respect yourself? It was all three and more for me. If I didn’t become highly skilled as soon as possible, I’d imagine my life soon careening out of control and crashing and burning. You need to care.
You’re not Alone
There are hundreds of people in your position, accessible at any time on IRC (in the case of programming) @ irc.freenode.net. Whatever programming language you’re into (or all of them, as you should be a polyglot). Be kind and courteous and you’ll find that you’ll get all the help you need.
Peers & Mentors
Coding in your room is a lonely affair. Creating products and having nobody giving feedback sucks, you might be doing things in an awful way and not realize you’re developing bad habits. Find yourself people. Open source communities are great for this. Contribute to small open-source projects and you’ll find that you’ll be rewarded. Even peers that know less than you can help you become awesome. Every time you teach some concept, it solidifies even more in your mind. Connect yourself with a few motivated people like yourself and you’ll find yourself in what seems like a cyclicly redundant knowledge aggregate. Reap the benefits.
You cannot depend on others to take you to greatness. If you cannot be self-directed you won’t achieve greatness. You might become “good,” but you’ll never be great unless you can determine what you need to do next in order to progress yourself. Don’t expect anyone to give a shit about your growth except yourself. Start giving a shit! A big shit! You are your only hope.
Start a Business
My consulting company, Mindynamics, was born out of myself and a colleague who decided “Hey we’re good enough to make money doing this. Let’s start a company”. Now, I was not very good at that time, I had very little coding skills and only a little bit of prior business saavy though past startup attempts and some common sense. But together, we were able to determine each others shortcomings and work on them in a focused sense. When you start a business and take it seriously, you’re definitely on the fast track.
Ditch Fear & Lack of Confidence
It is not to say that being blindly overconfident is good. I don’t believe you should be factoring emotions into your work in the first place. That is the point of ditching fear and not being unconfident. These negative emotional cues will always get in the way of your work.
Have fun, be highly interested, be a polyglot
Finally, if you’re not enjoying this, you shouldn’t do it. If you’re not impressed and excited as a Ruby on Rails programmer when you discover Node.js and its minimal, asynchronous architecture and don’t instantly think of all the ways you can leverage this new tech to enhance your power as a web architect, something is wrong.
Understand the World
Learn about NNTP, IRC, TCP, UNIX. Understand the world around you—only then, can you effectively manipulate it. This is MUCH easier than it was back when I was a kid. All you need to do is point yourself to some article on wikipedia (UNIX, for example) and follow all the links you see that pertain to these topics.
I could keep going… If you’ve read this far I imagine you get the picture. Ultimately the responsibility rests on your shoulders and you’ll discover the missing pieces as I did during your journey.
I can be found on freenode as keyvan