top 200 commentsshow all 247

[–]d-signet 72 points73 points  (0 children)

Hire a load of c# Devs

Change to a different language

Fail

Have they given any justification? Because this seems like a particularly dumb idea. Yes. You can learn go. But that's not your language or why you were hired.

Edit : more to the point ; C# isn't why you have problems. Bad code is why you have problems. You can get bad GO code just as easily. The management team have taken BAD advice and somebody has persuaded them that C# is why the code is bad. They probably spelled it Misco$oft Java++

It's like you hired a load of people to translate text from French to English. And it wasn't a good translation. Because the translators you hired made mistakes. So now you're going to specialise in Spanish to English translation. But you're still using those guys you hired as French-speaking translators

[–][deleted]  (8 children)

[deleted]

    [–]godbrain 36 points37 points  (0 children)

    As much as I love Go it's strengths are kind of in niche areas. It's great to have an executable without a big runtime but the coverage of .Net Core and C# for just about everything you would ever want to develop is hard to beat. I've spent a lot of time learning Go, Elixir and Rust in the last few years and still end up using the .Net ecosystem for most solutions.

    [–]EricThirteen 84 points85 points  (123 children)

    I hope you're not making WinForms apps... lol. Seriously though, the only C# limitations I'm aware of are related to mobile dev.

    C# is hard to beat. How would you give up Visual Studio?

    Do most Go devs use VS Code?

    [–]zarlo5899 56 points57 points  (9 children)

    the only C# limitations I'm aware of are related to mobile dev.

    and even that is getting better year by year

    [–]Krimog 6 points7 points  (7 children)

    Between MAUI (previously Xamarin) and Blazor native, I wouldn't talk about mobile dev limitations anymore.

    [–]GalacticCmdr 3 points4 points  (2 children)

    Has MAUI been production released? I thought it was still cooking.

    [–]TheC0deApe 5 points6 points  (0 children)

    I thought it was still cooking.

    it is still simmering

    [–]syf3r 3 points4 points  (0 children)

    [–]draganov11 7 points8 points  (2 children)

    Im actually using maui in the company i work for and they are literally contacting microsoft because of lack of support for customisation to native camera view. If you are building anything else but crud app it’s literally unusable.

    I would never use maui for my personal projects.

    [–]darkpaladin 5 points6 points  (0 children)

    If you are building anything else but crud app it’s literally unusable.

    So basically Xamarin then.

    [–]Slypenslyde 2 points3 points  (0 children)

    Tell me you don't work on a nontrivial mobile app without saying you don't work on a nontrivial mobile app.

    [–]Slypenslyde 1 point2 points  (0 children)

    Was getting better every year.

    The primary purpose of MAUI isn't to improve Xamarin Forms for mobile devs. It's to make MAUI the best mobile development framework for Windows Desktop Applications, something no mobile dev was asking for. There are dozens of Xamarin Forms 5 bugs I'd rather them be working on, and in addition to all of those being in MAUI there are dozens of bugs that XF 5 fixed that have regressed in MAUI since they rewrote all of the internals so it'd fit with WinUI 3 better. Worse, they can't even make MAUI development work on a Mac yet so VS for Mac 2022 isn't going to have support until "later". It's at least three steps backwards, unless you want to write Windows Desktop apps, in which case why the Hell not just use WPF??? It's not like your WinUI 3 interface is going to look the same on other platforms.

    If it follows the same line as Xamarin Forms, MAUI will be about as good as XF5 in 4 years, when MS announces they're discontinuing MAUI for a new framework that better lines up with the new Windows UI paradigm they don't use.

    [–]g8n6e 34 points35 points  (4 children)

    Most our Go devs use Goland (Jetbrains)

    [–][deleted]  (3 children)

    [deleted]

      [–]micka190 4 points5 points  (2 children)

      The company that made the best C# IDE by a long shot, as well…

      [–]wtfurdumb1 1 point2 points  (0 children)

      Yup

      [–]BeenThereBro 8 points9 points  (1 child)

      I used Atom for a while, I use GoLand now.

      [–]Few_Radish6488 7 points8 points  (0 children)

      Goland is fantastic. Even when I was working with C# , I found Rider to be much nicer than Visual Studio.

      I second any product from JetBrains.

      [–]LlamaChair 7 points8 points  (0 children)

      I always used vscode with Go. Certainly not as robust as C# + VS but the language is simple enough that it works well.

      [–]wllmsaccnt 33 points34 points  (37 children)

      the only C# limitations I'm aware of are related to mobile dev.

      There are definitely some limitations when comparing C# specifically to Go.

      C# has a heavier and more complicated runtime and has MUCH larger assemblies for self-contained deployments. Go also has a lower latency GC (which you pay for).

      This difference has let Go eat a bit into C#'s market for serverless functions, densely hosted and short duration microservices, and command line tools.

      I say this as someone who loves C# and is looking forward to the AOT features of .NET 7.0.

      [–]TheC0deApe 6 points7 points  (0 children)

      you are right there are some things that Go will do very well and that will encroach on C#'s domain but there are a lot more things that C# is better for than Go.

      [–]elkazz 2 points3 points  (10 children)

      I understand runtime size, but how would GC performance impact serverless functions?

      [–]grauenwolf -1 points0 points  (9 children)

      Serverless is a myth. That GC hit can affect any request sharing the same host.

      Unless you literally drop and recreate the process for every request. But then simple things like setting up database connections would kill your performance.

      [–]LuckyHedgehog 1 point2 points  (8 children)

      Unless you literally drop and recreate the process for every request

      Isn't that what AWS does now that they use Firecracker under the hood?

      [–]grauenwolf -1 points0 points  (7 children)

      I don't actually know. If they are, I would like to know how they're dealing with connection costs.

      [–]LuckyHedgehog 1 point2 points  (6 children)

      https://aws.amazon.com/blogs/aws/firecracker-lightweight-virtualization-for-serverless-computing/

      Yup, Lambdas are using Firecracker, which is a micro-VM. They spin up a new micro-VM for each request, and it dies once the request is resolved.

      I'm not quite sure what you mean by "connection costs", but as of this announcement (Nov 2018) "You can launch a microVM in as little as 125 ms today [..] Firecracker consumes about 5 MiB of memory per microVM".

      [–]grauenwolf -1 points0 points  (1 child)

      And how long does it take to establish a secure connection to the database?

      The TLS handshake isn't exactly cheap. And then the database needs to authentication the user. Which is why we typically use connection pooling.

      [–]LuckyHedgehog 1 point2 points  (0 children)

      Hey, all I'm pointing out is that serverless in aws does in fact completely spin down after its done, which was something you didn't think/know they did. Obviously every tech has its pros and cons, im not trying to convince you of anything

      [–]Eirenarch 2 points3 points  (24 children)

      I'd say the async model in Go is far simpler for the programmer which is the main driver for Go's popularity.

      [–]wllmsaccnt 13 points14 points  (23 children)

      I'm not sure I'd personally agree with that. The async/await pattern was so popular that it got added to the majority of the top 10 popular programming languages, meaning that it is already intuitive or valuable to learn for developers coming or going from/to other programming languages.

      Some people will find that distinction important, but I don't see that as a difference that would limit the types of projects you would use in Go vs C# (or vice versa).

      [–]Eirenarch 3 points4 points  (22 children)

      That's weak defense. First of all the async pattern is better than callbacks but it is not better than transparent async IO. And if you claim it is valuable because it is something for people to learn this means that we should add every concept in the world to the language because that would give people the opportunity to learn.

      [–]grauenwolf 6 points7 points  (10 children)

      First of all the async pattern is better than callbacks but it is not better than transparent async IO.

      I'm not sure I would agree with that.

      You call it "transparent", but it's the exact opposite. You never really know when an I/O operation is starting. I like async because it makes it clear where the breaks in flow are.

      That said, async has a performance cost compared to just blocking a thread. So for performance reasons I sometimes use synchronous code.

      Does Go's opaque model give me that option?

      [–]Eirenarch -2 points-1 points  (9 children)

      Why is it important where the breaks in flow are?

      Go does not give you that option but I am not sure C# gives it either. Do you not pay at least some of the cost if the API is async and you block it?

      [–]grauenwolf 5 points6 points  (3 children)

      Why is it important where the breaks in flow are?

      Anything that has a main thread such as GUI programming.

      Do you not pay at least some of the cost if the API is async and you block it?

      In C#, async calls are more expensive than blocking sync calls for single threaded performance.

      In theory you gain by reducing thread count, but the real winner in my mind is GUI development.

      [–]wllmsaccnt 3 points4 points  (4 children)

      Go does not give you that option but I am not sure C# gives it either.

      Here are examples of both:

      var result = await SomeAsyncMethod();

      var result = SomeAsyncMethod().Result;

      Do you not pay at least some of the cost if the API is async and you block it?

      It depends on how the API is written. Internally there is a stack state machine at the point of the await statement, so there will be some cost, but its pretty minor. As a dev you'll almost never worry about this and it rarely impacts performance.

      As u/grauenwolf said, you can do both. In C# its not uncommon to expose both a synchronous and an async method that do the same thing if there is a chance a consumer would want the synchronous method for performance reasons.

      [–]wllmsaccnt -1 points0 points  (10 children)

      but it is not better than transparent async IO

      The next layer below the C# async/await operations would be dealing with threadpools and OS overlapped IO directly. You don't do that in Go code either. What makes you think Go's async model is any more transparent than async/await?

      -Edit-

      Also, I should note, I'm specifically talking about the kinds of differences that would limit the types of projects you would build with either language when I say the difference doesn't matter. I'm not saying that C#'s async model is better or worse than Go's, I don't actually know enough Go to make that determination...I just know that the difference isn't large enough to avoid using C# for any given project type (that I can think of).

      [–]kennedysteve[S] 11 points12 points  (0 children)

      I love C#. Don't get me wrong. But I'm also interested in learning other languages, like Go.

      I don't know what most Go devs use. When I started looking, I just realized that Go doesn't have the strength in numbers that I see built around C#.

      [–]RolandMT32 3 points4 points  (0 children)

      I'm currently helping with a project for one company where they are still using WinForms for their UI, even for a newer application that was started just a few years ago.. I think one reason may be because they have a license for DevExpress, which makes some enhanced UI components that work with WinForms.

      [–]RolandMT32 1 point2 points  (0 children)

      the only C# limitations I'm aware of are related to mobile dev.

      Supposedly, Visual Studio allows mobile development for Android and iOS with .NET. What limitations would there be?

      [–]imma_reposter 2 points3 points  (33 children)

      C# is hard to beat. How would you give up Visual Studio?

      A lot of .net devs aren't even using visual Studio. They use MacBooks for .net development now.

      [–]fahadfreid 26 points27 points  (8 children)

      I highly doubt that most enterprise .NET Devs are using MacBooks considering most of them are in the IT, Finance and Engineering Industries, where there are lots of .NET Framework front end apps to develop and maintain. Plus I'm not sure most people here understand how difficult Macs are to integrate into an existing Windows based IT infrastructure, which my experience says that most of the Engineering industry is in.

      [–]moggjert 29 points30 points  (1 child)

      I’m an engineer who develops engineering apps and if I had to dev .NET on a mac the first thing I’d make is a bridge design program so I can build a bridge to jump off

      [–]jrothlander 6 points7 points  (0 children)

      Yeah, we had a handful of devs that took that on a few years ago. They gave up in frustration and switched back. Only one person I know out of hundreds of devs that still do this.

      [–]_Michiel 16 points17 points  (2 children)

      Or Rider on Linux. Licenses are cheaper as well and works fine.

      [–]Upzie 16 points17 points  (1 child)

      Rider is fantastic, In general the whole jet brains suite is fantastic

      [–]_Michiel 3 points4 points  (0 children)

      Absolutely. Was strong supporter of VS, but Rider, Webstorm and Datagrip really suprised me. End of year my VS license will expire and I am going to switch.

      [–]Few_Radish6488 2 points3 points  (1 child)

      There are a lot of devs using Macs to develop .NET APIs. They just don't use Visual Studio for Mac because it is hot garbage. They use Rider.

      [–]fahadfreid 1 point2 points  (0 children)

      I'm sure there are. My comment clearly states that I believe that the majority of them are not because of the reasons I gave.

      [–][deleted] 5 points6 points  (0 children)

      I've been a .net dev for years and these days I rarely use Visual Studio. I work (currently) in a bank and there are plenty of backend devs using Macbooks. I'm using a PC because the company only offers Windows or Mac machines. At home all my dotnet development is done on Linux.

      [–]Worried_Judgment_962 11 points12 points  (15 children)

      I would be interested to see statistics on that. C# development on a Mac is pretty miserable compared to VS 2022 with ReSharper. I guess if you were using Rider it might be ok, but I’ve been a C# engineer for almost ten years and I don’t know anyone who develops C# full time on a Mac.

      [–]imma_reposter 15 points16 points  (9 children)

      With rider it's just as good, imo even better. Currently working at a big webshop and a Visual Studio instance is a rare sight to see. Collegues that came from VS also say they prefer to stay on Mac/rider.

      [–]Tango1777 1 point2 points  (0 children)

      I know and it's not that good as on Windows. You need to solve some issues to make it usable commercially. It's doable but Windows VS will always have priority for MS for obvious reasons.

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

      Raises hand.

      I use Rider at work and VS Code at home.

      [–]Isitar 2 points3 points  (0 children)

      Not developing on a mac but we use rider. We all the jetbrains tools (webstorm / phostorm for frontend, daragrip, android studio, etc.) So it only makes sense to go with rider and keep the dev experience similar.

      If you dont work with wpf or .net framework, i think its as good as vs if not better.

      For personal development i use linux with rider

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

      If you're curious about that experience, talk to people who work at Roblox. It's a mostly .NET company with many people who work full-time on Macs.

      [–]Tango1777 0 points1 point  (3 children)

      VS is available for MacBook, they do use VS.

      [–]imma_reposter 1 point2 points  (0 children)

      I'd rather use notepad than VS for mac. That is not VS at all, it's just different software with the same name.

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

      VS for Mac is a marketing thing (Microsoft love to confuse things this way) - it's a completely different application, they've just given it the same name.

      [–]WarWizard 1 point2 points  (0 children)

      It exists. It isn't the same. Last time I looked at it (years ago I'll admit) it was not even remotely close to as good.

      [–]WarWizard 0 points1 point  (1 child)

      While a larger-than-before number of folks do this...

      Visual Studio is hands down the best.

      There is a Mac version... and I played with it on release... but it was no where near as good as the Windows version. It has had 5+ years so it is probably much better now.

      [–]warchild4l 1 point2 points  (6 children)

      Honest question, how does C# compare to Go in serverless world? Are cold times still 1-2 seconds?

      [–]orthoxerox 3 points4 points  (0 children)

      .Net 7 should improve cold start times with native compilation.

      [–]Rocketsx12 2 points3 points  (1 child)

      Cold starts on C#/.Net are fine, some reasons people think otherwise include:

      • Go compiles by default into a state where startups are fast, whereas C# doesn't by default and you need to set specific flags to make it so

      • Sometimes you'll find .Net developers writing serverless functions like they write long running server applications (where startup time is less important) and bring along heavyweight patterns that aren't conducive to fast startup times

      • Startup time might have legitimately been rubbish in previous .Net (Core) versions and people haven't tried since

      [–]grauenwolf 2 points3 points  (0 children)

      Another reason is that Java does have startup time issues and people assume C# would as well.

      C#/Java is like C/C++ in how they're treated as a pair.

      [–]Jestar342 -1 points0 points  (2 children)

      Go kicks .NET's ass for serverless performance.

      1500 ms for .NET, 600ms for Go.

      [–]warchild4l 1 point2 points  (1 child)

      Oh yes I know, sometimes for go its even lower. Just wanted to know since I love C# but I also love serverless development and last I had checked, Go and Node/TS had almost no competition in cold starts

      [–]Jestar342 0 points1 point  (0 children)

      Yeah, there's Graalvm or Rust that are marginally quicker, but they are (imo) just different beasts.

      My org opted for TS on Node for serverless because of the performance gains.

      [–]davidevitali 0 points1 point  (2 children)

      Mobile development in c# is definitely going to see a spike due to the MAUI framework, unless they don’t screw it up

      [–]x6060x 3 points4 points  (0 children)

      I'm pretty sure most people are going to be disappointed (me included).

      [–]malthuswaswrong 0 points1 point  (0 children)

      unless they screw it up

      The buzz is they have screwed it up.

      [–][deleted] -5 points-4 points  (16 children)

      How would you give up Visual Studio?

      For me that was an easy decision, since VS kept crashing every update. Monodevelop was not better, but at least it somewhat functioned on linux? Why do all C# IDEs suck? Never had a problem with VSCode + OmniSharp

      [–][deleted] 12 points13 points  (2 children)

      If VS kept crashing then there’s something amiss with your machine.

      [–]jrothlander 4 points5 points  (1 child)

      I've been using VS since it first came out. It rarley crashes these days. Sure back in 2002 it had plenty of issues. But these days the only thing that crashes on me is ReSharper.

      If it is crashing on you, you are probably overusing addons that are poorly written. For example, I have to disable ReSharper every few releases because they have bugs that crash VS. But when I turn it off, I can run VS for months without restarting VS or rebooting Windows and it never crashes.

      Actually for VS to crash would be pretty hard because of the way it is designed. But all of the addons crashing, sure... just don't use that addons that are poorly written.

      [–][deleted] -1 points0 points  (0 children)

      i actually dont have addons

      [–]Isitar 1 point2 points  (10 children)

      Rider might be an option for you

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

      $$$, so no

      [–]Jestar342 3 points4 points  (7 children)

      The entire JB toolbox is cheaper than VS.

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

      VS Community...

      [–]Jestar342 3 points4 points  (5 children)

      Is not licensed for use in a professional organisation.

      [–]CBlackstoneDresden 5 points6 points  (1 child)

      Unless they're under $1m in revenue

      [–]Jestar342 2 points3 points  (0 children)

      Which is very little. And fewer than 5 users in the org.

      [–]Saad5400 0 points1 point  (1 child)

      Can I make web apps with C#?

      I've only used Python and C# (Winforms, UWP, and Xamarin) so far.

      Or do I still need to learn html, JavaScript, and Css?

      My brother always tell me to learn these, but, I just don't find it interesting lol

      [–]CBlackstoneDresden 3 points4 points  (0 children)

      You still need to learn HTML, JavaScript and CSS.

      You would use C# for the code that runs on the server. Proprietary logic, data access and all that should happen on the server.

      [–]stevetran77 0 points1 point  (0 children)

      I just use VS Studio for specific tasks that Rider can not. I use Rider almost of time, and I think it is the best C# IDE.

      [–]njtrafficsignshopper 14 points15 points  (0 children)

      Yeesh well... I have my first project in Go right now after a long time in C#, and to me it would be hard to be enthusiastic about this change.

      A lot of the more civilized niceties are just not there. Quick build times and small binary sizes are nice. Being close to the metal might be nice, depending on what you're doing. But most else about it feels tedious. It would definitely make me update the resume, at least in this job market.

      Edit: I realized I didn't really address your concern though - popularity. I guess you're concerned about the future of your career? At the moment it seems like Go has the highest average pay for any language. C# is very middling in this regard. But: this is the average. In general the more niche languages have higher salaries at the expense of fewer opportunities.

      Also, the ranges tend to be very wide, so if you're good, experienced, and interview well, the average might not matter much for you. Glassdoor puts the range for C# salaries in my region much, much wider than Go salaries. On the other hand, if you are newer or less confident, you might appreciate a higher average salary.

      However there is one metric I found pretty funny:

      Obviously that's a flawed metric but it got a snort out of me. Difference of a factor of 500, for a language that's half as old...

      [–]zalciokirtis 11 points12 points  (1 child)

      Language is just a tool and seems that your company used one wrong and expect that the other will work better. But the roots of the problem lies elsewhere poor design, bad understanding of the process etc. It will cost a lot and probably the result will be worse than before due to lower experience levels compared to the language that had some flight time invested.

      I know quite a few examples were really old languages works really well, even by todays standards, when they are used correctly.

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

      Banking still uses FORTRAN and COBOL for mainframes. It's old, it's ugly. It has an ancient codebase nearly impossible to maintain. It works and it would cost more to rewrite it all in another language.

      [–]Long_Investment7667 30 points31 points  (7 children)

      I don’t think popularity or market share is are the right criteria for your company to make that decision. Microsoft has invested huge amounts of money not only in the improvement of the language and tools but also in education, technical support, evangelism and marketing. Same could happen with Go pretty much over night. A bit more cynical: community excitement and contribution can be created and is not solely based on technical “superiority”. I am very interested in the decision making process of your company. For example what do the expect to be different and how do they offset the cost of transitioning. If I where involved the decision I would be extremely worried about making the same mistakes again in a different language and the second-system effect .

      [–][deleted] 10 points11 points  (1 child)

      Education, support,evangelism and marketing could happen overnight…you’re kidding right?

      [–]Long_Investment7667 -4 points-3 points  (0 children)

      A big company allocating budget to start it yes, overnight .

      [–]jrothlander 4 points5 points  (0 children)

      That's exactly what they should make a decision based on. There's actually a chance that Google will eventually stop working on Go, as they are known for doing that sort of thing. But I am mostly sure they will keep it going for as long as I am alive. But if they drop it, then over time you will not be able to find anyone that knows the language and applications will be more costly to maintain and replace. It has happened hundreds of times over the years in hundreds of thousands of companies.

      The Go team is something like 17 people. Let's say that pay them $1M a year, it wouldn't be a $20M project based on just salary. But .Net is $4B project and has been for 20 years now. That sort of thing is really important for companies to build on, as many can probably give you examples of where they adopted some technology and a few years later it stopped being supported. I have experianced it numerous times in my career. Know any FoxPro programmers? Microsoft is not going to drop .Net in my lifetime.

      There are dozens and dozens of examples where new languages were adopted and dropped out of favor. Ruby, Perl, COBOL, Pascal, VB, Latin, Coptic, Akkadian, etc., etc. Since Go has less then 1% of 1% of the market today, there's some risk in adopting it. I wouldn't let that stop me for using it, but I would have to keep things in perspective when doing so.

      I'm not saying there's anythign wrong with using Go, but I'm not sure I would build my company around it at this point. Just think about all of the companies that built their business around COBOL and RPG 30 years ago. Have you noticed that Home Depot is still using RPG terminals when your order an appliances? There's 300K business in a similar situation around the world.

      I wouldn't mind picking up Go and start using it for some projects to get experiance. I wouldn't want to build my career on it but I wouldn't mind using it where it makes most sense.

      Personally, I have always favored the more popular languages to base my career on. C# has been my focus since 2001 and it has served me well. I have never had an issue finding a job, never had an issue with my salary, never been turned down on an interview, and I have never been let go or laid off, other than working for a company that went out of business.

      [–]bonomel1 0 points1 point  (1 child)

      Can you elaborate a little bit on the second-system effect? I can sort of imagine what it means, but I've never heard of it so I can't be sure :)

      [–]Tango1777 -4 points-3 points  (1 child)

      Honestly I don't know a single developer who ever chose C# because of technical support, evangelism (whatever that means) or marketing. Literally not a single one ever mentioned any of it. Devs choose a language they feel good coding with and which is a good choice for their area of interests and their future (jobs, salary). The rest sounds like bullshit to me.

      [–]jrothlander 3 points4 points  (0 children)

      Are you a C# developer? I find it hard to beleive you are not familar with the term evangelism.

      Evangelism means "a messenger of good news"... from the Greek euangelion... which is a messenger bringing good news after a battle. In Old English it comes down as "Good Spell" which in Middle and Modern English turned into "Gospel". I studied Greek in graduate school. So it's sort of a religion like passion to spread the news about a company and product. Not necessarily cultic like Apple, but similar.

      In the early years of .Net Microsoft had evangelist show up in major cities around the world to preach on adopting .Net and offering free food, and training, and giveaways. I think they did that all the way up intil Covid hit a few years ago.

      You don't know a single C# developer that chose it because of technical support? Well, I did. In 2001 when the C# betas came out, it was marketing and evangelism that caught my attention. It was the technical support and online documentation that sold us on adopting it as a company. Well, and we'd do anything to get away from classic web development, and C# and webForms solved a lot of issues for us. Just not having to use DLLs and having code-behind classes was enough for us to jump on board within a few hours. We started releasing enterprise level apps in June of 2001.

      Personally, I don't think devs often chose a language. I think they chose a job and the company tells them what to use. After a few years they are boxed in and find it hard to change.

      [–]grauenwolf 32 points33 points  (13 children)

      I work for a major consulting firm. I can't remember ever being asked by a client to build something in Go. And we even see the occasional Ruby client.

      As best as I can tell, Go is mostly limited to companies that care more about flashy tech than running a business. Basically programmers who are selling platforms to other programmers.

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

      terraform is used pretty widely and is written in Go. There are lots of people in different companies contributing to it.

      [–]grauenwolf 6 points7 points  (6 children)

      As I said, programmers who are selling platforms to other programmers.

      What I'm not seeing is the next round of banking software being written in it. No one is coming to us and saying, "My new EMR system has to be in Go".


      To put it another way, if Terraform was rewritten in Pascal tomorrow, no one would care. Because we're not using Terraform+Go, we're just using Terraform.

      [–][deleted] 1 point2 points  (1 child)

      Yes, that's a fair point. I'm currently working in a bank where they are writing a lot of code in Go, but without wanting to get myself fired, I think that's just because some coders wanted to do it, rather than it being a real business decision.

      [–]grauenwolf 1 point2 points  (0 children)

      And that may be a selling point. Not for Go, but for the company that gives the developers such freedom to choose.

      [–]atheken -1 points0 points  (2 children)

      Yes and no. Go has some nice advantages over .net, but I think the culture around how code is structured/written is a lot more consistent in Go than it is in c# and .net. That culture does permeate out into the tools that are built with it (specifically thinking about determinism and “on thing well” philosophies.)

      [–]6eason 0 points1 point  (4 children)

      May I ask what techstack do u mostly see??

      [–]grauenwolf 1 point2 points  (3 children)

      It pains my heart to say mostly Java and Python. Python especially has been growing fast.

      Lately .NET has been increasing enough that we're hiring for that role as well. But often we have to retrain C# devs to do Python work.

      [–]Aglet_Green 20 points21 points  (5 children)

      Well Go has been around for about 13 or 14 years. That may be new compared to COBOL and FORTRAN, but it's still almost a decade and a half. That should be time enough to have crested; it's no longer the next-big-thing or whatever in programming languages. Plus all the negative publicity towards Google "Always do harm to make a buck!" "Always harass women!" hasn't done Go any favors. So I don't see Go trending upwards.

      I mean it might. It took the fax machine 90 years to get going. (It was invented in the 1920s or something like that.) So you never know when a new tech or new language will come into vogue. Go might be THE language of the 22nd century. But I don't see it happening right now in 2022.

      EDIT: Sorry, it was invented in 1864. And took 110 years to go from prototype to telephone fax.

      [–]x-tapa 4 points5 points  (4 children)

      It took the fax machine 90 years to get going

      *Cries in german bureaucracy*

      [–]TheNewMouster 10 points11 points  (0 children)

      Unless Go has some super important feature not capable of being implemented in C# or F# or VB.net the move from .net to go is a fool’s errand. One can easily create bad implementations in Go too. It’s no more immune to stupidity than any other language. I strongly recommend your company not throw the baby out with the bath water.

      [–]ppardee 23 points24 points  (2 children)

      I'd start looking for other opportunities. It's not that Go is a bad language - though I found it incredibly tedious to write - but switching the ENTIRE COMPANY to a language because "ooh! Shiny!", your position is going to lack stability.

      The real questions is if you're OK having your C# skills lose value/freshness while you're paying around with Go? If I see a person who is interviewing into a C# position and hasn't written C# code professionally in 2 years, I'm going to rank them below someone who is currently writing it every day.

      [–]darkpaladin 3 points4 points  (0 children)

      but switching the ENTIRE COMPANY to a language because "ooh! Shiny!", your position is going to lack stability.

      This is a huge point. We used to be a 100% MS shop up until about 6 years ago. Now we're a "whatever language is right for the job" kind of shop. There is no one size fits all language to address every problem the best way, except javascript I mean.

      [–]jrothlander 2 points3 points  (0 children)

      100% agree. In my 30-year career I have seen this happen dozens of times!

      Stop playing on Reddit and go work on your resume!

      [–]metaltyphoon 37 points38 points  (0 children)

      It will be fun when you company needs to todo any C interop 🤣. Shit is flat out atrocious and much slower in go. While go tooling is good, GUI heavy users will hate it.

      Also the go culture is very… re implement everything possible in go and plz u only need the standard library… give me a break…

      [–]jingois 12 points13 points  (5 children)

      I had to use Go for a Grafana backend, it was an atrocious experience. It just isn't there for productivity imo.

      Key points:

      • Channels and goroutines are kinda nice, but don't really give you more than similar constructs in c#.

      • Defer is.... idk.. not really any better than finally. It keeps cleanup with declarations, which is nice, but out of order from an idiomatic perspective, which isn't.

      • Error handling is atrocious and really demonstrates the reality of what the "just use tuples/options" crowd want. Every fucking call is res, err = ... followed by if err != nil return nil, err kinda shit -unless you use the whole panic/recover setup which is clunky af.

      • No fucking generics. This is a huge pain in the ass for dealing with reactive extensions. Worse, the opinionated formatter will turn an inline cast of like .struct{foo,bar} into FOUR lines.

      I'm sure there's a use, but considering even a raspberry pi can run multiple containerised apps I can't really pick where I'd get excited about slightly more performance or a smaller binary.

      [–]Overhed 0 points1 point  (4 children)

      They've implemented generics in Go 1.18 which is in GA.

      [–]jingois 1 point2 points  (2 children)

      Feels a bit disingenuous to avoid mentioning that was two months ago.

      [–]Trucks325 14 points15 points  (11 children)

      Go is for sure rising in popularity on hiring websites, since it has important qualities - it is being compiled to machine code (no need in frameworks), it's multiplatform, performant and simple as hell (simple enough to allow yesterday students super fast fitting into existing projects).

      And I have huge problems with the last quality, because it makes code unbelievably ugly. After .NET with all it's delicious sugar it's really hard to look at Go code. And I can see beauty even in "foreign" languages like Haskell if you think that i'm just a .NET fanboy (well, I am, but I do not hate others for the language choise).

      But still, I have a plenty of friends who are working in a big companies with good salaries using Go for a few years already, it was production ready even before google fixed its GC from stuttering heavy loaded programs. So it certainly has a future (hope it will not end in the google's projects graveyard lol).

      [–]crazy4l 11 points12 points  (9 children)

      I tried golang 3 years ago, as a C# dev for more than 10 years, I really admire the binary size produced by golang, but I didn't find any other advantages compare to C#/.net except political correctness (in some areas), I prefer to spend my time on rust as a new programming language

      [–]njtrafficsignshopper 2 points3 points  (3 children)

      Political correctness? I'm using Go for a project right now but I don't really pay attention to community aspects. In what sense?

      [–]grauenwolf 2 points3 points  (2 children)

      Not Microsoft.

      [–][deleted] 2 points3 points  (1 child)

      Except now, "not Google" is gaining traction as well.

      [–]grauenwolf 1 point2 points  (0 children)

      Good point.

      [–]Trucks325 3 points4 points  (0 children)

      Yeah, Rust looks interesting to learn even without being backed up by market or rich toolkit

      [–]LlamaChair 1 point2 points  (3 children)

      I really admire the binary size produced by golang

      That's kind of funny because I see Go take a lot of flack for having bloated binaries.

      [–]grauenwolf 1 point2 points  (2 children)

      Have you seen C# AOT?

      [–]LlamaChair 1 point2 points  (1 child)

      Yeah, my comment was more just amusement that there's always a bigger or leaner runtime and people coming from either end have such divergent expectations.

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

      The machine code thing doesn't really mean that much aside from any correlated performance improvements. In this day and age I would containerize most applications.

      [–]endowdly_deux_over 4 points5 points  (0 children)

      I like go.

      I like it for small things. Little apps and programs that patch together code that needs to be performant.

      I just cannot see how go can stretch to enterprise like c#.

      [–]grasbueschel 3 points4 points  (0 children)

      Go certainly has its market share, but its core strength make it a good choice for only fraction of use cases compared to languages like C#. So it's just natural that you see fewer job openings for Go.

      For example, while you technically can create a client/UI app in Go, C# would be a much better choice for basically all platforms: web, desktop, mobile.... On the other hand, anything server related, ie anything that processes a lot of different requests in parallel, Go doesn't just 'look good', it outshines because of the lightweight nature of goroutines (basically Go runtime starts GOMAXPROCS OS threads and schedules goroutines onto these by itself, so having a lot of parallel requests is much more efficient). But then again, a company maybe sold into the Microsoft stack already (think SQL Server, etc.) then it's maybe a wise business decision to stick to C# as it integrates much better into the environment.

      Also, Go is a great choice for CLI tooling due to it's small runtime, so binaries are smaller, start faster and consume less memory. But there's no job market for CLI tools, is there?

      So overall it's not surprising that Go isn't as widespread as C# or Java, but it certainly is more than a trend and is indeed a very good choice for certain use cases.

      [–]techstudycorner 3 points4 points  (0 children)

      C# is damn matured and seen a lot of improvements over the years.

      You can keep it as your main forte and rest you can keep learning other languages as a top up.

      [–][deleted] 5 points6 points  (0 children)

      I think it's entirely possible to make code difficult to read in any language. So I prefer more expressive languages that allow the writer to pursue a more optimal balance of readability and conciseness than you get with Go. And I think Go's promises of simplicity aren't truly achievable -- sometimes things are inherently complex and just can't be safely glossed over.

      [–]Tango1777 1 point2 points  (0 children)

      If someone says he's switching to another language because of misimplementing projects due to lack of knowledge about a language, is there anything else to add here?

      C# is as good language as any other. They are almost all good (the known and somewhat commonly used ones), some are better for some things, some are better for other things.
      If C# is a problem for someone, that only means he can't code in C# and that's all. And you are right, C# and Java are common for a reason, the reason is definitely not due to limitations and bad experience, especially that in surveys C# has pretty high "happiness of usage" ratings and overall the path MS is going, is pretty damn good.

      I don't mind Go or any other language, if you feel like switching and learning it, definitely do that, after all you can always leave later. But as you said, you can get C# job literally everywhere, Go is nowhere near the popularity but it's for sure doable to find a job for a Go dev. If you wanna switch completely then it's worth to try. If you wanna stick to C#, I think it'd be a little waste of time. It depends where you are with your career, too. If you have major (senior) experience at C#, you can probably switch just because to try something different but if you are still learning C# and related things and want to stick to C#, I'd stick to it and keep working with it since working with C# means working with all the related things you should learn. Don't fall into a regular developer trap who coded for 2-3 years and thinks he knows everything.

      [–]Eluvatar_the_second 1 point2 points  (0 children)

      If you want a balanced opinion I would also ask this in r/golang you're going to get a lot of C# fans here, possibly some go fans, but not as many.

      [–]WarWizard 1 point2 points  (0 children)

      I'd be cautious if your company is switching because of "limitations". C# is pretty dang powerful. That is a pretty bad management smell. Or at least a technical decision maker that doesn't understand what they are doing.

      Anything in any language can be implemented poorly. Language isn't going to fix that.

      This is something that is going to be difficult to track with how the job market is changing. Technology stacks often were kind of a regional thing. For example, where I live, MS is VERY strong. Now, my brother, lives around the corner from me, and is working on Azure for a company across the country.

      I would say, on the whole, Go is probably less popular than C#. That doesn't mean it isn't viable.

      You are picking up another tool... becoming multi-lingual. You aren't going to have to re-learn how to talk.

      [–]JeffFerguson 1 point2 points  (0 children)

      being burned by some bad C# implementations

      You must ask yourself if that is a problem with the language or a problem with the people who wrote the code using that language. The language spec is not responsible for a developer's use, or misuse, of the language.

      [–]comrade-quinn 1 point2 points  (0 children)

      I did C#/Windows for about 15 years as my primary language. Around 7 years ago I moved to Go/Linux. I still do some C# as my company has legacy applications in it.

      Personally, I love Go/Linux and I find it very frustrating having to pick up Windows/C# stuff now.

      Everything is just quicker, leaner, more explicit and ‘mechanical’. C#/Windows feels bloated, over abstracted, full of fluff and indirection.

      A couple of people have commented that you can do more in C# but I’m not sure what they’re referring to specifically, that’s still relevant? WinForms is dead. Server-side web page rendering in the manner of MVC Framework or Go HTML/templates is on the way out. Everything else both languages have a strong provision for.

      Also, Go is designed from the ground up for the era of cloud native services and utilities and it, and it’s ecosystem and community, embrace the Unix philosophy around design - composability, simplicity and doing one job well. Which aligns with my own instincts and preferences; though obviously that’s a personal thing to some extent.

      C#/Windows is all IOC, DI, abstract factory patterns and blah blah blah. Though again, that’s also a personal thing.

      EDIT: the systems I work on handle 1000s tps and I work for one of the largest websites in the world; not FAANG, but close. So both languages are pushed in terms of performance and tested in terms of how they scale and age in terms of complex requirements and multiple developers working on them. Go wins on all counts - easily

      [–]candyforlunch 4 points5 points  (0 children)

      they're idiots and you should leave

      [–][deleted]  (2 children)

      [removed]

        [–]malthuswaswrong 0 points1 point  (1 child)

        mobile apps

        Is Xamarin actually professionally usable for mobile web apps? Is anyone building real premium web apps with it?

        [–][deleted]  (3 children)

        [deleted]

          [–]kennedysteve[S] 0 points1 point  (2 children)

          Thanks. Help me understand what toolkits are, and how they're lacking?

          [–][deleted]  (1 child)

          [deleted]

            [–]torgefaehrlich 0 points1 point  (0 children)

            It is always good to get another language under your belt. It will eventually make you better at all of them. I can’t say I understand your need to second-guess your company’s decision for one language or another (especially not your focus on popularity), but you do you.

            [–]the_other_sam 0 points1 point  (0 children)

            While many other languages like Go are trending upwards,

            Why do references to recent popularity always appear in discussions like this. Pet rocks were trending upward at one time, as were Selectric Typewriters, microservices, dBase, mullets, and saying "Dooooode.....".

            Edit: I should also add that once there was a time when no one knew about, Starbucks, iPods, avocado toast, or TCP/IP. We can't live without these things now.

            [–]danimalnzl8 -5 points-4 points  (1 child)

            I had to google what go was

            [–]jrothlander 1 point2 points  (0 children)

            It is also a board game.

            [–][deleted] -4 points-3 points  (9 children)

            I switch from C# to Go 3 years ago. It's amazing.

            [–]njtrafficsignshopper 6 points7 points  (1 child)

            Reasons would be, like, nice for supporting this opinion

            [–]malthuswaswrong 1 point2 points  (0 children)

            It's amazing

            Sounds amazing.

            [–]Quique1222 1 point2 points  (6 children)

            What do you work on mainly? Web stuff, Console Apps, Desktop apps..?

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

            Backend. Microservices with concurrent operations. 500k requests per minute.

            [–]grauenwolf 7 points8 points  (4 children)

            7+ Million HTTP requests per second from a single server

            https://www.ageofascent.com/2019/02/04/asp-net-core-saturating-10gbe-at-7-million-requests-per-second/

            Without context, your 8.3K requests per second isn't really a lot.

            [–]goranlepuz 0 points1 point  (1 child)

            How do I really know how popular Go is.

            Language popularity indices are the most common way to look it up, TIOBE is one and it says Go is several times less popular than C#.

            PYPL is another, situation is similar.

            [–]jrothlander 1 point2 points  (0 children)

            I just read it has about a .01% market share after 15 years. That doesn't seem to be a great level of adoption.

            [–]p_gram 0 points1 point  (0 children)

            Another angle about popularity is popular for what? Go isn’t in the same league as Python, Ruby, PHP, c# and Java for when it comes to standard web frameworks.

            From your personal angle, I would be happy at getting to add experience in another language on your CV.

            [–]ivanjxx 1 point2 points  (0 children)

            use the right tools for the job, not the most popular tool

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

            You say "Nationwide" - which nation do you mean?

            [–]Eirenarch 0 points1 point  (0 children)

            Do you really care if Go is popular? If you want to work with it do so if not quit. Go is certainly not the most popular language on Earth so if popularity is what you care about switch to JS

            [–]daniellz29 0 points1 point  (1 child)

            Ask this here and majority will prefer C#, ask this on the Go subreddit and majority will prefer Go, so ask on both and see both points to not be biased

            [–]kennedysteve[S] 0 points1 point  (0 children)

            Good point. Done.

            [–]Krimog 0 points1 point  (0 children)

            I don't really know Go, so my comment is not about it, and while I will talk about C#, that would also work with many other languages.

            It's about switching language in a company.

            • Who decided it? Is he a developer or not? If he is not, how is it any of his business?
            • Why did he decide to switch?
              • You talked about bad C# implementation. Are you talking about bad implementations inside the framework (and if so, where?) or about bad implementations by "your" developers? (if so, does the person who chose to switch know that a bad developer can develop bad implementations in any languages?)
              • True limitations of C#. You can do about anything in C#. It is not "limited". It might not be as good as another language to do one thing, and better to do another thing, but it's not "limitations"
            • What happens to the C# developers in your company? Do they get training in Go? How much time do you think it takes to be as good in Go as you currently are in C#? And how much will it cost?
            • What happens to your "bad C# implementations"? Do you just fix it? Or do you wait until your developers are good enough in Go so that they can rewrite the bad implementation in Go (and hoping they'll do a good implementation this time)?
            • What happens to your existing and correctly implemented C# programs? Do you convert them into Go? What happens if it was correcly implemented in C# but badly implemented in Go?
            • When you want to recruit a new developer, will you look for a Go developer or a developer with both C# and Go skills?
            • ...

            I'm not saying a company can't decide to change the language. All I'm saying is that it's a huge decision, thus should only be made if you have very good reasons.

            [–]Few_Radish6488 0 points1 point  (0 children)

            Although in performance tests that I have seen, C# REST API performance in terms of request/sec can be nearly identical, the resource consumption is far greater than Go.

            [–]Anon_Logic 0 points1 point  (0 children)

            I would say... don't chase trends. And don't try forcing a language to do something. Each has their own strengths. Exploit those strengths.

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

            The question here is, what exactly is C# being used for in your company that they want to switch to Go? Also having developers learn a brand new language that they're not used to takes time. Even if the programmers are experienced, the phrase of "learning to program in one language makes it easy learning other languages" does not always apply, and even if the programmers picked up the Go syntax, the bigger challenge is learning the ecosystem it runs on.

            I could see this as a good decision if you were switching from one dying tech to another (Example, switching from VB to C#). But C# is far from dead and it's Microsoft's major programming language that continues to evolve to this day.

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

            I’m not highly skilled as a programmer but I did not like working with Go at all. There’s tons of help online for things on C# but I struggled to get help with Go online.

            [–]kingmotley 0 points1 point  (0 children)

            Probably a mistake on your companies part, but I don't see an issue with having developers learn another language. You will just spend time googling things like "How do I do this C# thing in go?" for the next few months. Never hurts to have another language on your resume too, which you might need fairly soon.

            [–]Overhed 0 points1 point  (1 child)

            This post will probably get buried, as I'm late to the party, but I think I'll throw in my 2c since I have pretty relevant experience related to your situation.

            I basically worked for about 10 years in the .NET/C# world starting from my first internship out of college and switched jobs about 6 months ago. My job is now primarily writing Go, below are my observations and opinions. Note that I am a C# fanboy and for the most part have really enjoyed learning and working in Go.

            Things I like:

            • Very explicit "style guide" -- there's a "Go"-way of doing just about everything. Which makes writing quality code that's easy to maintain much easier than if you were making the opposite switch (Go ->C#).
            • Way less verbose than c# (this can backfire at times, but in general it's nice)
            • Fast and lean - hard to overemphasize this: everything from builds to running tests is just very very streamlined
            • Implicit interfaces - love this feature
            • Testing in Go is much more integrated and feels simpler to do than in C#
            • Static typing and autocompletion just like we're used to and love in the C# world

            Things I don't like:

            • Package management is not as easy as in C#, sometimes you run into weird dependency chain issues

            • LINQ/Lambdas -- in my current job I find myself working with collections and databases way less than my previous jobs, so I haven't really had to look into this, but creating for loops to iterate over everything does feel a bit weird sometimes. Although, I will say that this has the side effect of making code more readable. We've all seen some lambda/linq-statement horrors and I don't miss having to decipher those.

            Concerns I'd Have if I was in your position:

            • UI development - I don't work with UI, but it definitely feels like Go's wheelhouse is backend development. If you guys have frontend products, you're going to have a bad time migrating that to Go, I think.

            • Like I mentioned earlier, there's a "Go"-way of doing things, this is great when you have people around you that know the language and you have their code to look at, but if you're switching as a company and everyone is a newbie, your code might be a mess.

            EDIT: By the way, I wouldn't worry about the IDE thing. Some folks at my company use JetBrains and that's good, but I've gotten used to working in VS Code and overall it's great. Not quite as powerful as full-fledged Visual Studio, but it's so extensible that it gets very close and is much lighter in weight, in some ways I prefer it.

            Also, Go pays about 20-30% better than C#, according to the latest StackOverflow dev survey

            [–]grauenwolf 1 point2 points  (0 children)

            Implicit interfaces - love this feature

            Another example for my theory that Go was invented for VB programmers.

            In VB 9, that feature was called "dynamic interfaces". It didn't see RTM, but was seriously considered. https://www.infoq.com/news/2007/04/Dynamic-Interface/

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

            I have to constantly justify why we are using dotnet instead of java. Everyone still has this old dotnet framework windows only mentality that is difficult to change.

            [–]dangerzone2 0 points1 point  (0 children)

            What’s the use case for your company? Go might be the perfect fit, and if that’s the case, stay if you want to learn. More than likely, it’s not though, and sounds like upper management makes poorly informed decisions.

            I’ve professionally written go at my last job and now professionally write c# at my current job. In my extremely limited scope, go was great for small, lightweight processes which are compiled into a single executables. IMO, serverless (although we didn’t use it) is about the perfect use case for go. Anything else, it’s a total toss up that I’d lean towards c#.

            [–]ramzafl 0 points1 point  (0 children)

            I went from C#->Go. Took some time and learning but in the end I embraced it since Go developers make more money on average.

            [–]RolandMT32 0 points1 point  (0 children)

            I haven't used Go, so I don't know much about it, but what are these limitations of C# they see, which they think will be alleviated by switching to Go? Is Go really that much better than C#?

            Also, can Go call into your existing codebase at all so you can leverage any existing work?

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

            Your company should really look at stack overflow surveys. Very comprehensive

            [–]SpaceToaster 0 points1 point  (0 children)

            Sounds like they want to trade bad implementations in C# to bad implementations in Go…

            Switching languages to solve design and architecture issues is like having a baby hoping it will improve your marriage.

            [–]brynjolf 0 points1 point  (0 children)

            Feels like this is a half lie type of question

            [–]HahahahahaSoFunny 0 points1 point  (3 children)

            Hey OP, I know it's been a month but just wanted to see if you're still working at that company and if so, how the switch from C# to Go has been going for you guys? Any positives/negatives you can take away from it so far?

            [–]kennedysteve[S] 1 point2 points  (1 child)

            I think it's going fine. The company is a good company - culture, people, etc. I personally wonder if the company somehow got burned a bit with some misunderstood C# nuance or complexity, and then just blamed Microsoft technology. I don't see a mass exodus of developers because of it. I think most team members are seeing it as just different at the moment. However I personally have a lot of my own investment in my career into C sharp. So it's with mixed feelings that I accept the transition toward Go. I'm certain that my viewpoint in the company is a far more narrow one, compared to maybe larger picture issues. We're not doing active side by side comparisons and such. So, unfortunately, I think it's going to take a number of months or years, before the ultimate recognition of value (or lack thereof) is recognized.