So frameworks provide functionality above your code, and libraries provide functionality below your code; it's better to be limited below than above; thus we should use libraries more than frameworks.<p>It's an argument I've come around to recently, but what I'd really like to see is some investigations of what styles of though can lead to functionality that is "scaffolding" for other code. That doesn't just provide a floor or a ceiling, but that provides a ladder that you can hang more code from. A simple example is Lisp conditions: they provide a hook in the code you can attach things to, instead of just providing a baseline to code off of. Event-based systems are another good example (whether this is a Javascript-like model, or a Emacs-like hook model). After all, the event model of HTML gives you enormous flexibility on handling events.<p>So here's a language-design question: what's a language we can talk about hooks in? How can you make a hook-based model maintainable? Is there any way to make hooks implicit (like advice --- though advice seems to still require too much internal knowledge to be maintainable if used everywhere).<p>Maybe an Erlang-like model where you have servers pass messages, but you add the opportunity to intercept messages? If the messages are fixed-format, they'd hopefully be well-defined enough for the whole system to be maintainable. And if you need security, you can use all of the now-well-known methods for authenticating and encrypting messages. (And hopefully the vm you're running on can make it cheaper than actually encrypting.)<p>But that seems like the sort of insufficient creativity endemic of Hacker News posts at 5AM. How do we do better?
Or
And like anyone who's ever tried to build a large front-end application with _just_ a library (jQuery) will tell you: it quickly gets way out of hand and completely unmanageable before the product even releases.<p>One the same note, if all you need is a quick animation when a button is clicked, and some extremely trivial dynamic elements on the page, a large framework like Sproutcore is going to just get in your way, and you'll spend more time trying to learn how the hell to use the damn thing and twist it into doing a task that's outside of its primary purpose.<p>In short: use the right tool for the job. The anti-framework posts to come out of the woodwork this morning on HN are pretty disheartening. I sincerely doubt anyone that's completely against using a framework has ever written a large application that they need to support, that didn't end up as a giant mess of spaghetti code stringing libraries together haphazardly.
Lots of people say that they prefer libraries over frameworks. I agree in that if possible I try to avoid the overuse of frameworks. But this cannot be decided on an abstract level, it depends on what functionality I want to use the framework/library for. How clear it is what the framework have to do, how mature is its philosophy about what it have to do? For example almost everybody use the following huge and sometimes quite restrictive frameworks:<p>- operating systems<p>- Windowing/component frameworks for GUI (like Java Swing)<p>- and of course in case of web development the browser itself.
For sufficiently large projects, the choice is not "library vs framework" but "use someone else's framework vs write my own."<p>If you have the time and the expertise for the latter, great! Otherwise, do some research and understand the benefits and compromises.