5 Epiphanies in Software Development
Monday, November 26th, 2007Cedric’s post regarding software headaches got me thinking about the more pleasant learning experiences I have had in the last 15 or so years I have been writing code (for real machines not Species and STs). So I have pulled together a short list of Epiphanies that most mortal developers go through sooner or later.
- Object Orientation: now on the face of it OO isn’t that complicated, you create a set of classes that represent both real world objects and behavioral entities. This is a simple enough concept however it take a while for it to click, it takes a while for you to understand why that is a good thing
- Functional Programming: who’d have thought that Lambda Calculus wouldn’t be intuitive? Seriously though, Functional Programming is a category of programming languages that is essentially based on mathematic functions and their evaluation without the need for state. This isn’t such an easy concept to grasp like OO and even when you do the benefits can be non-obvious until that epiphany moment.
- Recursion: is a very powerful thing, used well and it can achieve great things, used badly and it will crash your program.
- Do one thing well: certain companies are famous for their feature rich products. People love their features, product managers get paid for adding extra features and features are what (lazy) marketers concentrate on. However more features means unecessary complexity of code and complex code leads to bugs. More features means that the important features get less attention. The trick is to do one thing well and make sure your code, program, service can interoperate with others that also do one thing well.
- Proprietary Software is only good for the vendor: if you give a company that you do not control, monopoly provision over the support of a piece of software, that you rely on, you expose yourself to significant risk. Unless you have a very big stick to hit them with they will not be responsive to your needs (in my experience even if you do have a very big stick they still won’t be very responsive). If you need to fix a bug in a piece of software and you need to fix it immediately then you need the source code - end of story. Also you probably don’t need all the features they are offering (see Do one thing well).
I’m sure there are more… would love to hear other peoples epiphanies
PS I almost titled this 101 Epiphanies in Software Development, but thought better of it