Rob,Ayende,.NET

In regard to: https://ayende.com/blog/174433/re-why-you-cant-be-a-good-net-developer which is in regard to http://codeofrob.com/entries/why-you-cant-be-a-good-.net-developer.html

Ayende,

While I find most of your posts to be well reasoned, I feel we may end up agreeing to disagree here. I understand completely your argument that good software can be written on the .NET platform. I understand as well that you can build things like RavenDB on the .NET platform including CoreCLR. Myself and our team have also built such software.

Your conclusions however are absolutely wrong. We have been supporting a linux operations story for coming up on four years. We actually prefer to run in linux as opposed to windows (though we are written in C#). This is due to many reasons but the largest is the quality of operations people and the maturity of devops tools on the linux side.

We have experienced where your logic falls apart.

RavenDB nor EventStore should be written in C#.

A different environment such as C/C++/Go/Rust would be far superior to haven been written in C#. Cross compiling C# is a pain in the ass to say the least whether we talk about supporting linux via mono or .netcore, both are very immature solutions compared to the alternatives. The amount of time saved by writing C# code is lost on the debugging of issues and having unusual viewpoints of them. The amount of time saved by writing in C# is completely lost from an operational perspective of having something that is not-so-standard. We have not yet talked about the amount of time spent in dealing with things like packaging for 5+ package managers and making things idiomatic for varying distributions.

Maybe you think you will avoid this and include instructions for how to install ravendb for *x* distribution. They want packages. They want things they understand. Most linux admins will flat out refuse to install coreclr (rightly as it is immature) or mono (rightly as its a shitshow)

The costs associated with this are prohibitive. At the end of the day the kinds of code you discuss could likely be implemented by mediocre C/Go developers but you need to hire the very top of the line C# developers. Finding a C developer that understands the concept of a B+tree is far easier than a C# developer. Finding a C developer who has some clue about how memory works and is able to optimize is normal.

When you get into looking at TCO the amount of time spent dicking around optimizing GC and understanding/supporting your underlying abstractions having written in C# becomes negligibly less expensive than writing in a systems programming language in the first place.

Once you start looking at support operations (trust me we have experience on this), having written in a systems programming language will be far cheaper.

TLDR: The fact that you write systems code in C# does not refute Rob. You are in fact writing systems code in C# in spite of being in C#. This is the biggest mistake we have associated to event store, you should recognize the same.

 

8 Comments

  1. Mantas
    Posted June 17, 2016 at 1:34 pm | Permalink | Reply

    yup. Cross-platform, performance- and resource-critical, maintainable? C++.

  2. Posted June 17, 2016 at 4:42 pm | Permalink | Reply

    I don’t see how this has anything to do with either Rob’s or Ayende’s post… The premise that “you can’t be a good .NET developer” is just plain wrong; there are plenty of great .NET developers. Now, is C# the best language for systems programming? Probably not, but it’s totally irrelevant to the fact that you can or can’t be a good .NET developer. It’s like saying “you can’t be a good PHP developer because PHP isn’t suitable for mobile development”.

    • Posted June 20, 2016 at 10:41 am | Permalink | Reply

      I too am wondering how this this relate to Rob’s or Ayende’s post, or the premise that you can’t be a good developer in .NET.

      • Posted June 20, 2016 at 10:46 am | Permalink

        Its not about good developers at all (Rob’s post)

        Originally it was going to be a comment on Ayende’s.

  3. Posted June 20, 2016 at 1:58 pm | Permalink | Reply

    Last I checked, all three of you are excellent programmers irrespective of language. You can discuss the end-to-end economics of this language or that, but that has little to do with being ‘good’ with any particular language.

    • Posted June 20, 2016 at 2:00 pm | Permalink | Reply

      My post has nothing to do with trying to define a good programmer. It is on the rest.

      Frankly even defining what a good programmer is non-subjectively is beyond my pay grade.

  4. Abdu
    Posted June 20, 2016 at 4:16 pm | Permalink | Reply

    These posts and replies and starting to get useless to me. They are starting to become like religious wars. My language is better than yours. Just use the language you’re comfortable with and enjoy and the one that gets the job done. I am not interested in learning another language just because it’s little better or saves a bit of time. I love C# and I love Visual Studio and all the VS add-ons that make me more productive. I am already very productive according to other developers I work with. I like my Car. I don’t need a Ferrari.

    • Posted June 20, 2016 at 4:28 pm | Permalink | Reply

      You seem to misunderstand the post. The post is that not all languages are equally suitable for all tasks

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: