Help I’m a Student, How Can I Become a Rockstar Programmer ?

622358_10151114111196327_1700171191_o

“Programmers hardly ever get jealous on encountering “beautiful” code. Instead we admire, we complement and promote. In the midst of this flurry of altruistic feelings, we must continually benchmark our proficiency and will ourselves to higher levels of beautiful code creation. Creating beautiful code is fun.” – Victor Dibia .

Photo Credit – Busayo Longe. Me teaching a really great class of students at the MIT Global Startup Labs Summer ’12 at Unilag.

“Hi, I am a freshman student, how can  I  learn to write programs ?  I like some of the apps you have designed – how can I learn to develop apps like that ? I am a computer science graduate, but I don’t really have much software development experience – is it too late to learn ? “

Sometimes, I get the above questions from  colleagues – especially students that I have had the opportunity to mentor. I have written this post to collate some answers I have given in the past, bundled with some anecdotes. While the overall tone of the post is to provide useful tips and guide students in developing countries towards building up world class proficiency in software development, it should also be definitely useful to ALL students. I must also mention that the article is also fairly subjective as its based off of my own experiences.

Here are my top 8 tips

1. Motivate yourself , Make your CodeVow

So, why do you want to learn how to program ? If you have a clear answer that leaps to mind, that’s awesome! It might be because you have looked into the eye of “beautiful code” and you loved what you saw. Or you appreciate the creative and artistic elements entwined with software engineering. Or you would like to be the next Mark Zuckerberg (which is ABSOLUTELY fine). Or you simply just want to make money. Your reasons may change over time. But you should have a reason, a goal that would propel you during the learning journey.

Prior to commencing  my bachelors degree back in 2003, I was in a pre-degree study program and that’s where I met a really smart young man – Remi. Remi’s nick name was pc-guru . Few people had pc’s back then – say 3 students in the entire male dormitory and they were all good friends with Remi. He cloned pc’s , purchased parts (hdds, memory, pci components etc) and could easily troubleshoot/fix  ALL issues. ALL. Heck, even the computer lab technician consulted his help in fixing the lab computers! He was also an avid gamer and I remember many hours we all spent crowded around, watching him successfully play and finish the seemingly insurmountable adventure/fantasy game Lara Croft – Tomb Raider. I admired Remi very deeply and learned a lot from him. I remember him explaining to me the differences between serial ports, parallel ports, usb ports , converters and how I could check if an old pc at home could support a USB game pad I was saving up to buy (through him) . I also remember arriving at the computer lab one afternoon and seeing him teach the lab assistant how to write C/C++ code. You see, Remi was a pre-degree student just like me and his major was business administration. I was a computer engineering major and I saw C/C++ code for the first time that day. That same day, I vowed to become a rockstar programmer. I’d read, I’d study, I’ll make out extra time regularly, I’d beg for help where needed .. and  I’ll learn to code. CodeVow, Bam!
Generally speaking, the more intrinsic your motivations are, the longer it will last in helping you achieve at your destination. Rockstar programmer.

2. Study to Show thyself Diligent.

Bill and Bruce went into the forest with cutlasses each day to cut down trees. Consistently , Bill cut down 5 trees each day and Bruce cut down just 2. One day, frustrated, Bruce asked Bill what his secret was, given they were of equal stature and strength. Bill replied “After cutting down each tree, I spend half an hour sharpening my cutlass” .

The good book says, study to show thyself approved, a workman who is not ashamed. Similarly, in order to write good code, you MUST study. First, you need to study in order to learn a programming language at the genesis of the entire process. After that you need to keep studying to apprise yourself of latest algorithms, design patterns, frameworks and libraries that incorporate recent technology. Technologies change and languages evolve over time.
Its also important to be practical, thorough and unrelenting in your study. Purchase or download a free book on a modern mainstream programming language of your choice (C, C++, Java) and consume it from cover to cover. Yes, COVER TO COVER. Also, completely code ALL examples and exercises! ALL examples. This will greatly boost your knowledge base, confidence and comfort with code. Be patient with yourself, it takes time.

After I met Remi and made my CodeVow, I scheduled 6 hours each week specially for learning to code, went to the  library and started with a 300 page book on “Introduction to programming in C”. I had no access to a pc for practice so I wrote a notebook full of practice code (until I got a pc with a compiler and tested each one months after). And that’s how it all started. With  same methods, I learned Fortran, Visual Basic 6, HTML, ASP.net , PHP , Javascript, Java (android and blackberry) .. in that order. Even today, when I have any project that involves new technology (e.g Cocos2D, Google App Engine, Amazon E3 etc), my approach is to read a whole book or online tutorial before I start writing ANY code.

3. Take on Free Projects – Build your portfolio

When you are starting out, Free is your best friend. Free projects can mean alot of stuff. It can mean a free website for your uncle. A free design banner or website for your school association. Helping out with a friends coding project. Or even contributing to an open source project. Free projects help you build your brand, build your portfolio and build your confidence .

