PHP or ASP.net: Did I Do The Right Thing?
wekeroad.com
wekeroad.com
Did I do the right thing? No. I should have skipped Microsoft stack entirely. I say this after 12 years of .Net and a previous 6 years of COM/C++/Win32. It has been the universally most stressful platform to work on. The technology is terribly complicated, obtuse and non-orthogonal and full of dead-ends and surprises. It's also virtually impossible to cleanly automate anything which means you need thousands of hands to push the buttons in the right order[1]. However this pales in comparison to the culture which almost universally (90%+ of outfits I've worked at) contains solely grim factory farm programmers who don't actually care what they are doing or understand what happens outside the ecosystem and outsourcers who whilst technically superior to the on-site staff, march around with loaded guns ready to shoot their own toes off (and anyone else dancing with them).
The only good bit was the cash.
I'd rather have picked up a 2003 OsCommerce site than do it again.
Now I'm learning Objective C and Cocoa to solve a few real world problems in another non-technology market that IT rarely penetrates. I'm doing that on my own.
[1] This has finally improved, but a little too late with PS and PS DSC for example.
I know little about the author so I can't really judge, but shouldn't the question have been "what if I had learned something new and very different every year, instead of every 13"?
His affinity for everything non-.net and the effort he puts into helping keep feedback loops going between platforms while focusing on surfacing the better patterns, overall, is pretty admirable. His religion seems software dev, not platforms.
He might get acerbic to some, but it seems part and parcel to his personality. He's not content with friction, ceremony, and negatively reinforcing paradigms. The final output from this is most often quite beneficial. If for nothing else, I appreciate that he spends the time doing the things that I would do if I hadn't yet sold any of my start-ups.
I'd only suggest, in this case, that one can be better off carrying awareness of the time wasted in suffering. You may well waste less time going forward with the lessons learned. You will waste less time and suffer less prospectively. Hopefully you haven't missed the last plane off the island... in Hawaii... where it's not so bad to be stuck...
You may not have made the right choice, but it's not because you chose ASP.Net over PHP (you'd probably be asking the same question if you picked PHP). It's because (and I'm sorry if I'm being too blunt) you didn't seem to question what you were doing or go out and seek alternatives. You mention the "drag and drop" world, but that's not the only way to implement those features. We both worked in the same world at the same time, but I didn't like the "magic" the drag and drop functionality provided. It didn't give me enough control over what I wanted to do so I figured out how to do it manually.
My response is a bit more rambling than I intended for it to be and I hope you can piece it together. :) My main point is that we both ended up with the same choice (ASP and ASP.Net) around the same time but I also have those bullet points you mention checked off. I don't regret my decision one bit and I don't think it has stunted my professional growth at all. If anything it has probably helped it because .Net devs are in high demand and highly paid in my area.
Edit: Hah, I wrote this post without knowing who you are at all. I may very well be wrong, but that was the impression I got from your comment and the original article.
These were choices made by my contracts and my employers. What you're saying is valid: I could have pushed to use another system or platform. I can do this now - but back then it was not nearly as easy to just pick up and learn the intricacies of different platforms. You might disagree, it's sort of subjective - but installing PHP/MySQL was a complicated affair if you're not familiar.
Finally - the whole premise of the post was the very question itself: "Did I do the right thing?". I was questioning, and I had to make a choice. I constantly did (and still do) that.
To be fair, Microsoft's web stack has not had the dramatic changes in direction that their native stack has had over this time period. Still, the response from his peers when he tried to bring in ideas from Rails is telling, the ecosystem he chose isn't just a nice IDE and language.
I started out with PHP, got whatever job I could which involved Access and VBA, then VB.NET, then C#... now I use JavaScript, Python and occasionally Ruby.
That isn't to say that you should know six different languages. But you should know programming well enough that you can apply your skills wherever you need to.
Really? If you don't randomly flit from fad to fad you are "doing the wrong thing"? What if I made a good choice 15 years ago? Should I have stopped using postgresql simply because I chose it so long ago?
That wasn't what I suggested at all. My point is that you shouldn't be so focused on one language that you can program in that and that only. Even just being bilingual is a massive step forwards in overall programming skills rather than ASP.NET skills, or PHP skills, or...
Obviously I can't tell what you meant to say, but it is what you did say. "If your thirteen year old technology choices are still having an impact today, then you're doing the wrong thing regardless". My thirteen year old technology choices are still having an impact today. You explicitly said I am "doing the wrong thing". I believe that is incorrect.
Basically if you nix webforms and .aspx files, and do your own templating (so essentially, just use ASP.NET for routing and controllers), it's not awful. Visual Studio is nice and C# is surprisingly decent as a webdev language. But yeah. I'd much rather use Python or Ruby.
I wasn't a fan of the MS Web stack for a long time. ASP.NET MVC fixed that. It's still overly complicated but it gets better with each release.
From a language standpoint, it's night and day. C# is a real programming language. You can use it to write web apps, desktop apps, mobile apps, daemons/services--even embedded apps. PHP is a templating tool that has tried to evolve into a language and has been hampered in the process by horrible legacy. It's actually pretty decent now but it is still only useful for one thing: web apps.
I subsequently fell in love with Python and am still active with it today. I think a choice as far back as 2001 doesn't matter too much, programming is programming. However, I feel like I became a better programmer by having to deal with a language as shitty as PHP. There were so many pitfalls that I quickly became an expert at working around them -- this took a lot of painstaking investigation into the inner workings of the language.
If were doing it wrong, then maybe. Allowing "VB6" programmers to drag-n-drop stuff to make forms is still a fine way for them to make applications that run on a high-speed connection and just happen to be using HTML by accident. Being able to use a "datasource" was apparently valuable for some people, although I could never get it to work well.
Was it a bad idea to only focus on that and force the control model on everyone? Sure. It wasn't necessarily a terrible option for a lot of people. I did demos of ASP.NET to PHP developers, and some of them were pretty blown away by the idea of having events fire and being able to do something like "foo.BackgroundColor = bla" and have the whole page "just work".
But being forced into the control model with viewstate and all that, it certainly didn't make ASP.NET competitive with other technologies for having total control over the experience.
Had MS gone "MVC" from the start and focused only one web techologies, and had someone else made the easy "forms for the web" toolkit and got marketshare, we'd be saying how foolish MS was for not providing a similar toolkit.
I had the luxury of being a 1-man IT department, so I gave up and learned Zope, which led me to Python, and then Django. Had ASP.NET MVC existed at the time, no doubt I would still be writing code in C#. In retrospect, I'm so glad it didn't.
Even at the time I realized it was a crossroads. My entire career and future pretty much grew organically from that point outwards. I don't think I would have had even remotely the opportunities had I not committed myself to open source.
I've come from the Microsoft (Windows 32-bit API) to .NET Fx to Linux/Unix world in much the same way as Rob; ASP.NET to Rails.
There is a certain reality I have learned over the years: when I consult part time and don't mind sometimes boring work I earn twice as much writing C# than Ruby. The money is in the enterprise.
Of course at my day job I write Scala and figure out ways to get the most amount of Ruby [or sometimes Python] I possibly can into our day to day work. I love optimizing for productivity and happiness.
"This is the one shining negative here: .NET stunted my knowledge of HTML/CSS/Javascript."
This is the whole point of the blog post. And this is in fact true. But terminology that is not pointed out is that ASP.NET WEBFORMS are what "stunted" your knowledge. WebForms made developers oblivious of how the web actually works. .NET, C#, or VB.NET isn't the problem.
Also, living in a Microsoft world can be insulating, but only if you aren't looking for a better way. "Alt.NET" was really a belief in outside the box thinking.
Yes, Alt.NET came along in 2009 or so and managed to do some good things, not soon enough really and all the silly flame wars actually did more harm than anything.
"...early on in my MVP/Community days (2007ish). Microsoft hired some non-traditional devs to head up something in the ASP.NET group. Phil Haack, Scott Hanselman, Rob Conery all came on board and launched ASP.NET MVC which BLEW. ASP.NET. UP."
Yes?
If you're going open source, you should have went python or node.
C# - half of this is available for a fee and the rest is available for a larger fee. And none of it works particularly well. And if anything breaks it's $200 a go to get it fixed.
C# is a minefield for issues. Linq memory ballooning, null refs, O(WTF) LINQ expressions, tri-state logic caused by nullables, spinlocks from hell (ReaderWriterLockSlim), missing symbols and more sourceless black boxes than anything. Oh and three different subtly broken XML APIs.
More language features don't make it better.