One kibibyte?

In the metric world, kilo- means 1000. For example, a kilometer is 1000 meters. But in the programming world, we sometimes say kilobyte but mean 1024 bytes, not 1000 bytes. Well apparently the NIST got into the game to resolve the confusion back in 1998.

http://physics.nist.gov/cuu/Units/binary.html

They defined the prefix kibi- to mean 1024. So now you can say kibibyte if you mean 1024 bytes. Whew, that's a load off my chest. :-)

Pizza business vs. software engineering

by K. John Russell

I once attended a seminar given by a Vice President for a software development firm. He discussed the business principle time to market. Time to market means, simply, that the sooner a new product is ready for sale the sooner we can make money on it, and the more money we can make overall. We lose money when a new product takes longer to develop.

He used "starting a pizza shop" as an analogy, and he broke down time to market into what he called think time, production time, and distribution time.

Think time is when you plan out all the things you have to do just to get ready to make and sell the pizza: store front, ovens, employees…you get the idea. (This part of the software development process seems invariably overlooked or ignored.)

Production time is when you do everything you need to do to actually make and sell the pizzas: you hire and train your employees, you make a few test pizzas.

Distribution time is when you actually take orders and make and deliver pizzas.

The analogy and the concepts all sounded grand, but I felt there was something amiss: making a computer software program is nothing like making a pizza.To legitimize the analogy we'd have to say that we're making every pizza… from scratch. We grow our own wheat and tomatoes to make dough and tasty sauce. And we have a cow, too, for cheese.

Under these circumstances our think time is a nightmare. That's why we often skip it. The thought of having to sit down and plan out a garden that anticipates every option a customer might order is nothing any programmer I know wants anything to do with. Read More …

XML: Not a silver bullet

I've always thought that XML has been oversold — XML is very useful, but only in an abstract sort of way. It's just one tool that software developers can use.

I particularly liked this bit of a Dr. Dobb's Journal interview of James Clark in the July 2001 issue:

DDJ: What's the next step for XML?

JC: That's a difficult question. I think XML has become so widespread, it's like asking me, "What's the next application for ASCII text? What's the next application for line-delimited files?" XML is becoming so common, it's not interesting [for its own sake] anymore.

Differences between "encapsulation" and "information hiding" in OO programming

I liked "Encapsulation is not information hiding" in the May JavaWorld:

The term encapsulation is often considered to be interchangeable with information hiding. However, not differentiating between these two important concepts deprives Java developers of a full appreciation of either. Encapsulation is a language facility, whereas information hiding is a design principle. This article investigates strengthening class design through careful consideration of each of these concepts.

The discussion includes a very nice example problem that "evolves" through the course of the article to demonstrate the concepts.

Although the examples are in terms of Java, the discussion applies to any OO language, like C++.

WebCream: mapping Java GUI to HTML page

WebCream automatically maps Java Swing/AWT GUIs to HTML pages.

Take a look at the side-by-side comparison of a Java window and the WebCream-generated HTML equivalent in the article, "Java on the front end", in the April 2001 issue of Java World (scroll down a bit). WebCream also has an interactive side-by-side demonstration comparing a Java AWT applet with their generated HTML.

JavaWorld article on polymorphism

"Reveal the magic behind subtype polymorphism" is a decent article on polymorphism.

It talks about the four types of polymorphism: coercion, overloading, parametric, and inclusion (sub-type). Most OO developers are comfortable and familiar with the first two. Since the article is java focused, it can't really give example of parametric polymorphism (templates in C++), but it still talks about the principals of this type of polymorphism.

The last type for polymorphism, inclusion, s the one that is the least understood. In fact, it's the one that I always ask about when interviewing an OO programmer.