Programming Languages seem to evolve over time. No one has designed a proper programming language once and then said "okay, it is done!". The CeeLanguage is sort of done and finished, but not really since there was C++ and ObjectiveCee. Pascal was finished once upon a time, but then had to evolve into Apple Pascal and Delphi. PHP 3 was a success but then evolved into PHP 4 and PHP 5.
If there was a really good language designed it wouldn't need to continually evolve. Evolving programming languages are proof that humans suck at design - we are poor engineers, poor mathematicians, poor architects. Or possibly design sucks, and evolution is better.
Or maybe the conditions have changed over time. A number of trade offs that were good ideas years ago aren't such good ideas today.
I think a combination of evolution and design is best - pure evolution is way too slow, just look at how long it took for humans to evolve to where we were; millions of years - that is too long to wait for a good programming language!
Possible Reasons for Change:
-
Faster/bigger hardware/RAM/Disk and/or new data structure algorithms allow other ways of doing things that weren't practical earlier. Example: dynamic maps/arrays instead of just pre-allocated arrays.
-
Me-Too-ism: a popular or hyped language has a feature that becomes a bragging point such that other languages feel compelled to add it or else get the LegacyStamp.
-
People get used to a certain feature in other languages and expect it in the target language. Sometimes it's merely habit and the target language offers a different way to handle it, but the habit is too ingrained to change to the target language's way. Other times the new feature really improves or simplifies software design.
-
A language meant for small and simple tasks becomes popular, and thus starts being used for bigger and more critical applications. This will generally require new features. Example: name-space management in JavaScript wishlists.