Compared to when I started in the early 1980's, developing applications today requires way too much effort and knowledge. Shouldn't our profession have found ways to make things easier by now?
My background is both in desktop applications and for the last 7 years, web applications. Especially for the latter, the number of technologies necessary for development usually exceed the ability of most programmers to master them all. Often today people are forced to specialize in front-end or back-end or middle tier and are unable to function if required to do something else. The ability to investigate, comprehend and then switch technologies is getting rarer too as larger companies "standardize" on a set of frameworks, systems and languages to try and avoid the overload on their programmers. This natural reaction then tends to create stale inflexible project teams. In the long run such limited choices on technologies then keeps the teams from learning new technologies that actually might make things simpler.
As an example, right now in order to develop a web app from front to back using J2EE requires some or all of the following knowledge:
- Servlet Spec
- EJBs or Hibernate or JDO or iBatis or other ORM mapping framework
- SQL (at least query unless you also are expected to design databases, then DDL)
- JUnit or other test framework
- Container specifics for Weblogic / Websphere / Tomcat / JBoss etc
- Deployment descriptors and details
- Web server configuration
- Security frameworks like Acegi, etc
- Caching technologies
- Other J2EE stuff like JMS
- Other utility frameworks like Apache Commons.*, etc
- Optional container frameworks like Spring or the various Portals
- If you're insane, maybe XSLT
I've probably forgotten something here. This is insane, how can anyone possibly be able to not only understand the basics of all these technologies, but be able to correctly design, code, assemble and understand how to test using all these various bits. It's no wonder people either specialize, move to alternate languages (like PHP or Python which have their own set of frameworks and knowledge requirements), or just muddle through and make barely or non-functional crap. The funny thing is from reading job ads, you are expected to be able to know all of these technologies by heart and be able to code in the dark with one hand cut off (not to mention 7 years of experience at each). If you finally start working at the company in the job ad you find out that virtually no one there can even master more a handful of the technologies.
So what is the answer? Ruby-on-Rails, PHP, Python, maybe functional languages like ML, Lisp, Haskell? I'm not sure there is a radically better solution that we could all easily switch to. As much as I like Java you have to work really hard to make it simple, and even then the web technologies will trip you up. The whole stack from data up to browser is still a nightmare of moving parts. Somewhere out there is a set of solutions that will actually make our lives easier, allow developers to focus on the business of meeting customer's needs without focusing on the damn technology muddle that we call Programming today. I sure hope to see that day some day.