Traditional vs Single Page websites and which language to learn

This post is an answer I gave to a student on my Udemy course: Build your own Backend using Django REST Framework.

A summary of the question was: What is the difference between single page and traditional websites, and which language should I learn for each one.

Here is my answer below:

Read more

Biggest Developer Frustrations Reported By You (Q&A)

As part of our weekly monthly newsletter, we send a survey out to all of our readers. A small percentage of our readership respond, but their answers are always telling.

One of the questions we ask is: What is your biggest frustration?

The top 5 answers are:

  1. Not having enough time
  2. Finding work as a developer
  3. Too many technologies to learn / fast-pace of technology
  4. Finding bugs
  5. Coming up with ideas

I address how I personally cope with all these frustrations in the following video. If you have any of your own personal tips or techniques, I’d love to hear them.

Read more

How I became a professional developer

So I thought in this post I’d do something a bit different and I’ll go through my journey as a professional software engineer.

I’m a full-stack software engineer, that means that I work in all different languages from the backend to the frontend, so I can do backend DevOps, hosting and server administration. I can also do programming in Python and frontend development in JavaScript and some Android and AngularJS.

The way that I got into programming was I started when I was 12 years old. I got my first computer and I was just fascinated with making applications and I was really curious about how to make your own programs on the computer.

I think it was a Windows 98 or Windows ME machine, so very old from modern standards.

I looked up how to program and I asked my parents and they didn’t know because, I mean, it’s not something you know — especially back then — unless you’re a professional working with computers.

Read more

Favourite Atom Extensions

Atom is my favourite text editor.

It is fast, lightweight, cross platform and free.

But most importantly, it has a great community of amazing developers who contribute plugins.

Here is a list of the Atom editor plugins that I found the most useful.

1. File Icons

When a colleague told me about this extension it completely transformed my editor. Out of the box Atom comes with a standard document icon for each file. Add some colour to your tree view with the file-icons extension.

Atom File Icons Extension Screenshot

Make your tree-view sparkle with a proper file icon per file.

2. Minimap

The minimap is a great little add on that really makes a huge difference. It gives you an approximate outline of the code while making the scrollbar larger and easier to grab.

Screenshot of Atom minimap

Install the Minimap extension for the ultimate scrolling experience.

3. Linter Pycode Style

Be notified of crappy code before you publish it with the linter-pycodestyle extension.

Screenshot of Atom Python Linter

This has saved me from embarrassing coding mistakes many times. The example below will install the Python version, but it’s available for many different languages.

4. Pretty JSON

We’ve all had to inspect a minified JSON at one point in our coding career. Un-minify that JSON with pretty-json.

Python Pretty JSON

This one has saved me many times.

5. Launch from Terminal

This one is not an extension but, it’s a really useful feature of Atom none the less.

Screenshot of Terminal Launch

Launch Atom in the location you are currently working on in your terminal window by typing:

So, those are the most useful extensions I use in Atom.

I’d love to hear your favourites in the comments below!

Five reasons to write proper commit messages

We have all been there and probably done it ourselves.

An app randomly breaks or crashes, so you type “git log” to see what has changed recently.


The history reads like:

  • 18:15: More updates.
  • 18:02: Updates.
  • 17:40: Updates.
  • 16:34: Fixed.
  • 12:22: Done.
  • 08:23: Complete.

And usually it’s not even punctuated correctly…

I can understand why. I have been guilty of this myself many times before.

When you’re rushing to get something done and you don’t commit frequently, it’s hard to even remember what you changed and why you changed it!

However, as usual, making shortcuts like this in the short term can be detrimental to the long game.

Here are five reasons to be disciplined by committing often and writing proper commit messages every time:

1) You understand better what you are doing.

Writing a proper git message helps re-enforce in your mind what you are working on.

I’ve had many epiphanies as a result of describing what I changed in my commit messages.

