Teach your mates to code

Half a year ago I was drowning in work. I had a lot on my mind, and I didn’t have any time to move forward with my personal projects. And I can tell you one thing: I’m always full of new ideas, but completing them takes a lot of time.
Half a year ago I talked a lot with Szabi — a friend of mine — that he would be interested in learning mobile programming; at the same time, my brother also decided that he needs a career change, and he could imagine himself as a front-end developer. Higher education takes a lot of time, and they often teach outdated knowledge when it comes to fast-moving technologies. Besides that, they were both busy with their lives, no time for universities. They needed something faster and more efficient.

So the idea was born: if I would spend some time on teaching them, they could help me with my own projects. It would be a great practice for them too, as they need experience, and my projects would finally move forward 😃 A real win-win situation. Let me explain how they went from zero to hero in just less than half a year.

We started with establishing a roadmap: as an experienced developer, I knew what technologies and skill set do I use on a daily basis, I tried to focus on real-life problems. So no algorithms, no programming paradigms — I don’t say that they are not important, but they are way more advanced, and to be honest, even I don’t know all of them, but luckily there are pre-written functions and libraries that take care of those.

Even though the guys wanted to learn different technologies, we began learning with the common tools: I taught them how to use Sublime, how to use Git (with Sourcetree, not console, I really tried to focus on making it as simple as possible, but still covering everything) or how to use Chrome’s Developer Tools.

For my brother — Norbi — I wrote a list of all the HTML5 and CSS techniques that a modern front-end developer should know, and use on a daily basis, but I didn’t go into depths with JavaScript. Using canvas, for example, is way less important than being able to validate forms, send and receive AJAX requests, or use plugins such as fancy date pickers or embed Google Maps and interact with custom maps. He learned the basics of SEO and how to add favicons or mobile icons to the page, set descriptions and open graph tags, but I didn’t go deep into CSS flexbox. He learned how to use bootstrap with its grid layout and responsive features, I showed him tools that can generate gradient CSS backgrounds or how to embed custom Google Fonts, but I didn’t explain the mechanics behind different browser engines. He learned how to handle events with jQuery, but we didn’t look at how to handle events with native JavaScript (we barely touched pure JavaScript anyways) — all the things I showed him were actually useful, and I believe he will be able to solve more specific issues in the future by finding the answers on Google or StackOverflow.

It was a slightly different process with Szabi and React Native, mostly because it was a new technology for me too. We went through the basics of JavaScript together, I sat down with him and explained the concepts of classes, objects, inheritance, and we immediately looked at real-life examples — already in React Native codes. We went through a React Native tutorial and talked about the different videos. When he had generic questions about programming, I could help, but this way I also learned a new technology. We could help each other because there were cases when he understood something before me (eg. how to link the packages in XCode) so learning together was mutually beneficial for both of us.

Practice makes perfect — while they were gathering new knowledge, they needed to gain experience. Luckily both of them were self-starters and came up with exercises for themselves, but I also wanted to make some of my ideas come alive, so they were practicing on them too. This way they could get insights into project management (we used Trello to keep track of tasks, with simple boards such as backlog, in progress, done, cards, deadlines, and subtasks).

They worked on the mobile and web version of an application that lets users keep track of their previous flights (an app I created a few years ago but I wanted to create a new version of it). I could explain many concepts through this project, and eventually everything fit together piece-by-piece, so they could take part in an actual development process.

Oh and have I mentioned, that they both lived more than 1000 miles from me during the whole process? Distance doesn’t make teaching difficult (but there were a few times where I met them personally, especially at the beginning when I explained object-oriented programming — you really need to draw a lot with that).

I was very confident about their knowledge after 5 months of learning, and to conclude it, I organized a hackathon: we rented a house for a weekend, where we built a website and a simple app from scratch in just two days. The enthusiasm in the two guys’ eyes and the satisfaction when we saw the results in the browser and on mobile were priceless. We had a lot of fun together and I could see that they have a solid understanding of everything they’ve learned, and from now they can extend their knowledge by themselves.

summary video of the “hackathon”

https://itunes.apple.com/us/app/guess-what-game/id1239106598
You can download the app that the three of us created during a weekend. 
We also have a website: http://guesswhatapp.net

Keep in mind, all of this was created during a weekend, and the guys had a few months’ experience in development! Kudos to them! 🙌👊

So why teach coding for a friend?
- You can work on your own projects, the ones that you always neglected because of the lack of time — so at the end, you’re not ‘wasting’ time
- You can learn a lot of new things, get a better overview of what you already know, organize your existing knowledge
- You can spend more time with your friends (although I managed to find a lot of materials online which really reduced the times when we had to talk directly — they learned from articles, books, and video tutorials, and asked questions if they had any)
- And for good karma: coding is an extremely valuable knowledge, you might help them in changing their careers, get better jobs or start working together in the future