You’re Fat and I Hate You

Tweet

So this has happened to me a few times recently (mentioning no names) — I read up on some neat trick or other that somebody’s figured out in JavaScript, and I’m like ooh that’s cool, I wonder how it works. So I follow it up, only to find out that the author doesn’t know how it works, and reading their code throws no light on it either, because most of the work is done by an external framework.

It irritates the hell out of me that so much modern JavaScript development hinges on frameworks. Not because there’s anything wrong with that in pragmatic terms, but because I’m interested in the mechanics of things, and programming with frameworks obscures the mechanics. It’s simply too laborious to work through that convoluted chain of dependencies and see what a script is actually doing. And the code of the framework itself is generally optimized to such an extent that it’s virtually illegible — great for speed and efficiency in practice, but very difficult to read and understand.

Of course, from the point of view of developers using frameworks, that’s exactly the point. The mechanics are supposed to be obscured so that the application is easier and quicker to create. And of course, the actual end-users shouldn’t care at all — just like I don’t care how my car works, I just want it to go.

But if I were a car mechanic I might have a different viewpoint … and here we are! And what we find is that a whole generation of developers are now producing sophisticated applications without a deep understanding of how they work. I guess I probably sound elitist to criticize that, and maybe I am, but it still bugs me, because it makes so much of that development useless to me. I simply don’t care that X has made a better image previewing script using jCloth or whatever — I’m not impressed, because as far as I’m concerned, they didn’t write it; anymore than I would be impressed by someone producing music using the presets on a Casio keyboard (ala Fatboy Slim, though in his case it was a Yamaha keyboard!).

I might still like the music, but I wouldn’t consider them a musician, and wouldn’t be able to talk to them about the finer points of music theory.

What if there’s a neat trick I want to use, or a particular approach that makes sense, but I can’t use it without introducing dependencies into my code — dependencies that bloat the codebase, and slow the application down. JavaScript is already an interpreted language, and frameworks are interpretative environments, so applications written using a framework are essentially using meta-code — code which is interpreted by an interpreted interpreter! How can something which increases the work of the interpretor and the size of the codebase be a good idea?

It all reminds me somewhat of a TV show called The Biggest Loser. The show is like Big Brother for people with chronic weight problems — each week they try to lose weight by crash-dieting and over-exercising, and each week one of them is voted out, with the last remaining person being crowned the biggest loser (great pun huh!). But the show has nothing to do with health or fitness; the program makers don’t ultimately care about the well-being of the contestants, or the bad example they’re setting in encouraging such intensive and unsustainable weight loss. The show isn’t about any of that, it’s just about let’s all laugh at the fat people.

To my mind, framework-driven development is analogous to this. It may produce quick and easy results, but it isn’t really programming, and it’s of no academic interest to me at all. I don’t care if it makes good TV, I care about the substance beneath.

I’m interested in the language itself, and I find it extremely frustrating that so few people are actually writing in it anymore.

Free book: Jump Start HTML5 Basics

