Put Your Money Where Your Mouth Is – 7 Habits of Highly Effective Aspiring Programmers (Part 2)

If being an aspiring programmer was something akin to a fundraiser, this is what you’d call a stretch goal. In other words, this isn’t going to be absolutely essential advice that will invalidate all your efforts should you choose to ignore it.

But it will make a HUGE difference.

The primary reason people are able to take-up a new hobby, profession or career in a given era which was not possible in the prior is because the barrier to entry has been lowered. How does this happen? Well pretty much by making the job to easier do. This is achieved through better resources, such as technology and education infrastructure. This more or less translates to better tools and better education about these tools. The reason every 7 year old can learn to code these days is because it’s so ridiculously easy: you can drag a puzzle piece onto another and boom, you have a walking talking cat. Such a feat would be unfathomable in my father’s generation. Go back further, and you have a team of 20 scientists feeding paper into a monster praying to dear God that today’s work wouldn’t be tomorrow’s. Think about it, this is what it took just to compile back then. Now my sister can conflate compiling with running a program.

Fortran Coding Form

If you say you’d still code if you had to punch a stack of these, you’re full of shit

So how do you make learning to program easier? You make the actual physical experience of programming as easy as caressing a kitten. No one can deny it when I say it’s just such a pleasure to code on a newer, faster machine. If your computer is slow in any way, run the standard optimization procedures and if that doesn’t cut it, just face the truth, you need a new machine. If you have a laptop, spend the money for a good mouse (get Microsoft’s Bluetooth arc mouse, if it doesn’t boost your productivity by 200%, I’ll offer you my hand in marriage). Don’t scrounge on internet. Get a bloody second monitor and any necessary cables.

Now, not having the right resources fosters ingenuity and a handful of other skills that are hard to get elsewhere. I’ll admit that more than anyone; the reason I learned to code in the first place was to create games that could run on the crappy outdated machines my papa would buy me so that I wouldn’t be able to play games (not to mention he wouldn’t buy me games either). Another great example of this is my friend Christian, who began his computing journey by trying to configure an Italian copy of Windows out of pure necessity. But that’s the catch. Pure necessity. Are you coding with a piece of junk because there’s something you really want and you have no other option? Or is it because you’re ordering too much takeout?

My heart just goes out to all those individuals that come to me with programming questions whilst lugging the conceptual equivalent of CRT monitor stapled to a keyboard, which has to be tethered to a socket just as much as the real thing. You have to wonder why so many developers pay premium for a MacBook Pro. After all, it’s just a pretty preassembled shell on standard internals (both software and hardware wise). Why do that when they can build a machine and stick Mint (Linux) on it for pennies? Because the ROI on getting actual work done is orders higher than on trying to save $100 bucks.

If you think this stops at buying toys for yourself, you might want to reconsider. You’re going to have to consider opportunity costs every day. The hardware and software is only the initial cost. Day to day, you’re going to have to wonder: do I skip school today and spend $200 to go to New York for Y Combinator’s startup school? Do I turn down a $1000 WordPress plugin install gig to focus on your side project? Do you bomb a midterm to attend a hackathon? The answer has always been yes for me. This has been incredibly taxing on me academically, physically and financially, but I truly believe this has put me ahead of my peers. It’s my passion for developing and creating technology that allows me to come up with the time and money for whatever endeavour. Ultimately, this is why I can build a website from scratch or hack a drone and why they can’t.

The suckiest situation programmers get into as they get older is that they end up working on things they hate, when they’d actually like to work on something else. You hear about this all the time, especially because of all the popularity startups and tech companies have been garnering recently (which face it, is the equivalent of people heading West for the gold rush, too late and too useless to earn anything big). People always say they’re going to take a job here or there to get experience and get established financially, y’know just for a “while”, but then they get comfortable, fall in patterns and never move out considerably until the day they die.

