one man show dev: part 2/frameworks exposed
A few weeks ago I wrote about the death of one man show web development, which resulted in discussions mostly centered around the use of frameworks. Many people (mostly back-end developers though, while my main target is the front-end crew) argued that there hasn't been a better time to tackle a full project on your own, thanks to the generous help of many frameworks out there. Let me explain why I believe this is not quite the case.
rise of the framework
Over the past years we've seen many frameworks spring to life. Just a few years ago we had one or two javascript frameworks to choose from, now we can also find frameworks for our html and css work. We can even go deeper and download boilerplates to build our own framework, going completely Inception on our everyday job.
Frameworks are usually built for one of two main reasons. Either the job has become too complex and time consuming to learn by heart, or there's a repetition of successive tasks that needs to be executed a lot. Being a professional web developer means you're using the framework for the second reason, saving yourself time to spend on more pressing issues. Sadly though the reason I stated first is one of the prime successes of the frameworks out there today, leaving many people clueless about the finer points of the job.
This ties in with what I explained in my previous post. Back in the days writing html used to be quite simple. You didn't have too many elements to choose from, writing an h1 instead of p class="title" was considered excellent coding and even though people were working hard on the next-gen html, nothing much ever changed. The need for a html5 boilerplate indicates that writing html these days is a bit more complex than it used to be, and so frameworks are created to help people overcome these complexities.
the beast within
I've voiced my concerns about frameworks before and I still believe these concerns are relevant, probably even more so, today. Frameworks can be extremely useful to get started with a language you aren't familiar with, hiding most of its nasty bits, but at the same time they will limit your knowledge and creativity.
Using the jQuery example once again, it's perfectly fine to use this fine library for avoiding the cumbersome task of querying elements on a page. The dom selector engine in jQuery is a real time saver. But even then, actually knowing how to do this cross-browser with regular javascript is definitely necessary is you want to sell yourself as a javascript expert. Once you start fiddling with jQuery UI components though, you're entering the territory of quick and dirty coding. From what I've seen from these components, the html code is crap and most components are far from accessible.
The bigger the task you are trying to capture in your framework, the bigger the chance you will yield sub-optimal results. And if you only know to work with a certain language through a framework, your output as a developer will never rise above the strengths (but more importantly, weaknesses) of said framework. You'll be confined by the limitations of what your framework can do for you, trying to solve problems with the limiting tools you have (or can find online) rather than going for the best possible solution.
conclusion
Frameworks offer many out of the box solutions, but most of the time these solutions are of moderate quality (trying to put it mildly). I have never seen a CMS out there that generates decent html by itself, I haven't seen too many javascript UI components that generate something I would put in my code without a definite sense of shame. Of course most of these out of the box solutions look quite okay when viewed in the browser itself, and if that's the level of quality you're aiming for then that's fine I guess, but I would hope that most modern web developers have higher standards.
Use frameworks when it saves you time on repetitive tasks or when you really lack the resources to get a pro for the job, just don't fall into the trap of relying on frameworks without knowing what it is actually doing in the background. You'll lose the ability to properly judge its output, which will directly reflect on the quality of the job you're doing. It may be true that it's easier than ever to built a site all by yourself using frameworks, but the quality of the site will be reflected in this approach and in the end there will only be one person accountable for that.

Comments
maruqex
Nice article, sometimes I also feel dirty using some other's code that generates a lot of rubish when I only need a small functionality, but I have never thought about stop using frameworks.
I think frameworks are necessary.
To have success in web development you have to master a lot of technologies and fields, but you will never know everything you need to complete your work. So I agree about your two reasons to use frameworks, but I think most of time I use them because the first reason, knowing about everything is impossible.
For example, create a web authentication system implies to have knowledge about a lot of fields: chriptography, sessions, cookies, software architecture, security, connections...
I've already done some authentication systems, but i needed years to learn. I think somebody doesn't like to learn all that stuff and copy three lines of code into his project to get a decent(maybe not perfect) auth system still can be a pro.
For me a pro developer could be the one who can get the difference between a bad and a good solution, but in 99% of times the best solution is reuse others code.
I admit, I use some components of jQuery UI, although I agree the code that generates is really poor. What can I do?? I will never reach that level of javascript knowledge!!
Niels Matthijs
That's why I argued that one man show development will be dying in the near future. What you can do is find the right man for the job and hire some javascript/html guys who will deliver clean, accessible and maintainable code.
I guess the same goes for back-end development. You can probably split the job in people who do main architecture, specific parts (like security etc) and base programming.
Greg
I am using jQuery UI in a project and I have to agree that there's some cruft in there. More than once I have thought, "I can do this more efficiently".
Usually, though, it's not even a matter of JavaScript knowledge. The people who create jQuery UI actually need more people with creative HTML/CSS knowledge.
With regards to CMS and clean code, I'm finding the Roots WordPress theme goes a great job of cleaning up crap. On the other hand, you seem to be forced to pick a grid framework. I'm trying one out for giggles (1140) but they should really just give you a "none" option, too.