On Monday, May 16, 2016 at 6:37:20 AM UTC-7, Luca Looz wrote:
I'm a big fan of Go and i have used it for some side projects. I like its
performance, built-in concurrency, easy cross platform builds and the
concept of being practical and productive.
My company it's currently .net based, we develop all backends (scrapers,
rest api, web sites etc) in vb.net and c#.
We want to switch to something crossplatform and stick with it for all new
projects.
This comment makes me think you're planning a step too far. From the
description of what your company is doing, you probably have the
opportunity to try something new for a specific small project. Pick a
project that would benefit from Go, and make a case to your boss that you
should try just that project in Go, and learn from it whether or not Go is
a fit for your company. In general, it is a terrible idea to re-implement
existing code just to move to a new language. This trial project can play
out in three ways:
a) It works brilliantly.
b) It works terribly.
c) It is inconclusive.
If you land in category (c), then you've probably got your answer - stick
with C#. That's where your company's expertise lies, and the biggest
expense your company probably pays in developing these projects is the cost
of your developers' time. Obviously, don't sabotage your experiment, either
by picking only the best people for this team, or only the worst - try to
make your team and its experience align with the rest of your company.
My boss discovered Go and he likes it too but i know for certain that .NET
core (currently in RC) it's an obvious choice because we don't need to
learn a completely different language and development environment.
I would like to use Go but i don't know which arguments can i use to
persuade by boss, any hint?
We are blessed / cursed with too many options for cross platform
development. Java, Javascript, C#, Swift, Go, Rust, C++, Haskell, Clojure,
Python, and Ruby all seem viable based on your description. I'm guessing
you've discarded Python & Ruby because of performance concerns. Personally,
I'd discard Java, because the huge changes coming with Java 9 might be
seriously disruptive, Oracle is still causing legal troubles around Java,
and Oracle has a very poor history of engaging with open source (and
doesn't seem to be changing). C++ is probably too complex, and may be
difficult to find great developers. Haskell & Clojure also probably suffer
from difficulty hiring - unless you have specific libraries or features
that align well with those languages. That leaves you with C#, Swift, Go,
Javascript, and Rust.
C#, Swift, and Go all have a single major corporate sponsor. This is both a
strength and a weakness. On the strength side, it means *great* support for
the really hard parts of making a great language - performance, better
faster memory management, documentation, and obscure bugs, just to name a
few. Of the three, however, Google's future isn't tied to developer
engagement with the language. Which ironically, makes it a stabler choice,
because it isn't as likely to change just to chase the latest programming
fad. Community outside of Google also seems quite robust. Microsoft does
not have a long history with positive engagement with Linux, so that
deserves some skepticism (although, to the company's credit, it has changed
dramatically over the past few years), and has a long history of making
languages not quite conform to standards. Microsoft also has a very long
history of trying to lock you in via many subtle and overt means. Makes me
skeptical. Apple has a long history of changing Objective-C to fit the
latest needs of their OSes, and Swift has already moved to a 2.0 version,
so they seem to be keeping to this trend, and thus I wouldn't recommend
Swift (yet).
So at least for the corporate-backed languages, looking from the business
perspective, the long-term viability of languages based on the historical
record of changes seems to favor Go. Google looks like it will not push
backwards incompatible changes into the language.
The other languages to consider, then: Javascript & Rust. I don't know
anything of substance about Rust. As for Javascript, I know teams that have
been successful precisely because they can have developers move from front
end to back-end and vice-versa. The Javascript community is driven to
continued massive improvement in order to improve the overall experience of
the web (driven by corporate interests, and robust competition from open
source).
Based on just business considerations, my take: Javascript and Go.
From a technical perspective, it depends on what you're trying to do.
Javascript / NodeJS developers rave about how everything is asynchronous.
Unfortunately, that very asynchronous nature means that you have to turn
your code inside out, waiting for events. My personal preference is to
favor linear thinking - our brains seem to be better at it. Which means
that Go's model of goroutines and channels works better for larger scales.
My experience also suggests that large code bases due much better with
static typing, not dynamic typing. Again, benefit to Go.
One final thought - conceptually, Go is a pretty straightforward language.
Which I makes it easier to pick up and read someone else's code. For
long-term support of a code-base, this is a huge win.
Overall, though, I'd suggest to both you and your manager, that in fact,
the future lies in being multi-lingual. You need Javascript for the front
end, but might have better success with something else on the back-end. For
mobile devices you may still need to use a "native" language such as Swift
or Objective-C. You almost certainly still need SQL. Right there, that's at
least four languages. The robust competition around cross platform
languages means that we're going to experience somewhere between 5-15 years
of these languages competing to win the space. Impossible to guess what
will "win" on the far side of that time.
Eric.
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscribe@googlegroups.com.
For more options, visit
https://groups.google.com/d/optout.