Technology Religion

There is a tl;dr at the bottom of this article.

A link popped in my inbox from LinkedIn “C# Developers / Architects” group: Why Some Dislike the .Net Framework..., which led me to the article Are .NET Developers Stupid? by Armando Pantoja.

Clickbait? Maybe not. I bit, anyway.

Two Wild Opinions appear

The article is a response written on December 18, 2016 to another article – an post written by CEO David Barrett of Expensify written on March 25, 2011.

(Time does weird things in the Internet. I guess things age differently.)

I’ll summarize the main points, first from David’s article and the many strong comments he received, and then from Armando’s article.

David:

  • “Programming with .NET is like cooking in a McDonalds kitchen. … you can churn out flawless 1.6 oz burgers faster than anybody else, … However, if you need to make a 1.7 oz burger, you simply can’t. … We need people who can not only cook burgers, but cook anything, from scratch.”
  • “Microsoft started down this path when they were the only game in town, explicitly to maintain their monopoly by making it as hard as possible to either port Windows apps to non-Windows platforms, or to even conceive of how to do it in the first place.”
  • “If you are a startup looking to hire really excellent people, take notice of .NET on a resume, and ask why it’s there.”
  • The comments were strong and profane. I won’t bulletize them. He admitted that by the time he closed the comments less than 25% of all the commentors agreed with him.

    Armando (emphasis removed by me):

  • “… I do not agree with him at all.”
  • “I will admit some pure .NET developers are very sloppy programmers.”
  • “These people that dislike .NET developers simply do not understand that good professional software engineers are language-agnostic.”
  • I have some real problem’s with Armando’s article.

    1. The title is clickbaity. He never actually comes around to asking and answering his question about whether .NET Developers are stupid.
    2. As I alluded to earlier, it’s a five-year old response to a topical post. It doesn’t really apply now. Times have changed, dramatically. See below.
    3. His headings are misleading. There are three sections:

    Why do Some Dislike the .Net Framework

    He doesn’t actually discuss this. He just points out that some do, and suggests that it might be because some .NET developers have a bad reputation or are hard to find or are too expensive.

    What is Language-agnostic?

    What does this have to do with the title of the article? I think he’s saying that the skill of the developer is not correlated to the use of .NET, but it’s not a point well made.

    The Key Takeaway

    …seems to be that some people are ignorant. This is a key takeaway? I think most of us already knew that going in.

    Be careful how you make business decisions

    I’ll come back to Armando. Let’s take on David’s article, first.

    It’s not secret that I’m a big fan of the .NET Framework. I use it every day, and I love it, and don’t plan to become a Java developer or a Python or MEAN developer. Ever.

    Even so, David is sort of right, but ultimately wrong.

    To put it in a nutshell, I’ll use David’s analogy. He wants cooks that can make their own 1.7 oz. squirrel burgers on a campfire from scratch, not McDonald’s “cooks" that are limited to 1.6 oz. “beef” burgers in a stainless steel kitchen.

    His mistake was believing that .NET actually prevents you from doing that. That because Microsoft has made a machine that makes 1.6 oz beef burgers somehow your skill in using that machine demonstrates that you are not likely to be good at making 1.7 squirrel burgers without it.

    But it’s not because he’s wrong about that.

    David even admitted, in the original article, that there would be some .NET developers who could make squirrel burgers from scratch, it’s just that they were few and far between.

    What he is wrong about is the idea that startups need, more than anything else, cooks who could cook anything from scratch.

    A metaphor taken too far

    Let me explain, and I’ll start by re-applying the analogy. The cooking metaphor is not really ideal, but let’s go with it. Startups do not dream of remaining in the small, scruffy, “hunting squirrels and making 1.7 oz burgers from them over a campfire” stage. They want to become much bigger than that, and, as they do, they will need considerably different skills than ones needed for that sort of “cook anything from scratch” standard.

    Startups seek volume, not niches. They don’t strive to become Eleven Madison Park. They strive to become Pieology. Or, should the Gods desire, Cheesecake Factory (link should be unnecessary, but just in case…).

    Think about this for a minute.

    First, as a consumer.

    When you go into a Pieology or a Cheesecake Factory, are you hoping that the people who make your pizza or your dessert are out there scrounging around the pantry for interesting and amazing creations they can surprise you with?

    No. No, you are not. You want the same great slice of pie you had last month. Exactly the same, if not a little better.

    Second, as a business owner. Notice what is succeeding in the market place, and what is not.

    What is successful? Pizza. Cake. Even burritos, if you can avoid the missteps of Chipotle Mexican Grill. Simple things that many, many other people make, but done just a little better than the competition.

    What is not successful? How about “Jake’s Squirrel Burgers?” Mmm. A 1.7 oz medium-well U.S. premium ground squirrel patty on fresh pumpernickel with Sriracha, aioli, and a fried dill pickle slice.

    Even if that turns out to be a local runaway hit, will it scale? You’re gonna need not only a shitload of squirrel meat real soon, but you’ll need to ultimately find a way to run up the supply chain throughput, finding higher-quality, lower-cost squirrel meat suppliers. Does Jake know how to farm squirrels at an industrial capacity? Can Jake build a series of abattoirs designed to process squirrel meat? What do squirrels eat? Can Jake find squirrel food suppliers, and squirrel veterinarians? What does the FDA and the USDA have to say about it?

    More importantly, should you even try to succeed along that path?

    There are many good things about being a can-cook-anything-from-scratch person, but not all of those good things means that everyone else is a poor fit.

    If I were going to start a restaurant with the hopes of hitting it big, I don’t want to start with cooks who are trying to make everything from scratch.

    I do want one or two of those awesome can-cook-anything-from-scratch people on my team. They will help me explore what is possible, and help guide the rest of the team.

    But the other cooks on my team? No. I don’t want them making everything from scratch. I want them to be the Denny’s cooks. I want people who are good at making consistent but unspectacular pancakes, grilled sandwiches, french fries, and coffee cake, with a few modifications as requested by the customers with as little fuss and trouble as possible.

    My superstar cooks decide what is in the pantry and what things will be on the menu.

    The rest of my cooks are mostly good at figuring out how to get a simple job done as fast and efficiently as possible.

    Unraveling that metaphor

    All right, enough with that metaphor. I’m sure the squirrels have had enough, too.

    David was wrong when he asserted that Microsoft build the .NET Framework to “… maintain their monopoly by making it as hard as possible to either port Windows apps to non-Windows platforms, or to even conceive of how to do it in the first place.”

    Had this been true, Xamarin would not have been successful at all

    In fact, just about three years after David wrote the article, Microsoft established the .NET Foundation to improve open-source development using .NET.

    Most of .NET is now real, true, free open-source, with license terms that are as permissive as you can get without putting your client’s IP at risk by using a GPL copy-left license.

    More importantly, even in the early years, Microsoft sought to avoid the missteps of Java, while still giving themselves a competitive advantage. Did they do it perfectly? Of course not. But the signs were there that Microsoft want to make it easier, not harder, to port Windows apps to non-Windows platforms.

    The fact that .NET runs natively on Linux is a testament to this.

    But even this is beside the point.

    Microsoft built .NET for the same reason that Sun built Java. It was a way to improve developer productivity.

    When I make a website, whether it’s as a startup or on a team in a global corporation, I do not want to fool around with URL rewriting more than I must. For 99.999% of the work I do, it’s unnecessary. I don’t want to invent a better cache. I don’t want to make my own HTML template-based rendering engine. I don’t want to build my own CSS minifier and bundler. I don’t want to write my own build system.

    It doesn’t matter whether I’m making squirrel burgers, beef burgers, websites, or from-scratch TCP socket management optimizers… I want to do the least amount of work that I must do.

    Is it possible to build amazing, high-quality stuff with .NET? You bet. Take a look at the Roslyn Code Compiler service. Or CoreFX. The team is working hard to make sure it is one of the fastest platforms on the planet. On Linux, no less.

    Did I say that loudly enough?

    .NET Core on Linux is one of the ten fastest plaintext processors available.

    Now, Mr. Startup, I ask you this: Do you need it even faster? Seriously?

    I’m not saying .NET is for everyone. But the lament that it is somehow a dull laggard that can’t accommodate non-Microsoft environments is just silly.

    Oh, and did you know that it supports many languages? Even Clojure. And Python. And Eiffel. Lisp.

    No, you can’t write Erlang in .NET. Nor Javascript, for that matter (well, not exactly).

    But my point is this:

    I want something else to do as much of my work as I can get while still retaining enough control over what happens that my customers are willing to pay me for what happens.

    .NET does a fine job of hitting that balance, IMHO.

    How is this about Religion?

    This is what brings me (eventually) back to Armando’s response.

    Religion is about answers to big questions. Why are we here? Why do bad things happen to good people, and vice versa? What created everything? What happens in the undiscovered country, and does what we are doing in life relate to what happens after we die?

    But religion is also about ethics. Should you be honest and fair? Why does that matter? Will it pay off if you do? Is it okay to do a little cheating if it’s for the “greater good”?

    I believe that some people see religion a little differently. They tend to see it as way to judge others and make up answers that take power from some and give it to others.

    That’s a philosophical discussion for another time. I’m only interested in the concept that religion is about simple answers to complicated (perhaps NP-complete?) problems.

    In technology, religion is a little different than the rest of life.

    In technology, religion is about applying, as David did, a simple explanation to a difficult problem: how can I hire the very smartest, most capable programmers available? His answer: be suspicious of .NET programmers.

    Religion does not mind whether the question itself is worth asking.

    Should you be honest and fair? The answer is: usually, but not always. That’s not really a helpful answer. The decision depends on the context, the people involved, and, if possible, some magic that predicts the consequences of that decision until the end of time.

    So is it worth asking this question? I know the answer, but it doesn’t help me. In this case, I choose to ask a better question.

    Here’s a better question:

    Right now, in the situation I’m facing, and recognizing my limits for awareness, does it help my aspirations if I am honest and fair? Would choosing, right now, to not be honest and fair cost my aspirations more than I am willing to give up?

    Knowing me and my aspirations pretty well, I usually choose to be honest and fair. Usually.

    But, ugh! What a tough question to ask every single time I need to make that decision!

    My advice to David—not that he needs it after so many comments and so many years—is to pay more attention to exactly what kinds of needs he has to fill. He may have been perfectly right to overgeneralize a little on the .NET filter. Perhaps he was trying to start a lot of different projects and needed to put an independently-minded developer on each one, and had settled on a stack of technologies that he felt more comfortable with.

    As much as I might want someone like David to put me, a .NET developer, on his team, I might make the same choices as he did.

    If I had a .NET-based startup, and a candidate presented with modest .NET skills, but a lot of JEE or Node skills, or claimed to be an expert in a great many and widely different technologies, I would be skeptical, too. I’d send the candidate to David with my best wishes.

    So, it’s a little religious. I honestly haven’t got the energy to do rigorous critical thinking about every decision that comes my way.

    And now, Armando gives us his own religion. The hallmark of the smartest, best programmers is that they are language-agnostic. They can happily deliver high-quality code on whatever platform you like: .NET, Python, asm.js, Pascal, PowerBuilder, C++, HyperScript, PHP, COBOL… we don’t care. All that matters is that we understand the difference between polynomial and exponential when it comes to speed or resources.

    I think you’re missing the point, Armando.

    If I need someone to make a front-end web page, and what matters is snappy performance for the end user, and bandwidth is not my biggest problem, and … well, my point is, there is room in most ventures for a developer who doesn’t know that O(n²) is, like, really bad, man, let alone how to recognize whether a particular solution is O(log n) or O(n). Just get the web page up! We can optimize later, after the customer has paid for the service.

    If I need a back-end web API expert to help me write my high-performance C#-based expense reporting web site to challenge expensify.com, and I have other team members that understand networking, databases, security, in the ways that I don’t need the C# expert to handle, then I don’t care whether that candidate has ever touched another language. That candidate should know all the Big O stuff, but other languages? It’d be icing on the cake, but no more.

    Religion is about answers.

    I don’t need answers when they are for the wrong question.

    How do I know whether the answer is for the wrong question?

    That’s a very good question.

    And the answer?


    tl;dr

    Ask better questions instead of trying to present better answers.

    Oh, and I’m still learning to assume that everything with a controversial title is clickbait and not worth my time reading.

    Author

    Alan McBee

    comments powered by Disqus