I had a background of Unix and Windows NT. I did both ASP.Net and PHP and switched back and forth between contracts for about 6 years depending on who offered the most cash. I now sit at a Microsoft consultancy, on a Mac, doing all the high level technical design work and Unix bits the company needs (and occasionally digging the company out of the crap when they screw stuff up and the normal staff don't know what to do and Googling it is beyond them).
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.
Can't automate anything? That's just false. We have our entire build/deploy/test process automated. Hint: even our server build is automated, and gets rebuilt with every code change.
I don't understand the premise of this article. The OP made one technology specialization choice 13 years ago, and all he wonders is whether it was the right one?
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"?
I'm going to go with the stereotypical response that he did learn something new and different every couple of years as Microsoft kept changing directions with their development stack.
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.
Well it did have if you dragged in Workflow Foundation and Silverlight. To have that yanked from under us was a massive and really expensive pain. If we'd picked a Java BPEL solution and WebStart with Swing, we'd have been better off.
OP here - I've made quite a few choices but this (as mentioned) was a pivotal one - and yes I wonder if I did the right thing. The MS ecosystem is very insular, so once you go down that road you're "all in" - so the choice wasn't a casual one at all.
I'm sorry, but I have to disagree with you there (the "all in" comment). I'm kind of in the same boat. I learned BASIC and vb first, then some PHP, but I've been doing MS-related work for the last 12 or so years. The MS ecosystem is definitely segregated but that doesn't mean you're stuck only doing MS work forever. Over the time I've been programming, including doing MS work, I've been learning so many other technologies and it has also positively impacted my work on the MS side. New ideas for how to lay out code, new technologies to integrate with, etc.
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.
No worries - good comment :). What I meant by "all-in" shouldn't be taken as "in total". In other words: in all the projects I worked on, only ONE TIME did I get to use MySQL. I installed Ubuntu once for fun - but when it came to work and what I did for work - it was MS all the way down.
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.
If you aren't familiar with Rob at all, it's likely easy to not get the context or personality. This guy is as transformed as you will find someone who rode/rides the .net paths.
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...
Glad to see you here. I used some bits from Subsonic a few years back to ease some pain - would like this opportunity to thank you, so a big thank you :)
Honestly, if your thirteen year old technology choices are still having an impact today, then you're doing the wrong thing regardless.
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.
Every choice you make impacts you today. What you learned in high school, college, and at your first few jobs all shape who you are and what you know. If I wouldn't have spent those years in ASP.NET. I know programming, have the same skill set as you pretty much (no Python). I would have loved to be increasing my Ruby/JS skills during the "lost years" doing ASP.NET.
Sorry you feel that you "lost years" doing ASP.NET. I did some COBOL, FORTRAN, Pascal, C, C++, VB, and Delphi during a period of two to four years and don't feel they were "lost years". In fact it was all fun. Would I be better off if I had done something different? I guess I will never know...
They were lost in that nothing I did with ASP.NET (not MVC) has translated to what I'm doing today. No patterns, no habits, no tooling, nothing. COBOL/FORTRAN are languages and I'm not sure they correlate here - but maybe top-down design ripples still? :):). I learned a lot in Pascal - mostly how to comment things :)
Well, I'm ok with having wasted some of my years in technology that has nothing to do with what I want to do today. I read your blog, watched some of your Tekpub productions, downloaded and used some of your code (massive) in a project, and have been following you on the Internet for quite a while. Honestly, for someone that lost ten years of his life you are doing fine. I downloaded biggy today and will be checking it out -- thanks for your contributions.
>Honestly, if your thirteen year old technology choices are still having an impact today, then you're doing the wrong thing regardless.
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?
Really? If you don't randomly flit from fad to fad you are "doing the wrong thing"?
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.
Watching the things the ASP.NET team has accomplished inside such a politically poisoned organization as Microsoft over the last few years has been inspiring. I don't know how they managed to get things like "out of band" updates, open sourcing MVC, and so on accomplished in that environment. Makes me think there is hope for getting some similar changes through in my current "enterprise" environment.
Developing on the ASP.NET stack is nothing like it was in 2001, or even 2011. I used to loathe ASP.NET, but what MS has done has really emboldened the dev community to contribute some really great OSS solutions.
At my last job, we migrated from classic ASP to ASP.NET MVC, but we pretty much just left out all the horrible parts of ASP.NET (which there are, of course, many).
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 have been working on the MS stack for more than 14 years and still remember the decision I made to invest in learning the .NET platform. I certainly don’t regret my decision and maybe in hindsight I would have made some different choices along the way but being a .NET developer pays my bills and gives me plenty of satisfaction. For the last two years I've been doing more with the big three (JS, CSS3, HTML5) and I’m keeping my eyes on SignalR, Web and Mobile Development, AngularJS, and other "cool" technologies, but .NET is still paying my bills and I have no problem with that.
Why not do both? I did C/C++, then C#, and now C# plus PHP, JavaScript, or whatever is needed for the job. Sure it takes some ramp up, but not that much.
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 had to make this exact same decision in 2001 and I chose PHP!
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.
>the Microsoft web world was (and to a large degree still is) all about "Visual Component Development". What that means is you basically do a lot of drag and drop
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 same reaction to ASP.NET 1.0. "Do they have to make this thing so damn hard?" I had a PO system to write, and didn't have the time to fart around with bloated datagrid components and reams of cumbersome XML.
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.
i was about 16 or 17, and I sat in front of my freshly reformatted computer with a copy of windows NT4 and the latest version of slackware at the time. I was going to do a full partition install of one or the other ...
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.
Rob did some interesting and influential things in the .NET community which stems from exactly what he wrote about: his work with Ruby and Rails.
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.
I read the whole blog post disagreeing with almost everything right up until the end when I read:
"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.
In 2001 - 2008 there was no ASP.NET "WEBFORMS". We had VS, CodeBehind, and Server Components - that was the world I lived in.
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.
Javascript frameworks are going a long way to eliminate some of the worst parts of .NET development. The ability to design c# as a service and use api calls as hooks to the back end has helped act as a catalyst for change.
"...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."
First, asking yourself if you did the right thing is silly, you made the best decision with the information you had at the time. To be honest, technology ebbs and flows. What's hot right now may not be hot in the future. I think the key skill is learning how to learn, so you can learn a new technology quickly. Also, don't just focus on technology, understanding how a business operates is just as important!
No - go Java. ORMs, document generation, reporting, integration, architecture, deployment, tooling, devops stuff. Literally everything is ready to roll out of the box for $0. And it all works.
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.
I would go Java if the syntax weren't so stale. C# has continued to improve over the years. The BCL and compiler teams are not afraid of breaking changes between major versions. Stability is good (which is why non-nullable reference types won't make the cut), but stagnation kills the ecosystem and drives new contributors away.
Java syntax is usually pretty irrelevant when it comes to actually solving problems.
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.
Actualy I would think Java is a better technology to bet on if enterprise and neckties are your cup of tea. While things like AD, SQL Server and Windows are ubiquitous, there are lots and lots of companies that prefer Java over C#.
Not only that, Java talks to AD via LDAP and SQL Server via Microsoft JDBC driver. The same is not true the other way round for a lot of things though which means you are stuck in the Microsoft ecosystem the moment you put one foot in it.
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.