It helps you to be focused, as you are repeatedly bringing your mind back to the task at hand with every commit message you write.

2) It helps to break big tasks down into smaller ones.

In my last post I wrote about the benefits of breaking down tasks.

If you make too many changes in one commit then you will not be able to describe what you changed in a short, concise commit message.

Making frequent commits with detailed messages helps you to practice breaking big tasks down into smaller, more manageable chunks.

In the long term you’ll find that you get far more done as you break down the monster tasks into small chunks and chip away at it. Plus, if you ever have to go back and fix something – in the event of a crash or something breaking – you can troubleshoot so much faster.

3) Others can better understand what you changed.

Coding isn’t a single player game.

If you want to build amazing things you need to work well in teams.

A big part of working well in a team is communication.

Nothing helps developers communicate more than writing clear and concise commit messages in your code.

It means others can easily understand what you did at a glance and gives them less reason to distract you from what you are working on over questions about your code.

4) You can better understand what you changed.

Writing decent commit messages isn’t just about others understanding what you’re doing.

It’s also for you to understand what you’re doing.

How many times have you looked back at an application you worked on years ago and you can’t even remember working on that project at all?

Putting in decent commit messages will certainly help jog your memory and will help you to understand what you changed and why.

5) It is good practice for discipline.

The secret to being a great programmer is discipline.

Anyone can knock up a quick web app nowadays…

But few have the discipline to follow best practices to make it scalable and efficient.

Writing good commit messages is good practice to be disciplined in other areas of programming.

It also demonstrates to others that you have good discipline and you take pride in your work.

Thanks for reading. I’d love to hear your thoughts and experiences in the comments below.


How to handle a colossal project

Towards the end of 2016, I decided to start making videos to share on Facebook and YouTube.

I blocked out some time in my calendar to make 3 videos a week.

Since I do freelance work during the week, it meant that I would have to do them in the evenings between dinner and bed.

I estimated that (in theory) I could quickly knock out a 20 minute video in 30 minutes between 9 and 9.30pm and be in bed early enough to get my full 8 hours.

In reality, most nights I would spend 2 hours getting frustrated and making multiple re-takes until I just gave up!

I ended up just doing videos when I had time on the weekend… Then eventually I gave up completely.

In 2017, I committed to releasing 3 full video courses. The first one will cover Python, from zero experience to beginner.

I knew that if I wanted to deliver on this goal, I needed to improve my process so I don’t do what I did at the end of last year. Which was basically overstretch myself and give up entirely.

Brooke and I sat down and brainstormed how we can improve our video production process together. The answer we came up with was to break the task down into smaller, manageable chunks.

Instead of aiming to do a full 20-30 minute video, I would just break it down into multiple 3-5 minute videos.

And I committed to doing on average one of these short videos a day.

During the week I would still have to do these videos at night, but if I aim to produce something short and concise, and I give myself a realistic time-frame to achieve this (one hour as opposed to two), then I should be able to meet my goal, and still meet my basic needs like a full 8-hour sleep and enough time before bed to read and wind down.

I also realised that I was spending almost 50% of my time setting up my environment (lights, position of camera, putting green screen up, taking it down, etc.). So we re-configured my “studio” so it’s set up along the back wall of our office. It’s now out of the way of our working space and because of this I can leave it up and not have to worry about adjusting it every time I need to film.

London App Developer

I also bought a new webcam so I no longer have to use my laptop AND monitor to film (which takes up double the space and makes the filming experience a bit disjointed). Between these adjustments I’ve saved 50% of time and can now meet my target of one video a day a lot easier.

I’m only a few days in but I’m already seeing the results I set out to achieve.

For every new project I embark on, I find there’s always a honeymoon phase – when you’re really pumped and excited to be working on something. It’s the weeks and months that follow that become challenging. But I feel as though I figured out a routine and a set-up that is reasonable and easy to action.

