Last week I wrote my very first .NET program in order to fulfill some requirements for SharePoint project I am currently working on. I wanted to reflect on my initial experiences with multiples aspects of the development environment.
Just some quick background on me for context:
- I have some commerical development experience with: Java, ColdFusion, Ruby and PHP
- My prefered IDE is Eclipse which I use for Java and ColdFusion development. I have used Eclipse, Netbeans and Textmate for Ruby development.
- My understanding of OO concepts and design patters is rather high. I have used frameworks like Spring and Hibernate.
- I've used multiple UI development tools and I prefer those which support a mixture of markup and scripting (Flex, Laszlo and HTML come to mind) over pure coding (Swing, for example) even if there is good IDE support for component layout and wiring events.
Visual Studio 2005
I was unable to install Visual Studio 2005 on my workstation. I had to rely on a copy installed on a virtual machine running on my workstation. Obviously not a great start to any development project.
Visual Studio runs surprisingly smooth on the VM (VMWare player) which was a bit of a surprise.
Overall, Visual Studio 2005 seems adequate, even for a beginner like myself. However, I would prefer a bit more documentation on the referenced classes in the project. This is probably more a limitation of some of the SharePoint libraries than of Visual Studio, but I didn't feel like each class and method has enough documentation to use it correctly.
SharePoint SDK
One the major shortcomings of SharePoint development is that to really be productive, you develop on a machine running SharePoint, which, therefore, means you are running Visual Studio on a server operating system. This seems like a significant limitation, although I've seen that there are ways to work around this, I don't have the time or skill to undertake such an endeavour at this point.
The SharePoint object model is relatively straightforward, and its component based architecture for UI lends itself to less spaghetti code, but doesn't seem to completely eliminate the ability to code things badly. That's fine. Developers should always have enough rope to hang themselves. And as a beginner, I fully expect to do just that in the coming week.
C#
For a Java developer, C# adoption is not too difficult but there are some nuances to be aware of and some keywords, which, frankly, I'm not sure about. Luckily, C# is common and a quick Google search easily clarifies any confusion I may have. Still, I'm not competent enough to just get things done just yet.
There are many times in past couple of weeks where I have checked on the status of IronRuby and considered IronPython. Ultimately, I opted against investing any time here because
- as a company, we should standardise .NET development on C#
- I'm not sure what the IDE support for these languages is in Visual Studio (and I don't know what my other options are)
- I have no idea how to get started installing other languages into the .NET environment. One thing at a time, please.
Documentation
At the code level, the core SharePoint object model definitely could use an increase in documentation, probably of at least triple the current level. Comparing what Visual Studio gives to what Eclipse will show with Javadoc, I'd take Eclipse any day.
At the conceptual level, MSDN does provide some good, short examples and background to assist development. Still, its structure and content could be improved. (I
really don't want to see Visual Basic examples when I'm doing C# development. Can't I turn these off?)
There are many blogs about .NET development, but much less so for SharePoint-specific development. This is definitely a problem because even trying to solve a beginner level problem (created alerts automatically for SharePoint groups) doesn't appear to be solved and posted by a blogger. I suspect I would have better luck in the Java Portal world, but I could be wrong.
Conclusion
It has been easy to achieve a base level of productivity with Visual Studio, C#, and SharePoint for someone with a moderate amount of experience with other technologies. Still, Visual Studio suffers from many of the shortcomings of other Microsoft products: unreliable (at least of installation) and a high dependence on other Microsoft products (Server for SharePoint development).
The code-level documentation is still lacking, but there are ample sources of information out there, both on Microsoft's development site and on random blogs. Still, Microsoft's documentation is the most comprehensive (but could definitely still be better) and there aren't enough interesting bloggers solving SharePoint problems and posting their code.
I'd say that I'm sufficiently encouraged to continue working through all the hiccups that are common when starting on a new platform and paradigm. Hopefully I'll be able to remove my beginner status in the next couple of months.