Marking the three year anniversary of the European Parliaments no to software patents the 24th of September is being made “Stop Software Patents World Day”.
Software that impressed me
Few pieces of software have managed to make a deep impression on me, through my ten years I can only remember a few moments I was really impressed with what I had just found or tried. Here are my “highlights” in no particular order. I might want to add that some of these events took place long ago.
The operating in itself was perhaps not so impressive but the hardware support was like nothing I had never seen before. This was put to its edge when I one day moved a harddrive with Windows 98 from one computer to another (due to memory failure on the original computer) and I was deeply impressed that the operating system quickly adapted to the new hardware, installed new drivers, rebooted and then worked!! Not only did it work for the moment but I remember that computer running for at least a month or so before I reinstalled it anyway since I wanted to be sure as to have no internal conflicts within the operating system. If I had tried this with Windows 95 or earlier I’m sure the computer would have found a way to vaporize, explode or otherwise mutilate itself.
Where there anyone not impressed when they first saw Google Earth? It’s an amazing piece of software, one thing is to invent it but it’s a whole other thing to acctually implement it and get it to work! Truly amazing.
I do not know how old this command is, I just found it a year or so ago, but it is like the swizz army knife of backups! I found that I could with ease sync very large folders over remote connections using SSH and not have to worry to much about transmission payload! This wonderful command calculates the difference between the two folders, at both ends, and then syncs the changed contents. While this might not be very impressive rsync takes it one step further, if a file differs it also calculates which parts of the file have changed and only sends the changes! In essence, that 2 Gb log file that keeps changing every night can still be synced since rsync will only keep sending the changes to the file and not the whole file.
I always knew that virutal servers where nothing for me. Boy was I wrong! Almost by misstake I tried out VMWare Server when it became free to use in development and I’ve not stopped using it since! The ability to host several development machines and try out different configurations without have to worry about breaking the servers is great. Just snapshot a server, try whatever you want and if you do not like the result just revert back to the snapshot! The bonus that it hosts several of my development environments on a single PC (or laptop!) is not something I even think about.
Worse is Better
I recently found an article of an outdated development philosophy called Worse is Better. The term was coined by Richard P. Gabriel in an article about LISP and alludes to the “Less is more” slogan.
In Worse is Better-design simplicity is held above all other traits of development. Wikipedia summerizes the traits:
- the design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in a design.
- the design must be correct in all observable aspects. It is slightly better to be simple than correct.
- the design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency.
- the design must cover as many important situations as is practical. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. In fact, completeness must be sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.
There have been many development methods that have been hyped lately but I’ve never heard about this one before and yet I think that I’ve been involved in several projects where the values of this approach have been used. I dare say many website projects have had this overall strategy. Most of all I think this is a valuable approach while learning a new programming technique (such as a framework or programming language).