If you want to become that great programmer who creates something great, you’re going to have to consider probably the largest opportunity cost of them all. Do you leave your well-paying but intellectually devoid job? If the answer is no, congratulations, you’re no longer an aspiring programmer… and that’s completely fine. Some people are just content with good money, which they can then use to focus on things like family or travel or volunteering, which are all equally desirable endeavours. Don’t feel like you have to be the greatest programmer ever to get places. But if you want to be at the helm of your discipline and create, then expect to pay the price.

The prior article in this series: Procure More Mentors

Procure more Mentors – 7 Habits of Highly Effective Aspiring Programmers (Part 1)

This is arguably one of the most important pieces of advice I can give out, if not the most important. Looking years back, I now realize that mentors have been a more important part of my technological education than I would have given credit to in the past. They include one of my best friends who first demoed his Liberty BASIC duck shooting game to me in elementary (first exposure to code, honestly thought programming was a bit gimmicky), a classmate in grade 6 who extorted money from me by fooling me into believing he hacked and stole my RAM and processor speed via the Internet (started my interest in malware removal), a father’s friend’s son who would try to sell me computers and to whom I’d ask about general computer stuff (taught me how to discuss technology articulately), a diabetic math professor who I got to look at my torrented PHP game site code (taught me I had to learn how to code for real, tweaking variables and being a script kiddie wasn’t going to get me anywhere. Also my first exposure to Linux) and a physics professor for whom I coded for in the summer (became a fan of vim and the unix shell, also learned the importance of programming in other disciplines).

The primary benefits of mentors are obvious; they show you how to do stuff. Books also do that, but they fail in certain ways (which I’ll describe shortly). The slightly less acknowledged benefit of mentors is that you can go to a mentor for pretty much anything. It’s typical to ask them about programming and computer stuff, but mentors have a lot more goodies in store than that. Being somehow affiliated with the field of technology, they are bound to be connected to other people like themselves, often much more talented than they are. They have trotted the same path you have and will help you avoid all the mistakes they made initially (heh.. just ask me what NOT to do). Mentors are often also the best types of friends you can have. Your mom and your boyfriend might not relate to why you’re frustrated about trying to run a loop invoking callbacks, inside a callback that returns to your node.js/express router, only to receive an nondescript 503 error on the console, but mentors certainly do, probably more than you. Some mentors will even give you cash and food, if they like you enough (think Y Combinator).

Mentors themselves seek ambitious amateurs, because 1. ambitious people get around and will one day be in a position to return the favor 2. teaching is the most efficient way to retain and perfect your knowledge 3. mentors are nice people and were once in your position. How can you pretend to be experienced in your field when you can’t help people with more basic stuff?

It might be tempting to think that the internet and books have all the knowledge you need to guide you forward. The truth of the matter however, is that written and recorded knowledge represents a mere fraction of all human knowledge, past and present. Oral tradition (and physical?) still dominates as our primary method of disseminating knowledge, largely due to the lower barrier of entry (e.g. many people don’t have good writing skills, initially time consuming, lack of interest, etc.) This is less evident at first, but becomes particularly important as you progress in your education. As you inch towards the pinnacle of your field, you’ll realize that less and less of your answers are online (not to mention that live acquaintances are inherently more trustworthy than arbitrary answers on SO). Things you might be working on may have only been discussed sparingly by a few select people in the world. Bugs you will encounter have only been dealt with by some random soul in Colorado.

Wisdom of the Ancients - http://xkcd.com/979

Wisdom of the Ancients – xkcd.com/979

