Peeldog

About

Home Index

E-mail Print PDF

a

 

About this site

E-mail Print PDF

This site is a place for me to share my thoughts and the result of work I have done.  I will post some source code for people to use (licenced under LGPL), builds ofapplications I have made for testing or purchace and and blogging various thoughts and media.  Hope you enjoy!

 

Philosophy

E-mail Print PDF

There is a real elegance to a well designed and implemented piece of software that is reflected both in the source code and in the user experience.    It is an art, just as writing a novel or building a mechanical clock.   All the pieces must fit together and if the work is produced in a haphazard way the results may work, but will be clumsy to use and may be inherently broken.

While the complexity of the system is hidden from the user, they will experience the artifacts of bad design in the result.   Because of the various layers of software design that provide degrees of abstraction from the physical hardware, and the interplay between component parts, the choices of how to put a piece of software together becomes very complex. 

The operating system provides the foundation and structural integrity for an application.  Various libraries provide utilities and tools to assist in the development.  Sometimes relying on these external elements is unavoidable, but all external elements should be tested.  I try to write code that is as platform agnostic as possible and keep code that deals with the OS and UI separated from the core functionality of the application.  This allows the application to be run on many different platforms, with different UI toolkits or implementations.

The tendency in software development seems to be creating ever increasing layers of abstraction and backward compatibility.   This natural tendency is motivated by rapid development, reduce the time to market and ensure the longevity of software and the associated data.  I see this trend as something to be avoided during software development.  While abstraction does provide for rapid development, it also creates extra layers between the programmer and what is happening.   I also see implementing code to ensure backward compatibility as a workaround for failing to ensure the code and data structures are future proof, such as using fixed length or rigid data structures.