Grab a free copy of one our latest ebooks! Packed with hints and tips on HTML5's most powerful new features.

  • Paul Annesley

    So basically you hate abstraction in programming, and think that it is analogous to laughing at fat people.

    I guess we’re all entitled to our opinions…

  • Lachlan

    Might I present the opposite view which is that developers that don’t use frameworks are irresponsible. The overwhelming benefit of frameworks is that they solve problems once. Javascript is a language that requires a high degree of developer knowledge, largely stemming from cross-browser inconsistencies. A problem solved in a framework is one that is solved once, and solved in a way which is very visible to the worldwide community of developers to discover boundary cases and bugs.

    Abstraction is a good thing. So is knowledge of what goes on underneath the abstraction. Asserting that abstraction is bad because it implies a lack of knowledge of the underlying system is making the large assumption that the former implies the latter. It doesn’t. It just shows that the majority of javascript developers are happy to build on the shoulders of giants, rather than haphazardly re-inventing the wheel every time.

  • honeymonster

    Good point on frameworks being interpretative environments. Performancewise that certainly is a concern. Basically the framework code has to be executed again for every page view, before the framework can be used by the page code. That is definately a very good reason to keep frameworks compact.

    I suppose browsers could cache the bytecodes, analogous to APC for PHP; but like PHP they will not be able to cache the prototype definitions (classes in PHP), as they per the highly dynamic nature of the language is subject to change. Basically the interpreter *has* to reset the environment on each pageview and at least execute the opcodes of the framework.

    On your car/mechanic analogy: There are a lot of functions in modern cars which can no longer be performed in the old-fashioned way. Ever since eletronic injection, the art of fine-tuning the carburator, ignition timing etc. is long gone. Today a mechanic must use a highly abstracted tool (a computer) to configure the fuel injection etc.

    Likewise with the frameworks. If they are properly designed they solve the task once. Javascript frameworks also help abstract away browser incompatibilities, which is a great help. As a programmer that is no excuse for not knowing what goes on behind the curtain, however. But the really good frameworks lets you forget it temporarily. It just like a more sophisticated language, a DSL for client side JavaScript.

  • vangelis

    Actually, i think learning and using jQuery made me care more about the workings and ways of javascript. I often wonder how things are done in jquery and look at the code and what i find there is mostly really smart and ‘javascripty’ (whats the equivalent of ‘pythonic’ for javascript?) code.
    There are frameworks that obscure the way things work and there are those that don’t.

  • http://www.primalskill.com feketegy

    Yes, I’m in favor too of using a framework. It cuts down development time, I don’t have to know the inconsistencies of different browsers, it works same on all of them which is a nice thing, you don’t have to write ‘boring’ code all over again.

  • http://www.authelo.com z0s0

    Now now, let the man write his websites in assembler ;-P

  • 2MHost.com

    it depends, if you will make the next googlemaps or facebook then indeed you need to write your own framework.

    but for %95 of javascript usage, frameworks is life-saver .. consider order form validation or simple inline editor.

    also frameworks itself not all the same, there is frameworks that simple and compact .. like jquery .. its like javascript extended language, I think jquery must be included in javascript main core :) and there is something like scriptaculous that needs prototype to work .. double-dependency!

  • Matt Wilcox

    Personally, I don’t see the point in NOT using JavaScript frameworks. And yet I’m a guy that doesn’t like using application frameworks but instead writes in PHP itself rather than a framework. Why?

    Because with PHP and other such languages you know damn well what works and what doesn’t. And everything is clearly documented. And it all runs in an environment you control and is very predictable. I know PHP, so I know it will work how I want for everyone. But with JavaScript you don’t know what browser is running it, what will work and what doesn’t. In order to write any reasonable JavaScript you not only have to understand JS but all the quirks and problems of numerous versions of numerous browsers.

    I’m not in the slightest bit interested in learning to work around that sort of thing, I had enough of that sort of ‘additional problem’ stuff with CSS, and JavaScript is a world of pain worse than CSS. But by using frameworks, the vast majority of buggy interpreter hair-pulling is handled for me. And I can get on with making things do what I want rather than faffing around with broken implementations of quirky interpreters.

  • AndyT

    You’re writing from quite an academic point of view. And that’s fine, but when you’re working to tight deadlines it’s nice to be able to concentrate on the “business logic” (for want of a better phrase) of an application and you need to be pragmatic about things. Of course it’s highly desirable that programmers who use frameworks know the language too but for those of us who do, frameworks can still help immensely.

  • dev_cw

    JS frameworks enable me, the non JS developer, to do some great things that I normally would not be able to. I think they are great. They are being written into other frameworks to extend the capabilities of what could be done by a single developer.

    I can imagine how a JS developer could get frustrated, to some degree. But the advantages far outweigh the limitations.

    Ironically, many of us who approve the use of js (or any other) framework are the same ones who squawk at the idea of using a WYSYWYG editor…which is, to some degree, a form of framework in the sense that it is a tool that gets between knowing how things (in this case basic HTML) are really done.

  • http://www.xixblog.com banago

    I know frameworks can be a lot of ease, but I am against using them for the same reasons that James points out in the article.

  • XLCowBoy

    Well, I’ll say one thing about frameworks:

    For all their pros, they hand you a lot of cons as well. If you wish to try to create some sort of custom process that isn’t immediately detailed in the framework documentation, you can either a) learn the framework, b) ask help on their forum, or c) learn Javascript.

    Although all the above options take a heavy toll on your time (with A being the least, and C taking the longest), one thing is for sure: If you learned the language itself, the amount of time you spend learning it ultimately pays off in the long run, as you will not need to spend hours trying to figure out how to make a framework “play nice”, or worse, spend hours trying to find the right framework in the first place.

    It’s the same idea with using a pre-built CMS – you need to play by rules laid down by the CMS and adapt what you need to in order to produce an output as close to the original idea as possible. However, if you know how to create a CMS from scratch, you are in control of everything, and thus, you have – to a certain extent – “no limitations”.

    P.S. James wrote a fantastic book on Javascript. IMHO, it wouldn’t hurt to give a little bit of respect to the man’s opinion.

  • turb

    I always said that most JS developper that used framework did not know much stuff in JS. Personnaly, I really hate framework as for me, it is an extra learning layer and I have already enough with all the stuff we need to know in web development.

    I can understand that it is a real life-saver but if someone use them and know mostly nothing in pure JS, then it is not a JS developper at all. I have seen alot of people saying ‘I am really good in JS’ that applied for a job but when you ask them to do some JS without using framework, they start to cry like babies.

    Framework should be an addiction, another tools for a JS developper. And when you really know JS, you are able, from project to project, to create your own one.

    I just hate framework because for new developper, it seem like an easy way to learn JS but it is not.

  • Redge

    Maybe nobody writes without frameworks anymore because they’re tired of having to debug browser quircks themselves…

  • http://www.dotcomwebdev.com chris ward

    I kind of agree… developers will limit themselves to the frameworks they use, which isn’t so bad for the purists ;)

    Let them carry on using the frameworks, it’s just less competition for us!

  • http://simon.incutio.com/ Skunk

    For unobtrusive JavaScript work, I believe a good library is pretty much essential. At the very least you need to spin together code for dealing with cross-browser addEvent, cross-browser event normalisation and cross-browser onDomReady. If you want to write clean unobtrusive code you’ll really benefit from a getElementsBySelector implementation as well (traversing the DOM using the classic DOM methods is verbose and frustrating in comparison). If you want to use Ajax you need another set of cross-browser shims. If you want smooth animation you need to roll even more code from scratch.

    After all of that effort, you’ve basically written your own library. Why not save yourself the effort and use one by someone else (especially since it is guaranteed to be better tested than something that only you use)?

    As an experienced JavaScript developer, I can build things with jQuery that just wouldn’t be feasible if I wasn’t using a libary (due to both time and complexity constraints).

  • Rob Whelan

    I took the same point of view for many years, but I’ve finally taken the time to learn the MooTools framework (by literally downloading the whole thing, studying the code, and researching JavaScript more when there were parts I didn’t understand!) and I’m definitely pleased to be able to use it.

    For one, you don’t need to interpret a lot of extraneous code OR read ugly, compressed framework code — you customize your download based on the functionality you need and level of compression (I believe many other libraries have this feature as well): just download one fully-documented version for development, and one fully-compressed version for deployment and you’re set.

    Second, the most painful part of working with JavaScript is cross-browser compatibility and implementing the same utility code again and again. The options are basically:
    * write and maintain my OWN library of code to address these issues, or
    * find an existing, high-quality library to address them.

    I’m very much in favor of taking the second path, though there’s certainly work involved, and I agree with you that using a framework with no understanding of how it operates (or even what parts of it you’re using!) is unwise.

  • Shadowfiend

    Perhaps a more apt analogy would be to attempting to use a regular screwdriver to drive in a particularly difficult screw instead of an electric one. The latter is a timesaver, though it’s no excuse for not knowing how the former works. Using a framework without understanding how things are being done (at least in an abstract way — for example, knowing that a CSS selector library can be built to use a browser’s native XPath implementation and convert the CSS selectors to XPath ones) is often problematic, but using it when you either understand or are willing to dive in to do so is not in any way a problem. By your argument we might as well not use GUI frameworks to program desktop applications. But we do, because the onus of managing the details is no longer on us.

    Plus nobody stops you from breaking out with the regular Javascript when the framework fails you. I do it all the time.

  • anon

    Sounds pretty damn elitist to me.

    Joe Noob makes website in 10 minutes, while Joe Elite takes 10 hours.

    Who will get the client contract? Not the developer developing for other developers “view source” benifit, that’s for sure.

  • tgoyer

    I’ve been a web developer for over a decade, but honestly I don’t give an academic rip about how half this stuff works. I care about getting the job done and collecting a pay check.

    If mootools or jQuery help me get that contract finished faster, then I get paid faster, plain and simple. I’m tired of re-writing the same “draggable floating div” code every few months.

  • TNO[at]TheNewObjective.com

    Well, I agree with you at least. Many of these “frameworks” are crutches to the true essence of programming IMO. “uh oh, the jSpank library doesn’t support x or y, I guess I have to find a new framework.”

    “Joe Noob” may in fact be developing his websites in 10 mins on average, but what if something new comes up? I can bet bottom dollar ole “Noob” will blow his brains out trying to understand the concepts of recursion, closure and cross-browser bugs while “Joe Elite” is still chugging along at his usual pace.

    Being a script kitty or a WYSIWYGer does not make you a programmer.

    True enough it may make you get the basics done pretty quick, but you’re just loading the gun to shoot yourself in the foot. Now am I saying burn all libraries and remove all abstractions? Of course not, but excessive reliance on those abstractions by the ignorant is more often than not asking for trouble.

    In regards to the comment by z0s0:
    “Now now, let the man write his websites in assembler”

    Its quite ironic that he mentioned this. If he in fact understood the underlying concept of assembly and how it relates he would know why some structures are better than others. For example:

    JS:

    if(n==0){
    Foo();
    }
    else if(n==1){
    Bar();
    }

    translates to:

    cmp eax,0;
    jz Foo;
    cmp eax,1;
    jz Bar;

    compared to:
    JS:

    switch(a){
    case 0 :
    Foo();
    break;
    case 1 :
    Bar();
    break;
    }

    which translates to basically:

    jmp [VECTOR_LIST+eax];

  • Brian

    Oh man, I love frameworks. I mainly use jQuery. (Who’s human-readable form can be downloaded from the website for those willing to go beyond view source.) Pretty much anything jQuery can’t do, I do myself. Like a recursive function to change nested unordered lists into drop down menus and such.

  • Martijn

    In my opinion browser vendors should come together and extend JavaScript to accomodate webdevelopers. This would make most frameworks obsolete.
    So many improvements have been made to CSS in the last couple of years. Why should that not be possible with JavaScript?

  • http://www.tibobeijen.nl Tybe-O

    … and it’s of no academic interest to me at all. I don’t care if it makes good TV, I care about the substance beneath.

    First of all I think using frameworks, libraries or whatever doens’t have to rule out having a good grasp of what’s happening underneath.

    I’m a bit surprised by the ‘no academic interest’ remark. In my opinion the most important quality of a programmer/systems designer is the ability to divide a complex problem in a lot of smaller and easier problems. And that’s an academic quality.

    If for those sub-problems libraries exist that do the work, then why not use them? They provide tools, there’s a whole community of debugging-time allready in there. That time saved can be used on other tasks. And if the situation occurs that the component doesn’t live up there’s always the option to plug-in an alternative or develop your own…

  • Tordek

    Exactly my thoughts!

    I think frameworks (like libraries) are nice in a way: They help you do repetitive and boring tasks quickly, and saving time is the whole point of using technology… A nice abstraction (We do DRY all day long as programmers) is useful, but without the knowledge of how it works, it’s useless.

    I know that there are many web frameworks available (I do mostly web work), but I still did my first page from scratch. Not because I don’t like them, or because they’d be “something else to learn”, but for exactly the opposite: I WANT to learn how it works.

  • http://m0n5t3r.info/ m0n5t3r

    uh oh, the jSpank library doesn’t support x or y, I guess I have to find a new framework

    well, with a certain framework it’s rather “I guess I have to write a plugin to do x and y” ;)

  • http://www.arrowquick.com runrobrun

    I had to read through this article twice to make sure I was reading it correctly. As an employer of programmers it seems to me I would be waisting my money to not have the programmers use a framework. That is, unless I could find customers willing to have my programmers start from scratch on each and every project.

    Seems to me like good programmers are probably creating their own framework if they are not using an existing one.

    The debugging issue is a good one. If you have done your research on the various reputable frameworks you can choose one that will save time on debugging and cross-browser compatibility. Allowing the programmer to achieve all the functional features required by the user without having to be as concerned about cross-browser issues. Caveat here: the programmer still has to write carefully and not assume the framework can overcome bad coding on their part of course.

    I was somewhat shocked that this article is on SitePoint.com. I would expect this article to be on ACM Computer Science Education’s site. Having been a CS teacher for 6 years, I can agree that frameworks can hinder the learning process for those seeking shortcuts. However, I never had that issue when assigning programming projects. In fact, frameworks were never discussed at all. Most programming students were driven to understand the “guts/mechanics” of the programming not driven by how quickly then can “do something cool”. While those students did exist, they only lasted for a semester or so. You would then see them move their major to education or business.

  • mipapage

    I don’t think this is elitist. Study up the framework if its so important to you; then you would be able to be elitist and say this. But criticizing others for not doing what you admittedly will not do?

    While I hear where you are coming from
    , and normally love your posts here, you don’t have a leg to stand on in this argument.

    I wish I had the time to learn the guts of a javascript framework, but the internet wasn’t and isn’t being built on cushy 9-5 jobs. A lot of it, as we all know, is built on caffeine and wee hours with candlelight.

    Lastly: You want to draw parallels with fitness and health? I’d rather get out on my bike after having done a rapid bit of JS dev then spend another 20 hours studying up another JS framework.

  • Mark Story

    I think avoiding frameworks is foolish. Sure you can use them to avoid learning the language’s guts, but people who have that intention will do so regardless. However, I have learned far more about javascript in particular by using frameworks. Reading through the source of MooTools and how it accomplishes things. Taught me so much about closures, and how to implement other patterns in Javascript.

    And as many have stated there is just so much crossbrowser shimming that needs to be done in today’s development environment, that if you didn’t use a ‘framework’ you would end up having to make your own. Why not leverage existing frameworks that have a proven record instead a hack base that you might have made. Another thing to take into consideration is that by using a framework, you don’t have to become a slave to it. Use it as you wish. Personally I hate writing animation engines, and drag and drop utils so I use a framework. I could write such libraries I just don’t want to.

  • kevin

    I know your article was about javascript, and I understand your concern and have run into the same thing many times, but I had to point out that you don’t know what your talking about with regard to the show Biggest Loser. It has nothing to do with laughing at fat people and know several people who find it inspirational and the people on the show are taught how to have sustainable weight lose. Your article was good but adding crap were you have no idea what you are talking about distracts from your otherwise valid points.

  • fproof

    Not having to worry anymore about some ‘system’, and building on top of that, isn’t that exactly what allows evolution to a higher lever time after time?
    I hardly think about cpu interrupt requests when I move my mouse over the screen. I’m pretty confident that Windows/OSX will take care of that without me having to worry about it.

  • Anonymous

    If your a programmer who uses a framework to get a job done faster then it is not only good but smart. But if all you know is that framework and not the underlying language behind it then you will have problems. I don’t think about interrupt request when I am moving my mouse across the screen, but I do think about it when a problem comes up when I am developing. Just like the example earlier that gave the difference between the if and switch statements in assembler. That’s important. But not for 90% of the web sites out there though. If you want to be able do something new and innovative then you will have to know the guts of your language and perhaps even deeper than that.

  • Brian

    Frameworks are great for applications that are great for frameworks. No, I did not write that wrong. Read it again. I can’t tell you how many times I began with a framework, needed to customize it, and then discovered quickly that all the documentation was related only to the API. Some frameworks are so good (or have a huge active community), that customization is a snap (think plugins for jQuery or WordPress). However, the likelihood is high that if you are building a unique application that you will have to tear into the guts of the framework, and it will be complicated, frustrating and messy. If you are a responsible professional, then it will benefit you to know how to do it first without a framework.

  • Frank

    I understand what you’re getting at but you could argue its just JS and client-side crap so who cares?

  • stuart

    Of course using frameworks makes no sense – from a theoretical, purely academic horizon-gazing and chin-rubbing point of view.

    You only have to have around 3 or 4 clients with websites to wrap up by Monday to see just how far that idea goes.

    However, I’m sure that if I were a web writer or a programming professor instead of a freelancer, I would agree with you.

  • http://www.sitepoint.com AlexW


    JS:
    if(n==0){ Foo(); } else if(n==1){ Bar(); }

    translates to:
    cmp eax,0; jz Foo; cmp eax,1; jz Bar;

    compared to:
    JS:
    switch(a){ case 0 : Foo(); break; case 1 : Bar(); break; }

    which translates to basically:
    jmp [VECTOR_LIST+eax];

    You can sure say that again!

  • phpimpact

    Come one, lets give the front-end developers a break. Most of them are not programmers! Yes, they use jQuery or Prototype, just like they use Flash or any other development tool.

    This is like saying that all Ruby on Rail developers are dumb, because they use a Ruby framework instead of using Ruby itself.

  • sbdi

    Javascript is a framework. If you understand how to make a browser which can parse different scripting language and intergrate other applications then you can complain. Otherise you’re just moaning :)

  • Patrick

    You need to have a distinction here between people who actually know JavaScript and are using a framework, and those who have simply done a Google search for “JavaScript lightbox” and blindly copied whatever they found… and then later done a search for “JavaScript image gallery” and also copied whatever they found… Often this ends up in two different frameworks being used on the one page.

    Fundamentally, some people care about JavaScript (they might or might not use a major framework) whereas others do not. Those that do not used to grab multiple random scripts from dhtmldrive, now they grab multiple random scripts from whatever blog Google finds. for those who don’t care about JavaScript the result has usually been bad whether they did things the old way or the new way.

    There are also classifications of people who know JavaScript… like, between those who understand that no library (third party or your own) is infallible and those that are mindless fan boys but that would be a discussion for later.

  • Aree

    You’re a princess and I hate you.

  • Alan

    Using frameworks is absolutely necessary in most cases because otherwise cross-browser compatibility is nearly impossible to achieve!

  • Anonymous

    Dude, I have so much respect for your knowledge of JavaScript but seriously, if only I had time to complain about such a problem, let alone give it a serious amount of thought, let alone write a blog post about it.

    I’m under the pump every minute of every day to produce great results in record time and frameworks allow my productivity to skyrocket. Yes, I fully admit that I don’t know how jQuery works fully but until I need to, I’m just going to get on with doing my job and pleasing the people that pay my mortgage.

  • Dick

    @sbdi

    actually… I think you’re dead on! I second that.

  • http://www.magain.com/ mattymcg

    Can you feel the love in this room, people?

  • Anonymous

    Hah, where is the author of this piece? I think it totally misses the mark, makes horrible assumptions and a horrible analogy.

    I started looking into some JavaScript libraries just for the fact that they took care of so much of the basics (like cross browser event attaching/handling) nicely. They basically do the same thing on other fronts too.

    So in some sense, I do agree with the person who said developers who don’t use frameworks are irresponsible. How many developers will write their scripts perfectly cross browser and optimized for performance out of the gate? If you can, then great, but I think 99% of the time the fact is that the libraries are so well optimized that they are actually faster than an ad-hoc piece of code. Of course not for something basic where the abstraction is for nothing, but most people can’t write GetElementBy CSS-selector equivalents and apply numerous effects to object that will run faster than a quality JS library does.

    Finally, let’s face it, the number of good JavaScript programmers has always been low. With all of the libraries around, the vast majority of cut and paste JavaScripters has improved their code and codebase a thousandfold easily.

  • dgibson

    Hah, where is the author of this piece? I think it totally misses the mark, makes horrible assumptions and a horrible analogy.

    I started looking into some JavaScript libraries just for the fact that they took care of so much of the basics (like cross browser event attaching/handling) nicely. They basically do the same thing on other fronts too.

    So in some sense, I do agree with the person who said developers who don’t use frameworks are irresponsible. How many developers will write their scripts perfectly cross browser and optimized for performance out of the gate? If you can, then great, but I think 99% of the time the fact is that the libraries are so well optimized that they are actually faster than an ad-hoc piece of code. Of course not for something basic where the abstraction is for nothing, but most people can’t write GetElementBy CSS-selector equivalents and apply numerous effects to object that will run faster than a quality JS library does.

    Finally, let’s face it, the number of good JavaScript programmers has always been low. With all of the libraries around, the vast majority of cut and paste JavaScripters has improved their code and codebase a thousandfold easily.

  • Justen

    Obscuring and streamlining freaky-ass browser specific interpretations of the DOM and reducing reinvention is hardly a thing to complain about. While some of the larger frameworks are a little clunky you can strip them down to the essential components that improve DOM compatibility if you like. Have a problem reading the optimized versions? You do know they offer non-optimized human readable versions on the websites along with extensive documentation (at least with the good ones like prototype and jQuery)?
    If you really wanted to know how these guys worked you might spend more time reading about it and less time blogging about how you hate ‘em, they almost unilaterally make the web a better place.

  • http://www.calcResult.co.uk omnicity

    I simply don’t follow what you are getting at when you say: “applications written using a framework are essentially using meta-code ”

    If you install an entire framework to get a single effect then you are certainly importing a load of un-needed functions, but those functions are nothing special – they will slow down the page load, but are very unlikely to impact on the speed of any existing functions.

  • haigek

    To the author, a rhetorical question: do you reuse any of your code?

    Of course you do, and if you consistently find a need for certain behaviors you have undoubtedly also built up a sizable collection of reusable code that you have tweaked and massaged over the years.

    You’ve built a framework, whether you recognize it or not. It may not feel like it, because it’s your particular framework, well suited to exactly the sorts of things you need it to do. But it is a framework.

    You understand it intimately, as should anyone proficient with any framework he uses.

    Sure, some folks will approach the framework at the surface level — they’ll understand every nuance of the API — while others will want to dive deeper (like me). Personally, I would never use a framework I hadn’t at least peeked under the hood at, but with a sufficient trust of the source (based on past personal experience or the past experience of others I trust) my need to dig down goes down… until it comes time to extend the framework, of course. ;-)

  • Schmoo

    I don’t have time to go to great lengths understanding every interesting effect I come across either, and I generally want to know exactly how everything works also. Can you not just do as I do, and view the new effect as “using and from “?

    I don’t see how using a javascript framework is any different in this respect than using third-party software, classes, APIs etc. You can use Google maps’ API without intimate knowledge of the code that runs it, can’t you? If not, you might want to up your workload slightly ;)

  • Skeptic

    I’ve resisted using frameworks for a few reasons:
    I’d rather spend the time learning more JavaScript, which is universal, rather than learning a framework, which is not. Each framework has a different user interface, and learning one is not going to help me on a project where they’re using a different one. But JavaScript is always JavaScript.
    Also, when I hire developers for a project, if I can only hire people who (in addition to JavaScript) also know JQuery, or also know MooTools, or whatever, then I’m greatly restricting my pool of potential hires. By contrast, all Web developers know JavaScript.
    Finally, years ago, I was dependent on Dreamweaver (which I disliked) to write my “behaviors” for me, because I didn’t know JavaScript. I decided to learn JavaScript so I could gain control and stop using Dreamweaver — and it worked. Using a canned JS library now would feel a little like going back to Dreamweaver.

    Of course, I’ve built up my own “library” of reusable code. It’s not as optimized or all-powerful as Scriptofabulous, but I understand how it works, I can change it if I like, and I learned a lot by creating it.

  • David Mark

    Yes. The popular do-everything libraries are a terrible idea. The only arguments for using them are from those who don’t know any better. They are *not* cross-browser, but barely multi-browser, so they are inherently inappropriate for Web development. Maintenance and support are a nightmare. Companies figure this out after the code monkeys have left the building.

  • Lea Verou

    When I read debates like this one, I can’t help but wonder:
    In which group of the two (framework users and js-savvy developers) does a framework author belong in?

  • http://www.calcResult.co.uk omnicity

    @haigek:
    No, that’s part of the point. If you have a collection of scripts, then you will re-use the good ones when you need.
    If you use a framework, then you get everything, every time, even when you only need a fraction of it.

    @Lea Verou:
    That is part of the problem: clearly some of the frameworks have been written by people who are (for example:) PHP gurus first and foremost, and therefore those frameworks tend to look and feel like working in other languages, which is really not good for anyone who is serious about JavaScript work.