Trencher93 wrote:
Software development advances by introducing greater levels of abstraction. The low-level libraries in C were built upon by higher-level abstractions in (say) Java, where string-handling functions were augmented with threading and networking libraries. From here, even higher levels of abstraction like J2EE were introduced. On top of these high-level abstractions came higher-level abstractions like Spring and Hibernate. On top of these are even higher levels like MVC flow of control. In some ways, operating at a higher level of abstraction makes typical jobs easier to do. Hibernate is easier than hand-coding database storage and retrieval code for every object. On the other hand, the whole exercise becomes a house of cards. Java has like three or four I/O libraries now. J2EE is a breathtaking mess, with JSP, JSTL, EL, and so on. JSP pages which have to use JSTL/EL and also emit JavaScript, jQuery, and CSS are almost incomprehensible. (Is that a JSTL tag, or an emitted markup tag? Is that an anonymous JavaScript array, or a CSS list?) But there's no going back. Remember, there was a time when high-level abstractions like C's string library were considered too slow.
This is sometimes true, but you're also talking about Java, which isn't a particularly common language outside Android and academia. Many advances are nothing but refactoring or accounting for hardware advances, and some higher levels of abstraction come with zero or near zero performance penalty (intelligent use of C++ templates, e.g. RapidXML).
I will say that I very often forego abstraction libraries when developing products if they don't offer very significant and tangible benefits, and I produce very efficient (likely more efficient than what people were producing in the 90s) software that is at least as feature rich as anything else you'd find these days. There are times that I develop things that people may think of as "reinventing the wheel", that really only require a couple thousand (or fewer) lines of code. It hasn't really been a problem, and maintenance is easier than dealing with an external library.