How to learn programming without getting stuck

I’m an indie iOS developer who sells an accounting app called Taxnote. Users of this app have been requesting the cloud sync feature for a long time.

So, I started using Parse, which until last year was the best tool for mobile developers who didn’t want to handle server side programming.

Unfortunately, Marc Zuckerberg decided to kill the service and I didn’t have a choice other than to dump my codes, which I spent 5 months doing at the beginning of 2016.

At that point, I finally decided to learn Ruby on Rails to write server side in order to make the cloud sync feature for Taxnote.

I am lazy, which meant I really wanted to learn it very efficiently. This led me to try a new way, which worked very well, so that’s what I’m going to write about.

It’s not pair programming precisely, but it is something like that.

The hardest part of learning new programming

I believe the most difficult part of learning new programming is not the very first step.

It is just after you have finished doing tutorials or learning the basics. You can find tons of good tutorial videos about programming languages or frameworks that you want to learn these days, so it’s easy to do the first step by yourself.

However, once you want to go on to the next step – for example, you want to build something out of your idea – you easily get lost. When you actually start coding, you will come up against a lot of unknowns, and in most cases you cannot find answers from tutorials.

I think this is the biggest barrier for learners since you can’t even guess how to google it when you don’t know what to do next.

In my case, I started doing several Ruby on Rails tutorials and learned the basics first. Then, since I wanted to build background api for Taxnote, I needed to know the latest practices for making api URL, how to make database structures, which gems I should choose, which server I should pick, and so on.

Google works very well when you are researching something specific in relation to your programming problem and you are already experienced with that domain, but it doesn’t work when you want to hear advice or suggestions from experts.

There were too many questions I wanted to ask people who know what to do, and I knew I would make bad decisions during development if I kept working solely with Google searches.

Find a mentor from Upwork

At the time, I thought I could use Codementor to ask experts about what to do next. But I realized it is a bit expensive to find a long-term mentor there.

If you ask for help from good programmers on Codementor, it costs 20-30USD per 15min, since the service was made for solving your questions right away.

Then I decided to use Upwork to find a Ruby on Rails mentor. What I tried my best to do there was to write the description for my needs in as much detail as I could, since the teaching programming is very broadly based on each student’s level and what they want.

I explained that I knew iOS programming and wanted to learn Rails to make an api backend. I also added that I had already done some basic tutorials and I only needed to learn the skills that were required to build my service.

My particular idea was to watch someone’s live coding via Skype, so that I wouldn’t have to write codes by myself. Based on my experience from Codementor, I realized that if I coded by myself while listening to someone’s advice, it would take a lot of time and slow my learning experience in the end.

It worked really well and meant that I could learn very efficiently by explaining what I wanted to do and just watching an expert coding. I simply uploaded everything via git, then my teacher coded and explained. After each lesson ended, I downloaded the code and reviewed it alone.

Even though it required a lot of my energy, since the way experts code is much faster than I do, it was very efficient and I liked it.

How you pick your mentor

After I posted my offer on Upwork, I got over 10 candidates within 2 days. My hourly rate range was around 10-40USD, and each candidate requested between 10-40USD.

Some candidates obviously sent their letters without reading my detailed descriptions, so I filtered them first. Then I did sessions with 3 candidates, one by one.

You can’t tell their level of experience and how well they teach from their descriptions and offer letters, so it is best to do sessions with them anyway. You can learn a lot from that.

Some mentors taught me what to do only after I explained what I wanted, but good ones suggested good practices on Rails and gave the reasons for them in detail.

I did sessions with mentors asking for 20-45USD per an hour, and I ended up choosing the most expensive mentor (45USD) in my budget because it turned out I could learn very fast from him compared to the others.

For me, it was the best decision since he taught me how to code cleanly in Rails, which is quite a difficult skill to master when trying to learn with Google.

Efficient learning

Basically, I did pair programming with my chosen mentor for 2 hours per session and reviewed it afterwards alone.

During the sessions, I tried to learn things which were difficult to learn by myself and asked him to show me the keywords or references if new topics were something I could learn alone later.

For example, if I need to know how to use some gem from the Github page I can google it and teach myself, but when it comes to writing data structures for my service I need advice.

It was the most efficient learning experience since I didn’t get stuck at all thanks to his help, even though there was a great deal I didn’t know about Ruby on Rails and backend server coding.

I learned a lot from this pair programming and I was able to keep going alone with Google after 5 sessions unless particularly difficult tasks showed up.

It might work when you hire programmers

I thought this pair programming thing might work when you want to hire programmers for your new projects.

If I want to hire an Android developer for Taxnote, for example, I am thinking about doing pair programming first. I can learn some basic Android developments and observe how well each developer codes and handles errors.

When you talk with developers, you learn something you can never find out from their resumes, so this pair programming thing was the best experiment I did this year.

The Upwork Post

I got an email from iOS developer who want to do someting like this and he requested the original post on Upwork, so I share that here.

*I've made Text-to-Speech, Money Tracker, and Timer apps. About Me.