Friday, October 09, 2009

Software Developers as Gods

Software - and testing it - is a very funny thing. Seems to me that in some ways software is our (humanity's) closest attempt to be gods - to create our own worlds.

In the real world, the "organic" one, stuff just happens and it is beyond beautiful. In the cyberworld, we - humans - must be the gods who pay attention to every detail. And every detail has to be right - which is awesomely overwhelming as tasks go.

To achieve the goal of a functioning, sustaining world, we have to explicitly and thoroughly test our software. In the real world, when stuff doesn't work, it does and does not make it to the next generation.

Can you imagine telling a god that it has to test its creation before we are expected to live in it? What an insult! The resulting fury would surely scorch a civilization or two to embers (perhaps that was really the sin of Sodom). So you can understand why we programmers do so little and so ineffective testing. It is insulting to think that what we wrote does not work, does not meet the needs of our users.

Well, it's hard being a god, but after a while you get used to it. You drink another Diet Coke, make snide comments to other gods about the fickleness of your subjects, and think up another methodology that will hopefully get you that much closer to perfection.

Somehow, I don't think that humans are up to this task.

But from one software developer to another (if that is what you, my reader, are), BEST OF LUCK!


Nuno Ornelas said...

Interesting thought !

Here's another...

Well, who knows! Will come a day in the near future, where we "God Programmers" will be just goods in our cyber created word, in the hands of our Bugless creation.

GOD (The other one) HELP US! Whatever one that you believe, to postpone this day and keep developing Great Code, but with all the bugs/features needed. :D

Best regards,
Nuno Ornelas.
(University of Porto)

P.S. Steven, hope to see you in Atlanta for this year OPP2009. ;)

Steven Feuerstein said...

Nuno, it will be great to see you at OPP2009 - bring the whole team! :-)

Hey and even if we achieve a bugless state, our users will just "change their minds" and then we are back where we started.

Obviously we need self-evolving code that reads the minds of our users and adapts without the need for our god-like intervention.


adderek said...

Nice one. However:
- You have forgotten about regression testing. It is a worse insult: god created something breaking something else.... so the god damaged something.
- Unit tests are difficult since Oracle does not offer units. Huge package body which has thousands of sub-sub-sub-functions? Java offers classes (however you cannot use "include"). The goal in JAVA is to have tiny classes and many of them. The goal in PL/SQL is to have a lot of packages and to use 3rd party tools to navigate through the code (because all the tiny classes are placed in 1 huge block).
- PL/SQL is often using data from the database. Often you have hard-coded schema.table names and it is difficult to change them for testing. You often do some updates. This is difficult to test it. And I understand that the code needs to be pre-compiled for max performance... I also understand that we have conditional compilation (not really supported by 3rd party apps).
- Versioning of the database is something that is... does it exist? Really... does it? We have SVN, CVS, TFS, ... and many other code repositories. But is there any good versioning code repository for Oracle DB? Something like flashback but better. Probably similar to transactions: changes would be stored during development but not visible to other until code is tested.