I’m sharing this goal here with you so I can be held accountable for it. If you have a partner, friend, flatmate or family member that can help hold you to your goals, I strongly recommend reaching out to them and asking them for support.

So far I’m averaging 2 videos a night (100% more than I thought I would do). Compared to last years 1 or 2 a week!

And most importantly, I am now ENJOYING making videos!

This experience has got me thinking about how important this lesson is when it comes to programming.

Many times I’ve faced daunting technical challenges. Sometimes it’s a personal project I want to get done. Other times it’s a colossal freelance project that feels like the more I work on it the more work is created.

But now I take comfort in knowing that the key is just to break it down into small, manageable chunks. It also helps to assess where the biggest pain points are. For me, it was the environment set-up. For you, it might be an onerous manual task that can be automated to save time.

So, whatever your challenge, no matter how big: Break it down and chip away at it.

Take the time at the start of the project to break it down into smaller tasks and use JIRA, Trello or whatever works for you to track the progress.

Then just chip away at it day by day, and you will be amazed at what you can achieve!

Thanks for reading and I hope this was helpful.


5 tips to avoid programming-related injuries

I hope you had a great first month of the year and that you’re already working towards your programming goals for 2017!

I wanted to talk about something different today…Something happened to my wife and business partner, Brooke. It’s been a huge wakeup call for me as a programmer and I wanted to share this story with you as a cautionary tale…I hope something similar doesn’t happen to you.

Whether you’re a programmer or not, chances are you spend most of your working hours sitting at a desk in front of a computer. At the close of the year Brooke started getting a sharp pain in her wrist and arm. It became so painful, she couldn’t use a keyboard or mouse for two full weeks.

Upon some self-diagnosis it appeared that she was suffering from something called Cubital Tunnel Syndrome (similar to the well known Carpal Tunnel Syndrome). Basically, her ring and pinky finger on her right hand went numb, and she had pains shooting up and down her arm.

Read more

switching from windows to linux

Switching from Windows to Linux

Four weeks ago I started working on a new project for a client.

The first task was to load up a Vagrant box to run their platform locally on my machine.

So I cloned the Git repo and ran ‘vagrant up’.

Immediately I was presented with errors… Tons of nasty, confusing errors.

It turns out that the Vagrant box was using the Ansible provisioner, which isn’t well supported on Windows.

I look for a solution, none of them are ideal.

I can either run the Ansible provisioner in a separate VM (in which case I practically need to re-write the Vagrant setup) or I can spend hours hacking away inside the ugly Windows Command Prompt window to do some black magic hackery and get Ansible working with Cygwin…

And I thought Vagrant was meant to make coding easier!

I ask around to see if anyone else has had the same issue. It turns out not a single member of the team is using Windows.

They all use either Linux or Mac OS (mostly Linux).

That’s when I decided it was time for me to make the switch away from Windows and give Linux a try.

Read more

My experience with Dell Support (Dell Hell 2.0)

As a software engineer, the most important tool you will ever need for your job is your computer.

In January 2015 I decided it was time to get a new laptop.

I was currently using an Acer Aspire V3-571 which lasted me a good year (which was impressive considering it only cost about £500) but eventually it started to slow down and became difficult to work with.

I decided it was time to invest in a professional grade laptop with good support. I wanted something that was lightweight, powerful and reliable.

I spent a considerable amount of time researching the different products on the market and finally landed on the Dell XPS 15. Here’s why:

Read more

Attitude vs Experience: What’s more important for developers?

When I was looking for my first software development job, I kept hearing the same thing: “you don’t have enough commercial experience for this role”…

I kept persisting and eventually I got a job at a startup, where I worked for two years.

When I decided to go freelance I was surprised that, after having two years experience as a developer (which in my eyes is a like a century in the fast-changing technology world), I was still hearing the same thing: “you don’t have enough experience for this role…”

But I kept on trying. I worked on my own projects. I published them online. I kept reading and learning new things…

After a few months I got my first freelance contract working with Python.
Read more