13 ms·
Basically all these articles about Go make it sound like it was designed to be some kind of teaching language with a low conceptual barrier to entry, except Goo
by kmicklas 9y ago
Basically all these articles about Go make it sound like it was designed to be some kind of teaching language with a low conceptual barrier to entry, except Google intends it to be used in real settings, which is the problem.
- computerex 9y agoWhat articles are you talking about? This couldn't be further from the truth. Go is a practical language meant to be used in production settings. It's not a haskell. For example, it's support for protocol buffers is second to none imo.
- chowells 9y agoErr. Why do you think Haskell isn't intended to be used in production settings?
- skybrian 9y agoThe slogan "avoid success at all costs" suggests that they don't want a lot of production usage, at least.
- lclarkmichalek 9y agoIt's "avoid 'success at all costs'", which has _quite_ the different meaning. Although, if the slogan has too high of a barrier to entry, I don't know what you'd think of the language itself.
- mrkgnao 9y agoNo, it's meant as a warning against the trappings of explosive popularity. A language like C++/Java/JS is difficult to modify because of how entrenched the usage of the language becomes. In that sense avoiding "success at all costs" (which is how it should be parsed) allows "agile" development of the language.
- nvarsj 9y agoWell, it wasn't. Haskell was designed primarily as a test bed for writing language features to support PhD theses. The great success of Haskell is the amount of new language ideas it generated, which we now see in many other places.
- chowells 9y agoBeing a real-world language was absolutely one of the design goals of Haskell. See point 1 of section 2.4 in "A History of Haskell: Being Lazy With Class"[1]. It succeeded at being suitable for writing large systems, too. It's easily the least-bad language I've used for writing software where garbage collection is acceptable. It hits a sweet spot between expressiveness, maintainability, and performance that I haven't experienced from any other language. Question: Have you used Haskell to write real software? I find that people who have used it tend to have much more precise criticism than "isn't designed for writing real software". It certainly has lots to criticize, just like every other language. But most of the criticisms I see of it seem to have gone through 20 rounds of telephone, with basically no relation to the reality of using Haskell. [1] http://haskell.cs.yale.edu/wp-content/uploads/2011/02/history.pdf http://haskell.cs.yale.edu/wp-content/uploads/2011/02/histor...
- kjksf 9y agoIt says "It should be suitable for teaching, research, and applications, including building large systems." So building production software is stated as 3rd most important goal. In contrast, here's Rob Pike's talk about Go: https://talks.golang.org/2012/splash.article https://talks.golang.org/2012/splash.article The title: "Go at Google: Language Design in the Service of Software Engineering" It puts building production software as the first most important goal. It then goes in depth about how design decisions were driven by things the authors learned from Google's vast experience of writing production software. It methodically describes pain points of large-scale software production and how Go's design decisions are trying to address those pain points. Unlike Haskell, Go wasn't designed for teaching. It wasn't designed for research. Go was designed for writing production software that needs to be reliable.
- mhh__ 9y agoHaskell is probably the worst teaching language I can think of (Of the set of languages that are considered good/production worthy)
- kmicklas 9y agoThat's only if you're used to imperative languages. Of course even in functional land a slimmed down language like Scheme is probably better for teaching.
- leshow 9y agoUh, what? Learning Haskell covers a huge surface area, many things you learn are applicable to tons of other languages. How does that make it a poor teaching language?
- mhh__ 9y agoI'm interpreting "Teaching language" to be the first language students learn. How can one explain the need for monadic IO properly without explaining how regular printf and the like work. Also, Haskell is quite scary to the beginner (Although I personally find it much simpler/more consistent than the Java and C++) If it's (say) the third language they learn, then Haskell is absolutely perfect for the exact reason/s you have stated. Personally, I actually learnt Haskell by accident (Read SPJ's book about lazy functional language implementation, realized SPJ started Haskell then learnt more from there).
- wtetzner 9y ago> Also, Haskell is quite scary to the beginner (Although I personally find it much simpler/more consistent than the Java and C++) Is it? Or is it just harder for people who have already learned a mainstream programming language?
- dmit 9y agoI've heard from multiple people teaching Haskell that it's much easier to grasp for people with no prior programming experience compared to those with one or more languages under their belt. It makes sense on some level - core Haskell is about taking plain data and transforming it into something else. Much easier to explain than public static enterprise beans. I think that learning Java/Python/JavaScript/C#/PHP as a first language burdens you with too much baggage, while a lot of what Haskell teaches can be successfully applied regardless of what language you end up working with. It's truly unfortunate that Haskell got the reputation of being mainly about monoids in the category of endofunctors, and zygohistomorphic prepromorphisms. The core principles are simple, solid, and lend themselves well to writing production code.
- kmicklas 9y agoHaskell is much more suited to production use than Go though. Better concurrency, more invariants checked at compile time, easier to refactor, etc.
- mjibson 9y agoI think the people who make and use Go have had a different experience than you, and judge a language to be suited to production with different criteria. Simplicity, great concurrency (that is, way better than most others even if not the best), speed of compiling, static binary, garbage collection.
- leshow 9y agoI'm not OP, and I don't necessarily agree, but Haskell can produce static binaries, has GC, and has a great story for concurrency. It uses a M:N threading model similar to Go.
- whateveracct 9y agoRe: concurrency, Haskell also has STM which is absolutely amazing compared to anything Go has.
- computerex 9y agoNo one said Haskell cannot be used in production. It is inherently a pedagogical language, that anyone must concede simply because history: https://wiki.haskell.org/Haskell_in_research https://wiki.haskell.org/Haskell_in_research Languages like Go or Nodejs are inherently more production ready and easier to deploy and maintain in production because of their vast ecosystems.
- jolux 9y ago>because of their vast ecosystems. But this is an argument more about community than about language design. Granted there are a lot of problems with the Haskell community but deifying poor design decisions as "simplicity" is generally not one of them. For the horror that is string types, though, maybe.
- artursapek 9y agoThat's natural since protobuf is also developed by Google
- holydude 9y agoSo which programming languages / tech do you think are the real deal ?
- kmicklas 9y agoIn the general space of competition with Go, probably the various JVM languages (Java, Scala, Kotlin, etc.), Rust, Haskell, Nim, ML, etc.
- comex 9y agoGo is designed to be a language with a low conceptual barrier to entry; that’s quite evident from its design. That doesn’t mean it’s just a “teaching languge”, or if it does, you’ll have to explain that to all the people happily using it in production.
- kmicklas 9y agoOf course you can find people using all manners of languages/systems in production. That doesn't mean they are well designed. And I don't think it's necessary for me to reiterate at this point why Go is poorly designed.
- Thaxll 9y agoAnd yet Go is used by more and more large project / compagnies where supposing superior languages are nowhere because way too complex.
- coldtea 9y agoWell, it's used by 1/10 to 1/100 the number of large project/companies that C++, Java, and C# are used. So there's always that.
- gribbly 9y agoIt's also a MUCH younger language than those you listed, that said I don't think Go or any other of the 'new languages on the block' will reach anything near the wide use of languages like C++ or Java, atleast not in my lifetime.
- coldtea 9y agoWell, Java had that wide an adoption (in the enterprise) already 10 years after it was introduced. It appeared on 1995 -- but 2005 it was already the de-facto enterprise backend language. Ditto for C#, but of course C# was pushed by MS as the native solution for Windows, a platform that already had 95% market share.
- nickpeterson 9y agoGo is designed to minimize the cost of bad programmers. It's a decent idea, and likely scales better than languages that try to maximize the value of great programmers (lisp,Haskell,etc).
- kelseyfrancis 9y agoThe part of this argument I don't really understand is that it seems like the cost of bad programmers is higher, not lower, with a "simple" language where it's _normal_ to have type-unsafe code and mutable state everywhere.
- kjksf 9y agoGo is type safe (unless you use "unsafe" package, that is, but it's no different from Rust). Or show me how you would subvert Go's type system and tell me which language you're comparing it to that wouldn't allow similar type system subversion. And no moving goal posts, please. "Type safe" has a certain meaning. The value of immutability is so overblown, as shown by literally every mainstream language being mutable by default. Not to mention the perf cost of immutability. For just one example see https://ayende.com/blog/164739/immutable-collections-performance https://ayende.com/blog/164739/immutable-collections-perform... (immutable version of dictionary is 30x slower, immutable list is 16-32x slower). I'm not cherry-picking. This is just the first search result. If you understand how immutability works from first principles, it just does much more work. Ultimately I wouldn't describe Go as "minimizing bad programmers" but "minimizing a damage that well intentioned but ultimately mis-guided good programers can do to the codebase". For example I believe that your enthusiasm for immutability is well intentioned but I would rather not take 30x perf hit for theoretically safer code. Bad programmer will write a bug that can be fixed. A mis-guided good programmer will write a compile-time parser that only he can understand (possibly only for a week after writing it), will baloon compile times, produces incomprehensible error messages and you won't be able to convince him that a standard recursive-descent parser is 10x simpler to write and read. Go prevents mis-guided smart programmers from inflicting too much pain on everyone else.
- 9y ago
- danaliv 9y agoFunny; it's always reminded me of Pascal.