Years later (ok im not that old), I have now surpassed all of these mentors and many more in programming capacity, to the point that many of them come to me seeking programming expertise. I know that makes me sound a bit prodigious, but really, it’s only natural for any aspiring programmer. Chances are, your first mentor wasn’t/won’t be a programmer by profession. One of Albert Einstein’s preeminent mentors, Max Talmey, was an ophthalmologist, of all things. Despite Talmey’s physics knowledge probably being limited to optics and elementary mechanics, he shared his passion for sciences with Einstein nearly every week for 5 years. The teenage Einstein’s mastery of math and physics soon surpassed Talmey’s. There’s evidently a limit to how much you can be taught by your coach, else your coach would be the best programmer already and that’s that. Just like Eugenie Bouchard parted ways with her childhood coach when she reached no. 5 in the WTA rankings, you too will need to drop your mentors when you reach a certain standing. The day you’re no longer able to surpass your mentors, you’re no longer an aspiring programmer, but just another career programmer (not to say you’re not ambitious in other areas).

1337: Part 1 - xkcd.com/342

1337: Part 1 – xkcd.com/342

Finding mentors is not difficult. The worst case scenario is that you find someone on the internet because you live in an isolated area. If that’s the case, look at the forums or discussions for sites like Codeacademy or Scratch. You can also try contacting the evangelism teams for companies like Microsoft or Google. Joining Facebook groups is also an extremely effective way of finding mentors. Even if you’re not isolated, do pursue this! To find them, just use regular search terms in Facebook’s search box. If you’re under 15, the best way to find people is probably by asking your parents, siblings and the school librarian. Stay weary of strangers! If you’re older (or perhaps more mature), you should try to meet as many career programmers as possible. Don’t just find one or two, some of them will have bad programming habits or may be misinformed and the best way to hedge against that is to see who’s different from the others (she’s either really weak or really talented). The reason I mention age is because the younger you are, the more people will be afraid to work with you. It’s understandable, they typically have more to lose than do to gain with younger mentees. As you’re older, you’ll fit in more at a university setting, where you’ll be able to meet with older students who have similar ambition. A great place to meet competent mentors are hackathons and workshops. You’ll get immediate experience points just for working with them. Don’t be afraid to join them just because you’re not as good. If you don’t want to dragging down a pro team, ask if they mind taking a newbie along. You don’t have to be on the BEST team, just one that is better than what you are now.

Having written all this, it begets the questions of how I’m currently managing my mentors and whether I’m currently mentoring anyone. I couldn’t begin discussing this without first mentioning Rudi Chen. Rudi’s the reason I’m here today talking about code, instead of talking about something like 7 Habits of Highly Effective Aspiring Med. Students. Rudi first found me on Facebook after hearing about me trying to compete in the Imagine Cup. He in turn recruited me as a mentor for Microsoft at my school and the rest is history. Whenever I have a career question I turn to him. He’s also very talented in other areas, so I ask him for help on things like Image Processing/Computer Vision. Rudi’s actions further introduced me to other talented individuals, such as Steve Woz reincarnate Louis St-Amour and evangelist extraordinare Sage Franch. Just in the last couple of weeks, Louis saved my ass at a hackathon via Skype and Sage helped me present a case to Microsoft for the need of two Kinect hackathons in Montreal. There’s also the professors I work with at the Montreal Neurological institute, Dr. Villiers-Sidani and Dr. Voss. Although I am more proficient than them in programming, they’re more experienced than me in regards to hardware and now our project is getting me up to par on circuits and electronics.

In terms of my mentoring, there is this blog where I write sometimes… 😉 A few students I recruited while I was in CEGEP (Pre-university schooling in Quebec) for the school technology club I started, work with me actively to advance their programming skills. They themselves are starting to become mentors. I also tutor a lot. I guess it’s not as benevolent as just straight up helping people, but teaching semi-professionally allows you to practice your craft while being held to a higher standard. In addition to all this, there’s the CS homework I help people with for the heck of it. There’s a lot of this, but I don’t mind at all. In fact, I encourage people to let me help them. They’re really helping me. I never had a formal education in programming so it’s nice to see how I would fare academically. Sometimes there are people who try to take advantage of this however, so it’s important to be weary.

If you need a mentor (which you do), why not start by asking here? Every great programmer made some friends.

The next article in this series: Put Your Money Where Your Mouth Is and the prior: The Seven Habits of Highly Effective Aspiring Programmers