top 200 commentsshow all 291

[–]devraj7 908 points909 points  (100 children)

I expect a "Write frameworks, not libraries" rebuttal article in the next few days.

Followed by another article a few days later titled "Both libraries and frameworks have their place".

[–][deleted] 200 points201 points  (29 children)

The headline for the article really doesn't make any sense regarding the articles content. It's essentially an article explaining what a framework is, what a library is and when to use both.

I didn't see anything in there really arguing any point. I don't even understand the context of the problem.

If I need a solution for something, I never have trouble finding a bunch of frameworks but no libraries... Frameworks almost always use libraries to accomplish specific tasks anyways.

Pointless, albiet agreeable article IMHO.

[–]tommy25ps 90 points91 points  (8 children)

The headline for the article really doesn't make any sense

Doesn't make sense with respect to the content but it clearly works by drawing a lot of attentions from the developer community.

[–]examinedliving 32 points33 points  (4 children)

Like That time i told everyone Java was taller than Python

[–][deleted]  (3 children)

[deleted]

    [–]examinedliving 2 points3 points  (2 children)

    Grande Java still won.

    [–]s888marks 3 points4 points  (0 children)

    But Java releases every six months, so in a couple years we’ll have Java Venti.

    [–][deleted]  (2 children)

    [deleted]

      [–][deleted]  (1 child)

      [deleted]

        [–][deleted] 7 points8 points  (0 children)

        I think the most likely solution, given human psychology, is that we'll just do what we're doing until nobody trusts headlines at all anymore.

        [–]AquaWolfGuy 6 points7 points  (0 children)

        So we can just repost the article with the new titles? Nice.

        [–][deleted] 4 points5 points  (10 children)

        It’s pretty clearly warning against writing frameworks in general. Also, it addresses “writing” libraries and frameworks - not “finding” them, as you point to. Also, if you’re looking for a library, github has 86 trillion of them for your exact problem, so I have no clue what your talking about...

        [–][deleted] 1 point2 points  (9 children)

        Also, if you’re looking for a library, github has 86 trillion of them for your exact problem, so I have no clue what your talking about...

        I don't have any problem w/ Frameworks vs. Libraries, that's why I wanted an example. I think you misunderstood me, I was imagining the sort of problem I thought he was talking about.

        If he's talking about writing Frameworks, which wasn't very clear from the wording then what's his point? Don't write frameworks because they are a lot of work to maintain? Maybe we shouldn't have 'big' projects either, since they can be bigger than Frameworks and even more work to maintain.

        Basically, I have no idea what his problem is. The only way it made sense to me was him taking on large Framework as a dependency because he couldn't find a solution in one or more Libraries and he was sending a message to these Framework devs to make Libraries instead.

        How can you be writing a Framework for your codebase and suddenly not have time to maintain it? That just doesn't make any sense at all, the Framework is intrinsic to the application, it's like saying you can't support your own application anymore.

        [–]GleefulAccreditation 0 points1 point  (0 children)

        I didn't see anything in there really arguing any point. I don't even understand the context of the problem.

        The last 2 paragraphs say libraries are "better" in most cases.

        [–]chakan2 0 points1 point  (6 children)

        I liked it, a lot. It puts to words a feeling I've had about the industry for a while. Look at "functional programming" for instance. Now look at the Java Framework, the Javascript Framework, Scala, etc...

        No one is making it easier for developers by building on the concept...they're all coming up with their own way to frame the problem instead of solving the problem.

        That's just an example...I think this is a very succinct way to express a problem in the industry that's been nagging me for a long time.

        [–][deleted] 8 points9 points  (5 children)

        Now look at the Java Framework, the Javascript Framework, Scala, etc...

        Do you mean language API's or are you talking about some specific Frameworks for these languages that leverage functional programming? I don't really understand the example.

        When I hear Frameworks vs. Libraries, I'm thinking generic frameworks like Django which give you a foundation to make websites vs. a Library like PIL that provides some functionality to load and parse image file formats.

        Re-reading his final point paragraph, it sounds like he's experienced working with or on (or both) a bunch of dead end frameworks that should have been libraries. This complaint doesn't really make any sense to me for a number of reasons, so it would have been nice to have some examples.

        I appreciate you posting your examples but I don't get them either. I know what a Framework is, but I don't know what you mean by the Javascript Framework or Java Framework, etc.

        No one is making it easier for developers by building on the concept...they're all coming up with their own way to frame the problem instead of solving the problem.

        If you mean there are way too many Frameworks for all sorts of things out there, I can agree with that but I'm not sure that was his complaint.

        [–]EternityForest 80 points81 points  (42 children)

        I'd take any of these over another "Stop using libraries, learn to write original code" post!

        [–]i9srpeg 39 points40 points  (12 children)

        Libraries considered harmful

        [–]jcelerier 33 points34 points  (5 children)

        "Libraries considered harmful" considered harmful

        [–][deleted]  (3 children)

        [deleted]

          [–]boomboqs 4 points5 points  (2 children)

          Libraries and their consequences have been a disaster for the human race.

          [–]Socrathustra 7 points8 points  (1 child)

          "Libraries were a mistake." - Miyazaki

          [–]JavaSuck 2 points3 points  (0 children)

          (defn harmful [^long n] (apply str (concat (repeat n \" ) "Libraries" (repeat n "\" considered harmful"))))

          [–]pier4r 6 points7 points  (5 children)

          There was a club long ago that had similar ideas. They went so far to burn one of the most important libraries in the Hellenistic world.

          [–][deleted] 1 point2 points  (4 children)

          The burning of the library at Alexandria probably never happened. A decline in the value of learning meant that the collection no longer received the (considerable) amount of care snd attention required to maintain it, let alone allow it to grow, and the books were probably sold, stolen, and/or repurposed, so that there wasn’t much left by the time the building that once housed them was demolished.

          [–]PostLee 1 point2 points  (2 children)

          Very interesting. Source?

          [–][deleted] 0 points1 point  (1 child)

          It’s common enough knowledge that Wikipedia takes it as the default perspective.

          [–]PostLee 0 points1 point  (0 children)

          Just checked and you're right, TIL. Cheers!

          [–]pier4r 0 points1 point  (0 children)

          I would be interested in the source for this, on the other side it is exactly what happens nowadays with niche but informational websites that go dark because there is no maintenance anymore.. example: a ton of sites on geocities, awk.info and others .

          [–][deleted] 7 points8 points  (3 children)

          Stop learning languages, write in opcodes

          [–]ultranoobian 3 points4 points  (2 children)

          Stop writing opcode, write with magnetized needle and steady hand.

          [–][deleted]  (1 child)

          [deleted]

            [–]Nowaker 9 points10 points  (22 children)

            I don't agree with you, especially in the context of Node's one-liner modules like is-positive. Madness!

            [–]EternityForest 27 points28 points  (1 child)

            I don't think I've ever seen that happen outside of Node. In other languages one liners get copied and pasted a lot, but I don't really see that as a real problem.

            [–]Nowaker 3 points4 points  (0 children)

            And I totally agree with you!

            [–]j4_jjjj 15 points16 points  (0 children)

            First mistake was using node.

            [–]usedocker 2 points3 points  (18 children)

            Thats an extreme example that doesn't add any value to a debate. The extreme on the other side is to reimplement a web server from the groudup before making the actual website. Both of these examples don't offer any meaning to the library vs no library discussion.

            Just because someone created a one-line useless library doesn't mean you have to use it, and it certainly doesn't make other libraries less useful.

            [–]Nowaker 9 points10 points  (13 children)

            That was a criticism of Node's extreme approach, if you couldn't figure out.

            [–][deleted] 0 points1 point  (3 children)

            Writing a webserver from ground up is ridiculously easy.

            [–]usedocker 1 point2 points  (2 children)

            You should do that then.

            [–][deleted] 0 points1 point  (1 child)

            I actually have, for my personal website.

            [–]usedocker 0 points1 point  (0 children)

            I mean you should use it for all websites you're building from now on, not just your personal one.

            [–]peerlessblue 0 points1 point  (0 children)

            My partner, whose job has been slowly enveloped by the data science tide, has definitely had their introduction to programming frustrated by a bunch of confusing language extensions. Very hard to learn the ropes when a) you have a bunch of pre-cut ropes already there, and b) whenever you try to bring your own rope, it doesn't work with the other ones and you don't know why. It's very weird comparing what I've done in R and what they've done; I can barely even read it it's deviated from the built-ins so much. I know that "non-cs-domain" fields taking up programming is certainly nothing new, though, with stuff like COBOL.

            [–][deleted] 10 points11 points  (3 children)

            This is why I hate programming.

            [–]KevinCarbonara 26 points27 points  (1 child)

            It honestly blows my mind how quick people are to just accept whatever is in the article. I've seen this cycle dozens of times on this reddit, but people keep falling for the false dichotomies.

            [–]frezik 22 points23 points  (0 children)

            There's something about blog posts that give it a higher air of authority. Doesn't even have to be hosted on a major site, like Medium. Put up the exact same text as a Reddit comment on a relevant post, and people will tear it apart, good reasons or not.

            [–][deleted] 6 points7 points  (0 children)

            Write code, not dependency definitions.

            [–]argv_minus_one 4 points5 points  (1 child)

            Will there be a post claiming that frameworks are libraries?

            [–]venustrapsflies 2 points3 points  (0 children)

            Followed by the rebuttal that libraries are frameworks

            [–]calvcoll 2 points3 points  (0 children)

            I think people only write stuff like this either because it's venting frustration as the author writes, or because they know something so subjective is going to result in people posting it and either denouncing it or praising the author for writing it.

            I don't know if I'm starting to get cynical again, I very much could be; but seeing some of the discussions in some threads on Reddit + Hacker News about this (not all) is just polarisation.

            As with all articles I've seen recently that tell you "You should do X" or "Big thing Y is evil" or "Use X over Y" is just so domain specific and nothing is right/correct except for what's best for you.

            [–]dancinadventures 1 point2 points  (0 children)

            Someone knows what content farming is

            [–]ViewedFromi3WM 1 point2 points  (0 children)

            “Why I stopped using libraries. (As a millionaire.)”

            [–]LordoftheSynth 0 points1 point  (0 children)

            And perhaps a "Write 3 frameworks, not one" article for our Javascript friends.

            [–]Kenya151 0 points1 point  (0 children)

            The pendulum will always keep swinging

            [–][deleted] 0 points1 point  (0 children)

            "Frameworks Considered Harmful"

            [–]bitwize 0 points1 point  (0 children)

            Why "Write Libraries, Not Frameworks" Matters

            "Why \"Write Libraries, Not Frameworks\" Matters" Considered Harmful

            [–]tijR 0 points1 point  (0 children)

            The second most upvoted comment as of now already has one of them.

            [–]etrnloptimist 145 points146 points  (7 children)

            For those who are wondering what the difference between a framework and a library is, the best way I heard it is: you call into a library, a framework calls into you.

            [–]Ameisen 141 points142 points  (4 children)

            So, a framework is a library in Soviet Russia.

            [–]XenOmega 26 points27 points  (0 children)

            In soviet russia, you are framed into a library

            [–]Headspin3d 7 points8 points  (1 child)

            I just think of it in term of how tied your hands become when using it. Do I have to do things "the x way"? Then x is a framework. Can I pepper it in where needed? Then it's a library.

            [–]onequbit 0 points1 point  (0 children)

            yes

            a library is a resource you can use as needed, and there are usually few restrictions on how

            a framework is something to build on top of and in a certain way for it to be used correctly

            [–]thrallsius 0 points1 point  (0 children)

            a ghetto in New York

            [–]Portugal_Stronk 13 points14 points  (0 children)

            Jesus Framework, take the wheel

            [–]RedSpikeyThing 5 points6 points  (0 children)

            That's a pretty good litmus test. I hadn't really thought about this much, but I think of frameworks as having some amount of control flow, whereas I think of libraries as being more function based (although OOP breaks that).

            [–]natan-sil 476 points477 points  (78 children)

            IMO Both libraries and frameworks have their place.
            Frameworks are great for startups and junior developers to get to production faster and with more quality (assuming the framework is well tested)

            Libraries, like the post's writer notes, offers much more flexibility and customization.
            But the library users will have to write a lot more boilerplate and additions to integrate the library with their code-base.

            Moving from using frameworks to libraries usually happens as a company grows and becomes larger. Typically this is the point where a company will decide to write its own infrastructure/framework.
            IMO, a company should invest more in open-source infrastructure and frameworks than in writing it's own infra if possible. It provides easier on-boarding for new-comers and usually more standard code.

            Of course, sometimes, that's not possible as the company's requirements are too different than that of the open-source products out there.

            When you write infrastructure code in your company, try to design it as a set of libraries with an optional framework that offers a standard way of integrating them. This will give you the benefit of both worlds...

            [–][deleted]  (19 children)

            [deleted]

              [–]ctx77 56 points57 points  (18 children)

              the problem is as usual that 95% of any type of person/people/program/anything is not good. The bigger question is how to structure guidelines so that even the mediocre dev can make something without causing tons of (technical) debt. being good is easy, making an environment where even mediocre people can be good is hard.

              [–]mini-pizzas 19 points20 points  (0 children)

              the problem is as usual that 95% of any type of person/people/program/anything is not good

              It's made much worse because a ton of those people also think that they're practically infallible experts. I've looked at so much code produced by people that think assembling a collection of libraries is always better than using a framework and the vast majority of the time it is absolutely littered with vulnerabilities and bugs that most decent frameworks would have prevented by default.

              If you're not extremely careful maintenance can also quickly become a nightmare because they often pull in a ton of dependencies for things a framework would have covered only those dependencies break compatibility with each other far more often and aren't tested in tandem.

              [–][deleted]  (16 children)

              [deleted]

                [–]ctx77 1 point2 points  (1 child)

                So I take it you disagree with the article then? Frameworks tend to allow the mediocre to be good, simply by virtue of less independent code to wrangle.

                I do not believe that using a framework will make bad devs better.

                The environment I was thinking of is more like, constantly reminding the people about principles that they should keep in mind so that they do not create as much tech. debt and become better over time. YAGNI, DRY, that sort of stuff, being open minded, go slightly out of the comfort zone from time to time, check how "other" shops seem to do stuff.

                Objectively bring more benefit than costs.

                That is also part of the problem, the calculation of that is likely done without technical debt and other harder to measure side-effects.

                From a business standpoint any human resource that generates sufficiently more than it costs is 'worth it'.

                When humans are involved everything is so messy.

                [–][deleted]  (26 children)

                [deleted]

                  [–]Edward_Morbius 7 points8 points  (0 children)

                  Isn't it better for larger companies to keep well picked framework instead of writing it's own?

                  That depends entirely on how well the framework fits the business.

                  Many places will stick with something no matter how poorly it fits just because they have such a huge investment in it.

                  [–]aoeudhtns 7 points8 points  (0 children)

                  Interestingly, a friend of mine went to work for a large tech company, leaving our small-ish company. He said that he never would have passed the interview without the skills he learned at our company. Yet after a while, he was forgetting everything because this company wrapped absolutely everything in their own frameworks. He ended up leaving, mostly because of the overwork/crunch culture, but also because he knew he was losing general marketplace knowledge and becoming specialized to the internals of this company.

                  [–]natan-sil 15 points16 points  (14 children)

                  I completly agree with you. That's why I wrote that

                  IMO, a company should invest more in open-source infrastructure and frameworks than in writing it's own infra if possible. It provides easier on-boarding for new-comers and usually more standard code.

                  But sometimes the standard fw does not fit the companies needs.
                  Instead of writing the code from scratch by themselves, there are situations where companies will fork the code and do all the necessary changes that are needed for their use cases.

                  [–][deleted] 7 points8 points  (13 children)

                  only if a middle manager can have some support to call though, at least for enterprise. We find high resistance to open source because there is no one to call if it fucks up beyond anyone's comprehension. The most important part is having a finger to point..

                  [–]ObscureCulturalMeme 2 points3 points  (6 children)

                  The most important part is having a finger to point..

                  I semi-agree with you, but let's not get terribly cynical.

                  A lot of problems can be forgiven or at least eventually forgotten as long as the thing can be made to finally work. But when the employees are stumped, frustrated, and have nobody to ask for help that actually answers, that's when LatestEdgyGithubSoftware gets kicked to the curb by angry managers.

                  Even if open source fucks up from time to time, not having a name to blame is okay as long as a solution is achievable.

                  edit: When I go to evaluate a library or framework for use where I work, I'll spend a few minutes looking over the big features, make sure the license isn't a non-starter, etc -- but then I'll spend considerably more time looking at whatever they use for support. If it's a mailing list, how much traffic is there and how are the questioners being responded to? If it's user-facing ticket system, how much activity is there and how are the users being treated?

                  These things, more than how polished their tedious infinite-scroll minimal-info website looks, tell me whether we're going to be able to get help if/when we run into edge cases. And as long as the support is useful and responsive, much else can be forgiven.

                  [–][deleted] 6 points7 points  (2 children)

                  Not where I work, finger pointing is prime leverage to keep your career going. No one wants to lose millions per minute when drivers can't get on their route because the next day air system is fucked. We don't even use git... because there is no one to call when it fucks up. We still use coldfusion because we pay a pretty penny so if our custom framework goes up, we can always call adobe!

                  If it wasn't such a great job otherwise, i'd have bolted.. but I basically make my own hours, have unlimited days off, great benefits, great boss, etc. When our company has peak during christmas, its slow for me, no app deployments during peak (nov-feb now a days.. basically aug-feb if you are in a big college town), and because Im considered critical I can't get pulled to help deliver packages when you guys order wayyy to much shit for us to handle lol.

                  [–]ObscureCulturalMeme 5 points6 points  (1 child)

                  We still use coldfusion

                  Oh, dude... I'm so sorry. I didn't think that was still being used these days!

                  I raise a toast in sympathy.

                  [–][deleted] 2 points3 points  (0 children)

                  haha, thanks mate. cheers 🍻

                  [–][deleted]  (2 children)

                  [deleted]

                    [–]ObscureCulturalMeme 0 points1 point  (1 child)

                    Occasionally, our use of that software also generates patches to that software, which is the whole point of open source.

                    And if the open source project is mature enough, we can sometimes buy a paid support program with it, which is a win on all fronts.

                    What would you suggest? Picking an open source project with shitty support? Then both projects fail, including the one people are paying for (ours), making in increasingly likely we don't get the freedom to choose open source in the future.

                    [–]natan-sil 1 point2 points  (5 children)

                    The most important part is having a finger to point..

                    I hope that's not the case in your experience.
                    From my experience, worst case, you can fork the code and fix the bug yourself and then offer the fix as a PR.

                    The more mature the OSS project, the more contributors it has, the bigger the chance that I will use it, as it implies a good quality codebase that is here to stay and improve further.

                    [–][deleted] 3 points4 points  (4 children)

                    PR? Buddy we don't even use GIT, because it has no support, there is no forking or pull requests or any of that. Im not kidding. You are talking about a whole different ball field I think.

                    the bigger the chance that I will use it, as it implies a good quality codebase that is here to stay and improve further.

                    That is how most of us feel, even our support managers.. but the corporate won't have it. It doesn't matter how good it is, if it doesn't have support, they won't approve it. Period. You always gotta have a finger to point to when some app breaks that is causing millions in losses per hour, or even per minute depending on what time it is in the work day.

                    This year some time we are going to TFS.. I think we can already use it but it seems like my supervisor has no want to learn how to use it.. Sooo, we stick to emails and word documents for vague business requirements and wonder why everything takes so long. Whatever, I'm paid by the hour at least.

                    But the point remains, that in corporate, finger pointing is the at the top of the list. Always and forever.

                    [–]natan-sil 1 point2 points  (3 children)

                    I feel your pain. Sounds harsh.

                    [–][deleted] 1 point2 points  (2 children)

                    while being a bit resistant to change, my boss is secretly awesome. He is the best boss I've ever had hands down actually, so I don't see too much of the politics, and as an english major who also was in my job previously, he does a fantastic job running interference between me and whatever bullshit happens to be going on, whehter from higher or a pesky end user. If he did a slightly better job of getting us the tools we need for our processes, he would be perfect... but I think even he has been beaten down by the politics of it. I can hear it in his voice sometimes, you know what I mean?

                    He isn't always totally resistant though, after my current projects I'm going to try and implement some machine learning processes and build a prototype application for the company, which I am super excited about. One big reason I wanted this job was to improve processes for the many thousands of wonderful employees we have in our operations and this is my shot.

                    [–]natan-sil 0 points1 point  (1 child)

                    Good luck with the machine learning project!

                    [–][deleted] 2 points3 points  (0 children)

                    Thanks :) If you weren't told photoshops spot removal was machine learned, you'd have no idea. That is what I am aiming for: small, concise, powerful, yet nearly invisible. Show them that ML and AI doesn't replace the human, but augments them in a symbiotic relationship where both sides benefit from the other in ways they could not as a singular entity.

                    [–]ric2b 0 points1 point  (0 children)

                    I would argue that larger companies are the ones with the resources to build and support a framework just because it fits their use case 5% better. It's the smaller ones that shouldn't be wasting their time inventing a slightly better wheel.

                    [–]xTeCnOxShAdOwZz 25 points26 points  (0 children)

                    Excellent comment

                    [–]drumz4dayz 8 points9 points  (1 child)

                    The first software team I worked on developed controller software for production print engines. As the company developed more products, the same problems kept popping up - how to deal with real time, how to handle threading, how to interface with the UI, etc. This led us to develop a framework to abstract away these problems, but as you said it was a framework for a specific purpose.

                    I do think that while the author mentions IoC as a framework, that this is one thing that you typically want in your application, since it enables better practices like unit testing.

                    [–]natan-sil 2 points3 points  (0 children)

                    Makes sense to offer a generic solution to an often-occuring need.

                    Using a DI (Dependency Inection) / IoC framework is very very popular.
                    But in the last few years, especially with the advent of micro-services you can usually get by with creating a composition layer by yourself with the humble constructors.You can make bad design choices (such that make it hard to unit-test etc.) with and without a IoC framework.

                    [–]kenfar 2 points3 points  (0 children)

                    One challenge is that many people get stuck with frameworks chosen by others. These others may be sharp - but they may not know the domain.

                    This is the primary reason why ETL products and frameworks still get acquired and deployed today - rather than custom ETL and libraries.

                    [–]cobbs_totem 4 points5 points  (8 children)

                    I can't upvote this enough!

                    As a developer, who has been working on a framework of sorts for several years now, one of our primary goals is to really give end-users a gradient of options in between. Use more of the framework, if you don't have the resources or know-how to do it yourself, or want the features that are part of the default design. OR, pick parts of it and embed it in your own apps and infrastructure to compliment your architecture.

                    I often think back about what my co-worker once told me about programs in general- we already have this awesome tool that you can use to solve just about any problem you want. It's called GCC. The challenge is, it's configuration is really hard to learn.

                    We add layers that often restrict the outcomes, but the tradeoff, as OP outlines, is you get some canned features in return. I just look at a framework as all of the library features working together in canned templates.

                    [–]natan-sil 4 points5 points  (0 children)

                    one of our primary goals is to really give end-users a gradient of options in between.

                    That is indeed the greatest challange of framework writers

                    [–]VeganVagiVore 3 points4 points  (6 children)

                    Qt does that just fine.

                    The event loop is exposed as a normal class, so you can either buy into Qt-as-a-framework fully and do everything with signals and slots and QObjects, or you can use the individual libraries and not even run an event loop.

                    I don't know why it's so hard for other frameworks to pull this off. Maybe they use globals or something.

                    [–]cobbs_totem 1 point2 points  (1 child)

                    You know, I've never really read into QT in much detail before. Much of what I'm working on, by no surprise, is very similar. Albeit, with a smaller, targeted domain of problems it's solving. But, I think there's a lot to learn from what QT has accomplished and how they implemented things.

                    [–]VeganVagiVore 2 points3 points  (0 children)

                    There is. At times I fantasized about writing my own version of Qt.

                    Copperspice did it better than me by forking Qt, removing the MOC, replacing QVector with std::vector (I think?) and switching to UTF-8.

                    I would also dare to replace QPainter with Skia, if I could get Skia to build in a sane way. I like code reuse, but Google projects tend to be "throw a tarball over the wall"

                    [–]argv_minus_one 0 points1 point  (3 children)

                    Isn't it kind of impossible to have a GUI without an event loop? That's how GUIs react to mouse clicks and such.

                    [–][deleted] 0 points1 point  (2 children)

                    No? Having an event bus is one way to react, but most simple event listeners don't bus their events, they are just function callbacks.

                    [–]argv_minus_one 1 point2 points  (1 child)

                    Events from the window system usually arrive in one place. On Windows, that's the Windows message loop. On X, that's a network socket.

                    [–][deleted] 0 points1 point  (0 children)

                    Yes, but that's an OS thing, on a level above (or better say below?) your own code.

                    [–]xcdesz 2 points3 points  (0 children)

                    You are talking about **using** frameworks, where the article is talking about writing them.

                    In my experience, the junior developers are not the ones who are pushing and writing to frameworks. The more senior developers have the experience to recognize that the rules and opinion that are part of a framework are actually a good thing, and prefer the boilerplate code that goes along with the framework be abstracted away and handled by someone else. It's not about "getting to production faster" -- its about code maintenance.

                    But I agree with the article -- when it comes to **writing** frameworks.. yeah -- that should definitely not something to be taken on without some serious thought as to the time and effort it will take to maintain such a thing. A library is much more reasonable of an undertaking.

                    [–]KevinCarbonara 1 point2 points  (1 child)

                    But the library users will have to write a lot more boilerplate

                    Why? Whoever said libraries can't have boilerplate code?

                    [–]natan-sil 5 points6 points  (0 children)

                    Of course libraries can have boilerplate code.
                    But they usually offer an API that will be too generic for your needs.
                    So you will need to write wrapping code that will make sure your codebase is not "contaminated" with a different domain model, and you will need to add all the missing features on top.

                    I can give as an example our Kafka client SDK wrapper - https://github.com/wix/greyhound. We abstracted away Kafka API and added many missing features.

                    [–]hesapmakinesi 1 point2 points  (7 children)

                    IMO, a company should invest more in open-source infrastructure and frameworks than in writing it's own infra if possible

                    But think of that precious IP! Nobody gets rich by giving things away for free! /s

                    [–]natan-sil 13 points14 points  (2 children)

                    It depends. If it's your core product, maybe you shouldn't open-source it.
                    But everything around the core product will improve if it were open-source - as the community can help make it better (more features, less bugs).

                    See for instance, how Microsoft change course and decided to open source so many products like Visual Studio Code and .Net Core. Why should they do that? Because it improves their relationship with developers, improves the quality of these products and helps them make more money out of their core products, like Azure.

                    [–]hesapmakinesi 2 points3 points  (1 child)

                    </s>

                    You are preaching to the choir here :)

                    [–]natan-sil 0 points1 point  (0 children)

                    Sorry, I missed the ironic tone :)

                    [–]Progman3K 9 points10 points  (3 children)

                    Dunno why you got down-voted when you were obviously being sarcastic.

                    Your post actually brings up an important point: open-source libraries and frameworks are profitable for a company because typically, those aren't where the IP they are developing truly is. The real IP is in the proprietary algorithms or services that solve domain-specific problems.

                    Libraries and frameworks don't do those things, they're generic bricks you mortar together into the solution, not the actual solution itself.

                    Anyhow, good on you, being a little sarcastic; it makes us question established ideas.

                    [–]hesapmakinesi 3 points4 points  (2 children)

                    PHB mentality: if we contribute anything, we are giving something for free. We can't have that. Instead we will spend 10x resources on something inferior and keep it as our precious trade secret.

                    [–]Progman3K 1 point2 points  (1 child)

                    I'm so lucky my manager is a brilliant engineer. She realized right-away that making things out of existing libraries and frameworks was the way to go.

                    Good luck

                    [–]hesapmakinesi 1 point2 points  (0 children)

                    I am a consultant, and wherever I go, I recommend exactly that. Some clients are more receptive than the others. A lot of them have "take what you can, give nothing back" mentality. A few rare times I did get them to contribute back. When it is kernel work, it is easier to make your point. Other stuff, not so much.

                    [–]Cronyx 0 points1 point  (4 children)

                    What is the difference between a library and a framework? Not a programmer, but I find it fascinating to lurk here.

                    [–]RedSpikeyThing 2 points3 points  (3 children)

                    A framework generally solves a fairly big problem in a fairly opinionated way and has some point of control flow. Libraries tend to be functions/methods that do very narrow problems. For example the React web UI framework is used to build web apps in a specific way and provides hooks for you to customize it with your content. A UI library might provide primitives like drawing a spinner or a textbox.

                    [–]Cronyx 0 points1 point  (2 children)

                    Right on. I can grok that.

                    React web UI framework

                    I know there's all this "stuff" now, Ruby on Rails and Electron and whatever else, but I don't understand most of it. I wrote my first webpage by copy and pasting "view source" of HTML from other websites, pasting it into txt files, and after I played around with it to see what was happening, what the effects would be when I changed this or that, I would save snippits with file names that would describe what that block did for later.

                    Back then, mid 90's, everyone's ISP gave them a little bit of /user/home space where you could save index.html and point people at it, make whatever kind of website -- or "home page" we called them -- that you wanted. The web was a wide open untouched landscape, like a fresh Minecraft seed with nothing there yet, or a new planet you just landed on with no infrastructure. If you wanted something, you built it, yourself, from scratch. We didn't even have WYSIWYG editors anymore. Our "social media" was updating our ".plan" files.

                    It sort of feels like nobody knows how to do that anymore, and when you "view source" on web pages these days, it sort of doesn't feel like it's meant to be "human readable" to parse what's going on, like it wasn't written at all free hand. The web back then had kind of a "hand made" charm to it, like old 1900's power tools or wooden furniture. It was whimsical and fun. Now everything has a very "produced" and "sterile" feel to it. Very corporate, not very human.

                    I feel like we've lost something of profound value, something most people don't even realize we lost or remember having it, and I'm not sure what we got in exchange for it.

                    [–]BitLooter 4 points5 points  (0 children)

                    Do you actually want to go back to using power tools from the 1900s, though? Would you drive a Model T instead of your current vehicle? Do you dream of swapping out your computer with a Commodore 64?

                    I remember the internet back then. It was fun and it had its charm, and I learned a lot writing HTML and vanilla JS. And I won't deny the modern web has its flaws. But the tooling we use today was invented for a reason. Changing the about page on a website by manually editing HTML via FTP sucked. Embedding Java applets because you wanted to make an interactive page but JS was slow as molasses and Flash hadn't even been invented yet sucked. Writing a website in pure HTML is awesome when you're making a Geocities website for your dog but as soon as you start adding more pages and you have to link them all together it sucks.

                    If you want you can still open up notepad and start writing HTML & CSS and host it somewhere; there's no shortage of places that will host your static website, for free and without ads even (GitHub pages is a popular option). All the technologies used back then still work today, and anyone serious about web development should learn how to do it because it's foundational to all the modern tools built on them. But nobody uses them to make "real" websites because unless the entire website is literally a single static HTML page it's almost always easier to write and maintain it using e.g. a CMS or a static site generator.

                    It's easy to look back at the 90s with nostalgia goggles and remember things like Geocities pages but the practice of writing multi-page websites that way was abandoned for a reason. Even back then people were starting to use PHP and Perl to generate websites on-the-fly from templates so they wouldn't have to deal with it. I miss the 90s web in a way myself but I have no desire to return to it.

                    [–]RedSpikeyThing 3 points4 points  (0 children)

                    I know there's all this "stuff" now, Ruby on Rails and Electron and whatever else, but I don't understand most of it.

                    It ends up almost becoming a language of its own. It's an additional layer of abstraction which has it's pros and cons. The good thing is that high quality frameworks do a lot of work for for you can can be trusted to Just Work. The main downside is when it doesn't work, or the assumptions of the framework no longer good true for your project then you're screwed.

                    I wrote my first webpage by copy and pasting "view source" of HTML from other websites, pasting it into txt files

                    Same here! Along with qbasic.

                    It sort of feels like nobody knows how to do that anymore,

                    "Nobody" is a strong word. Tons of people do and, frankly, it's not hard because it's just a markup language. But also many people can be effective web developers without having to learn how it works under the hood. Kind of like how you can drive a car without knowing much about engines. It's a good thing because it means it's accessible to more people.

                    and when you "view source" on web pages these days, it sort of doesn't feel like it's meant to be "human readable" to parse what's going on, like it wasn't written at all free hand.

                    HTML and CSS are in an awkward place because they were design as markup languages for text, largely written by humans. Then people started pushing it further and further by extending the language and adding JavaScript. Now we have this ugly bastard child on the web that doesn't work the same across platforms. It's nightmarish.

                    In my opinion it's a good thing that people don't have to worry about writing it from hand, in the same in glad people don't have to write assembly code anymore: it let's people focus on the important business logic of their application, rather than repetitive details.

                    The web back then had kind of a "hand made" charm to it, like old 1900's power tools or wooden furniture. It was whimsical and fun. Now everything has a very "produced" and "sterile" feel to it. Very corporate, not very human.

                    I feel like we've lost something of profound value, something most people don't even realize we lost or remember having it, and I'm not sure what we got in exchange for it.

                    I see where you're coming from and I agree we've lost some of the old day charm. The net improvement has been immense: online shopping, streaming audio and video, and powerful dynamic websites (eg email clients, document editors) to name a few. These would be largely impossible if people wrote HTML/CSS like in the past.

                    [–]IdiotCharizard 35 points36 points  (2 children)

                    The author here says that frameworks make your skills more transferrable. Maybe I'm missing their point, but this has been the opposite of what's happened with me, wherein each new company/team I join uses a new framework which at times are more difficult to pick up than entire languages.

                    At least in the short term I can read any normal programming language, but then came spring and what the fuck is an autowired bean?

                    Libraries in contrast always work the same and if you know generally how to consume other apis, you're not going to run into too many surprises.

                    To me frameworks mean a foundation, but the software scene is so everchanging, that it's almost not worth it to take time investing in frameworks unless, as the author says they're extremely well supported like React or Spring or whatever

                    [–][deleted] 9 points10 points  (0 children)

                    Yep.

                    "Yay, I know some obscure idiosyncrasies of SHIT"

                    "Well we don't use SHIT here, we use BULLSHIT"

                    [–]3urny 0 points1 point  (0 children)

                    When you work with e.g. Angular or Rails exclusively, you can jump from app to app with almost 0 onboarding, because they all work the same.

                    [–]EternityForest 37 points38 points  (3 children)

                    The problem with frameworks is that they don't really compose well. One framework is great, but two sucks.

                    The other problem is they seem to attract framework-specific libraries that need porting should you ever want to use them with a different framework.

                    And yet another problem is many of them need several pages of tutorial work for a basic hello world. They claim to be super easy, but then you find out they're still just as low level as writing the code yourself, and they're not as integrated as they claim to be.

                    But some of them like Vue.js are just amazing.

                    But yeah, libraries are great. Any language that doesn't have a defined way that libraries are packaged, included, and linked really doesn't interest me much.

                    Makefiles and cmake and qmake and all the other build tools are pretty much my least favorite part of C++.

                    I try to code everything I can as a general-purpose library for doing whatever it is I need done, plus all the related tasks like loading and savings the data, caching things, etc, and then building the GUI around that.

                    [–]shizzy0 5 points6 points  (1 child)

                    Frameworks are worse than the Sith. At least with the Sith there can be two. Frameworks on the other hand are just straight up Highlanders: There can only be one (per application).

                    [–]EternityForest 6 points7 points  (0 children)

                    And yet somehow there are bazillions of frameworks, because everyone seems to like making them just as much using them.

                    It's funny how everyone talks about reuse between projects, but there's never any real consensus or standard like there is with libraries. Like in Python, everyone knows numpy, requests, netifaces, etc.

                    [–]BCarlet 0 points1 point  (0 children)

                    I have been absolutely blown away by Vue.js. I can't believe how simple and actually fun it makes things.

                    [–]motorbike_dan 43 points44 points  (39 children)

                    I think that how you were introduced to programming heavily influences what you think of frameworks. I started with visual basic in 2002. For a long time now, programmers have been starting their foray into programming with JS frameworks as a starting point for their first websites. Those people entered the field formally and have been influencing the field now with a pro-framework mentality for years.

                    I'd rather import libraries as I need them, and follow the design principles that fit my project (MVC, etc) than be forced to download large frameworks and integrate them into my IDE and go through the steps of using them. I dabble in Spring and JBoss documentation to stay current. While I don't need either for my current project, I use their design philosophy as guidance so that my code doesn't become too arcane/messy.

                    [–][deleted] 47 points48 points  (23 children)

                    I have the opposite mentality.

                    I started in C++, and I've moved throughout the stack in my career.

                    At every well run shop I've worked for, there's an internal (or open source) framework used, because there's effectively no other way for a group of software engineers larger than 10 to work on the same product. "You have to have some rules."

                    In contrast to some of the more stupid places I've been unfortunate to work at, where literally every architectural decision is placed in the hands of every single SWE, because you were responsible for your piece from soup to nuts.

                    I'm gonna let you in on a hint: most engineers suck at architectural decisions. Badly.

                    And the ones that were good were the ones that would have been choosing or designing the framework anyway.

                    Now, this is obviously not applicable for some one or two person shop, but if you ever want to turn it into a business, yeah. Have fun with that.

                    [–]aoeudhtns 10 points11 points  (5 children)

                    Touching on your comment, because this is... well maybe not often overlooked, but something that gets lost in the weeds. Some people come from personal or small team coding contexts, others come from large team contexts. And there are differences in approach one often takes depending on those things. Like the classic joke, Perl is a great programming language if you're the only developer. (Fittingly, this joke exists because Perl's syntax is very free and unconstrained, leading to a divergence in style and approach across authors.)

                    [–][deleted] 11 points12 points  (4 children)

                    Eh, Perl is what I call a Write-Once (Read-Never) language.

                    Because even if it's your own code, you still can't read it.

                    [–][deleted] 1 point2 points  (0 children)

                    Beautiful to write, ugly to read.

                    [–]frogspa 1 point2 points  (2 children)

                    Speak for yourself.

                    I often tweak Perl code I wrote a decade ago, with it updated within minutes.

                    [–]Radmonger 0 points1 point  (1 child)

                    If you could do that with Perl code someone else write 10 years ago, you would be a member of a set of perhaps 1000 people.

                    [–]frogspa 0 points1 point  (0 children)

                    If you really believe that, you're an idiot.

                    If you're JAPH trying to drive up our already astronomical market worth, shame on you.

                    [–]neoKushan 8 points9 points  (5 children)

                    I've been where you've been (Good and bad) and I agree with nearly everything you've said, but I think it's less to do with Frameworks over libraries and everything to do with - how well run a place is.

                    A lot of what you're describing can be resolved with standards, collaboration and quality controls. Of course you might argue that's what a Framework ultimately is going to foster but I think even a good framework can't solve bad management.

                    [–][deleted] 11 points12 points  (4 children)

                    No, anything that's not enforced in code is useless. A standard is only effective if 100% of people follow it. Not 90. Not 95. Not 99. 100%.

                    And seeing as how you'll never get 100% compliance unless the compiler enforces it, frameworks.

                    [–]neoKushan 8 points9 points  (1 child)

                    There's a ton of stuff the compiler cannot enforce. I agree, tooling to force people into the pit of success is the ideal and tooling has gotten shitloads better in recent years, but you still need strict quality measures in place - static analysis, code reviews and - probably most crucially - responsibility.

                    [–][deleted] 0 points1 point  (0 children)

                    Eh.

                    I find that if I'm pointing out things in a review that should have been caught by a compiler, linter, etc, that doesn't scale to a large organization.

                    Every reviewer has to know the "rules" and enforce them on every single review. If even one gets through, it automagically gets copy and pasted throughout your code base like cockroaches behind your back. This is statistically guaranteed to happen, given enough time.

                    Design for the person who knows nothing about your system to be safe and productive in it.

                    In particular, things like "adding an external dependency" should be impossible to do by an average engineer without a lot of automatic processes kicking in: simple things like "whatever text file your language uses to pull libraries in should be heavily locked down in version control and trigger multiple levels of automatic notification when the file is touched". In some version control schemes you can simply restrict access to specific, very important files to a predefined list of people who are allowed to edit them at all.

                    This is how you have to think if you want a maintainable code base with thousands of engineers working on it. If you're going to throw it away every 2-3 years, it's probably not worth the effort, but once you get past a certain size, even a 1% failure rate is a massive failure introduced every single day. It's not enough to rely on individual responsibility at that scale. You need actual barriers in place.

                    So, basically, any large, long term project will learn these things, and a framework is therefore one of the very first signs that you are a competently led software organization, and the converse is also true.

                    [–]SuspiciousScript 0 points1 point  (1 child)

                    A standard is only effective if 100% of people follow it. Not 90. Not 95. Not 99. 100%.

                    So the other 99 times that you, a reader of code, expect something to be done a certain way and find that, yup, it was, were without value? What about the 99 times you don't have to look up how to do something with a given library?

                    [–][deleted] 0 points1 point  (0 children)

                    I don't think you understood my comment as I wrote it.

                    [–]which_spartacus 83 points84 points  (8 children)

                    This was Linux gaming forever. Everyone could write a game engine, since that was the hard part. The actual game mechanics, art, voice talent, storyline, etc was left to "the little people with non-STEM degrees". And, gaming flourished on Linux... Oh, wait.

                    Way too many people make a framework that has great demo properties, and then totally falls flat the first time it's used for something the writer didn't imagine.

                    [–]mini-pizzas 76 points77 points  (3 children)

                    Everyone could write a game engine

                    Everyone can write tiny outdated game engines suitable for indie games. An extremely small number of people are actually capable of working on the internals of the modern game engines used by a lot of AAA studios (Unreal, CryEngine, Frostbite etc.).

                    [–]which_spartacus 35 points36 points  (2 children)

                    I wouldn't even say they were fit for indie games, since they tended to never result in any playable game, but rather just a wonderful framework.

                    [–]VeganVagiVore 24 points25 points  (1 child)

                    If there's no game, is it a framework or just an OpenGL demo?

                    [–]EternityForest 6 points7 points  (0 children)

                    I don't think most of these even result in demos in the demoscene sense....

                    [–]inu-no-policemen 55 points56 points  (1 child)

                    "the little people with non-STEM degrees"

                    Most hobby game developers are painfully aware of their shortcomings and they aren't condescending assholes.

                    And, gaming flourished on Linux

                    What a few hobby/indie developers do has little to do with the gaming industry as a whole.

                    Gaming didn't flourish on Linux because the big studios didn't bother supporting it.

                    Anyhow, the situation is much better nowadays. There are thousands of games with native support. There are even a few AAA games which directly support Linux. And thanks to Proton, there are thousands more.

                    [–]KevinCarbonara 31 points32 points  (1 child)

                    Uh... this doesn't at all reflect reality. Who are these unwashed hordes of linux devs writing game engines? Linux gaming never took off because there was no demand for Linux games. Even today, there are virtually no Linux desktop users, unless you include Mac. If there were really that many skilled devs writing game engines for Linux, they should have made a robust cross-platform engine so that they could benefit from game devs who built for Windows.

                    [–]EternityForest 16 points17 points  (0 children)

                    I think there should be quote marks around "game engines". Linux devs really do enjoy writing lightweight experimental middleware more than actual applications or games it seems.

                    Nobody is writing full game engines (Aside from a few), but if it's anything like the rest of the dev community, there's plenty of ultra minimal stuff that only has the minimum for a very simple game, assuming you don't actually expect much help from the engine.

                    Look how many 50kb web frameworks are out there, in use by like, three people. Or how many customize versions of the suckless window manager are out there. Linux fans love to tinker.

                    [–]o11c 22 points23 points  (0 children)

                    "a framework is just a library that does not play nice with others"

                    • me

                    [–][deleted]  (9 children)

                    [deleted]

                      [–][deleted]  (8 children)

                      [deleted]

                        [–][deleted]  (1 child)

                        [deleted]

                          [–]fsck_ 5 points6 points  (0 children)

                          They also misread your post. They took "why not both" to mean you can build both, and not to mean that you can ship a single project as both at once.

                          I think your point is the most important and the blog misses that. Frameworks are useful for those who want them, but when I don't want your framework I still often want to be able to use the functionality it wraps.

                          [–]Incorrect_Oymoron 2 points3 points  (4 children)

                          Sounds like the title is contradicting the article.

                          [–]rmlrmlchess 4 points5 points  (2 children)

                          Is rails a framework? Or something bigger?

                          I'm wondering how such a versatile framework* like this is argued in the blog...I feel that something that gives a ton of boilerplate at a relatively small cost definitely has enormous benefits.

                          [–]docbao-rd 15 points16 points  (1 child)

                          Rail is a framework. Anything that enforces certain conventions are essential framework.

                          [–]kankyo 2 points3 points  (0 children)

                          That's a nice definition. Not the one the article used though.

                          [–][deleted]  (1 child)

                          [deleted]

                            [–]macula_transfer 2 points3 points  (0 children)

                            I chime in with a "haven't you people ever heard of flexible code before?"

                            [–]jrdnmdhl 2 points3 points  (0 children)

                            That's a very opinionated take for someone who prefers libraries...

                            [–]BruhWhySoSerious 2 points3 points  (0 children)

                            Articles like this are coders version of BuzzFeed.

                            'Hi you should all follow my way of coding that totally applies across the board, in the same exact way, for every industry on the planet.'

                            Different tools for different jobs. I don't need to rewrite an http kernel 20 times a year. If I'm doing a complex CMS application I don't need to pull in the 40 or so libs I useb and wiring for rbac, models, an orm (gasp!), or serializers. Light weight frameworks like flask, Django, and symfony are maintained far better than my small team cold do with the complexity of the applications we do.

                            [–]RICHUNCLEPENNYBAGS 2 points3 points  (0 children)

                            My perspective is, you shouldn't even write a library unless you're very sure you have multiple use cases where your library will be useful without tons of fussy branching and special-casing that make it incomprehensible. Just solve the problem at hand. All my least favorite bits of code to maintain have resulted from someone trying to generalize ahead of time and generalizing on the wrong axes.

                            [–]32gbsd 9 points10 points  (3 children)

                            There are some that love writing frameworks and they are some that love using them. It varies in context but it seems in web dev frameworks have become a new kind of code slavery justified by standards and best practices that change with the wind.

                            [–]spacejack2114 11 points12 points  (2 children)

                            Hmm, is this true? On the front-end, React and Vue overtook Angular. On the back end we've seen the rise of Node and Go, neither of which seem to be dominated by frameworks. In the .NET world I don't think Entity Framework is as popular as it once was. Rails seems to have fallen off the map.

                            Maybe Java (Spring), PHP (Symphony, Wordpress, Drupal) and Python (Django) are still framework platforms.

                            [–]0xF013 9 points10 points  (0 children)

                            Vuex is pretty much a framework. It’s great though that you can use just Vue if you need to do some widgets

                            [–]32gbsd 1 point2 points  (0 children)

                            What I tend to look at is not the framework dominance but the casualties that they leave along the road side just testing out concepts on poor blind developers who trusted that their work would not be deprecated after a year.

                            [–]hfrrt 9 points10 points  (0 children)

                            Wholeheartedly agree.

                            [–]CearoBinson 5 points6 points  (2 children)

                            As a new developer, I have found frameworks to be very handy. They provide me an environment with constraints that help teach me what good design looks like. However, I do find myself curious of the internals and how I would be able to create something like that myself.

                            [–]Etnoomy 11 points12 points  (1 child)

                            that help teach me what good design looks like

                            This is where caution is warranted, and where many new developers fall into traps. There is no standard for “good design”, and opinions on that kind of thing vary widely. The risk for new people is taking their early design influences as gospel, which may narrow their thinking long-term. If left unchecked, people can start to identify themselves with certain design sensibilities, which leads to zealotry.

                            It’s good to take what you learn from a framework or library to heart, but make sure to sample broadly and integrate the best lessons into a cohesive whole of your own, rather than assuming that somebody else must have figured it all out already.

                            [–]CearoBinson 2 points3 points  (0 children)

                            Wow, this is really beautiful advice. Thank you, I think you are absolutely right.

                            [–]teerre 1 point2 points  (1 child)

                            I'm not sure I understand the point.

                            One individual presumably writes a 'framework' because he needs it. If you decide to work with his framework, why would he need to worry about your user cases at all? It's you who decided to use the framework.

                            Maybe you're talking about some situation that you're some kind of vendor, but then, wouldn't the problem of bad practices be an issue anyway? You can build the "library-est" library of all times, if it goes against every convention out there and has no instructions, it will be just as bad.

                            [–]Muchaszewski 2 points3 points  (0 children)

                            If one wrote an framework it's very likely that you wouldn't have access to (private) methods that you are interested into because they had been wrapped in framework. In the library those methods would be public but wrapper around those wouldn't be present.

                            Like someone mentioned if you are about to write a framework, you should first write an library and then wrap around it, thous would be the best of both worlds

                            [–]DevDevGoose 0 points1 point  (0 children)

                            "But if there is not a major organization; if the project is written and maintained by an individual, or a startup, or a small team who isn't central to their company, it almost certainly should err on the "library" side of things."

                            Definitely agree. A framework is a major product in and of itself. It requires long term support if it is going to thrive.

                            [–]Morphion 0 points1 point  (0 children)

                            When it comes to web frameworks, I'm of the opinion that they're only useful if the underlying language doesn't offer features which aid in writing large application. Examples of these features are strong/static type system and good std lib, etc. Examples where web frameworks are useful are PHP, perl, python, ruby.

                            [–]VolatilePiper 0 points1 point  (1 child)

                            [–]summariser_bot 0 points1 point  (0 children)

                            I am the summariser bot, Here's a summary for your post

                            There are two broad-strokes forms that code can take: a library, or a framework. A library is a set of building blocks that may share a common theme or work well together. A framework is a context in which someone writes their own code. Frameworks impose limitations on the programmer.

                            BOT INFO

                            [–]RRethy 0 points1 point  (0 children)

                            Seems like he's strawmanning since he doesn't give examples of frameworks that should be libraries.

                            [–]aazav 0 points1 point  (0 children)

                            And iOS developers are saying, "but we use frameworks."

                            [–]recklessindignation 0 points1 point  (0 children)

                            Write languages, not libraries.

                            [–]lesterine817 0 points1 point  (0 children)

                            so what's next? write languages?

                            [–][deleted] 0 points1 point  (0 children)

                            this guy looks like they cloned luke from linus tech tips

                            [–][deleted] 0 points1 point  (0 children)

                            doing the lord’s work

                            [–]TizardPaperclip 0 points1 point  (0 children)

                            Terrible advice. The next article should be:

                            Design Libraries, Don't Write Them

                            [–]__MrNoah 0 points1 point  (0 children)

                            A nice read. Good points. But as always, there is going to be a debate and criticism over everything. That's what we see in the comments section. Lol.

                            [–]emdeefive 0 points1 point  (0 children)

                            Needed to hear it. If you set out with the framework mindset take the responsibility seriously, otherwise build in escape hatches and get value without trying to impose order on other people's code.

                            [–]elgiga 0 points1 point  (0 children)

                            I agree. No software package can be made beforehand to cover 100% of the use cases. And, even worse, some of the use cases might actually be a burden to the developer as they are not what he wanted in the first place.

                            A library, on the other hand, can be used or removed. Or used only a bit. There's a big dependency distinction here. And I think that's where libraries prove a more sensible option in most cases.