I've done the odd bit of work for a friend, even a couple small projects by contract. It's a different issue when you're working for someone else — be it a free, or paid — where the goals are in support of someone else's endeavour, and the reward is the respect of a job well done (with appropriate emphasis on the word done), and a pay-day to back it up.
But when it comes to my own projects … the goal is typically more so to learn something. So I tend to find myself wondering along with only the most vague of plans, and reinventing a whole lot of wheels, partly simply to prove to myself that I can. Though, reinventing some of those wheels are not only about knowing how to do something, but how it actually works — it's one thing to stick a CSRF token in your web forms because your company policy tells you to, it's something else to understand what goes into that token and it's application, because you've implemented it yourself, and done the research into how and when it should (and should not) be used. The risk, of course, is that of having done it incorrectly — but in your own projects, aimed at personal consumption, that's usually a risk well worth taking. And besides, it's not like that same risk isn't there when using someone else's product to do the same job — the industry is littered with issues caused by flaws in well known and regarded standard implementations. Everything from long-standing bugs, brand new latest release bugs, through to intentional backdoors, and even the odd spot of governmental interference. Those implementations do, however, have the benefit of real life usage time, and hopefully the attention of a few experts … unlike your own pet wheel which has, well, you.
So now, while I consider it advantageous to reinvent all the wheels I can for the understanding it gives me — and I do exactly that in my own website, eschewing frameworks for nuts and bolts — there is a downside, too. I spend so much time working at the lower levels building up the foundations, or learning to work with some new tool or functionality, I often don't get to finish the project — usually, simply because it stops being fun, I've learnt what I wanted, something else caught my attention, and/or requires the injection of funds which are needed elsewhere — so it languishes on the hard drive forgotten and unloved for months (or years) at a time.
Of more recent note, I finally decided to put the time in to add a feature to one of my more functional coding projects — one which took me ages to get around to finishing just recently — tearing into it without bothering with the niceties of version control (or even making a backup of the script first – although I could hunt down a past version if I got desperate, thanks to the working folder being on Dropbox), and then didn't finish the update. So it's presently in a non-functional state, again. Well, was fun while it lasted… I used to use revision control regularly through University, and when my main PC was running Linux, keeping a log of changes, and all the rest. So I'm certainly no stranger to it all. I suppose it just doesn't seem quite so handy on the little bits and pieces I do these days, and doesn't seem to fit my Windows flow nearly as well.
In any case, my more recent projects:
- I have a desk clock that got broken over a year ago now, and I've not yet fixed (waiting mostly on the designing of revision 2) — this was working quite well for a time.
- A game I started building to learn OpenGL, but got distracted by building a — still unfinished — UI library (they're surprisingly complex little beasts).
- … and several more …
No comments:
Post a Comment