jQuery is for n00bs
So the CEO comes to you and is all like “I wanna build the next Facebook killer”, and your all like “Fuck ya! I’ve been waiting for this chance ever since I learned PHP!”. So forget the massive backend infrastructure and that you didn’t even know what graph theory was until they hired that PHD who kept talking about O-n-squared like it’s a bad thing. Your job is to build the front end.
So how do you do it?
Well John Resig and Doug Crockford are your Jesuses (or Jesusi? How do you pluralize Jesus… the guy is a fucking God), so you’re all like, “Well jQuery worked on awesomepetsbyphilandphillis.com… so $(function(){}) this bitch”. So you start coding like a bat out of hell. Before you know it, you’ve got a login form and a dialog box and shit is all peaches and cream. You are a God! All you had to do was grab a plugin here and there… you didn’t have to do shit! And then BLAM! BETA!!! Valleywag is now following your CEO on Twitter and Michael Arrington is pleading with you to enter the Techcrunch 50. You are going to be RICH!
So now you’re feeling pretty good about yourself and that PHD is thinking, why the fuck did I spend $150K on college when I could have just read “Javascript the Good Parts” and been the next internet hero? Not so fast sparky.
The Rails Developer
You’re a startup so you are inevitably going to be a Rails shop and you will hire a “Ruby Rockstar”. Don’t argue with me on this.
So like I was saying… you hire this “Rock Star” and then all of a sudden he’s dissin’ your shit. “What the fuck is this inline Javascript?” and your response is “Dude, I’m gonna clean it up, we’re a startup YAGNI… Agile… *cough* *cough*”. So you start cleaning up your Javascript and then you realize “Oh, there’s some common patterns here”. So you start making some classes, cause that’s what Doug said to do. Then you’re like, “Wait, Javascript doesn’t have classes” (or inheritance…. at least not the kind you read about in Learn Java in 21 days), but dude it’s cool. Class.js
So you add class.js into your growing number of dependencies and off you go again. You have classes now and life is starting to make sense, but your app continues to grow, and all of that shit that was starting to make sense is now falling apart. jQuery UI will get you an awesome fucking date picker but the CEO is talking about going international and adding some consistency to the user experience. You want to be everywhere… mobile, desktop, web and beyoooooooooooooooond! The CTO is annoyed about the lack of keyboard controls in the FriendPicker plugin you wrote, but that’ll take a week… and then another week. “She just doesn’t have the power, Captain” you say, but if you don’t get the fuck out of this Romulan tractor beam then you’re fucked. Wait… whaaaaa?
So now what?
Your job was to build a full fledged app, but there’s no way you could have seen this massive shitpile of shit coming down the ephemeral pike (is it pike or pipe? People disagree). Your solution is to build a widget rendering system, some core Javascript utilities, some abstactions upon abstractions (he said mobile didn’t he?). All of a sudden you have a directory tree that looks like this:
public/javascripts/app — Rails BRTCHES!
- application.js — Rails BRTCHES!
- prototype.js — Rails BRTCHES!
- core.js
- core.seriously.js
- util.js
- jquery.1.4.2.js
- underscore.js
- mobile.bitch\!.js
- plugins/
- lightbox-0.5.2.js
- thickbox.js — Cause lightbox didn’t do everything
- gallery-1.1.1.js
- rating-1.23.4.js
- carousel-1.23324234354354353453453453.23.js
… eight hundred or more non-interconnected files
- widgets/
- base.js
- FriendPicker.js
- NosePicker.js
… blah blah blah.. who cares.
What’s missing?
Aside from the fact that you now have dependency galore and that your rating plugin requires underscore 1.0.4, but your awesome gallery plugin requires underscore 0.6.0, you have no fucking tests. Every time you deploy to production your CEO finds out that NosePicker throws an error when he actually picks his nose and eats it, but not when he just picks and flicks.
Your godly status is now tarnished, that PHD is feeling pretty good about his $150K investment, and the Rock Star thinks you’re a douche.
You should have used Dojo you fucking n00b
I’m sorry if I hurt your n00b feelings but because jQuery is so ubiquitous now, I feel like this needs to be said. Remember what Rails did for Ruby? It made it you so you didn’t have to think about your directory tree layout and you didn’t have to nerd fight about what was business logic and what was display logic. You didn’t even know that tracking your database changes should go in source control, but Rails taught you that. You never thought about writing clean, readable, testable code because you were the only one touching it. Rails started doing this for you about 5 or 6 years ago and you didn’t fucking appreciate it. Maybe you didn’t learn it because you cringed at the thought of agreeing with a loudmouth Dutch guy, or maybe you were just trying to get shit done. I don’t care. Rails brought a lot of design patterns and good coding practices into the webdev world and you should at least look at rails because it will make you a better programmer.
Dojo does this
Dojo does this for you too (and it’s been doing so since before Rails was a gleam in DHH’s eye), and honestly, go ahead and use jQuery. Dojo sucks at marketing whereas jQuery kicks total ass, but when you invent your brand new shitty jQuery plugin don’t post it on your blog like you invented something new. Dojo has a full-fledge i18n widget system complete with keyboard controls theming and a11y. It has a ton of core widgets that you need all of the time and it has a framework for creating custom widgets when you wanna do something crazy. Your whole UI lifecycle is taken care of for you and you don’t have to think about it or debate it with the new Javascript Guy. You don’t have to worry about dependencies because Dojo has everything you need to build that next great Facebook Killer.
But the Learning Curve for Dojo is too High
So is learning curve for building a stable performant RIA (is that term passe?). jQuery gives you an awesome API for querying the DOM (thanks John for “Thinking Different”) and providing cross platform consistency, but it does nothing for you when you want to build some bad ass computer shit or maybe just a thick client. You have to do that yourself. I’m not saying its impossible n00berson, I’m just saying it’s hard. Now I will give you the fact that the docs just “aren’t quite there” (hint: they never will be) or that when you download the source bundle it’s extremely terrifying at first glance. But I guarantee you that you won’t you won’t see the Dojo community oohing and ahhing over something simple.
Fine, Use jQuery, but You Will Need Dojo
I understand that 90% of people just want to add a single lightbox or add a drop-down menu to their navigation. I’m not saying that Dojo is for everything. jQuery and it’s plethora of plugins and community support will handle the simple shit for you. I’m talking to all of the n00bs out there that think they are going to get away with writing 5000 LOC and don’t realize that it will become a mess. You people… YOU! are the ones that need Dojo. You need guidance, because nobody has ever written the app that you’re writing. You’re unique, just like you kindergarten teacher told you. I’m just saying that maybe you can learn something from people that have built some crazy shit.
Before you reinvent the wheel… give Dojo a look… because Dojo already did that. TM
Full disclosure… I sat on this blog entry for months before I posted it.

