The following cycle never ceases to amaze me:
- People learning programming find “real” languages such as C++ or Java filled with too many “complex” constructs.
- As these programmers develop, they develop increasing complex programs, and find that constructs such as classes, inheritance, exceptions, generics/templates, errors upon encountering undefined variables, and static typing help them debug their code and write better code quicker.
- They then add these features to their programming languages and everyone rejoices believing they’ve done something new and great.
- Other programmers – just starting out – find the current set of languages to be too complex as they contain features they don’t understand they need, such as classes, inheritance, exceptions, etc.: go to step 1.
I mean PHP5 includes features such as classes, exceptions, and “phpdoc”, similar to Java. When displaying an uncaught exception, the $ex->__toString() method even returns a stack backtrace just like Java. (But global errors – which different to exceptions, as they were invented before PHP5 – do not).
I also started programming using BASIC. It did not have advanced constructs such as abstract classes and exception handling. I did not know I needed them when I started programming. So I can certainly sympathize with people at step #1 above.