Add a Comment (Go Up to OJB's Blog Page)
Art and Science
Entry 1577, on 2013-10-04 at 17:11:19 (Rating 4, Computers)
You might have noticed that it has been a while (about a week, I think) since I last wrote a blog entry. That is mainly because I have been quite busy with work and haven't had much free time. As a result I thought I might write a blog entry about work, but not just the mundane day to day trivia of a lot of my work, more the fun of doing cool geeky computer things, especially programming.
The thing I like about programming (including "lightweight" programming like building websites and databases) is that it is such an interesting combination of art and science. I don't mean art and science in the most correct, technical sense so maybe the words "design" and "engineering" might be more accurate, but not quite as catchy!
The design/art aspect isn't just the visual appearance of a program, website, etc. It's the way the program interacts with the user, the dynamics, the consistency and intuitiveness, and many other subtle elements.
And the engineering/science part isn't just knowing how to put programming instructions together in a way which achieves a particular outcome. It's about building algorithms which are elegant in terms of being reliable, fault-tolerant, efficient, easy to extend and maintain, and easy to understand.
Let me give an example of design. This is a very simple, visual thing so it is easy to understand, but it is subtle enough that users might not even notice that it exists. One of my web apps needed an indicator to show that a particular function was active. The user clicked a button and chose some options in a dialog window which then was dismissed. I could have shown the option was active with a check mark next to it, or it could have changed colour, or many other possibilities, but I decided to use a flashing border. Except, of course, it didn't flash, it pulsed using a non-linear animation from black through white. I spent at least an hour fine tuning the timing of that animation yet many people don't even notice. But if it had been a simple border it would have been too subtle and if it had simply flashed on and off it would have been too garish. I make hundreds of design decisions like that in every project.
Now let me give an example of engineering. Actually this is more a policy or philosophy rather than a specific example. Many of my projects have database "back-ends" which feed the web page or application with data. Often these databases contain hundreds of thousands or even millions of records so quick access, sorting, and searching is sometimes not trivial (even though I use MySQL, a database with a reputation for speed). So I use integer keys and fixed length records wherever possible even though that often involves complex inter-relationships with variable length record tables. It's a technique which is well known but probably isn't used in many cases where it should be simply through lack of attention to detail.
I know that it is all worth it when I watch people use different systems. Using my systems (and yes, I know they aren't perfect and there are no doubt areas where things could be better) people don't wait because almost every operation is instant. I have seen users log-in retrieve the information they want, and disconnect again from my system in less time than it takes to just log-in to many grossly overpriced corporate systems running on expensive hardware.
But why do they "big guys" get it wrong so often? They just don't care about quality. The big companies only care about making money with minimum effort and risk. See my rant about one of the most incompetent of all, Talent2, in a previous post titled "Corporate Newspeak" from 2013-03-21. I'm sure there are programmers working for these companies who would like to do things properly, but their efforts will be crushed by bureaucratic, incompetent, and corrupt management.
And it extends beyond corporate databases. Many of the big software companies create pretty average products (I'm sure I don't need to mention Microsoft by name here). Some of them create quite good software but over-price it or spoil the experience with unworkable licensing and copy protection schemes (yes, obviously I'm talking about Adobe). While others have captured a particular market (more through their customers' habits and fear of change than anything related to quality) and produce very poor software products (Cisco for example).
Few of the big companies have any art. They do have some science I admit, but mostly they are about that third category of human endeavour: commerce, and that rarely produces anything worthwhile.
There are no comments for this entry.
You can leave comments about this entry using this form.
To add a comment: enter a name and email (both optional), type the number shown above, enter a comment, then click Add.
Note that you can leave the name blank if you want to remain anonymous.
Enter your email address to receive notifications of replies and updates to this entry.
The comment should appear immediately because the authorisation system is currently inactive.