Journal

Thoughts on Frameworks

9 May 2006 › 19 comments

I really wanted to sit this one out, and not get drawn into all the hoopla around frameworks. I saw a similar surge of arguments flying back and forth over un-design, but to me that conversation was just so ridiculous it wasn’t worth humoring with an answer. However, the whole framework debate is quite balanced, and one in which I can understand both sides. In case you’re curious, it all seems to have started because of Jeff Croft, so blame him.

So far, some pretty heavy-hitters have chimed in to voice their opinions. Initially, it was my friend Jonathan Snook sharing his thoughts on why frameworks suck. Then, the revered baron of CSS Eric Meyer shared about his confusion on the appeal Rails and Django. Without wanting to over-simplify what they said, the basic premise of both their arguments is that there is a crufty layer of obscurity between the human and the underlying code.

Essentially, according to them, any programmer worth his (or her) salt should be at least slightly suspicious of anything that removes control over the minutia and replaces it with automation. They say such automation assumes to much, and takes the programmer out of the equation, replacing it with too much guesswork and obscurity. I agree with this viewpoint, and was myself a bit skeptical about Rails at first, because I longed to know what was going on with the foundation of Ruby too. Really though, being a good programmer means choosing the best method to accomplish a particular task.

To use an analogy, we could all turn up our noses at abstraction, quit using GUI based operating systems, and just type everything directly into a command line. This would definitely prove intimate knowledge of UNIX or DOS, but would not be incredibly productive. Plus, are not operating systems, even command-line driven ones, just an unnecessary layer of abstraction from our binary data? Shoot, forget that! What we really need to do is get back to the primal, binary ones and zeroes that got us here.

Okay, enough ranting and back to the point. Wilson Miner had a few things to say, which provided some counter-balance with other school of thought:

Frameworks are nice for real programmers because they cut out a lot of the routine, boring or complicated parts of programming that they don’t want to deal with. As a side affect, they’re really appealing to designers because they cut out a lot of the parts of programming that they don’t know HOW to deal with.

Mr. Meyer, we know from the link in your footer that you use WordPress. Jonathan, you’re still running Movable Type, that is unless you’ve secretly finished work on the elusive GainCMS (jab jab). Are not blogging tools frameworks for content, in and of themselves? WordPress and Movable Type are both heralded as a “publishing platform,” and many programmers have taken to it, despite their undoubted capability to create a unique system.

If anyone has room to talk about not using any such platform, I would say it is Andy Rutledge, who uses PHP includes to power his site, and hand-writes his own XML for the RSS feed. He is a self-proclaimed non-programmer, emphasizing design as his primary focal point. Ryan Brill would be a good example of one who hand-rolled his own PHP-based CMS. Still, PHP has a rich history grown from Perl, so perhaps that’s too much of an abstraction.

My point here is not to rip on either Jonathan or Eric, owing much of what I know to the tutorials and books that have been written by each of them respectively. Plus, I have met Jonathan in person and have no doubt he could squash me like a bug at next year’s SXSW. What I am trying to say is probably best summed up in the famous words of Bernard of Chartres.

We are like dwarfs standing upon the shoulders of giants, and so able to see more and see farther than the ancients.

Let us not forget that none of us would not be where we are, if not for the people who have gone before us and paved the way. If frameworks are not your thing, hand-code that puppy. If they help you get your job done more quickly and efficiently, while not sacrificing on quality, then more power to you. Now, excuse me while I duck and cover from the inevitable barrage that will ensue for questionting the judgment of Snook + Meyer in one post.