Fuck yeah!
Have you read rmurphey’s article on jQuery and large applications? She’s saying almost exactly the same thing, and even has a dojo-scaffold on github to follow up on for people who know they’re going to have to think about design eventually.
[1] http://blog.rebeccamurphey.com/on-jquery-large-applications
Your fuck yeahs really brightened up my day man, thank you!
Whoa – where are all the comments? Where are the haters? Maybe it’s because the site was down all day? Disclaimer: I too have started about three blog posts under a similar category but could never quite pull the trigger. Funniest damn blog I’ve read in a long time, since the last Steve Yegge post – xlnt.
BTW, I’ve been looking for a Thickbox plugin….
There are no haters Mike because THIS IS FUCKING BRILLIANT!!!
There, I said it.
i used to be a n00b. then i meet bob and dojo. then i was no longer a n00b. now i’m rusty cuz im stuck using jquery and god damn requirejs to grab all of my shit. jquery is like that hot piece of ass you just want to explore. until you wake up one day and she doesn’t have her makeup on… your like ‘woah, wtf. get out of here’. i miss bob.
OMG roflcopter, soooo true. Wake up script kitties, its all about modular, OO JS now-a-days. A sea of unmanageable functions is so ECMAScript 3!
After reading this article I’m sure I’ll build a NosePicker.js DOJO widget during my next vacation.
No really, great article to shake up things and wake up hype-prone developers.
I started with jquery 5 or so months ago, added a few other .js and soon ran into trouble. Then I found Dojo.
The learning curve has been HUGE no doubt but I love it anyway.
Good thing ‘coz today I’m struggling with a browser dependent problem with a dojox widget. Your post came at the right time.
All this good stuff and you didn’t even mention the Dojo build system! (I really hope it works ’cause my site needs it)…
The thing against dojo is that needs a lot more things to be downloaded in order to be executed. Keeping it small and light is very important. Sometimes I think there are an overbelief in abstaction layers. Some are good but too much ain’t good either…
“Dojo sucks at marketing” … and not a single link to http://dojotoolkit.org
SCNR
s.
I agree DOJO really sucks with marketing. For example, there is no link to it from this page…
Great article, i’d never heard of Dojo and use JQuery a lot
Thanks to Stefan for the link!
@bajs Your point applies way more to jquery and other frameworks than it does dojo. Dojo actually takes steps to solve this. With dojo you have dependency management and a
build system to minimize this.
The dojo build system allows you roll all of your project’s JS dependencies into a single minified file.
take a look here
http://dojotoolkit.org/reference-guide/build/index.html
What is it about success that makes developers trash those apps that have it? Or is this a case of Microsoft adopting JQuery??? After all “everybody knows” that anything M$FT does is bad.
Your blog is pathetic.
Oh, the big cuss words make you a real man!
And slamming/using Christ’ name in vain (e.g. denying the Holy Spirit’s witness that Christ is Lord) gets ya nothing but Hell. Period. So, enjoy this life while you can cuz the here-after ain’t no walk in the park, Kazanski.
DOJO = Dude, Our Jesus rOcks! (ok, lousy acronym…)
You can build OO javascript without Dojo or Jquery, and if you are careful with your design you can use composition instead of inheritance, which is always a good idea. Still I will have a new look at Dojo because of this article so mission accomplished.
If you’re are doing large scale javascript, you should use a javascript mvc framework. I’d advise you check out javascriptMVC then rewrite this article. It doesn’t matter which js framework you build on top as long as you use basic oop practices and namespaces to keep your solution clean then no matter who you hire they will be able to jump on board and hit the ground running.
Be the way Jquery is not for noobs! I’ve been developing client side apps for more than 8 years writing pure javascript and jquery is a godsend!
This is F@@king cool!
Fuck Ya! Bitches
It comes down to what your doing, and how you want to do it. Tell a Haskell guy or a lisp guy that you need object orientation to organize a large code base and they will laugh in your face. That being said, i don’t disagree with the core message that dojo is great for certain types of large codebases, and that jquery isn’t awesome fairy dust that makes everything amazing.
Personally, I don’t like “ria” style apps, if I did though, I would be using sproutcore, not dojo. At the moment, backbone is my go to choice for js code organization.
G’day Bob … I can say that 98% of the software world sucks at marketing (as a marketing graduate). And the reason I can say that is because was-a/am-(still)-a software engineer who wondered how can so many SMART people suck so well. I think I’m talking to the choir, anyway. And, don’t take marketing advice from the comments so far (these points have no actual or virtual affect in marketing). So to the point.
Your post gave me enough incentive to re-examine Dojo Toolkit. Thanks. There are a lot of javascript frameworks outer there by now Scully. I’ll go back a few years though to meet this point of getting ‘Dojo’ out there and being mainstream. A mate of mine summed it up about 30 years ago when there was a big contest between Algol-like languages and C-like languages. “It is never about ‘best’. It is just about what people use”.
I saw that again betwixt Java and C++; later its Java and C#? Chrome, Safari or Firefox? My mate is right. And he’s also ‘wrong’ for me. What is more important imho, is that there be a choice.
you know you rank right up there with all those fuck bag self proclaimed C# guru fan boy assholes.
do you really even have a fucking clue? I mean really, Dojo? give me a fucking break, even mootools is light years ahead of Dojo, and jQuery, well it wrote the fucking book.
Wake the fuck up, all of you. did you ever stop to think that just maybe , just maybe it is not the fucking tool it is the one using the tool that is the fucking problem? like you fucking lazy assed self proclaim programmers?
when you can get off your lazy fucking asses and do some real fucking learning, then maybe you will have the fucking right to dis tools like jQuery.
ok so here is a tip for those of you who believe the tool should do all the work:
when you can create a piece of software using C++ that requires you to write the code from scratch that even creates the basic window then you can make the statements that you did. until then, take your uniformed lazy assed fucking stupid miss informed opinion and shove it where the sun refuses to shine.
Hi
Couldn’t you write your article without insulting other people’s God. Try to write your articles without dabbling into the issues of religion. I am sure that is not difficult ??
@aplatypus I reckon there’s a blog post in how software marketing has screwed n00bs the world over. A big lesson for the n00b is to get around the marketing speak and find out for themselves, fast and furiously from real world sources what the marketing geniuses will never tell you, and that is what x software WON’T do.
Bob here has done all those n00bs and non-n00bs a big ol’ favour, by telling us like it is. Something you’ll never get from marketing.
Marketers have no incentive to tell you what the software they’re pedalling won’t do, but that is exactly what n00bs like me want to know right now, so we have diametrically opposed motivations.
And if them marketers want to start messin’ with some API documentation too, and editing out stuff about what this API is NOT going to do, then this n00b is not going to be too friendly.
[...] jQuery is for n00bs Bob Remeika ยป Blog Archive (tags: jquery dojo) [...]
There is no fucking difference between Dojo and jQuery. They do the freakin same thing: abstract Environments. THAT IS ALL. They have slightly different approaches, sure, but that is not the point.
You can do shit with jQuery.
You can do shit with YUI.
You can do shit with MooTools.
You can do shit with Dojo.
You can do great things with jQuery.
You can do great things with YUI.
You can do great things with MooTools.
You can do great things with Dojo.
Period.
Dojo: I feel like lookin’ everything up on a reference every time.
require(‘ya.i.just._went._there’);
goodbye(‘all’, null, null, null, function() { NULL }, null, null, 69, ‘woot!’);
Ok… I’m going to do one round of comments and that’s it. It’s pretty awesome that this entry got some traffic. Thanks for reading.
@cb1 Fuck ya
@Will Sargent – Yes, I have read that and I had the pleasure of meeting Rebecca at DDD. She knows the score.
@Mike Wilcox – I’ve written this post about 12 times in the past but never posted it. I eventually got tired of trying to educate people, and accepted using jQuery with the caveat that I will have to build a JS stack on top of it to accommodate the things that people really want to do. Again… I’m just tired of trying to fight that fight… this is where I vent.
@Adam Rifkin – thanks
@blerd – I wish you future ass that looks good in the morning. I hope we get drinks soon.
@Danie – (function (){ function (){ function () { … }}})().monad1().monad2().monadsForEveryone();
@Shonzilla – I would love to see your NosePicker widget. I hope it has keyboard controls.
@Exnoob – Ya there’s a lot of great stuff in Dojo that I didn’t mention. The good news is that because of this article, some people have decided to take a look. I consider that a net win.
@bajs – That’s a misconception. You get the same stuff in a build copy of dojo core as you do in jquery’s built core. The difference is that jquery has always been downloadable as a built file whereas dojo was not early on. You may be talking about the dojo loader which feels very clunky if you aren’t using a pre-built version. Take another look.
@Stefan – Thanks for providing a link. I did not claim to be good at marketing either.
@Andrey – See above
@Matt – Cool
@JonO – I think you missed the point of the article. I don’t think I mentioned MSFT at all… you clearly haven’t tried to build a big app.
@Pathetic – Dude yOur Jesus dOes rock!
@Dennis – Correct on all accounts.
@jake – I will never rewrite this article but yes… there are plenty of tools to help you, and you will need them. Dojo has them already and I prefer a single verified destination when looking for these things so I know that they will all play nice.
@Matt Briggs – Different strokes… and that all sounds fine and good. Those are perfectly viable options.
@aplatypus – Totally fair. jQuery has won the cross-platform “common things that all people need” war. I would really like to see the JS stack unify as a whole so I don’t have to worry about what library works with a particular toolkit. It would be great if browser manufacturers didn’t need a JS lib to glue things together, but that will probably never happen.
@A Real Programmer – Ya… I’m a C# guru fanboy. Glad to see that you learned something. When I read your message I felt like I had just wasted about 1 minute of life that I’ll never get back now. Thanks for that.
@GMug – I don’t think I insulted God. When are you people going to stop posting comments?
@Alexander Trefz – There’s actually a huge difference between Dojo and jQuery. Maybe not when it comes to DOM and XHR but definitely when it comes to doing everything else that you will probably need (widgets, rendering, charting, 2d and 3dgfx, auxillary language support). Maybe you should take a look at all of the things that dojo does. You bring up a good point though. You can do all of these things no matter what toolkit you use. The difference is that if you use dojo you aren’t going to have a dependency nightmare and you’ll probably have to do less work.
@Eric – Yup… there’s a few API warts. It’s definitely not as dramatic as your comment proclaims. Hopefully a lot of this will be fixed in dojo2.
@Everybody else that sent in a comment like “You are all fags”. Thanks for reading the article. I hope I never have to work with you.
So the big question is: why is Dojo not designed like that every noob can understand it?
Dude u re about 99% right
[...] its critics, of course. Bob Remeika, a developer at Yammer, penned a critique this Spring titled JQUERY IS FOR N00BS. Likewise, Khan Academy has won wide accolades for its thousands of educational videos on YouTube, [...]
[...] its critics, of course. Bob Remeika, a developer at Yammer, penned a critique this Spring titled JQUERY IS FOR N00BS. Likewise, Khan Academy has won wide accolades for its thousands of educational videos on YouTube, [...]
I got a link to this article a few weeks ago and occasionally reading it before starting work, it’s just makes my day every time. Thanks