StatisticsTotal Posts: 34 This Year: 0 This Month: 0 This Week: 0 Comments: 161
Recent Posts
On this page....
Archives
Full Archives By Category
2007 Calendar View
| April, 2009 (1) |
| March, 2009 (2) |
| February, 2009 (3) |
| January, 2009 (2) |
| November, 2008 (3) |
| October, 2008 (4) |
| February, 2008 (1) |
| December, 2007 (2) |
| November, 2007 (5) |
| October, 2007 (2) |
| November, 2006 (4) |
| June, 2006 (1) |
| May, 2005 (2) |
| April, 2005 (2) |
Categories
Admin
Sign In
Acknowledgments
DasBlog Theme Design by: Tom Watts
E-mail:
Theme Image by: dreamLogic
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.
|
 Thursday, November 29, 2007
The first time I heard the word ubiquitous, a sigh of utter and ignorant reluctance went through my mind. I figured that such a beautiful but complex word is absolutely bound to bear an over-complicated meaning to something that perhaps might be very easy. And unfortunately, that killed my interest at the time. Well, having understood the importance of ubiquitous language my interest is gained.
So what does it actually mean? Well, a quick search at my favorite place to look for strange words gives me a hint. When adding the word define: before a word, acronym, abbreviation whatever in google, a search will be done at a number of open dictionaries on the Internet. This is nice since the explanation of the word is given in a number of different contexts which gives me a broader meaning of the word. With this search, define: ubiquitous, 5 different explanations are rendered. The one I choose to show to you is this one:
omnipresent: being present everywhere at once from wordnet.princeton.edu/perl/webwn
In Swedish I would translate this to “allomstädes närvarande” which is even more poetic I think. However, the English translation put us a bit closer on the map as to an understanding of the word, but we’re not there yet. What is omnipresent anyway? Is there really something that can be everywhere at once? Sounds like something I want to be…
Well, speaking about ubiquitous language, naturally we are talking about a metaphor. And after reading about ubiquitous languages in Eric Evans book Domain Driven Design and having combined this knowledge with my own experiences in software development, the pieces actually fall together.
Ubiquitous language is all about sharing a common terminology between people. This is an extremely important ingredient in how we communicate with each other. Without a common terminology there is no way that anyone can explain anything to anyone else. Or at least it will become a very, very difficult thing to do.
Let me take an example of this. Imagine that you are about to explain to you six year old son how he is to ride his new bicycle. Only that you are not allowed to use any words that actually describe such things as pedals, wheels, and stepping on the pedals. Of course you can always point at the things and call them “thingie” but try doing that as you let go of the bike and let him take off on his own. Well, he is bound to crash the first couple of times anyway so I guess this doesn’t matter that much…
It is hard to find good illustrative examples, isn’t it? Well, I am working on my imagination in this area.
Anyway, in software development we have something that is called the domain knowledge. This is the core business knowledge that is associated with the application(s) to be built. Each company have their own business knowledge and thus also their own specific terminology for it.
However, unfortunately the same terminology is not always used across the company and towards customers. Marketing people will use some terminology when they speak to customers when they originally sell the terrific idea. Then developers probably name those very same things to something similar in the domain architectural design. Then suddenly, further down the road, marketing renames a domain term to something else much cooler and, u-hu, the developers are doomed… They feel that this name change is just not worth the pain of changing it in the software design also. Especially this is common when we are talking the database with live production data. Ouch, do not touch it, it may fall apart and it is deadly vulnerable, the heart and soul of it all etc… Once this name conflict has occurred, the terminology is not shared any longer. Instead all developers have to map their domain names to what marking people means with the provided functionality. This is an utter source of confusion.
Of course, a name change is not the only reason for a mixed terminology at a company and there are certainly most often more players involved than merely developers and marketing people. Lacking communication within a company or misunderstanding of the domain model is just as common source of a fractioned terminology.
So where does ubiquitous “thingie” come in? Well, the terminology that we use to communicate with each other should be as understandable and sharable as possible to everyone so that the same words for describing domain knowledge are used. Then we have a much better chance of actually understanding each other. Trying an illustrative metaphor again; it means that we could concentrate on fitting the puzzle together with the help of the puzzle images instead of trying to do the same thing merely using their geometrical size. At least this is the sensation I get when working in such a domain at a company.
If you know of and understand the domain model and you are about to explain it to new-comers in the project, then my advice is that you start with explaining the terminology being used in a document. This will make it easier for other to understand the domain since they can start by reading this before they get an explanation of what the applications actually does. Otherwise, you will most likely use specific domain language words in your verbal explanations that they have not have heard of before. This will probably make your audience miss the main points you are trying to get across.
Also, by extracting and writing the terminology you will get a better perspective of the domain that you consider as natural and simple but perhaps is not. Most likely, you will find names that are confusing and duplicate names meaning the same thing. If so, revise the terminology so that it is correct and up to date. Make sure that this is the terminology that is used throughout the company by discussing with people. Then you achieve a ubiquitous language which will let you stay focused on the real problems and how to solve these.
 Thursday, November 22, 2007