I learned to create designs in Fireworks so I could make posters for my local IEEE student branch where I volunteered. I also created my first “hosted” website in ASP.net and then PHP (IEEE hosting service supports only php) for the local IEEE student branch . And after a year of doing this and gaining some experience, I started to give classes on web design to freshmen students. All for free. I did lots of free stuff and for several years 🙂 . Ofcourse, at some point, doing free stuff should end and when this time arrives, you’ll know it. Your (free) work will have been referred, your satisfied clients will actively advocate for you, and people will be happy to part with money for your services.  I remember a team of senior students who’d seen my free work, “hired” me to train them on coding and help them build some part of their final year project.
Also, as a programmer/developer, it is not uncommon for people to ask you “what have you done” . In fact, you will get asked this question a lot! Conversations can end very quickly if you don’t have stuff to show. On the other hand, a solid portfolio of projects will help you establish the credibility you need in order to charge commensurate fees for your output.  These tips on when to work for free by Seth Godin are useful, should you become indecisive on when to charge or not.

Free or paid ? And when you find yourself in competition with those who do it for free, your approach should be simple  – Create something that is better than free. Seth Godin aptly describes the situation in his blog post – Better than free

There’s only one way: Sell something better than free.
Make a product or provide a service that’s worth paying for.

You don’t need a better way to talk about what you do, or a better gimmick, or a better social media strategy. In fact, you need to reinvent and rebuild what you make for a new reality, a reality where paying for something is an intentional act of buying something way better than the free alternative.

I’m sorry if this seems obvious. It’s apparently not obvious to all the frustrated people I encounter who are still trying to sell the old thing in a new market.

4. Benchmark Yourself – Reverse Engineer

By bench-marking, I mean comparing your output with the best out there. Whenever I start a new project (graphic design, web app, mobile app), I usually perform a simple Google search on the project title to see how other programmers and designers have implemented it. Whenever I encounter complex designs which I cant seem to fathom, I shamelessly download them (if possible and permitted) and study (reverse engineer) the code. And out of the ashes of several reverse engineered projects, my own projects are born – standing tall on the shoulders of extant experience and comparable amongst its peers . In addition to learning, another reason why you should benchmark is to avoid re-inventing the wheel. I remember writing complex Ajax calls with lots of lines of code , almost implementing my own (inefficient) mini-JQuery library, before I found JQuery. And examine how your projects compare with best practices. Are your websites responsive ? Are you implementing HTLM5 to keep your interface lighter and faster ? Are you implementing analytics? Are your website tags compliant with standards ? Do your websites have well structured keywords ? Are your websites designed for easy navigation and accessibility? Are your game app graphics smooth and animations fluid ? Are your fonts as visually appealing ? etc .

5. Participate in Hackathons and Challenges

Hackathons and Coding Challenges are coding events setup by large organisations where developers build software, solve problems and win prizes. They are opportunities to build up your portfolio, learn new technologies, meet other developers, earn cash/devices (and other cool prizes), get introduced to the community and build your reputation. We all have ideas that we want to implement and a Hackathon can become an excellent avenue to build such ideas into products. Many times, the benefits are cascading.
You win a Hackathon -> Your reputation grows -> You get invited for more Hackathons -> You get offered more paid projects -> You gain more experience -> You make more money (hopefully) .

One of my first Hackathons was at Gnigeria 2012 . There was a html5 hackathon session where code labs where given, and skeleton code provided.  That day, I was lucky to correctly solve the codelabs and went home with a Samsung Galaxy S2. I still use it till today. I also remember reading a Anthony Rizk’s book on blackberry development in a hurry and cranking out a winning conference app on the blackberry java platform during the Mobile Web West Africa 2012 conference. Both hackathons were instrumental to me getting the opportunity to teach at the MIT / Google Accelerating Information Technology Initiative at University of Lagos , Summer of 2012, getting invited to speak at the Mobile Entertainmen Africa Conference and also speaking at the Blackberry Live 2013 Conference . Such events  inspire me to be the best I can be and to take advantage of such opportunities whenever they present themselves . To learn more about hackathons, please follow your local community technology news outlets /blogs or visit sites such as www.hackathon.io or challengepost.com for info on general hackathons/challenges.

6. Code to Solve Problems – Study and get good with Algorithms and Data Structures.

As good programmers, we  must be adept at problem solving. This requires we be excellent at clear logical thinking. This then requires ability to draw on well-exercised analytical thinking . Normally, this is NOT a natural trait. It needs to be learned and exercised. If your bachelors degree is in computer science, you might have had the opportunity to take a class in data structures, and algorithms. Ensure you pay extreme attention and solve lots of problems independently. To give a clear example, if you do not know (or are not sure of) what the following mean, then your algorithms background is in need of some extra brush up : Quicksort, BubbleSort, HeapSort, MergeSort, Insertion Sort, External Sorting . Your data structures will need help also if you cannot implement a binary tree, heap, stack , queue, priority queue, linkedlist, tree, and graph.

