Skip navigation.

exploreopera

| Help

Sign up | Help

There is no spoon

It is not the spoon that bends, it is only yourself

New strategy at Microsoft

,

Disclaimer: Some people may find this entry boring. Sorry, I couldn't help comment the subject.

Microsoft's failures amaze me. Vista is the most unsuccessful Windows OS until now. They failed to acquire Yahoo after making lots of noise about it. Their online services pass almost unnoticed.

All those ideas were sustained by one man: Steve Ballmer. The same person who was selling Windows 1.0 like it was a vacuum cleaner now takes Microsoft's strategic decisions. And he's actually very funny, if you look at him from outside.

The last thing that he did was to fire the man who was in charge with Windows Vista and online services, Kevin Johnson, and to put himself in charge. This story tells me that Ballmer managed a narrow escape and found someone to blame for his own mistakes.

The first thing he did was to come with a new strategy. Here it is:

In the coming years, we’ll make progress against Google in search first by upping the ante in R&D through organic innovation and strategic acquisitions. Second, we will out-innovate Google in key areas…


Two questions pop into my mind:
  1. What language does he speak?
  2. On what planet does he live?


I mean, putting in the same phrase words like upping, ante, organic, strategic, out-innovate must really be a Guinness Book worth performance. Although things are always interesting with words.

Then, how will a company that has innovated almost nothing in the last 20 years plan to start innovating?

Oh, but I forgot. This is Microsoft, and Ballmer. Everything is possible for them.

There's no better ending for this entry other than some various Steve Ballmer quotes. It's an interesting read, I promise. (To be fair, there are many other famous quotes from him on the Internet).

Google's not a real company. It's a house of cards.

I don't know what a monopoly is until somebody tells me.

I think it would be absolutely reckless and irresponsible for anyone to try and break up Microsoft.

Linux is a cancer that attaches itself in an intellectual property sense to everything it touches.

My children - in many dimensions they're as poorly behaved as many other children, but at least on this dimension I've got my kids brainwashed: You don't use Google, and you don't use an iPod.

Our mail product, Hotmail, is the market leader globally.

Our people, our shareholders, me, Bill Gates, we expect to change the world in every way, to succeed wildly at everything we touch, to have the broadest impact of any company in the world.


What we've gone through in the last several years has caused some people to question 'Can we trust Microsoft?

The reverse of Carlsberg slogan applied to code

, , , ...

I sometimes get very annoyed with code I stumble upon. It happens more often these days, when I'm doing for one of my clients a thorough code review, cleanup, low level refactoring and so on.

Today was a special day with this respect. I found something that made me mad, in the most Monthy Pythonesque way.

I found a piece of code similar to this:

for(int i = 0; i < 100; ++i)
{
    SomeEntity entity = 
        new SomeEntity{SomeOtherEntity = someValue};
}


For the people less familiar with the marvelous Microsoft universe, let me explain that we are using Entity Framework, which is a ORM for .NET, developed by Microsoft. So SomeEntity actually corresponds to a table in the database. The entity instances are managed in a special space called a context. As for the constructor, it has this strange form because it initializes properties of the class with some values.

Now, when any decent developer looks at this code, it becomes immediately apparent that the variable entity is a local variable which is not used again. So, it's useless. Right?

Right, but with one catch. It so happens that whenever you set a property based on a relationship between two entities, as in the example, the entity is also saved in the context. Yes, you understood it correctly. It's like doing something like:

Dialog dlg = new Dialog();
dlg.BackgroundColor = Color.White;


and the dialog gets displayed.

The worst thing is that we didn't actually do anything to provoke something like this. This is how it works out of the box.

Disclaimer: it's true that we are using the beta 3 version of the Entity Framework. However, I am not very convinced that the final version will improve on this point...

I saw Paris again

, ,

You may have noticed that my blog was quite slow recently. The reason is that I had to go to Belgium and Paris for a very important and sudden business presentation. I only had the time to prepare for it, no time for writing about it. You have here my sincere apologies for this miscommunication.

As a result, I saw Paris again, 6 years after I worked there for about 15 months. I had a strange feeling looking at the Defense buildings that seemed to have increased in the meantime. I've also had very intense feelings after seeing again the places where I used to walk. It's interesting to see again places you've left, and it's interesting to talk again to people you used to work with. And that's what I did, this time in Belgium.

All in all, it was a very intense experience, both on personal and professional level. Things are going well for me.

On the other hand, it was also a tiresome journey. Probably that's why I'm sitting here with my coffee, on a Saturday morning, relaxing and writing about it.

PS: If you have the chance, try real Belgian chocolate and beer. Preferably in Belgium.

I've just had a perfect morning

, ,

I just invented a new plate. By inventing, I don't mean to say that I'm the first who invented it; just that I've never read about that recipe before.

It's actually quite simple:
- take a few carrots and a few green peppers and cut them in thin slices (chinese style)
- pour olive oil in a pan and put it on high heat; the secret is to make it fast
- when the oil is hot, add the carrots and leave them for a few minutes; they have to remain firm
- after 3-4 minutes add the green peppers
- add soy sauce and sesame oil
- remove from the heat before the peppers get soft
- add salt, pepper and whatever else you like. Serve it immediately.

I'm sure that it can be made even more interesting with some tabasco or other hot sauces.

So, after I did this and ate, I'm enjoying my coffee with a little Belgian truffle. It really is a perfect morning...

Why the CMMI or other standards have remained unattractive or avoided by software giants?

, , , ...

This is a question from LinkedIn that I answered today.

Why the CMMI or other standards have remained unattractive or avoided by software giants, compromising the software quality, and providing later on with service packs and patches to be applied?

Many software giants are not in the favour SW-CMM or P-CMM or any among the whole CMMI, just because they simply does not want the lengthy assessment to be performed on regular basis which may impact the right time to deliver the product, opening the major loopholes in the software product. Therefore, it is tendency to offer service packs and security patches after the software has been delivered without going through the quality procedures offered by CMMI like standards.


The short answer is because most software giants base their projects on people rather than processes. The Google example is the most well known, but Microsoft, Sun or IBM have similar policies.

The idea is that quality software requires discipline, and there are two extremes in the discipline axis: on one end you have disciplined people to work with and on the other you choose to follow certain processes to the letter. CMMI's focus is mostly on processes, while Agile methodologies (Scrum, XP, open source etc) focus on people.

This doesn't mean that a framework like Scrum has no rules; it does, but one of the first is that the team is self-organizing. I saw statistics related to Scrum and the results are impressive.

So, if you look to what software giants are using you will see that they are using one or more flavors of Agile: Microsoft is using MSF, Google is using Scrum, XP and some other flavors, IBM is using CMMI in some departments, open source and some form of agile in others etc. This is simply because a well implemented Agile framework gives much better results than CMMI.

Regarding the Service Packs and patches, in today's business world there is absolutely no way to eliminate them, no matter which methodology or framework you are using. You can reduce the number of issues through some engineering practices (which are common to all methodologies) like inspection, unit testing a.s.o., but the even if the software is perfect when you release it (which surely isn't), new threats and changes appear every day. So, the business reasons will push you to release new patches and service packs.

I don't say all this to defend Microsoft. I believe that their mistake is not in the way they build the software; it has much improved in terms of security and stability. Their mistake is in the way they are using the software as a business weapon; instead of doing the best software they can, they try to kill the competition with it. Sadly for them, it doesn't work anymore. Sadly for their users, they are still doing it.


Personal advertisement: I am PassionIT and I help teams develop high quality software. I train, I help improving and I work hands-on, depending on the needs. Contact me if you need help. Alexandru Bolboaca-Diaconu
Add to Technorati Favorites

Adopting Best Practices

, , , ...

I have been trying in those last days to write a document describing some best practices that should be followed by one of my projects - and, why not, by any other project. Trouble is, I find this a very difficult task, not because I wouldn't have enough material or inspiration, but because it's difficult to make it convincing.

It all starts from a simple fact: I know bad code when I see it. I know bad design when I see it. And, whenever I make those judgments I am aware that (A) I think of human nature and its limitations, (B) Many other people from the industry would agree with me and (C) My colleagues may not agree with me.

Regarding the first point, it is important to understand that people write software for people. And people are limited, they make mistakes, they have difficulties finding the simplest solution, they tend to overdo or to underdo, they don't know how to express something that will be easy to understand by others. The source code is nothing but a communication medium, only it's a three-fold communication medium: the developer who wrote it talks to the developer who reads it, and to the user who needs it, all through the code; the difficulty is that the user sees another representation of the code, which communicates differently.

If this communication is broken, problems start to appear. If you cannot read your code as a story, you are bound to have troubles at some point. If your application doesn't tell its story to the user, he/she won't be content.

