Tag: programming

A note about programming

Programming is a strange activity in some ways. For starters, the majority of people don’t really understand what it entails, although there is probably some vague awareness in many that it involves ‘creating programs’. For those people who have dabbled in it, programming is a clearer concept but unless you’ve immersed yourself in the activity for a considerable amount of time it is unlikely that a real grasp of the complexity and depth involved in creating software is apparent.

I think programming is an activity that means different things to different people. All I know is what it means to me. Programming is a lot like any other creative endeavour, whether that be painting, writing, composing, sculpting, building, modelling or any number of similar activities besides. Anybody who engages in such creative arts, whether they realise it or not, becomes the ultimate controller of the little world in which they operate.

An author has free and complete reign over the destinies of their characters, imbibing life, death, adventure or misfortune upon these subjects at the whim of a few words. A sculptor or painter has a similar power, at least within the constraints of the material with which they are working. The same can be applied to artists, musicians and so forth.

In a similar vein, a programmer has many choices: which language to use, the nature of the computer for which they are creating the program and the algorithms they employ to produce the desired outputs when their program is run. In my opinion, programming differs from some other creative activities in that it is as much a science as it is an art, being a heady mix of well-trodden known best practices intermingled with the creative freedom to innovate and influence the behaviour of the program in order to make it do things that other programs don’t do, or perhaps to find a better way of doing something that’s been done a certain way for ages.

Much as I suspect is the case with other crafts, some programmers consider their activities coldly, merely churning out code to adhere to a set of specifications created by other people. Others engage with passion in what they are doing, as they have complete freedom over the design and implementation of the task at hand.

Having spent a significant amount of time implementing my vision of a system that does something interesting, and in the back of my head, working towards a goal that would mean I could make a living working on exactly this, it’s interesting to me how I fluctuate between intense concentration and flow, and fragmented, piecemeal sessions where nothing of importance seems to get done.

The former involves working hours at a time through a myriad of challenges and ideas in order to push the product further forward, and not even realising that the time has passed. The latter is frustrating but at least it’s time that can be spent doing little tweaks and tidy-ups in order to smooth out rough edges or oversights in previously written code. Either way it is mentally exhausting, if immensely enjoyable.

Later this year it’ll be interesting to see what comes out of this process. There are some interesting developments afoot and the code is taking shape in ways that excite and encourage me. It’s sort of alive, in it’s own way even. Watch this space ­čÖé

 

FreeBSD for the win

For some time now I have been steadily working on a Very Cool(tm) programming project. I want to do some commercial things with it later, so I can’t really say what it is or what it does, but what I can say is that it works with network packets and it requires kernel-level adjustments to fulfill its potential.

Since starting it, I have been developing on Linux, specifically Ubuntu (though that’s not really important) because Linux is:

  • Easy to install
  • Comes with any number of graphical interfaces which can be selected with the click of a button
  • Has a massive amount of software support (editors, IDEs etc).

However, I recently determined that FreeBSD (an old love of mine) is required for my project, not due to technical reasons, but for licensing ones. If I was to modify the Linux kernel such that it served the purposes I need it to, then the GPL (GNU Public Licence) under which Linux is distributed would force me to release my software under GPL as well, and at this point in time I simply don’t want to do that.

I therefore recently took the plunge and spent a couple of days getting a nice 64-bit FreeBSD system set up. It took some tinkering and messing about with various configurations and drivers, but I now have KDE running at HD resolution, with Geany (my IDE of choice) and the various other packages I use, all running fine.

The final step was to tweak my code to compile cleanly under Clang (as opposed to GCC) and I couldn’t be happier with the result, so now I’m in FreeBSD heaven again (I always did love it) and working towards getting my project to the point where it can take on some commercial viability.