7 ms·
Indeed. Go competes most obviously with Java.
by rienbdj 7y ago
Indeed. Go competes most obviously with Java.
- mynegation 7y agoI did not get that impression at all. In my experience Go gets most of new usage from Python converts.
- chucky_z 7y agoAs someone who scripts mostly in Python I prefer Rust over Go. If I could have Go with more functional paradigms (a map function!) I'd be happier with it.
- panopticon 7y agoGo seems most comfortable in network and systems roles. I think that fit sees more competition from Java and C++ than Python. But that’s biased by my experience of mostly seeing Python in analysis/scientist roles with the odd Django use here and there.
- kenhwang 7y agoThere's a bunch of Python used for CLI tools and simple API webservers that Go also excels at replacing.
- kjeetgill 7y agoAs a language, I've always found Go to be a compelling middle ground between Java, Python, and C. It writes quite linearly and plainly like Java, but with the brevity/typing somewhat closer to python. And as a GCd languages they can be quite similar in usecases. It brings the structy-ness and memory austerity closer to C, but dosnt really operate in the same niche. The reason it attracts Python programmers more than Java or C is because anyone who would leave for the language features left already. If you didn't like Java you'd be using something else already. There's so many options in those domains. On the opposite end, you're likely working in C because you needed to, GCs typically don't fit into those same uses.
- pjmlp 7y agoFor Java developers, Go feels like something between Java 1.2 and 1.4, those that leave probably aren't doing modern Java anyway.
- twic 7y agoIn terms of what it's good at, Go is most similar to Java/C#. It's a pretty fast, fairly straightforward, strongly typed, roughly object-oriented, general-purpose programming language. It has some distinct implementation differences from Java/C# (AOT compilation, different implementation of polymorphism, etc), and it is further towards the straighforwardness end of the straighforwardness-expressiveness axis than they are, but it's comparable. But in terms of the niche it occupies in the whole programming ecosystem, it's rather different. Its straighforwardness makes it easy to pick up, and as you note, it has become a popular choice for dynamic language programmers who either want a fast, typed language as a second language, or who want to move on from their current language altogether.
- pjmlp 7y agoJava and .NET support AOT since the early days, now that many don't learn them is another matter.
- twic 7y agoI don't know much about .NET, but that isn't true of Java in a substantial sense. Using AOT compilation would mean not using bytecode weaving and some other dynamic features, at which point you're not really using Java.
- pjmlp 7y agoBytecode weaving is not something supported officially by the language standard, just something that "happens to work, use at your own risk" kind of thing. There are even Aspect Oriented programming libraries for C++ that work at machine code level, just as info. Examples of Java AOT toolchains since around 2000: Aicas, Aonix, JET, PTC, Websphere Real-Time, gcj, Embedded JVM, Gemalto, J/Rockit. Not all of them have survived to this day due to multiple reasons, mostly business related, PTC has acquired Aonix, gcj was abandoned when OpenJDK was released, and JET has given up their business as of this year, for example. Likewise on .NET side, it was shipped with NGEN since version 1, Mono/Xamarin uses AOT for iDevices, Sony and Nintendo consoles, Unity AOT compiles via IL2CPP, Windows 8.x uses MDIL which produces AOT binaries on the Windows Store, Windows 10 has .NET Native, with CoreCLR and .NET going to get merged in .NET 5. Also Singularity and Midori only used AOT mode, making use of MSIL just like LLVM uses its bitcode. So yeah, just lack of information.
- dguo 7y agoRob Pike has a great blog post in which he addresses this: https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html https://commandcenter.blogspot.com/2012/06/less-is-exponenti... "I was asked a few weeks ago, "What was the biggest surprise you encountered rolling out Go?" I knew the answer instantly: Although we expected C++ programmers to see Go as an alternative, instead most Go programmers come from languages like Python and Ruby. Very few come from C++." He later writes: "Python and Ruby programmers come to Go because they don't have to surrender much expressiveness, but gain performance and get to play with concurrency. C++ programmers don't come to Go because they have fought hard to gain exquisite control of their programming domain, and don't want to surrender any of it. To them, software isn't just about getting the job done, it's about doing it a certain way. The issue, then, is that Go's success would contradict their world view. And we should have realized that from the beginning. People who are excited about C++11's new features are not going to care about a language that has so much less. Even if, in the end, it offers so much more."
- ChrisSD 7y agoI like Rob Pike but wow that sounds like a bad argument, at least based on the parts you quote. Saying, effectively, "you just don't understand how great it is" and then insulting the intelligence of C++ programmers isn't going to win many people over.
- pjmlp 7y agoWell, he also has another talk given at Microsoft, where he states that Java is too advanced for young Googlers thus something like Go is needed. In a company with funny interview games that even some Phd aren't able to tackle.
- dragonwriter 7y agoI think Pike actually missed a real reason for the effect he saw: Python and Ruby were at the time (and Python perhaps still is, Ruby less so) languages that were hot as on-ramp languages (Ruby especially in webdev, Python in a wider number of areas) where you had lots of people whose entire experience with programming was in that language, maybe one or two broadly similar dynamic languages (JavaScript especially), and maybe some static experience in C and/or Java (the latter often as the prior hot language for webdev for programmers who had run from there to Ruby.) For that kind of programmer, “more speed and easier deployment than Python/Ruby, less type-system incantation than Java, and more type-system value than C, with a decent concurrency system that seamlessly exploits available parallelism is a pretty compelling story, at least for some uses. But each of those features (and most combinations of them) are less surprising with broader experience, because they aren't all that uncommon, and Go is far from the best example of any of them, or even many useful combinations (not sure it's even the best example of all of them in combination.)
- meruru 7y agoGo and Rust mostly compete as the "which of these newish languages should I learn next".
- buybackoff 7y agoThis was my main thought when I was writing the "compete" word.