Power of Metrics

The author of the Software Maintenance blog has found that metrics are not all they are cracked up to be. Yes in general metrics can be beneficial. But that presupposes that you use them correctly. The team should also know about the metrics process and understand how they are computed.

Sure you could conduct metrics gathering and analysis in secret. What good would that do? You could be sure that you have some objective handle on how a software project is progressing. However you want the metrics to work for you.

The trick is to be able to share the information on metrics without causing developers to game the system. For example, if you are tracking the number of days to complete a trouble ticket, developers could try to minimize this to the detriment of the project. Developers might only work on the easy problems. Or they could rush to close out other problems without truly resolving the problem. You definitely don't want to do this. But you do want the knowledge of metrics collection to spur developers on to good deeds. This is a tough balance to strike. Perhaps I shall post some more thought on this later.

Type Systems

Frequently I read debates over static versus dynamic typing. Even though I am a programmer, this is Greek to me. So I decided to read up a little bit on them. I also recently read a blog entry that made me want to get intelligent, or at least proficient in this area. Static and dynamic typing refers to two classifications of type systems. A type is best understood by developers through an example. Integer, float, and string are all examples of types. Now let’s get more into type systems.

There are a number of ways to classify type systems. One of the most common is static versus dynamic. With static typing, the type checks occur during code compilation. Examples of languages with static typing are C++ and Java. The idea is that you can catch errors earlier during the compile. Also, the stereotype is that programs of statically typed languages execute faster.

Dynamic typing delays type checking until run time. This is also referred to as late binding. Examples of languages with dynamic typing are Perl and Ruby. In general, dynamic typing is more flexible. You also usually have less code to write. However the drawback is that the result executes more slowly. You also spend more time testing for bugs.

A blog entry by Chris Smith says that strong and weak have no meaning with regard to type systems. Or to put it a little less bluntly, strong and weak can mean many things with respect to typing. Even the word type means different things in the systems. There is also overlap between strong and weak typing. Chris states that all languages inherently have some dynamic typing features. Chris does not buy into the stereotypes about the features of strong and weak typing systems.

Controversy aside, Chris has a lot to say about type systems. He explained that type inference means the compiler decides the types from source code without the need of explicit type declarations. Examples of type inference style languages are Haskell and C#. Chris does concede that static typing does have advantages such as better performance, documentation, and correctness. He makes some analogies for the two classifications. In static typing, a type is equivalent to a variable. However in dynamic typing, a type is equivalent to a value.

I have to confess. Even after boning up on type systems with some research, I had to concentrate to try to follow Chris Smith’s blog entry. Much more study is required in this area. I would like to at least get to the point where I could answer simple interview questions such as “Tell me the difference between strong and weak typing”.

What is an Operating System?

With the release of the new Chrome web browser by Google, some people are saying that it is the new operating system. Hanks Williams basically agreed in his “Why Does Everything Suck” blog. His opinion is that you do not need device drivers to be an operating system. The operating system is something that an application sits on. He reviewed the limited operating system support from the old days. I laughed when I read a comment on that blog that Microsoft says an operating system is whatever they sell.

This discussion brings up a good point. In essence, what constitutes an operating system? I think a good way to determine whether or not something is an operating system is to see whether it relies on some other software piece to run on the metal. For example, you might ask whether Windows XP is an operating system. If you take a personal computer, and put Windows XP on it, can applications run on top of it? I’d say the answer is yes. Therefore I would conclude that Windows XP is an operating system.

You could apply this analysis to Google Chrome. Suppose I take a personal computer. Could I then install Chrome on it and run applications on top of Chrome? The answer is no. Chrome does not run by itself on the raw personal computer hardware. Right now Chrome ships only a version that works on Windows. Chrome requires Windows to handle the network cards and the hard disk and the computer memory. Thus I would conclude that Chrome is not an operating system.

It is often easy to get confused by matters such as these. However the right viewpoint might clear things up. Yes I can see how Chrome might provide some services to web applications that run inside it. However that does not mean that we call Chrome an operating system. The point may not be important. But I think it is good to work on a common and clear definition of terms in the tech world.

Often I need to head to Wikipedia to explain terms that I need to define. So I looked up operating system. Now it was not decisive on what exactly constitutes the minimum requirements for an operating system. However Wikipedia did confirm that most operating systems have parts which are not part of Chrome such as networking, virtual memory, disk access, etc.