With years the software development becomes more and more complicated. I remember 8bits CPU assembler for home computers. You only need to understand very few basic principles to write a program on it. Also there weren’t many syntactic constructions in it. However, assembler allowed creating any program you want. Assembler is easy to learn. I doubt that experienced developer who hadn’t know asm before will not learn it in one or two days to write programs.
As for me, Assembler has only one problem: to write even simple program you need to type many lines of unobvious code, which is hard to read and understand. This brings us to a higher level: Pascal and C were really powerful languages. They were simple, almost like assembler. But a problem appeared on the scene. The name of the problem was ‘libraries’. First libraries were simple, but to be effective you had to know these libraries.
The next step was made with appearing of Object Oriented languages such as C++. OOP is great paradigm and improves development performance. However it needs additional knowledge beside the language. To learn OOP (from my point of view) one needs 2-3 years of development experience. With appearing of OOP many libraries were born. To be effective you had to know something monstrous such MFC.
Time passed and new language extensions appeared. I mean templates in C++ and libraries written with them. From one side these libraries greatly improved developers’ performance by covering common programming patterns such lists, arrays etc. From other side you need to learn new library. Understanding of templates and learning standard template library will takes more than a year.
As shown above to be effective with C++ you need 5+ years of experience (3 year of OOP paradigm and 2 years for language itself and common libraries). Modern languages C# or Java require a year or two less. So, to be effective programmer in one of the modern language (such C++, Java or C#) you need 3-5 years of experience.
Internet technologies improved greatly during past 10 years. To be a web developer you need to know several languages and technologies. For example I am developing web application on C#. In addition to C# I need to know HTML, CSS, JavaScript and SQL as a minimum. Also I need to know how to write ASP.NET applications, which demands deep ASP.NET knowledge. In addition I have to keep in mind differences between Internet Explorer, FireFox and Opera browsers. I fear to suppose how long it takes to learn all these technologies and languages to be a guru.
Also I have a feeling that all code we are writing with help of fashion features (such as drag and drop with AJAX) is like repairing an engine through exhaust. I am asking myself why Microsoft or someone else doesn’t develop a technology which allows writing web application from start to finish using only one base language. Let it be completely new browser, new Windows and new DevStudio, but please, please, please only one language…