There are a variety of styles of programming, just like doing anything in this life. You can plan down to the nth degree, making sure that from the start, you know all the possible outcomes of each step in the program. This is how mission-critical programmers work, such as people designing software for NASA or anything that’s life-threatening. You can start a step back, with an algorithm, adding code and testing it as you go, and generally making things work, not knowing every possible outcome, but for generalities the code will work. Recent articles and past experience using their products have shown that this is how many major software developers, including Microsoft work. Then again, you could just throw code at an idea until you get something working, which will break often, requiring constant rewrites until it’s usable.
I tend to start with an idea, get a basic vision of how it’ll work, then throw code at it until I break it, then fix it. I’ve had basic training in the previously mentioned styles, incorporating the design process, algorithm development and so forth. When I’m coding, I’ll keep this in mind, making sure the algorithm for the program works, then coding around it. When there’s something big that I want to code, I spend a bit of time working out all the different parts, writing how things work as comments, then writing the code to fulfil the requirements.
It tends to depend on how big the project is as to how each style can be used – in the best case scenario we all should use the first style, planning everything down to the smallest detail, testing everything algorithmically, then starting to code. In real life, there’s not always the time to do that, and the goals for most projects tend to change quite quickly – especially when it’s up to either the
marketing department or anyone in management.
Resources are a big part of this decision. In business, it’s about money – can you justify the money to run the company for the first stage, where you get no visible benefit from it. When you’re coding for yourself, or starting an Open Source project, there isn’t always the time available to perform the planning step, and motivation tends to run out quickly when there’s no result to show yourself and your peers.
I’d like to take part in some of the Open Source projects that are out there, but that would mean getting my programming skills up to scratch, then finding a project to join, and then starting to learn how the whole project is structured. There’s a lot of projects out there, and I don’t know where to start. I’m sure if I started working the overnight shift more often I might start to do this sort of thing, since there’s plenty of time to do it while I’m sitting here. Again, the thing that would hold me back from this would be the frustration of not having access to the Internet. There’s no way for me to access the ‘net from work, and it’s something that tends to be vital when you’re working on a project and learning a new language.
Book learning’s fine, but it’s restrictive due to the ever-changing world of computers, and learning from a book that’s even six months old means that there tends to be a lot of out of date information that just won’t work when trying to use it. What I’ve done for PHP and Python when I’ve been coding here at night has been to download the offline documentation for the language, and refer to that. It’s been helpful, but there has been many times where a search on Google would have answered my question rather quickly.
With these languages, the offline documentation is available – which is lucky. With libraries, modules and tutorials for particular sections of the language, it’s hard to find much documentation, let alone being able to download it and have it available when you’re not connected. Yes, there’s ways of stripping websites, but that’s not terribly feasible when you’re talking about small sites, let alone the PERL repository and the information contained within.
I guess I’ll just have to get my laptop in a state where I can do some programming, and start reading. Before that though, I’ll have to find a way to either run the programs I plan to use for tuning my car in Linux, or devise a way of booting both Linux and Windows on it. That’s sure to be interesting, due to the fact that it only has a six gigabyte hard drive, which is barely enough for Windows to run. The Linux tuning programs seem to be mature, so if I can successfully get them working, all will be well, and I’ll be rid of this cursed spawn of Redmond!