20 ms·
Why I hate frameworks (2005)
- escherize 10y agoWe build complicated software with simple tools where I work using Clojure. There's even a talk about Java:Powertools::Clojure:Handtools! [1] [1] - https://www.youtube.com/watch?v=ShEez0JkOFw https://www.youtube.com/watch?v=ShEez0JkOFw
- MrLeftHand 10y agoThis stood the test of time. After ten years we still struggle with the same issue. Of course now we have containers to store these factory factory factories. Which makes it easier to store and handle and now you can deploy the factory factory factory containers next to the resources held in containers as well so you don't have to pay for the shipping cost of the said resources. Of course the finished hammer, wood and everything else still has to be shipped to you. And if that wasn't enough, we created a self-contained mini factory for your home, which takes the packaged hammer, nail and wood components and assembles them real time. Just for your convenience. Of course this mini factory has to be assembled as well by your factory factory factory containers before it will be shipped to you. See how easy it is?
- collyw 10y agoIs this only a problem with Java frameworks? (The hammer-factory-building-factory talk leads me to believe that). I stared learning Django a few years ago and have never looked back, it has increased my productivity loads. Admittedly its reasonably opinionated about the style of app you are building (but it covers the majority of apps and you don't need to use every part of the framework).
- alyandon 10y agoNo, not just Java (really J2EE). The actual problem can manifest itself anywhere where dogmatic design principles are allowed to trump pragmatism.
- secstate 10y agoI don't know if it's only Java, but I agree whole-heartedly about the general health of the Python framework community. I love Django, but it's also pretty easy to excise parts you don't need for a particular project, while being opinionated enough to get things done quickly and allow folks on the internet to help debug things. Then of course there's Flask for lightweight API projects, which can get trotted out if Django is being TOO opinionated :) Don't get me wrong, there are plenty of criticisms to level at frameworks-as-a-solution mindsets, but in the context of the OP, I think Joel's rant doesn't really apply to Python web development at the moment.
- zeveb 10y ago> Is this only a problem with Java frameworks? No, but Java is notable for this problem. I think the root issue is that it is of course possible to write flexible software in Java, but in order to do so you must write all the dynamic bits in this static language, which ends up meaning that everything you write has to conform to an external statically–implemented-dynamism framework, and if you're going to have a framework then you might as well add to it, and … you end up with a standard Java app. I haven't programmed in some of the cooler/reputed-to-be-better static languages like Haskell or the ML family (not beyond a few simple exercises, anyway), so I can't say to what extent they would suffer from this same problem if they enjoyed the same popularity. I think that from the perspective of two decades on, Java turned out to have been a failure, not with respect to popularity but to quality. It turns out that it enabled mediocre software architects to spend great quantities of corporate money coming up with mediocre designs to be implemented by mediocre programmers, resulting in mediocre software and mediocre return on investment. That doesn't mean that it's impossible to write high-quality Java, just that that's not the norm: the entire Java ecosystem militates against quality, because quality is risk, and Java is not about risk: Java and Java-using organisations prefer predictable mediocrity to excellence. That's not even necessarily bad — sometimes predictable mediocrity is preferable to risk — but it's certainly not inspiring. I too used to really like Django; I spent about six years using it for one project and another. Were I going to do Python web development again, I'd probably use Flask or Bottle, but Django definitely taught me a lot. But I'd prefer not to do Python web development in the future.
- algesten 10y agoI think part problem is also that many programmers tend to gravitate towards abstraction and reusable code before there is a clear need for it. Just today I read about this project https://github.com/primus/primus https://github.com/primus/primus and it's a point in case. A "universal wrapper for real-time frameworks" with the main benefit being "Effortless switching between real-time frameworks by changing one single line of code." Because clearly, I often need to switch between WebSockets and BrowserChannel... or wait, do I?
- seibelj 10y ago
- ufmace 10y agoInteresting that this post seems to be dated right around when Rails was just getting popular and starting the "next-generation" web frameworks trend.
- zeveb 10y agoThis article really clarified it for me when I first read it (along with another I can't find, about libraries & frameworks; all the ones I've googled are too recent to be right), and helped me realise that what I want to do is write code that calls, not code that is called. I want to own main(). As an aside, I really miss Joel on Software and the similar high-quality blogs which existed in the mid-2000s. It seems like Twitter, Facebook and Medium have sucked all the air, the life, the joy and the quality out of online presence and discussion. I know that there are still a few holdouts trying to keep things going, but … it seems to be a losing battle.
- swah 10y agoYes, and the BoS forums had something great going as well. The ones from this list at some point were great: http://blog.fogus.me/2011/03/27/the-long-lost-art-of-thoughtfulness-in-blogging/ http://blog.fogus.me/2011/03/27/the-long-lost-art-of-thought...
- matthewking 10y agoI too miss BoS forums, never really found another community like it, HN and /r/programming are ok but they don't quite cover the "programmer AND in business" demographic that BoS captured so well.
- r_smart 10y agoI'm right there with you, missing this blog. I sometimes see it on my bookmarks bar and click it just to see if something has been added, but nothing ever is. I didn't find his blog until towards the end of its life, but it taught me so much, and was a joy to read.
- geebee 10y agoI hope nobody minds if I run with your "aside" a bit. I miss the JOS blog a lot as well. It influenced me a lot over a decade ago. It presented a very optimistic view of the field and career path of a programmer, with good writing, interesting tech viewpoints, and humor. There was also less tech blogging back then. I really liked Joel's vision of what a software developer should be, especially what the working conditions should be. I feel he embraced the concept of being both a professional and, frankly, an adult. http://www.joelonsoftware.com/articles/FieldGuidetoDevelopers.html http://www.joelonsoftware.com/articles/FieldGuidetoDeveloper... My lament is that I really do think tech instead doubled down on what I feel is kind of a childish, "young people are just smarter" attitude, with giant open offices, back visibility, low autonomy, The vision JOS presented is one that I can embrace. I'd encourage young people to go into software development if I thought they had a future similar to the one presented in this blog. That version of a tech career is still there, to an extent, but unfortunately, tech seems to have moved more strongly away from it over the last 15 years. I can't encourage young people to go into a field with giant open offices, back visibility, limited autonomy, office retreats to dave n busters. I suppose there's a subset who like this, but my impression is that a huge number of developers, a group that most certainly includes developers recently out of college in their 20s, find this cultural world to be a disappointment.
- noelwelsh 10y agoThis is really a critique of J2EE. This was the dominant approach when Rails came out and helped make Rails so successful. Making specific critiques of specific eco-systems is valid. E.g. Java back then was awful. JS right now is complex (though I think there is some great stuff in there). Making sweeping critiques of all frameworks is pretty stupid. Unless, of course, you build everything on an OS you wrote yourself in assembler. Frameworks are just a form of abstraction. Abstraction can be done well or poorly, but to make a blanket claim that abstraction is bad is to ignore the huge efficiency gains we've make from abstractions like operating systems, web browsers, HTTP servers, and so on, which are all frameworks of a kind.
- geebee 10y agoInteresting you should mention this. I've really enjoyed and really hated programming over the course of the last 15+ years. A low point for me was Java, Spring, Struts, Struts 2, Wicket, Tiles, Hibernate, JPA, iBatis, Ant, Maven... Interestingly, Rails (along with a few other really good technologies, such as django) came along and, with a loud crashing sound, swept everything off the table. It's been a lesson for me. First, have the conviction to keep doing things the "old" way if the new way seems to be a churning mess. Second, realize that things may not settle down, they may be completely swept aside instead. This is how I feel about javascript for the moment. I actually don't think the churn will resolve. It's more of a feeling, so I can't blame anyone for dismissing the rest of what I have to say... but I just sense that, like the J2EE world, that something is going to sweep this all aside. To go even further out on a limb, I believe that (buzzword alert) languages transpiled to isomorphic javascript will play a huge role in this. I truly don't believe that because Javascript runs so well in the browser, and if you have to use javascript you may as well write the backend in javascript, means that languages like ruby and python are destined for legacy or niche status. It is immensely reasonable to prefer to code web apps in ruby or python. I think that the dominance of JS will be a temporary situation, and that various technologies that allow people to code for the web in a consistent, relatively simple, straightforward way, in languages that are not JS, is likely to emerge over the next 5 years. I'm only keeping a toe dipped in the JS waters right now, because I really do need it for some things. But I've decided to drop out of the JS churn (I do recognize that for the next few years, there will be amazing opportunities for people who are willing and able to keep up with it). Just like I wish I'd had the conviction to stay out of the nuttiness of J2EE a decade ago, I'm trying hard to position myself so that I don't have to get swept up into the JS vortex.
- eyelidlessness 10y agoIs anyone else bothered by the repeated, completely out of context reference to murdering women with a hammer?
- smellf 10y agoThe author was being cheeky, but it definitely dates the piece. People are a lot more sensitive about that sort of thing today than they were 10 years ago. Back then it just came off as dark and sort of funny.
- scandox 10y agoI think the last ten years, unfortunately, accentuated the need for reasonable men to actively distinguish themselves from the openly, violently misogynistic people online. So comments and jokes that were never before conceived of as having any serious import, even subliminally, now map so closely onto serious threats and harassment, that they seem completely inappropriate. People in relationships killing each other has always been a subject of humour, exactly because it really happened. In a way that hasn't really changed. What's changed is what is OK in specific mediums: especially in online written form (twitter, comments, blogs) where the context is full of the real hateful deal.
- jszymborski 10y agoThat's an incredibly enlightened way to reconcile that, while it sounds wrong today, it doesn't nesscesitate that Joel is a misogynist. I've never really understood it as an increasing impetous to distinguish ourselves from the morons that, once the light has been increasingly shown on misogyny, hold firm to it. Thanks for that, it's really help me better grok how to feel about these increasingly more common situations.
- to3m 10y agoThe post isn't even by Joel. It's a forum (or more precisely an ex-forum). Random people were allowed to post there... Wait... you do know we're not all Paul Graham... right?
- joesmo 10y agoToo bad building software isn't at all like building a spice rack unless you're taking about continually rebuilding a spice rack and replacing its components constantly till it turns into a house (as 99% of software is wont to do).
- quantumhobbit 10y agoMaybe it should be more like building a spice rack instead of a house. The whole UNIX philosophy of simple programs that do one thing well was successful for a reason.
- TheOtherHobbes 10y agoOr it would have been if the programs really were simple, and not a wild mix of itty bitty trivial doodads and monsters with a huge collection of switches for special cases and extra features, many of which were added and used by exactly one person, collected into non-standardised toolkits which differ significantly across every single variant, and often between versions of the same variant. And if they really did one thing well. Which - not infrequently - they don't. (See also: critical bugs in ssh, etc.) And if they didn't have unintuitive names that are impossible to guess. UNIX isn't just not a spice rack, it's an entire industrial area of tool sheds, grouped with absolutely no foresight or consistency, and impossible to get around without expert assistance. It kind of works if nine square miles of warehouses connected by bicycle paths with free paper maps of small disconnected areas is your idea of a fun thing. But it's a bit of a stretch to call it an unqualified success.
- deleted 10y ago[deleted]
- jondubois 10y agoPretty funny but I think that the article is overcomplicating it. In reality, each framework is more like a toolbox; and each toolbox is suited for a specific range of jobs. Building an app without a framework can sometimes feel like buying a nailgun and nails separately - It may be difficult to find the right kinds of nails which are compatible with that specific nailgun (if they exist at all)! If you use a framework, you'll get the nailgun with compatible nails and a bunch of other related tools... You might not use all the tools from the toolbox, but at least all the tools work well with each other. Of course, if you have to perform a double heart bypass surgery on someone and you come equipped with a carpenter's toolbox; the outcome will be disappointing... Regardless of how good a surgeon you are.
- cestith 10y agoI think the article overcomplicating things a bit was a meta joke on the topic itself.
- OddMerlin 10y agoThe whole killing girlfriend thing is not so cool. I would remove those pieces, they don't add much to the story.
- joshuahaglund 10y agoThose parts detract from an otherwise clever story. Among the many reasons women might be uncomfortable in software -- dudes who joke about killing them.
- WaxProlix 10y agoEven the unspoken assumption that the reader is male (okay, or lesbian) and will furthermore chucklingly identify with having a bitch ex to kill with a hammer is gross.
- deleted 10y ago[deleted]
- williamgb 10y agoI have no doubt that is true. Utterly unnecessary and somewhat jarring! I can remember being made to feel uncomfortable and quite unwelcome upon witnessing a renowned female* developer and entrepreneur joke about killing a group of men who had offered advice on suitable materials for makeshift bottle openers. * Or "chick" shudder, if we're accepting that "dude" is holding the appropriate tone for this conversation.
- deleted 10y ago[deleted]
- yandrypozo 10y agoAfter 11 years, I can say Why I hate frameworks and Why I love Go (www.golang.org) \o/
- VOYD 10y agosofaking right on, especially these days.
- thewhitetulip 10y agoThis article has been a pivotal point in my life. It was years ago when I read this that I started looking out "how to develop a webapp without a framework", my journey took me to Django, RoR, node and finally to Go. I did learn on my own by reading a few books and countless videos about how to write a webapp without a framework. The result was that I wrote an introductory book for my own reference, the link is here. https://github.com/thewhitetulip/web-dev-golang-anti-textbook/ https://github.com/thewhitetulip/web-dev-golang-anti-textboo... I do not know the author, but I would like to thank him/her, it is because of their article that I went on to learn Go. Thank You!!
- Asooka 10y agoI wish the article would be updated to remove the problematic jokes about violence against women. Murder and rape are never funny. This is the kind of toxic male culture feminists talk about - it might have been ok back in neanderthal days, but I like to imagine we've progressed at least a bit since then.
- macawfish 10y agoI first learned to code by following those lovely, magical Ruby on Rails videos back in the day. A few years later I discovered Sinatra and felt liberated.
- dang 3y agohttp://web.archive.org/web/20180927070411/http://discuss.joelonsoftware.com/default.asp?joel.3.219431 http://web.archive.org/web/20180927070411/http://discuss.joe...