I guess this is quite a dramatic blog title statement but unfortunately it is true. I am often cursing over regions I find in other peoples code. This blog post will tell you why generally I don't like them.
Both C# and VB.NET allows for a feature called regions. Regions at class level may look something like this:

Now, the benefit of using regions is that you may collapse them easily when you are not currently working with them. Many regions could then look like something like this

Of course, in a real scenario, you would have a more real case choice of selecting regions as to group class members. I’ve seen that it is common to group methods and properties etc. according to member accessibility level, i.e. private, protected, internal etc. Also, it is quite common to group regions of common member functionality; kind of like having inner classes but categorized as regions instead.
To make things worse, C# allows regions to be defined within members too:

So, how come I don’t like this? Well I have a couple of reasons for this:
1. Regions at class level make the code harder to work with. I think most advanced (lazy ) .NET developers know that the Visual Studio short cut keys Ctrl + M + O collapses all methods and regions in a class. This action gives a quick and good overview of either the members or regions in the class. Even though you may expand/collapse a specific region with Ctrl M + M, it is quite a hassle to have to expand both regions and methods to get an overview of the actual code within the method. I think that an overview of the functionality of a class is best given by the natural language constructs themselves without using regions. Once you start adding regions to you code, you add an additional expand/collapse step in order to be able to start working with the actual code within you methods. This makes the code harder to work with.
2. Often, when regions are used at class level, it is done because there are too many members in the class to keep track of. This means that the cohesion of this class is low which is bad. Another, very similar principle, founded by Robert C. Martin, is the Single Responsibility Principle. Regions tend to make you violate this principle since classes become too large and contain too much mixed functionality. More on this in a future blog post…
3. Regions within methods share a common symptom. When regions are used within a method, it is likely done so because the method is very long. Too long if you ask me. Methods should be short and be easy to read and understand. Otherwise they will break what I usually call the Divide and Conquer principle. In short Divide and Conquer in software design, as I choose to define it, is a major problem split into many smaller problems by decomposing a method into many smaller methods. This is how you understand and solve a major problem a lot easier since you don’t have to be keeping too much detailed information in your mind at the same time.
4. When you use regions within a method, it is much more difficult to track the actual data flow between different regions. If local variables are used, and not state fields, you can easy see the API for each method. I.e. you see what input data each method needs and what output data it delivers. Regions within methods do not give you this and the code becomes much more difficult to understand.
5. Regions within large methods have another problem: if you receive an exception in operation and if you are logging the stack trace of the exception, you have a much more difficult time to track where the actual error occurred. With smaller methods instead, you will at least receive information in which method the error occurred. (…and of course you should not compile your code with the debug flag to true in operation environment…)
Well, these are the negative consequences of regions that I have come up with so far. Of all these negative aspects of regions, I think the potential violation of Single Responsibility and Divide and Conquer Principles are the worst ones. From what I’ve seen, regions tend to make programmers forget that they are developing in an Object Oriented language and instead program as if using a functional programming language. Sure, functional programming languages have their strengths, but improved readability and therefore better maintainability is not one of them.
So. Is there a place when regions actually are ok to use? Well, if someone has placed a region to group some less significant members of a class, I might accept it although I probably would not define the region myself. However, I will never ever accept regions within methods since I think this violates the principle of Divide and Conquer.
Though, I have found one case when I actually use regions myself. I find them excellent to use when I am constructing demos for course material. Regions let me hide code and comments that I don’t want my students to see yet. Alas, I use regions strictly for educational purpose. Wouldn’t the world be a better if everything just was a big nice demo…. However, it is not. So lay off those regions in your code. Please.
 Thursday, November 15, 2007
