Why you can't be a good .NET developer(codeofrob.com) |
Why you can't be a good .NET developer(codeofrob.com) |
I think the MVC, Entity Framework, Web Api world of .Net is as good or better than anything else out there and a 'good' developer in that world is just as accomplished as a 'good' developer in the Django or Rails world.
I would also argue that it has proven much more challenging to maintain and extend legacy .Net applications than it was to work on a clean, solid, and in many ways more complicated Django/Postres/Ubuntu stack. Keeping a beat up winforms,webforms,soap driven SOA legacy stack straight takes a decent amount of patience.
I always hated webforms, to be honest, before MVC, I'd usually write as simple aspx as possible, and use ashx for most of the edges... The first couple releases of ASP.Net got better, but still the disconnected events were somewhat more painful than straight html+js when it came to anything complex, more so as ajax took hold. MVC made those edges easier to write. For the past 5 years or so, been writing far more node.js, and though less polished than .Net on the server, has been far more pleasant.
Context matters. I've seen "derpy enterprise shops" build lambda architectures on Azure, startups cargo-culting their way through MEAN-stack apps, and, yes, LoB apps that were still Java-through-CGI (shudder). You can be a great developer in virtually any language, in virtually any environment. Or, I suppose, you can bitch about it on your blog.
Frankly I don't like the level of generalisation and apparent prejudice, and although I respect one's right to hold such an opinion, I think the conclusions of the article are wrong.
> this is a criticism of a corporate development culture
I feel like a more though out post could have arrived in this camp. This isn't a .NET isolation issue (although you could argue the Windows eco-system is shit to develop on -- but that's another rant), but more of an issue with companies that can't quickly move to new technologies and software stacks due to a huge burden of technical debt, insufficient integration tests and, the most challenging, a team of mostly mediocre developers who are afraid to, or refuse to, try new things.
All that being said, I'm sure if you have a well run IT department, you can get along just great with .Net even at smaller companies.
I know these tools are fairly new... that said, working without them feels like developing web applications back in the late 90's. Just painful.
I've interviewed for a few positions where Java is used on the backend, and because of my strong front end and JS experience the assumption is that I won't be able to keep up on the backend. It's pretty ridiculous, when the opposite assumptions never seem to present themselves. I've worked with multiple database systems, and multiple server-side architectures. Just avoided Java because every time I've used it, it just felt excessively painful to use.
I've said for the past few years (ever since Prototype, then jQuery) that one should be looking for solid developers with the ability to learn, try and adapt over someone with a checkbox skill. Yes, you'll be hard pressed to find a developer with "solid React experience." The point is that hiring a solid developer is hard, but that should be the primary goal.
Large scale Javascript development is an absolute nightmare without TypeScript
But yeah, having had all three roles, back-end is often much easier than front-end or full-stack, despite the false sense of superiority that back-end only devs have.
Also having done C# for several years as well as JavaScript, Java/C# type languages are overall easier than JavaScript because you get things like intellisense, static type checking etc. from the compiler.
Most of which only makes software more complicated than usually necessary, and makes me shudder to this day when I hear the term "Enterprise" applied to software. It isn't that it doesn't work, or that it never serves a purpose, but that most of the time it is applied it isn't good.
I spent the better part of the 2000's writing code in C#, it's still a favorite language. I've spend most of the past 5-6 years writing far more JS, and a lot of Node migration. Some of that isn't so great either. In the end, writing code that's easy to setup, configure, follow and understand is more important than any language specifics, and I feel that Java and C# developers forget that in favor of "Enterprise" practices.
The trauma really began with VB6, then ASP, then continued with Webforms, then Silverlight, then WPF ... if you thought that the current cohort of JS developers have framework fatigue, you should see surviving Microsoft "derpies" nursing technical debt such as LINQToSQL or strange extensions of Sharepoint.
The Java folks were less traumatized in this regard. But they had their moments with EJB (entity beans anybody)?
.net development is complex. The languages and frameworks are deep, and cargo cult (implementing without understanding) development is common. .net provides you, out of the box, with a collection of pretty good "easy-mode" APIs; and most (as far as my personal experience has taught me) .net developers are exclusively familiar with them. The more dedicated of us learn how things work under the covers; but using that understanding to full effect can often result in fights with management (and team members) on smaller and less experienced teams (where your code is "unreadable" by other team members).
I love .net, one of the reasons I love it is that if there's something you don't love about it, you can replace it. It's written in such a way as to encourage you to replace it's components in whole or in part for your specific needs; and it provides you with fantastic tooling to do so. Replacing and extending the framework well requires experience and discipline, without them you'll make a mess (and everyone on your team has a horror story about someone else's mess). Gaining that experience and discipline requires fastidious dedication, and a very understanding employer.
I don't see this as a weakness in the platform, although it is a daily frustration on a lot of projects. Extending the framework for your project requires writing framework complexity code in your project.
The potential for complexity runs deep. You could, for example, easily interop with some custom c++ that calls custom assembly (as an extreme, borderline silly example). When your coworkers see that, and their first reaction is "If this guy gets hit by a bus, I can't maintain that", they are justified to be frustrated. It's up to you to prove that it's needed more than they are frustrated; or to take it out. I think that argument is healthy.
Dapper (a popular mini ORM) does a ton of run-time custom generation and execution of intermediate language. It's the right solution, and well executed, but if you tried doing that in your own project, you're likely to have a fight on your hands. Your coworkers would likely have no problem adding Dapper to your solution because they won't be expected to maintain the code, but as soon as they feel they may be stuck maintaining something so difficult to understand they are likely to want to murder you.
As a former architect on one of the most trafficked .net platform web applications on the internet, I've seen .net do some amazing things. I've made it do some amazing things. .net is predictable and super hackable (and it wants you to hack it); but you have to get the money-man and your team's trust before you can do any of that hacking.
You can be a good .net developer. It's not easy, but it is rewarding.