Discussion + Dissension

  1. #1 Jordan Arentsen

    This is exacly my opinion. Thank you for putting it down into words. As an avid Rails programmer coming from a “less framework” oriented background, I must say that Rails takes away a lot of the repetive elements of mechanisms like database interaction. It makes me want to develop more and to do it better with cleaner code.

  2. #2 Justin Perkins

    I don’t get this at all. Everything is a framework (like you said). They simplify and reduce repetition and if done correctly (Rails and Django), still give you total control over your app. .NET does not do this correctly and I think helps fuel the anti-framework fire.

    What’s the arguement against frameworks exactly, they do too much for you? How is that a bad thing? I don’t mind rails obfusicating the database away from me. It’s not like it writes my HTML or CSS (scaffolding aside).

    Seems like a lot of “I don’t like that new-fangled technology” and not too much of “hey that makes my life easy”.

  3. #3 Justin Perkins

    One more thing…

    > If frameworks are not your thing, hand-code that puppy. If they help you get your job done more quickly and efficiently, while not sacrificing on quality, then more power to you.

    Exactly. Leave the framework hating out of this.

  4. #4 Jeff Croft

    Very well-said, Nathan.

    The bottom line for why I am not worried about that “crufty abstraction layer” is that the data for my Django apps is stored in PostgreSQL. It’s just plain old data. If tomorrow I decide I’d rather use PHP to write my front end, I can write aganist the same database. Frameworks may come and go, but my data will always be my data and Django doesn’t in any way alter it to be unusable in other situations.

    I know I’ll never have the opportunity to say, “The Django ate my baby.”

    Hah.

  5. #5 Ivan V.

    Hi,

    Personally I found that disliking frameworks like Rails is being afraid of change. I was in denial at first, and afraid because I didn’t understand how all the magic was being accomplished.

    But almost a year later, I feel satisfied. Rails, and specially Ruby, challenged me to new heights, to new concepts; some of which proved to be extremely hard to grasp. I find it very rewarding being push to move forward by new paradigms, and changing my ways.

    I think real programmers will look under the hood, to see how things work, and then be glad someone else already did the heavylifting, so you’re set free to implement the stuff that will make your solution unique.

    I also believe it’s very dangerous for a designer (as in non-programmer) to think he/she can use Rails… I don’t think that’s the aim, and disaster ensues if someone thinks like that, IMHO.

    I’m convinced Rails was created for seasoned programmers (by seasoned and extremely bright programmers), to bring back the joy in software development. I certainly has for me.

    As a side thought, aren’t all languages a framework? After all, they all abstract your code to some level, be it from assembler, C++, the shell, etc. And hasn’t always understanding what happens under the hood made us better programmers?

    I enjoy very much your writing. Keep up the good work.

  6. #6 Wilson Miner

    That’s a great point. It’s only lately that so-called “frameworks” have become a buzzword in the context of web development, but the idea of abstracting underlying processes so we can operate at a higher level is really pervasive.

    It looks like it’s frameworks all the way down.

  7. #7 Adam Spooner

    Nicely put, Nathan. If frameworks make your life easier and inspire you to write cleaner code, then use them. If you are straight geek and would rather hand code, then do it.

    Sometimes I feel like these debates are all hype…can’t we all just get along? =)

    Some things I enjoy using a framework for. Some things I’d rather hand code. Some things I have to use .NET for [this is a sad thing, for I’m no fan of .NET]. Sometimes you feel like a nut, sometimes you don’t. Use what you need to get the job done.

    Cheers!

  8. #8 Justin Perkins

    > It looks like it’s frameworks all the way down.

    That’s freakin’ awesome (and true).

  9. #9 Robert

    Well put Nathan. I too have seen a lot of this talk against frameworks, but then you see these same people complaining about Django or Rails and they are using Prototype or Scriptaculous. And, as you have included, they are using a point and click OS that does most of the work for you.

    I really think it has a lot to do with change. We don’t like change and we will fight against it.

    On the flip side, frameworks bother me a bit – not really the frameworks but the people using them – because there are many people who use Django and don’t learn Python or they use Rails and don’t learn Ruby. This may be where Eric and Jonathon are coming from. Frameworks are not inheritantly bad, it is the people who use them and how they use them that can give the frameworks a bad reputation.

    The point of the frameworks is to make the programmer's life easier, not cut out the programmer. What we are seeing is non-programmers using the frameworks and not trying to become programmers, but psuedo-programmers and are hiding behind the frameworks never intending to push themselves beyond it.

    Again, frameworks are not inheritantly evil or bad, it is the people using them that can make them have a bad reputation.

  10. #10 Larry Tomlinson

    Regarding our IM conversation today, I think that if His Snookness does decide to kill you for this post, factoring in the exchange rate with Canada, it’ll really only end up being more of a slap on the wrist. So, no worries. :)

  11. #11 Jeff Croft

    “The point of the frameworks is to make the programmer’s life easier, not cut out the programmer. What we are seeing is non-programmers using the frameworks and not trying to become programmers, but psuedo-programmers and are hiding behind the frameworks never intending to push themselves beyond it.”

    As I work with the developers of Django every day, I can say with a great deal of certainly that Django takes a “programmer-first” approach. That is, if there’s ever a decision that has to be made in which one way will benefit the programmer and the other will benefit non-programmers, the programmer-friendly method is almost always chosen (the exception is Django templates, which are aimed at designers, not programmers).

    The first goal of the frameworks should be to make a programmer’s life easier—absolutley. That having been said, if non-progammers can also benefit from it, why does that bother you? If a non-programmer is able to build something using a framework they couldn’t build otherwise, why shouldn’t they?

    I don’t ever intend to “become a programmer,” but I’m building apps with Django. If that makes me a “psuedo-programmer,” so be it. I can live with you calling me names if you can live with me being able to build simple web applications without learning much Python.

  12. #12 Charlie Bowman

    Frameworks don’t take the power from the programmer, they just take the grunt work.

  13. #13 Nathan Smith

    Wow, some very good and heartfelt discussion going on. Wilson, I love your stacking Turtles / Frameworks analogy, priceless: Infinite abstraction.

    I agree with you there Jeff, that the existence of frameworks by no means threatens the jobs of more seasoned code veterans. I think that programmers feel towards frameworks the same way that designers do about WYSIWYG programs, that if the automation gets too robust, we all lose our jobs. Quite the contrary though, because this is the way people felt about robotics used in assembly lines. If anything, technology creates more jobs, not less.

    I also think that it’s natural to have a more vested interest in the foundation upon which your framework / tool / abstraction is built. It’s for this reason that I started getting into PHP, because I wanted to learn how to tweak / hack / extend Textpattern. Likewise, when / if I start digging into Django customization, I’ll probably go snag the Dive Into Python book too.

  14. #14 Robert

    Jeff: I should have clarified my post a bit better. I was directing my comments (psuedo-programmer) to those who have no interest in understanding what they are doing and yet call themselves programmers.

    It doesn’t bother me at that non-programmers use a framework, except when they do so and put up a false pretense that they know the language of the framework they are using, when they don’t. To me it is like putting a down C++ on a resume when the person doesn’t even know the language. It is deceptive and a lie.

    What I have respected about yourself is that you take the position of a non-programmer who is using a framework to his advantage. Nothing wrong with that.

    Honestly, I don’t really care all that much what anyone wants to call themselves, I was just chiming in with my thoughts.

  15. #15 Jeff Croft

    Fair enough, Robert! :)

  16. #16 Jon

    I’m going to have to personally agree with your opinion here, Nathan. While I don’t have much one-on-one time working with any framework such as Ruby, Rails, or a combination of the two, it is obvious that there are people who have fallen head over heels for them. Some interesting things are happening as a result of their presence and simply as a personal stance: I’ll leave it to them to keep impressing me.

    I really don’t have a personal desire to dive into using any sort of framework for something such as application development for the Web, but I enjoy seeing the products of others and doing a little reading on how it was done.

    All-in-all, I think frameworks have their place and will continue to be used and improved over time. Regarding an operating system or content management system being a framework is a great analogy in my opinion. Since the advent and adoption of the many great CMS systems, the Web itself has changed. There is more to read (if not too much) and it is easier than ever to organize. Sure, it could have been done by hand, but time is reduced significantly using the framework of your favorite CMS.

  17. #17 Nathan Smith

    Jon: My sentiments exactly. Being primarily a designer but not a programmer, I haven’t yet had a need for a framework that couldn’t be met with a CMS. However, the amazing stuff being done, like the information architecture of Jeff’s site, keeps me interested in the possibilities that frameworks might open in the future.

  18. #18 Ray

    A web application framework is there to help you write web applications, right? Which is a piece of software. Software is generally known for being written by programmers.
    So why is it that people are surprised—and sometimes even seem to feel personally insulted—by the fact that frameworks are a tool for programmers first and foremost?

    A CMS should be usable and easy to understand for any non-programmer, agreed. But a framework is a whole different type of tool. Of course it can lower the entry barrier to developing something for non-programmers. But if you want to do anything seriously, you won’t get around delving into the concepts of programming, learn whatever language and get deeper into the framework. It means investing time and effort, using your brain, getting used to new ways of thinking. That won’t happen overnight, but it can be done. There are many people without a formal background in computer science etc. who are excellent developers today. And if you’re not prepared to go through that, simply concentrate on what you do best and leave that kind of stuff to a developer. Please, stop whining.

    Less-than-perfect-but-sufficient analogy: Just because you can go through the physical motions of applying paint to a canvas with a brush, do you blame the manufacturers of those tools if your painting doesn’t turn into the fantastic masterpeice you’d like to create because you may lack the artistic skills?

  19. #19 Nathan Smith

    Ray: Some very good points there. I realize that every analogy has a certain breaking point at which it is no longer applicable, and I thank you for pushing mine, calling me on it, and further illustrating application vs. site development. By the way, great example about painting: It’s about people, not the tools.

Comments closed after 2 weeks.

FYI


Member of 9rulesHosted by Mosso

Advertisement

Ads by SidebarAds

Fight Cancer

Pink October

Latest Posts: All - RSS