Regarding the second point, there are countless books talking about best practices. "Code Complete", "The Mythical Man Month", "The Art of Unix Programming", "The Cathedral and The Bazaar", "Refactoring" and even "The Tao of Programming" are well-known books that are all cited, used as reference, implemented (Source Monitor's Complexity metrics is implemented based on "Code Complete") and required reading. But I still need to talk about them.

And this takes me to the last point. Many developers I know chose to be programmers because they felt they can do anything. To some extent, it is true: a programming job gives us power to mold ideas into something we like.
On the other hand, this view is terribly wrong. You cannot do anything, because you are limited as a human being.

This is a truth that's difficult to grasp, but it's the path towards mastering software development.


Personal advertisement: I am PassionIT and I help teams develop high quality software. I train, I help improving and I work hands-on, depending on the needs. Contact me if you need help. Alexandru Bolboaca-Diaconu
Add to Technorati Favorites

Find me at eLiberatica

,

I will be at eLiberatica all Friday and Saturday, including the Friday social dinner. So, if you're there and you want to contact me, let me know. I'm open to any talks regarding software development.


Personal advertisement: I am PassionIT and I help teams develop high quality software. I train, I help improving and I work hands-on, depending on the needs. Contact me if you need help. Alexandru Bolboaca-Diaconu
Add to Technorati Favorites

BadProgrammingException or On The Issue of Developer Mistakes Exceptions

, , ,

Sometimes, in one of my Pai Mei moments, I think about introducing an exception called BadProgrammingException. Ideally, such an exception would also call svn blame and record the name of the developer who did the last modification in the code. (This might actually work from the technical point of view, if the project doesn't use branches and merges; or if you use a distributed vcs like bazaar or git).

The BadProgramming exception would be used in some of the following cases:
- on stack overflow
- on null pointer or reference
- on invalid casts
- on any exception thrown from the code that is not documented
- on value out of bounds
- on assert failures

and I'm sure you can think of some examples, too. Ideally, the introduction of such an exception would create more responsibility for the developers, and make them look twice at the code they're writing.

Of course, this is not possible and it won't work because of the human factor. But this idea raises an interesting question:

Should we try to eliminate "developer exceptions" like the above from our frameworks and products? Couldn't we avoid them in some way?

The answer is: Sure we could, and there's one simple way: design by contract. But, for some reason I can't understand, no mainstream programming language has design by contract built-in. But the possiblity exists; check for example the Nice programming language.

Instead, we are condemned to look at the code and search for all kinds of possible developer mistakes, like this one (C# + LINQ):

User u = db.User.Where(p=>p.ID=150).FirstOrDefault();
System.Out.WriteLine(u.Name);


or this one (C#):

Entity entity = someObject as Entity;
System.Out.WriteLine(entity.ID);


or, even worse, this one (C#):

Entity entity = (Entity)someObject;


In languages like C# or Java, the nullable pattern might work much better. Nullable was introduced for value types that should be allowed to be null. For example:

DateTime? dt = someObject as DateTime?;
if(dt.HasValue)
{
    System.Out.WriteLine(dt.Value);
}


(There are many other versions of syntax, including shorter ones.)

The idea is that the compiler will tell you if you try to convert someObject to DateTime instead of DateTime? (shortcut for NullableType<DateTime>). So why couldn't we use the same pattern for all types? Disallow them to be null, and only allow them when the programmer says so.

But this is just the beginning of a would-be-very-lengthy-discussion. Any ideas?


Personal advertisement: I am PassionIT and I help teams develop high quality software. I train, I help improving and I work hands-on, depending on the needs. Contact me if you need help. Alexandru Bolboaca-Diaconu
Add to Technorati Favorites

Cheering vs. Getting Involved in an Open Source Project

, , , ...

I know many developers, including myself, who show an undeterred belief and a continuous fascination in the open source development model, but have never participated to any open source project. Some of them, including myself, even work on commercial applications based on Microsoft technologies. Some of them, including myself, have never edited a Wikipedia page.

This is at best paradoxical. How comes that people who are such believers and supporters of open source are only users and cheerleaders instead of getting involved?

Maybe it's because we are Romanian, and we are used with such paradoxical behaviors. Or because the difference between cheering and doing is very very large. Or because programming actually is hard. Or because we like the idea in principle, but we don't have the courage to start living it. And I can think of a couple of other reasons.

Regarding myself, I tried to choose an open source project to participate in. First I tried Mozilla then Open Office and I found out that they are really complex projects and that the time to enter such a project is quite high (incidentally, Open Office recently became much more contributor-friendly, with its new website). Then I looked at smaller projects that I was using: ArgoUML and PostSharp. Still no luck - they didn't manage to capture my attention, although both are great pieces of work. I even tried to open my own open source project, something I think would have been a cool application - a "send to"-like tool allowing not only to send data to an application, but also a "send as" option allowing to transform the data into something else before sending it (e.g. "send to thunderbird as attachment", "send to thunderbird as zipped attachment" etc.). I didn't even find the time to add the document describing the mechanism and the prototype code to its sourceforge account.

There are many reasons why this happens. First, I wasn't very familiar with Linux until recently, and Linux is the best open source development tool because all the libraries you need for development and their documentation are a command line away (be it tar, apt-get, slapt-get or any other command). I very much miss the installation super-powers when I work on Windows.

Second, my time is fragmented, no matter how much I try to organize it. I have development tasks to finish, then I work on some training materials, then I think about my website, then I think about my blog, then I work with my wife on projects coming through her company and so on. And I find that many times the learning curve for an open source project is too steep, and I don't have the time to invest in it.

Third, I got used with giving my time on demand, instead of donating my time. If somebody asks me to help at a project, I would jump in the bandwagon as soon as I think it's interesting. But that's not the open source way. Rather, it's me who should find a project that interests me and to invest in it.

Maybe that's just me, but I think times have changed since The cathedral and the bazaar. The number of open source projects has exploded, and the large majority of them fail. There's nothing wrong with it; it's only the selection of the fittest, but who likes to jump in a probable failure? And, even more difficult, who has the time to look at all new open source projects and choose one that's interesting?

I'm not saying it can't be done. I'm just saying that I don't know how to do it, and that I'd very much love to participate to an open source project that fits my knowledge, my skills, and who can capture my attention. So, if you work on an open source project, please let me know how you solve those problems.


Personal advertisement: I am PassionIT and I help teams develop high quality software. I train, I help improving and I work hands-on, depending on the needs. Contact me if you need help. Alexandru Bolboaca-Diaconu
Add to Technorati Favorites

Writing without keyboard

, , , ...

On Thursday night, I had my first contact with a Mac. And it sure was memorable.

I wrote before that we were planning of buying a MacBook Pro notebook. It finally arived last week, and it was everything we expected, and more.

I'm a technology guy. I looked at it and knew instantly that it runs Linux Unix/FreeBSD/NetBSD (thanks for the correction) under the hood and that it's a powerful piece of hardware. But what leaves a long lasting impression is the looks and the usability. Hats off to you, Mr. Jobs!

There are many things to say about Apple computers and about the attention to detail shown by its engineers. But I will concentrate on one thing: the multi touch pad gestures. To me, this is one of the best usability innovations in the latest years.

If you don't know what it's about, take a look here.

Using this feature comes very natural and very handy. And it made me think of other possibilities.

If you read my blog, you probably know already that I like to read and that I like good SF litterature. It so happens that now I'm reading the prequel of the Dune series, and it brought me back to one of the most compelling imaginary universes that I know about. I couldn't help but link the idea of the multi touch gestures with the Bene Gesserit gesture language.

And then I thought: Why wouldn't we use hand gestures to write with the touchpad instead of the keyboard?

Now, I'm not an expert in languages or in other communication mediums (except maybe computer protocols). But with the advent of mobile devices, we should think of better ways of writing than keyboard. Keyboard is becoming obsolete, and mobile users need the same power as you and I have when we stay in front of our PCs or notebooks. And this is an effective way to get that power.

I would imagine that in the beginning such a language would have a gesture for each letter or sound. In time, gestures for commonly used words would appear and maybe even for short sentences. This could mean in theory that at some point this language may become an international language, understandable in all corners of the Earth - if you don't know the local language.

Would I learn such a thing? Probably. But I think that at first only young people will learn it. Therefore, it's a long term engagement. This could mean that, despite its usefulness, this idea may never come to life.

But if you're an expert in human communication or in human-computer interaction and you happen to get lost on the Internet and read this blog entry, start researching it and let me know what you get. I'm definitely interested :wink:.


Personal advertisement: I am PassionIT and I help teams develop high quality software. I train, I help improving and I work hands-on, depending on the needs. Contact me if you need help. Alexandru Bolboaca-Diaconu
Add to Technorati Favorites  Digg!