Consider the problem below ? How long does it take you to implement a working solution ? Happy to learn about and discuss your solutions in the comment section below.

Assume you have a method isSubstring which checks if one word is a substring of another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSubstring (i.e., “waterbottle” is a rotation of “erbottlewat”).

In my opinion, being able to solve challenging algorithmic problems like the one above in a methodological precise manner is a clear demonstration of “analytical thinking” – which almost everyone seems to have on their resumes these days.

I did complete a bachelors degree in computer science and never got the chance to take a course in Algorithms (unfortunately there was none offered!!) .  So, in my free time, I  practice algorithms. I primarily use Project Euler for my personal study and hope to ride on to TopCoder when I exhaust the projecteuler stash of problems. And oh .. this section wont be complete without mentioning that Software Engineering Job/Internship interviews with multinational IT companies like Google, Yahoo, Microsoft, Facebook, Amazon (where we all want to work) are usually made up of algorithms and data structure questions.

7. Practice Deliberately – Never Stop Coding !

From time to time, life gets busy ..  we go back to school, get a full time (non-coding) job, take an extended break, travel, get married, have a family etc . Every few months, its good to write some code. Learn a new programming language while you are at it too. Most decent programmers I know are usually awesome at one or two language and knowledgeable in about 3+.  The importance of deliberate practice cannot be over emphasized. Many people wonder how much effort it takes to become good at your craft. The golden number is 10,000 hours. This article on the bufferblog is laden with practice and perfection inspiration. I encourage you to read it .. here’s an excerpt based on Kobe Bryant’s daily personal practice schedule before Team USA’s regular practice session

For those of you keeping track at home, Kobe Bryant started his conditioning work around 4:30am, continued to run and sprint until 6am, lifted weights from 6am to 7am, and finally proceeded to make 800 jump shots between 7am and 11am.

And he did all of this before the regular Team USA training began. Each day.

800. Jumpshots . (not shots). To this end, I have a personal habit of learning a new programming language or platform every year or so. In recent times its been from making blackberry apps, windows phone apps, android apps , to more recently tizen wearable apps etc. Its also involved learning new frameworks such as Nodejs, Meteorjs and working with data visualization packages and tools. Never stop learning!

Finally – When  and where do I start  Programming ?

Now. Start right now. I started in my freshman year of college and if you are lucky to start that early … by all means do! With the rise of MOOCs , there are more resources available to help you learn than every before. You may take an online programming class from Udacity such as Introduction to Programming in Java and try to see it through from beginning to end, solving ALL problems. Other platforms include MIT Open courseware, Coursera, CodeAcademy, etc . Select whichever looks cool to you, just get started.

I have been experimenting with programming since 2004, and still have lots to learn. Wishing you best of luck as you start/continue this journey. Got questions or suggestions on more tips to consider when learning to code ? Please drop them in the comments section below.

About Vykthur

Mobile and Web App Developer and Researcher. Passionate about learning, teaching, and recently - writing.
This entry was posted in Developer Tips, Education, Programming, Reflections, Self Development and tagged , , , , . Bookmark the permalink.
  • Vincent Olaegbe

    This is SOMETHING. I really do not know what to comment. Bravo!

    • Vykthur

      Glad you found it interesting Vincent! Do try out the little programming puzzle .. and share your thoughts. 🙂
      Thanks for dropping by.
      V.

  • Ukule Alex

    very helpful tips, thx a lot, looking forward to talking with you face to face, cheers!

    • Vykthur

      Awesome … see you Alex!
      Cheers.

  • mysterioux

    another smashing content with guidelines … you’ll go places if you continue in this direction..good job bro..good job…never forget small beginnings

  • mysterioux

    I had to re-read the whole article again…may I suggest to you Vic to put this in an e-book or give me the permission to utilize all your content into a smashing e-book for guys to have a feel? What do you say partner?

    • Vykthur

      Sure, you are permitted to use the content. Thats the entire idea, to inspire and encourage more people to get going! Feel free to share and reproduce.
      Thanks for the kind words too! Its encouraging to know that the effort put in is appreciated!

  • Daniel Erinfolami

    Great post. I checked Project Euler today and there’s this notice… that it had been hacked and its answers are offline. Is there any way to get these answers. perhaps on another site/forum?

    • Daniel Erinfolami
      • Vykthur

        Awesome!
        Im glad you found the post helpful Daniel.
        I hadnt realized that projecteuler.net was hacked!! It appears they are back up but with limited functionality.
        Wishing you the best in your programming journeys. Feel free to share your work as you proceed!

        Cheers!

  • Wale Martins

    very informative article, I am an aspiring developer and I have gotten even more motivated to the cause thanks again for delivering a very good piece

    • Vykthur

      Im glad you found it useful Wale.
      Best wishes with your coding journey, keep pushing!

      -V.