Intro
I’ve been a productive programmer for about four years now and believe I’m in a position to offer some friendly advice to others who might be struggling.
I tried, and failed, to learn programming for many years. The turning point for me was a real world project for a company that I worked for.
Step One
Pick a real world project
My first project was a system to record torque settings in a workshop. The way they had done it for many years, was for each technician to record the settings in a bound book. This would include
- their clock number
- the date
- the job number
- the torque value applied
- the torque wrench used
- the torque meter used
And finally, they’d stamp the last column instead of a signature (company policy) so if there was an issue, they could ascertain who’d torqued a particular bolt.
The problems with this method, as I saw it, were:
- someone had to regularly print out the new books (ME)!
- finding a record was like finding a needle in a haystack
- no backup – if book is lost, all records gone
Bear in mind, this company had about twenty of these books in daily use. Also, it was not uncommon to have to try to find a record (if an engine or transmission failed in service).
So, I offered to attempt to write a web based system, accessed using a couple of tablets the company already had. It took maybe a month or two of work in my spare time to have a prototype built. We tested it using one station, and when that proved to work better than the old way, we introduced the second tablet.
This was not a tech company and the supervisors were genuinely surprised and delighted that they could now search on any field:
- all records for a particular job
- all records for a particular technician
- all records on a date or in a date range
etc.
Unfortunately, their lazy, unskilled IT department didn’t like me in their turf and started causing problems, so I decided to turn the program off. But, it was very successful and well liked by its users and management who were directly involved.
Step Two
Make it better than the old way
Personally, I love writing software. Starting with nothing and ending up with something in use, better than how it was done previously. Every software project I’ve written has been to replace something that could easily be improved, i.e. to replace a spreadsheet, a white board, or paper.
When you’re starting out people can be nervous about change. So I always say to them:
“If you don’t like it, you can always go back to how you did it before.”
Knowing fine well that once they’ve used my system, going back will be the last thing they want to do! But it’s important to tell them, to reassure them that it’s just a trial. That they are in control. People are weird like that.
Step Three
Launch as soon as you can
Once you’ve picked your real world project, get to work! As with all things, you’ll get better and quicker and more confident as you write more code. You’ll also get feedback from your users that you couldn’t predict. The sooner you launch, the sooner your project improves. That’s been my experience.
Step Four
Work as much as you can to improve it
So your project is live, real people are using it and benefiting from your skills. Over the next few weeks / months, try and make it better. Add new features that your users suggest (within reason). Make things simpler and easier for your users. I guarantee you that it will take months until you can officially say it’s “done.”
Summary and Conclusion
So, lets recap
1. Pick a real world project
2. Make it better than the old way
3. Launch as soon as you can
4. Work as much as you can to improve it
5. GOTO step 1
And that’s how I work. That’s my system for writing software. Of course there’s loads of other things that you should consider (version control, backups, security etc.) but for my first couple of projects, I didn’t bother with version control software. I’d struggle to go back to not using it now, but I muddled through. The other stuff you’ll pick up as you need to.
In case you’re interested, here is the before and after for the torque meter software project I mentioned above:
Before:
After: