Code re-use is the Holy Grail of software development. Countless hours of refactoring, countless books, countless software development tools, components, IDEs, and platforms have been dedicated to pursue this elusive quality.
Why is this? As software consumers, we are used to seeing very rapid advancements in technology. Every year, we see more amazing things accomplished in hardware and software. We see new gadgets, new technologies, and new concepts all conspiring in new and wonderful ways to make our world smaller and more manageable. The pace is almost beyond comprehension. When you think about where we have come from and some of the history of computing, it’s mind-boggling. We now carry in our pocket in a mobile device the computing power that used to take up an entire building. We can reach around the world at the speed of light to connect to information and people. We can store more information than our mind can comprehend on a device the size of our thumb. And we have built for ourselves somewhat of an expectation of magic and miracles.
The people that we build software and solutions for have similar expectations. They expect us to do more with less. They want the power, the reach, the magic, and the miracles. And they want it all on a meager budget.
As software developers, as architects, as solution providers, we do not have the luxury of re-discovering fire on each project, for each client, and at each juncture. We need to amass the ability and the tools to pull together large infrastructures of information, people, and feature sets in a short period of time. We need to start our journey as far down the road toward our destination as possible.
That means learning how to utilize the tremendous platforms we have available to us to deliver compelling solutions to our customers. There are so many development platforms from which to choose. Each selection has tradeoffs in performance, footprint, and feature sets. One of the greatest challenges for the solution provider, architect, or developer is to decide which platform in which to invest time, energy and resources, and which to recommend to clients. SharePoint is one of these great development platforms—one that I will examine in detail in this book.
The topic of SharePoint as a development platform is one that has recently been gaining a tremendous amount of traction in the .NET and SharePoint developer communities. Microsoft events are focused around this topic, books are being written with this concept in mind, and Microsoft has dedicated a large portion of the SharePoint 2010 and Visual Studio 2010 product features to improving the developer experience for SharePoint.
SharePoint as a product offers many outstanding built-in platform features. Extensibility of web sites and collections, user authentication and authorization, document management, calendars and tasks, blogs, and wikis are a few of the popular features encapsulated within the SharePoint platform that can help companies move to a more collaborative working environment. All of these features within SharePoint are engineered in a way to make them extensible with the tools available in Visual Studio 2010.