Tuesday, 4 February 2014

Learn to code in a week?

Listening to Radio 4's Today program a nice lady was promoting her course on coding skills and explaining to the presenter (who always plays devil advocate) why people should learn to code. She whetted appetites by promising that in one week you can build your own website and create your own app!

The problem I have with courses like this is that they give rise to the misconception that programming is easy and you'll be knocking out apps / websites in no time. People ask me to write a games app, I explain its very hard to write a decent game and they look positively shocked when I tell them of the 100's of hours I've put into my crossword and weight tracker apps.

Books like learn Java(or whatever) in 24 hours or week long courses are very useful and provide a quick route into a technology, but it takes much further study and practice to understand  a programming language to a competent level. I find it best to cut my teeth on a project to learn a new language properly.

Programming maybe easy, especially if you follow a sheet of instructions on a week long course but coding is just one part of producing an app or website. Consider for instance what you need to write an app.

1 Design

First you need a pen, paper and an idea. You need to sketch out a few screens of your app and consider how the user will interact with the app. For my Crossword Solver app I had to consider how the user could perform various searches and make it intuitive to use.

Second you will need to know how your app works, if its a game what are the rules? I had to develop fast search algorithms to search a list of 280,000 words for my Crossword Solver app. At the very least you will have to do some research, it took me quite a while to find and compile my 280,000 word list!

In practice you will hone the design over time, certainly longer than 1 week, usually over  many months or a year. I spent several afternoons just tweaking the background colours of my apps to get them more pleasing to the eye. A year after my Weight Tracker app has been released I'm still getting requests for new features.

2 Programming

You can now put your 'week long' programming skills into use. Slowly your app will begin to take shape. Each chapter may have only taken several hours in the 24hrs book, but oh boy you'll be spending many wasted hours just fixing irritating little bugs, trawling Stack Overflow for answers.

'How do I change the colour of my button when it clicks?' cue an afternoon of unexpected learning about how an Android button works. You will spend lots of time learning how to do the small things, never mind about network sockets or 3D graphics.

3 Testing

This is the most important step and its one that even professional (well they get paid) software engineers cop out on. Users will crucify you if your app does not work, no matter how pretty it looks. I combine steps 1,2 and 3 into weekly cycles. A bit of design, code it up, test and then put out a beta release. When I happy with my app, I put the beta release into production for folks on the market to download.

Doing weekly release cycles means you can keep everything in check, it would be silly to design a space pirate trading game with FPS elements only to find you don't have a clue how to write all the code, graphics and sound required.

Testing also means asking other people to try out you app and give their honest opinion, the Google Play store allows users to provide feedback, pay attention to their comments! Your app sucks and I guarantee it will need re-working as it takes time and effort to get it finally right.

4 Hello World!

Your website is snazzy but no one visits, your app is brilliant but no one downloads it. It is a cruel world. Prepare to spend as much time promoting your app as you did creating your app. See my previous blog post for some of my marketing efforts.

Then for all your hard work, a little pocket money would be nice, and it is little! I spent a lot of time creating In App Purchases that no one purchased, which in the end I had to pull them. My Weight Tracker app earned pennies from ads each day, so I pulled all advertising as it wasn't worth annoying my users with ads they never click. See my post Why Android Sucks for more details.

Marketing and making money is hard work but even if you work as a software engineer in a company (unless you are a lowly code monkey), you will still need to discuss requirements, create project plans and manage field trials.

In Conclusion

Programming is hard and very time consuming, programming languages are just one aspect of software engineering. A course that shows you how to build an app in week is basically about following a set of instructions. I'm no carpenter just because I can put flat pack furniture together!

No comments:

Post a Comment