Tomorrow I will start working in tuenti, a spanish social network similar to Facebook but with a bigger penetration in Spain and some differences (for example, you need invitations to enter, and you only have 10, so friend circles tend to be closer than Facebook).
That might not interest you, but the point is that tuenti works with PHP, MySQL and Linux. Now, if you read this blog (or see the right side tag cloud) will think "what?! but you were a .NET developer!".
And the answer is "yes, I am, and I will keep developing my stuff and personal projects in C#, but iI'm switching to PHP in my new job" :)
It has been very funny, because some of my friends are shocked with this change, so let's analyze the possible reasons of this shock:
We tend to get attached to our favourite programming language. As I mentioned, I will stick to C# for personal projects. I love C# and I think that the .NET Framework is one of the best software pieces Microsoft has ever made.
But in the software consulting world, we usually switch languages too. I've developed in small projects in C++, VB.NET and Buddyscript in the same job where I was theorically working with C# "only". Others learn to develop with Sharepoint or Biztalk, which use .NET but not very similar to a normal .NET application.
Some languages have stigmas. Some are true, some aren't. PHP 5 suffers the same one that Visual Basic .NET. It is not bad by itself, but in the past allowed so many dirty code stuff that the backwards compatibility can become a problem in unskilled hands. PHP 5 has a decent object orientation, and while it needs further improvements you can develop clean code if you want.
Some languages are "more cool" than others. Or maybe it's the current hype. Java developers think that C# is a twist of C++, when C# looks as if comes more from Java than from C++, improving a lot of things and allowing better ways of writing code (for example, event handling is similar to Java, but improved, IMHO).
A friend of mine once said something like "every language has a lot of limitations, I haven't yet found one without flaws, but I don't care as long as I make games".
People tend to forget what tools they use to develop, if they develop for something cool. The iPhone is one of the most desired gadgets right now, but Objective C's syntax looks terrible compared with C#. But you are still cool because you develop for the iPhone.
There might be more reasons, but I think those are a few important ones.
One or two friends have said to me that I'm crazy, and another that if I'm not sad to leave "my professional .NET career". Well, I am neither crazy nor sad for having taken this decision, and here's why:
This is my professional career timeline, with the programming languages I've used most of the time.
Before entering to discuss it, I must say that I first learned C, C++ and a bit of Assembler, back in the days of MS-DOS and Windows 3.11. Later I learned Visual Basic 3.0 (and up, as they were released), and Pascal and Java when I entered University, but almost all my coding was done with C (excepting visual Windows applications).
When I decided to start working while studying, the market for working with C++ was "too hardcore" (or at least I didn't found anything for junior levels), so I opted to go with Visual Basic 6.
I learned a lot of proper structuring of code, data-layered applications, error handling (avoiding On Error Resume Next, of course ;) and stuff like logging with VB6. We (my boss and me), just two developers, and one graphic designer built rich, pretty and "rounded" applications using the Windows API and GDI when most of the market was about square, grey windows and typical toolboxed icons.
Then I've had the luck of switching to C# and learning things like TDD, Testing, ASP.NET, and tons of other specific .NET topics along almost 5 years.
And now, I'm switching to PHP 5/MySQL/Linux. I've learned some PHP (I still have to read and code more to say I'm proficient with it) and I'm going to do my best with it.
But I'm not afraid, I am not frightened and I am not sad of changing. Because programming languages are tools, the tools that allow us to create applications. And I don't care if I have to be more careful while coding, as long as I like what I am building.
This decision has not been taken in a few seconds. I had three weeks (the time the whole interview process and code test took) to think about it.
One of the projects in which I had most fun in my whole career was developing a Windows Live Agent, with the most terrible programming language I've ever seen and one of the tightest delivery schedules I've had. But we succeeded and we did amazing things with a very limited language.
And I have seen a lot of wrongly done stuff in .NET, so a "semi-perfect" language doesn't means high quality software.
And because I like challenges too. It is more fun to try to acomplish things with some limitations than with almost full freedom and pre-determined components ;)
Update: I found this post of Adam Kahtava which says more or less the same but much more concise, and from a switch of .NET to Java perspective.