My previous post about C# losing its identity, “You Have To Know Your Identity” sparked lots of good discussion, which was my intent. There are very good comments in that post and they triggered thoughts I am trying to express in this post.

Lot of developers argued that they don’t see problems with dynamic keyword and other new language constructs since if these features are used correctly they add value.

Setting aside my initial argument about identity which I still stand by, I mostly agree with that, but that *if* was always defining characteristic. Most new language features, in any language, are not bad by themselves (except when they are just poor fit for a language), but usage makes them “good” or “bad”.

For example, in C++ we have learned that most developers can’t deal effectively with manual memory management, direct memory access and pointers. That gave raise to the managed languages like C#. Now, manual memory management is not bad, many developers use it effectively, neither is direct memory access or pointers, but how they are used, the discipline that is required when you use them, makes them source of all kinds of problems. Memory leaks, security leaks due to buffer overruns, you name it.

We learned then that we should stay away from them (i.e. invent new language) since they are “bad”.

Another very good example is SQL. At the beginning, we used SQL everywhere and directly interacted with the database. SQL was everywhere. We soon learned that we should really be working with higher level of abstraction so we moved SQL to Data Access Layer (DAL) and Object Relational Mapping (ORM) tools were born. We moved from raw SQL to higher abstraction layer since we learned that doing SQL raw everywhere, is not most effective and is error prone, i.e. “bad”.

Today we are (I am not 🙂 but have seen some very shall we say LINQ rich code) spreading LINQ everywhere and I see parallels to how we started using SQL. I am wondering whether we end up creating level of abstraction on top of it for the same reasons we did that for SQL?

The hindsight is 20/20 so perhaps upfront we cannot know what will turn out to be “bad” idea. Maybe only with years of actual (ab)use we discover these things.

Professional looking applications made easy with DotNetBar for WinForms, Silverlight and WPF User Interface components. Click here to find out more.