5 ms·
"is opinionated"? What does that mean in the context of a computer programming language?
by pklausler 11y ago
"is opinionated"? What does that mean in the context of a computer programming language?
- golergka 11y agoOne way to do things, not ten. Opposite example: implementations of OOP in Lisp and JS.
- pklausler 11y agoI'm not sure that I understand your definition of the term "opinionated". Is Haskell opinionated? Is Fortran?
- jgalt212 11y agoI take opinionated to mean one obvious way to do things. Python and Go are opinionated. Ruby and Perl are not. But RoR is very opinionated.
- antod 11y ago> I take opinionated to mean one obvious way to do things. Python and Go are opinionated. IMO Python wants to be opinionated (in your 'one obvious way' definition), and it actually was 10-15yrs ago when Perl was the comparison, but ongoing progress has eroded that a lot - especially across the stdlib :) But yeah Go and RoR are probably two of the most opinionated technologies I can think of.
- melted 11y agoDoesn't attempt to please everyone. Case in point: no OOP or inheritance and no FP. Minimal syntactic sugar.
- zdkl 11y agoNot to start a flamewar or anything, but what about clojure (or any lisp for that matter, I just like the CLJ ecosystem) doesn't vibe with your 'minimal syntactic sugar' and other requirements?
- melted 11y agoOh, don't mistake my comment for favorable opinion. I only wrote a few hundred lines of Go in my life. It worked well for the particular problem I was solving, but I'm really more of a C/C++ guy. The problem with lisps is that you need to know lisp, and relatively few people do. It also requires a different approach to program design. It may or may not be a better approach, but the fact is, that's not what most people are trained for. In contrast, go is imperative through and through, and its syntax is similar enough to C that people find it easy to adapt to it.
- coliveira 11y agoThe little secret of Lisp is that you can use it pretty much as an imperative language, even though it also enables functional programming. The main barrier is that Lisp is taught as a functional programming language, and many believe that this is the only way you should use it.
- woah 11y agoGo tends to emphasize the simple, imperative way to get a computational thing done. It goes so far as to never hide a for loop from you. I'm not experienced with lisp, but from reading sicp, it seems to be a paradigm built on creating stacked layers of syntactical sugar (dsls).
- zik 11y agoNitpick - Go is very much an OO language. Almost everything is done using objects. It has a different way of handling inheritance however - it makes a different decision in the "Composition over inheritance" debate. https://en.wikipedia.org/wiki/Composition_over_inheritance https://en.wikipedia.org/wiki/Composition_over_inheritance
- iends 11y agoI've found that there is no real standard definition of what OOP is and people get very angry when you say Go is OOP but it doesn't have inheritance. YMMV though.
- masklinn 11y agoAs far as Alan Kay is concerned (always a pretty good yardstick) > OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late binding of all things.
- redtuesday 11y agoYeah, I like this posting from him http://c2.com/cgi/wiki?AlanKayOnMessaging http://c2.com/cgi/wiki?AlanKayOnMessaging
- fithisux 11y agoGolang is the best. And this is a really amazing thing. Golang does Pseudo OO like Motif. The added value is the composition which is amazing.
- ant6n 11y agoNo floats?
- melted 11y agoNo functional programming, or language features borrowed from there.
- pklausler 11y agoWhich is kind of a shame, since many of those concepts would complement the strengths of Go quite nicely -- i.e., a pure goroutine that had no visible side effects apart from channel activity would help enable automatic remote execution in a cluster.
- TelmoMenezes 11y agoTake a look at a curated list of opinionated ecosystems. Hilariously, they contain some of the most popular use-cases going forward, and the price point is good. Genuine question, why all the negativity?
- pklausler 11y agoI'm not being negative. I was confused by the unfamiliar anthropomorphic terminology being applied to an artifact. I take away a sense that "opinionated" seems to be an idiom popular within the golang community for a sense of principled design along the lines of Smalltalk's message passing, Lisp's homoiconicity, Haskell's purity from side effects, and so on.
- TelmoMenezes 11y ago> I'm not being negative. I was. My previous message is an arbitrary combination of HN clichés, of which "opinionated" is one. It's gibberish, devoid of content but written in a fashionable way. It got zero down-votes so far. Maybe something to think about.
- pklausler 11y agoI felt like I owed the world a response to your question even though the first sentence made no sense to me whatsoever. I guess that "opinionated" makes no less sense as a characterization of an artifact than "ambitious" or "stupid" does, so I'm going to have to learn to live with it, but it's one of those things like "performant" or "impactful" that will make me cringe if I ever catch myself saying it. Anyway, thanks for the response, my comrade-in-downvotes.
- libria 11y ago"opinionated" is just shorthand for "the language authors held strong opinions when designing". There's no anthropomorphism so hopefully that takes away the confusion.
- sinatra 11y agoIn addition to what melted said, Go has strong opinions about things (we want to keep language simple, we want to encourage writing maintainable code, we want fast compilation, etc) and it's okay if those opinions mean it can't please some critics. For example, Go isn't against generics. They just don't know (yet) how to do it while keeping language simple and compilation fast.
- BHSPitMonkey 11y agoOne superficial example: There is only one correct formatting of a particular Go source file, so you never have to debate with someone (or yourself) whether to use newlines here or there, or to place that opening brace on the next line, or to put spaces around your assignment operator in that function call, etc. The toolchain formats it the "correct" way and that's it.