I started out the chronicle that I recently wrote giving an angle at the information society we live in today. This is also what I will cover as a starter in this first web 2.0 blog post.
For developers, the information society is very real indeed since the knowledge base required for programming is huge these days. I have only been in the industry for about 10 years, but even in this time I can surely notice the change from when I began. In the .NET field alone, which is my field of specialty, there are thousands of classes that are good to know of. It is not always that documentation provided from Microsoft covers the need that exists. Also, the number of frameworks, libraries, components, third party open source products, tools etc seem to have exploded the last couple of years. It is not easy these days to call yourself an expert developer of .NET; Nor in any other programming domain for that matter. Most, if not all, people don’t call like to be called experts in such a broad field because of the expectations it may raise. My experience is that an overall humble attitude resides when it comes to programming knowledge nowadays. Something that is quite alright I think. We should be humble for the unknown I think.
Anyway, for developers, the provided information on the Internet has become a reliable source of information. This includes blogs, communities, articles, wikis etc. There is less of a need for developers today to keep track of all intricate details of language and frameworks since there are so many resources available out there. So many people share their experience in blogs and communities which many times makes is quite easy to find a solution to a specific problem.
However, we do have to distinguish between semantics and syntax. Syntax being the language we program in and I dare to say knowledge of the Frameworks provided to us; Semantics being how we program in the language and Frameworks. Both types of knowledge are to be found on the Internet. Semantics, however, is so much harder to learn than syntax knowledge. Semantics deal with the architecture and the design of software and this takes knowledge (lots of reading) and experienced practice (lots of programming). We are talking years of studying and programming in a professional domain specific environment. The funny thing is that even though I think I’ve reached perhaps the middle of the tunnel, occasionally it seems like I am thrown back to the start of it due to some new experience or gained knowledge. What other profession allows you from time to time to have the sensation of being a rookie again? To me, this is fun. And frustrating.
Well, this blog post kind of made the introduction of what I am hoping to become a series of blog post in the web 2.0 field. I have many thoughts to share, especially when it comes to wikis as software development tool in software projects. So stay tuned for upcoming post if you’re interested of my thoughts.
For about a year now, I have on a monthly basis been writing a chronicle for the Computer Sweden magazine. I receive a software developer related question in various software areas each month. Most of these chronicles can be found here, but you will need to be able to speak Swedish in order to understand them… J
However, each month I do end up with the same kind of struggle: to shorten the chronicle to the text length I am allowed to have. There is absolutely nothing wrong with this. On the contrary I think a chronicle should be enjoyable and somewhat light weight to read, not covering too much details and especially not be too lengthy. In short: enjoyable to read. Don’t know if I accomplish this really but I do my best.
However, it is really difficult and a very special art of writing to be able to be precise and tell something meaningful on a limited length of text. I believe it was August Strindberg, a quite famous Swedish author who once said: “I do not have time to write short”. Now, I am definitely not comparing myself with Strindberg but I do understand what he means. All too often I have been writing emails to my colleagues at Dotway that perhaps have been a few pages to long (pages being a metaphor obviously... J ). Some colleagues have even coined such long mails as “Tobias mail”… all to my utter frustration of course. I dare to say that I really do try to shorten long mails down, but sometimes this just takes too much time to go all the way. I always do spend long times reviewing such long mails so that the structure is ok and understandable and that spelling and grammatical is ok. Anything else I think would be disrespectful to whomever I am writing to since I am opting for precious time on my account.
As a side note: The last couples of month I have a couple of times successfully changed tactics going from quantity to multiplicity … J Maybe this is the road to take.
When it comes to the Computer Sweden chronicles, the editors leave me no choice and I really have to spend time to be brief and consistent. Even though I occasionally has slipped the quota and received a gentle and friendly mail distributed slam on my fingers from the editors, most often I have been able to keep myself at a maximum of 120% of allowed text length... Anyway, I am thankful to the Computer Sweden for giving me this opportunity to practice being brief and nail those specific points.
So why am I writing all of this? Well first of all because it is my blog. I can write whatever I want in it without bothering if people will read it or not. Second of all, in the last chronicle I wrote, which is supposed to be published soon, I did add a reference in the end of it to my own blog. Why? Because the topic, web 2.0, is huge! I actually have a lot of more thoughts on the subject than what I could fit into the chronicle. And the chronicle being a web 2.0 chronicle, it seems like the perfect ending for it too. J So after this --- ehem --- rather lengthy blog post, I intend to get right at writing a blog entry about web 2.0.
This week I finally did something about my blog engine. I have gotten tired of the DasBlog skin I was using so I found another one that I liked. So finally, I downloaded the last version of DasBlog v2.0. It was over 2 and a half years since I looked at the source code the last time (open source) and it seems like people have been doing a great job since then bringing new functionality to it. I am not sure if I like/understand everything that I see in the code yet, but it is definitely an amazingly good open source project. Many thanks to those of you who have contributed with your time to make this possible!
Btw, there might be some errors still on this new site of mine due to missing configuration, so please let me know if you find one. Promise I’ll buy you a beer next time you’re in Gothenburg if you do
 Thursday, October 25, 2007
The 8 th of November Dotway will give our first breakfast seminar in Gothenborg. It is free of charge and everyone interested in the subject are welcome. I know that my two collegues Björn and Truls have moslty looked into the 1.1 version and it is going to be a thrill to see it for me also. This is actually Dotways first "seminar tour" in Sweden and the seminar will be given in Linköping later on during the afternoon and in Stockholm on the 9 th of November in the morning. You can read more about it here: www.dotway.se/silverlight. So far I've only got 6 people signed up and I know they have had a full house twice in Malmö. ;( Well, well, hopefully more people will hear about this. The more, the merrier I think.
 Wednesday, October 24, 2007
Wow! Emabarrasing. I didn't realize it was almost a year since I made a promise to keep writing in my blog... Ok. Now I make a new promise, here and now: to never make any promises about writing in my blog. That's definitely a more easy one to keep. Allthough I do actually have a lot of subjects piled up that I want to write about and I hope that I can get started at it in november. But that's not a promise..  I have just spoken about Model View Controller at Pimp My Code that Cornerstone arranged. Yesterday in Stockholm and today in Gothenburg, Sweden. It was a great event and my brain is boiling down all the impressions I got during these two days, Both from hearing the other, in my opinion, excellent speakers but also just from the atmosphere during those two days. Hopefully I will get to do this again. Anyway, I did promise to hand out my code demos in my blog and here they are: MVC demos.7z (167,42 KB). (Download 7-zip here). I was worried for a while since out of convenience I placed the SQL Express server database (files) in all projects that needed it. Well, the database had a size of about 2 MB (although very little content) which rendered a total size of about 23 MB.. But 7zip did an amazing compressing job so I think I am home free. Now, some words about the demos. I did write them all this weekend and rather hastily. I did do some refactoring as I created the next demo and so on, but I did not bother to clean up the old ones. But the total code mass is so small as it is so that should be no problem to you. Also, I wanted the demos as clean and simple as possible in order to demonstrate different aspects and flavours of Model View Controller. Hopefully I did manage this. Although I do admit I would have liked to tidy the code a bit. But what the heck. Enjoy or destroy. Nevertheless, feel free to contact me if you have any question about something. My name is tobias.fjalling and I work at dotway.se. I think you can figure out the rest.  Here my powerpoint slides too: MVC.pdf (0,4 MB) PS. I just gotta do something abour this crappy blog GUI of mine. This is embarrasing too...
 Monday, November 20, 2006
