Yakov Fain: Today, one of my former clients asked me to interview a job applicant for a position of a senior enterprise Java developer. After the interview I realized that I was talking to a representative of some new breed, which can be called Framework Coder. The guy had on his resume all required components (JSP, Struts, EJB, databases, application servers) utilized in various projects. The scariest part was that he did not lie on the resume: he really worked on these projects without knowing almost anything about Java SE or Java EE.
reminded me about a couple of posts that I made more than two years ago:
This is happening mostly in the IT software world, where the need for "good enough to make money" systems is the greatest.
The most efficient, and therefore the most profitable, way to build software is through the use of both architecture level and application level frameworks.
These frameworks, even simple ones, are expensive to build. Therefore there is pressure to make such frameworks reusable.
The skills needed to build such frameworks and to use such frameworks are vastly different, akin to the differences between the skills to build a C compiler and the skills to use a C compiler.
What do you think the framework builders do day in and day out? Right, they build frameworks. Thus the proliferation of frameworks.
And that creates pressure for the framework users to ever switching to the newer and better frameworks.
Thus in the name of productivity, we have just created a situation where the framework users (that's the majority of us developers) have to waste our time to learn the new things that they (he who built Struts, etc.) keep on churning out that we are sure they'll call garbage two years from now.
And productivity suffers, because the things that are going to simplify our lives are making it more complicated.
The cure:
Learn what's essential: Being able to use the String class from your language to achieve your string manipulation goals is essential. Making your application dependent on Apache Strings package (and seventeen of its dependencies) just to use a couple of their convenience methods is not essential.
Productivity is a false goal for software developers. It only benefits the company who are building the software, usually at the expense of software developers personal development. Nobody is looking out for you.
Enrich your knowledge about how to build software systems from scratch. Patterns is your friend. Abstraction layers is your enemy.
Listening to the technical press with eyes open. They have their own agenda. Be especially careful when they say "XYZ is dead." Chances are it's not dead, or they can simply ignore it. (E.g., JavaEE is not dead, or Bruce Tate wouldn't have to say it every time he has a chance. Likewise, CORBA is not dead, or competing vendors wouldn't have to publish lengthy articles to pronounce its death. Similarly COM is not dead. Don Box said it best: "It's done. It will always be there. And everybody who wants to use it can."
Kai-Fu Lee (Google VP, former Microsoft VP) once talked about the goal of education this way: If you make everything that a student learned during the four years of collage obsolete, what remains in his brain is the true value of an education. Each project we do is a mini-education experience. The most valuable part of it is the stuff we learn that can be carried to the next project.