Microsoft is working on its next release of Visual Studio, a tool that has no comparison in the industry to date. Well, I have a reputation for not being pro Microsoft but the way I see it, I just tell it like it is. These days, I think the Redmondians are getting their act together which terrifies me at some level as well as nudges me to give them the respect that they so rightly deserve. Terrifies me because these are the same people who produced versions of Windows pre-Windows XP SP2; SP2 is a decent product but the architectural and engineering work it is running on is fragile in my opinion which means that not much innovations can be added to it without breaking a lot of things (which could be a good thing but hey that’s a story for another day). With Windows Vista, I believe they are moving in the right direction with UAC and all.
These improvements are not only limited to the OS but run the gamut of Microsoft’s offering. The .NET Framework has been in existence for quite a bit and initially it was just doing what Java had been doing for a while. Version 2.0 of .NET framework added additional improvements and then what’s popularly called version 3.0 added a slew of additional extensions (or libraries you may called them) that deal with communication (Windows Communication Foundation, formerly Indigo), workflow (Windows Workflow Foundation) and presentation (Windows Presentation Foundation, formerly Avalon). All these additional extensions run on top of .Net framework version 2.0 which has led to questions about bumping up the version number of the framework. Minor version number increases would have been enough to communicate the knowledge that there are new stuff but the base of framework has not changed. When Microsoft Visual Studio Code name “Orcas” makes it to the stores, it will come out with .Net framework version 3.5.
This release of Visual Studio will be an improvement on Visual Studio 2005 which I currently use; comparing the beta to the current offering is not fair but I like the improvements in the web designer and the support for CSS has been greatly improved over the current production version (as of this writing) of Visual Studio. Much of the improvements with Visual Studio Code name “Orcas” are under the hood and come courtesy of Microsoft project such as LINQ (Language Integrated Query).
I have heard about LINQ for a while but it is only recently that I have spent time looking into its theoretical foundation and I must say, I like what I found out. Basically LINQ aims to bring data manipulation semantics into general purpose programming languages like C# and Visual Basic. Such a statement sounds deceptively simple by itself without appreciating the current state of affairs in data manipulation when working with general purpose programming languages. The most common data stores in the industry are typically rational databases and as such most programming language code are intermingled with strings that represent SQL statements that are then sent to the database for execution and the results are returned to the application which then manipulates it further (for presentation for example). The following are some of the problems that arise from the aforementioned scenario:
- Tools are not aware of data manipulation statements (represented as strings in the programming language) – this means that the tools cannot provide additional support at development time.
- The programming language treats the data manipulation statements as string which, as string data types, are limited to the methods and capabilities of the string class. This means that any further processing of data within the context of the programming language is likely to be complex.
- Perhaps of greater significance is the paradigm mismatch between the programming languages (more likely to be OOPL) and the data store (relational databases for example); this rapidly turns into a battle to marry OO paradigm to the relational paradigm.
There has been numerous attempts to solve the paradigm mismatch between the OO and relational realms; Object/Relational Mapping (ORM) techniques aim to solve this problem; ORM basically allows you to define the mappings between your objects and the tables to which they persist their states. I have had experience with Hibernate and this particular ORM technology has its own query language which is used in retrieving objects from the relational data store and the ORM layer takes care of the mapping between objects and tables. One of the more fascinating thing I discovered with Hibernate was the ability to navigation relation between various objects: for example a Customer has a collection of orders and an order as a collection of order items. This was something revolution at the time but LINQ brings into the equation the ability to establish and manipulate such associations over collections as native constructs in the programming language.
The people behind the LINQ project has done a commendable job; I have been looking for implementation of similar ideas in other places but I have not found evidence of it thus far. The LINQ team has taken a different approach to solving a problem that has taken root in the industry and perhaps has accounted for the complicated nature of programming. LINQ leverage functional programming constructs added to the C# and Visual Basic.NET languages. I was just reading an introductory text to functional programming in Haskel, just to get a clue about functional programming and after reading that book, I saw the possibilities and advantages that functional programming present. As a point of digression, I like understanding things from my perspective (I suppose that’s what most people do) but I like to get a feel of things so that I can create new perspective of the same situation (these “new” perspectives do not have to be original but more often than not they come to be different than what most people are used to). With regard to functional programming, I am on an exploration path; I am looking into understanding the theory behind it as well as increase my knowledge to better take advantage of functional programming. It has occurred to me that most of the programming languages that I can work with are the same: they are imperative programming languages that fundamentally deal with the state of a program. On the other hand there are other kinds of programming languages such as the functional types and even more curious ones like Python that seemingly straddle the imperative and functional domains.
This is an introductory post which I hope to follow with a tutorial which I used to get my first feel of the power of LINQ. It is a small app that I have been thinking about. Yes, perhaps a more in depth look at LINQ would be more appropriate. Stay tuned and check back.