Last week, the Öredev 2006 conference took place. I though it was a great event and I listen too many interesting speakers. I'll probably get back to write some reflections on some of the sessions in later blog posts. My own workshop session took place last Tuesday and I was assitested with Göran Halvarsson at Dotway for this session. I thought the workshop went fine although I have'nt taken part of the workshop evaluations just yet.. As I been writing previously, the workshop was based on the ASP.NET AJAX July CTP rather than the newly released beta 2 version. Not that it mattered that much I though since the concepts are the same. I just sent the workshop labs and the instructions for the walkthroughs to Michael Tiberg, the project leader of Öredev, so they should be dowloadable from the Öredev website soon. However, I've put in a lot of effort to convert the labs into the beta 2 syntax. This is quite cumbersome since much of the client control documentation still is missing at the ajax.asp.net web site. I'm almost done however, and I promise I will write about my endevaours with this matter in a future blog post.
 Thursday, November 09, 2006
I've been so tuned in lately on upgrading a .NET introduction course for Dotway, the company I work for, that I've totaly missed out on the ASP.NET AJAX beta 1 release that occured the 20 th of October. Feeling a bit embarassed about this I'm currently catching up on the news also in this release. As always, Scott Guthrie writes a spendid summary of the features in his blog. A lot of the features I found new in the beta 2 release yesterday apparantly were already there in the beta 1 release. Ohh, and sure, Scott writes an exellent summary on the beta 2 release as well. So I'll be using my weekend to look through the changes that have been made, especially considering the Öredev AJAX workshop comming up on Tuesday. Yippidiye!
 Wednesday, November 08, 2006
I'm definetly not the only one blogging this news, but ASP.NET AJAX beta 2 has just been released. This would probably mean that we are not far from a final release. This version is said to be feature complete although there already is a CTP version available with some parts that are being worked on. (I'll probably get back with info on what.) My tip of the hand is 2-3 months. I've just dowloaded the beta 2 and I haven't yet dug into it to see what changes there are since last CTP. But there is one thing I'd like to reflect upon already now. When installing the beta 2, it actually states ASP.NET AJAX extention. So we see that the ASP.NET AJAX will be completly integrated with the regular .NET Framework. My bet is that with time, ASP.NET AJAX will be a natural part of ASP.NET. Also seing in the release notes, that the <atlas: prefix for web controls is changed to the regular <asp: prefix. Nice. Oh well. Time to get my hands dirty. Almost forgot. The .NET Framework 3.0 has just been relased too. But I'll refer to a collegue of mine for this news.
It's been a while since I last wrote something in my blog. Last time that happen was just before the Developer Summit conference in the beginning og June. The workshop went very well and I was quite happy that I had put soo much work preparing myself and the material. And guess what! next week I will be doing the workshop once again at the Öredev conference in Malmö on the 14th of November. Actually it is a pre-conference workshop day. This time I will get some assistance of my collegue Göran Halvarsson and since it looks like it's going to be fully booked I most likly will need it. So why have'nt I blogged in a while? Well, actually, after the Developer Summit conference in June I went on long vacation for ... 13 weeks. Actually I was'nt only relaxing during this time, but did a different kind of work singing in the opera choral here in Malmö. My first visit in a professional choral was a great experience and hopefully it won't be the last time. We were doing Verdis Nabucco in Denmmark. A very intense choral piece so I did spend a lot time this summer studying Italien lyrics. Weird. And difficult. Not at all like programming actually... So after this I really have'nt come around to write in my blog althoug I've been back at my regular work for some time now. But that is going to change now I hope... Here we go!
|