In 2012 I was a humble PHP developer contracting for a London-based company. I was managing their poorly written website which was built by an outsourcing company before I was around.
The company expanded and the CTO made a decision that going forward all new projects would be written in the .NET Framework using C#. New developers were hired and I was now the weird PHP guy using a Mac.
My work load was reduced as a feature freeze was enforced on the PHP site before phasing it out. I was offered an opportunity: learn C# and the .NET Framework and all the other tools/ libraries that were in use. My thought path was simple after a few hours, either stick with PHP and leave or learn a something new. I chose to stay. If I didn’t enjoy it I could always pay the rent with my PHP experience, right?
I had previously worked with Java so it wasn’t actually hard at all to pick up C#. The ins and outs of the .NET Framework took a while longer, but the benefit of working with developers who had years of C# .NET under their belt meant I had pretty decent code to work from. I was also able to annoy them with my questions.
My learning process began with snooping around the team’s projects and then taking on simple tasks such as bug fixes and small features. It was a brilliant way to learn something new quickly. Within a month I was taking on new features on my own and eventually new projects.
I have to say once you get your head around it all it’s a pretty nice place to be. Visual Studio 2012 is brilliant - I’d say it’s the best IDE I’ve used. Things like NuGet, Entity Framework, ASP.NET MVC and Razor make life easier for you and are well thought out. There are lots of open source projects that are quite cool in the .NET world. One that I enjoyed particularly was SignalR combined with Angular.js.
One thing that I didn’t do much in PHP was testing. While it was a little lax on some early code developed by the new team, a recent major project stuck to unit testing using NUnit religiously with mocking via FakeItEasy. We also did BDD with SpecFlow, which uses the syntax from Cucumber.
The two main issues people have with developing on the .NET framework seems to be associated cost and that it’s closed source. While the licensing can be restrictive (SQL Server costing upwards of 10k anyone?), I think it’s mostly worth it. I’ve recently been accepted into BizSpark which means my startup will get 3 years free licensing for a variety of Microsoft products. While not strictly open source, there is code available for parts of the .NET Framework, the ASP.NET stack is open source. And there’s always Mono.
Having used Macs since around 2009, moving from OS X to Windows was a bit annoying but not the end of the world. I still use my Macbook at home though.
The culture change is a little weird too. While PHP isn’t Ruby or Python it still had a bit of an active community which was kind of fun and interesting. It seems like because .NET is used widely in enterprise and only a small amount in startups, there’s less going on visibly.
I’m self-taught (no degree). As a self-taught PHP developer you generally won’t struggle in the UK at least and as long as you’re decent at your job you’ll do well. However looking around a lot of jobs are requiring a minimum of BSc Comp Sci from a decent university. Maybe this is because .NET is used in more enterprise settings than PHP. The pay looks better though.
I have chosen to build my startup’s product in C# .NET. I do think this may hinder it in the future if it’s a success, mainly because of the difference in culture but we will see. My gut feeling is that I’m strongest in this language and framework(s) so I’ll deal with all that later if it works out.
I’m not sure if I will be using .NET this time next year. I have recently built a website in Python using Flask, which was fun and I would like to do more Ruby things but there isn’t enough hours in the day. Scala looks good also and I would love to build something with it.
The main thing I’m proud of in the last year is that my programming skills have dramatically improved. PHP will let you be a shitty developer your whole life. While it’s possible to write shit code in C#, I’d like to think I’m doing a bit better than that. Testing, dependency injection, SOLID/DRY/YAGNI/KISS, n-tier architecture, proper abstraction, build servers and continuous integration are all part of my day now.
I think more people should be trying it out. You might even like it. It works for Stack Overflow.