Yes, the enhanced auto-complete capability that static typing enables is a great feature (I should note that dynamic languages can offer completion too, just not as comprehensively). But it must be weighed against the tradeoffs. I believe many of these language features like static vs. dynamic typing are not "one is better than the other", but simply characteristics that make certain tradeoffs.
A decent comparison of static vs. dynamic typing can be found here: http://batsov.com/articles/2011/05/08/jvm-langs-scala/ (scroll down)
For all C#'s strengths, you've got to also consider the negatives. For starters, you're dependent on Windows; for the development environment and the server. I don't know if you also do server administration, but let me tell you: running Windows servers is an exercise in pain.
Second, in an age when many wonderful programming environments are available as open source, I question the wisdom of marrying yourself to something that is deeply proprietary. When you're first starting with .Net, you might not think about this. But years in, you may find that you are stuck in a system outside your control, dragging your code and livelihood along with it. As I did.
C# has many strengths and I have great respect for its architect Anders Hejlsberg. That said, I am very much glad to be free of it!
I usually don't need any documentation with Ruby. I remember how the libraries I use work. But I'm that kind of guy, who first reads the source from Github and then start programming the thing by my own. I hated with Microsoft libraries, that I had to use reflector to see inside the library, when it didn't work like it should've been. Now I'll hit the fork button if the library contains a bug and I need a fast fix right now.
I've certainly made exceptions to that - we probably all have - but treating that as the defacto way to approach using third party libraries is wholly inefficient (as you said).
One might take a better approach by saying "read and learn from the test cases". I've often found that for the libs I try that with, that have tests, they're often rather... what's the word? I can't easily figure out how to apply the library to the problem I have at hand. Sometimes it's because my problem is ill-defined, and sometimes it's because the tests only cover superficial cases, and even if the lib docs say "can do xyz", it's not tested not documented.
Such is software...
Without Github though, the situation would be much more annoying.
I completely agree with your point on learning other languages and frameworks, btw - the story on your journey was an interesting read. I'm just a bit staggered on how your journey ends with you choosing what I consider to be vastly less powerful tools (e.g. vim) when you know that there's tooling out there that, well, in my opinion is just plain better.
If money is really the main argument, then, well, fair enough. Even then I'd choose Java, once again for the refactoring/maintainability support, but people have called me an idiot for less so I guess that's just me :)
At the end of the day, somehow I get drawn back to Java. Eclipse and IntelliJ are the 2 editors out of this world that it blew my mind.
Here's a use-case that I stumbled upon a few times:
1) Download a 3rd party library via Eclipse - Install m2clipse (Maven plugin)
- Open the pom.xml and add the libraries you need
- m2clipse will download the final JAR version (without the code)
2) Use the 3rd party library downloaded by m2clipse to access JavaDoc
- All you have to do is to utilize the intellisense and m2clipse will download the javadoc JAR
3) Navigate to the 3rd party library internal source code
- Hit the shortcut key to go to the actual implementation of the class
- m2clipse will download the source JAR of that library (provided the 3rd-party provider also upload the source jar to whichever Maven repository it exist)
You can't do that with NuGet. At least not yet.
Many people, to this day, have this hatred against Maven yet from time to time again I have not seen a good substitute of Maven that integrates well (albeit some slowness) with the IDE.
While C# has all the syntax goodness, this is something that I noticed, not many people are actually exploiting them. Only a tiny fraction of C# community that probably use it to the fullest. At the end of the day, C# is just like Java.
Given the dynamicness of PHP, the editor support may never be as comprehensive as VisualStudio/C#, but it's better than it was a few years ago.
And if you come back to Java, give Grails a spin :)
Exactly my point.
But indeed, you're right - used Netbeans for PHP a few years ago, and it was awesome compared to the text editor I used before (but not like Visual Studio with C# by far).
The .NET environment is amazing. Its open source community is really picking up speed lately, the framework docs are top-notch, and, most importantly: C# is a great modern language with excellent editor support - a unique combination (possibly barring F#).
Java has good editor support (IntelliJ, Netbeans) but, well, it's Java. Ruby and Python are nice, but can never get the support for maintainability and refactoring that a statically typed language can. After my Ruby years, I never want to have to guess what I can do with an object passed to some method I'm maintaining anymore. And then I didn't even mention all the framework magic circling Ruby, making it even more difficult to understand what the code you're looking at does.
The ability to type "varname." and get a list of what I can do with it is so powerful. I can use a (well designed) open source library that I just NuGet'ed in, without ever even looking at its docs. Can you write PHP without alt-tabbing to the manual all the time? Can you do it with Ruby?
I'd even choose Java over Ruby for that if I had no other option; I'm no Microsoft evangelist. I'd probably do Scala if the editor support became better (which I hope it does), but C# comes pretty damn close to what I'd want to use Scala for anyway (closures, LINQ, properties, extension methods, even currying is no problem).