I hate starting with a disclaimer, but I’m starting with a disclaimer. Much of my experience with Visual Studio .NET and its related products – at least until the last year or so – is second hand. Your mileage may vary: I know that a lot of developers absolutely swear by Microsoft products – bless their hearts – and my experience has definitely been colored by over-zealous Microsoft evangelists, but I have come to strongly dislike the Microsoft ecosystem. Since 2002, I’ve never had success in it as soon as I dove past the the most surface functionality: from the earliest releases right up to 3Q 2019 with a disastrous flirtation with Azure.
Just to be clear: I got my start with Visual Basic 6 and ActiveX controls, then transitioned to web based apps with Active Server Pages. I consulted for Sprint, the National Association of Insurance Commissioners, Yellow Freight, to name three. I started my present career in February 2002 as a mostly one-man shop, writing ASP pages, managing SQL Server databases and IIS web server, partnered with two other people. Let’s call them MoneyGuy and DataGuy. More on them in a minute.
A fantastic article on complexity. Encapsulates a lot of how I think and operate, and why (spoilers) I’m not a fan of .NET.
When I got my first computer, the internet as a consumer commodity was still in its toddler stage. We browsed with Lynx over a 2400 baud modem and got kicked off if someone called us on the phone. I wasted a lot of hours in IRC. When I upgraded to a 9600 baud, then 14.4k, the experience was life changing! I started programming for the web in ’98 or so, HTML was new and exciting. Java wasn’t really a thing in the marketplace, and Flash was still a ways off. Access was The Shit.
Maintaining a website was easy. FTP your files down…make your changes…FTP your files back up. It was portable: changing web hosts? Move your files. Need a backup? Copy your files. Files get corrupted? Unzip your backup, copy the files. Websites were “published”, not “deployed” unless you were a pretentious prick. You needed only two, possibly three pieces of (usually free) software: a text editor, an FTP client, and a never-to-be-registered copy of WinZip. If you knew what you were doing, you could get by with Notepad and Windows Explorer.
If there was a problem, you opened the file with the problem and fixed it. It was simple, effective, portable, and, if you were diligent in your backups, worked 100% of the time.
Jesus, I sound old, but you need to understand where I came from to understand where I landed. Onward.
DataGuy started out as SalesGuy, and he was much better at Sales than Data, but we had deadlines and I needed help. I taught him everything I knew about SQL Server and he took over the database side of things leaving me to sling code. He and MoneyGuy as a rule kept their noses out of what I did. There was an almost exclusive focus on the WHAT: the HOW was entirely up to me.
Somewhere around 2010, one of MoneyGuy’s friends started singing the praises of .NET over lunch. (It should be well understood that MoneyGuy and all his friends were/are Middle-Aged White Ayn Rand-conservatives whose collective technical expertise stops at the basic use of Microsoft Office and Quickbooks. Open source? Communism, you mean.) A programmer had written A program for him and it worked great and so, by extension, .NET was The Best Thing Ever. MoneyGuy came back from his lunch and announced that we would re-write our applications and web sites in .NET.
So here’s me: a mostly one-man shop who’s been so busy for the last fifteen years that there hasn’t been time to come up to speed in all the latest and greatest tech. I pushed back, hard. Wrote a use-case document showing that the ROI for the switch would be a horrific waste of time and money. It basically boiled down to:
- Our software works as is.
- If something happens to me, you could bring in any programmer and have them up to speed in a couple of days.
- X, Y, and Z are already in the pipeline and you want them ASAP: you don’t get that AND a paradigm shift.
See, learning a language is easy: high-level languages all operate by the same basic rules (pun acknowledged) and the only thing that varies is the syntax, so once you know one, transitioning isn’t that hard. But .NET is a paradigm shift1. You don’t work with files anymore, you work with projects. You don’t copy your files up, you “deploy the project.” Notepad? Sorry, this project was written using Visual Studio, so you have to use that toolset. With a full schedule and an insufficient paycheck, that was a bridge too far.
In 2015 we needed a module I didn’t have time to write, so, against my strenuous objections, my partners engaged a .NET programmer. The thinking was that he would write the module and train DataGuy in the use of Visual Studio so after NetGuy left, DataGuy could do maintenance and fix bugs. I already knew DataGuy wasn’t capable of following through, but I didn’t have a vote. Best I could do was yell about it.
DataGuy has long since gone and it’s just me again. NetGuy is off in the wind somewhere and I have a piece of code I can’t maintain, that is so bug-ridden that our client has abandoned the use of it. Doesn’t THAT look awesome on the TOS.
While all of that was going on, in the background I started migrating to PHP2. Even then, (ver 5.2, I think) it had a rich feature set, lots of libraries, wide community support, and was generally better at everything than Classic ASP. The cost of converting was almost zero. I played around with Prototype/Scriptaculous, eventually settled on jQuery, and just like that, I could do everything that Visual Studio could do, working within the paradigm of
simple, effective, and portable.
And here we come to the crux of my issue: Microsoft makes everything far harder than it has to be. If you’re a .NET programmer doing good work, I’m happy for you, that’s fantastic! That hasn’t been my experience.
Early on, I was told by a friend (who was/is a Microsoft evangelist) that to start the switch to .NET, all I had to do was rename all my .asp files to .aspx. Everything, absolutely everything, stopped working, throwing error after error. I tried for an entire weekend to make the changes necessary to allow even the simplest of modules to work, but with a client expecting their working system on Monday morning, I was obliged to abandon the attempt.
In 2018 we figured out we were getting fleeced by our co-lo host and started shopping around. On the advice of the aforementioned friend, I tried Azure. It seemed to have all the necessary stuff, and could host all of our Classic ASP legacy code AND the PHP code and the SQL Server databases (though I couldn’t get a solid confirmation because the trial space they give is too small to be useful.) It wasn’t until I was two months in (and a thousand dollars in the hole) that I discovered that Azure didn’t support linking tables across databases3, used in most queries and views in our applications, and something I would take as so fucking basic I didn’t believe it at first. I checked with my friend and he contacted his people and we worked on it for a few days, but it was true. That was a deal breaker. I had to go back to MoneyGuy and explain that he’d just set fire to a thousand dollars and had nothing to show for it. Thankfully we hadn’t canceled our existing co-lo contract.
I kept searching. I found a co-lo host with more than fair pricing, a great TOS. We’d get web and db servers all to ourselves and all it needed was a text editor and an FTP client. I made the transition single-handedly over a weekend: I started Saturday morning and we were ready to flip the DNS by Sunday afternoon. Sixteen hours, most of it spent waiting for uploads, recreating virtual folders and rewrite rules in IIS that I’d forgotten about, and testing.
Done, done, and done.
So, yeah, you can call me old, set in my ways. A dinosaur. That’s just fine. I can hand off my programs to just about anyone with a computer science 101 class under their belt and be confident everything will be fine.
My stuff just works.
1. Yes, I know that you can write .NET programs with Notepad. That’s not the universe we were in at the time, however.
2. There are arguments for and against PHP. That’s not why we’re here.
3. Something Access and SQL Server have supported since their inception. Why it’s left out of Azure is beyond me. That may have changed in the last couple of years; I don’t know, and I don’t care.