Saturday, May 14, 2005

Is it me, or does there seem to be something missing in the whole XBox 360 launch? Like perhaps. games. I've not been following it that closely, but from a cursory glance at the reviews, I haven't seen a single reference to any of the games that will be coming out for the 360. Seems kind of important. Of course, apparently they haven't even decided yet if it will be backwards compatible. Strange.
Just as in the fashion industry, there are fads in programming. What was once in vogue eventually is thrown away as unproductive, too confusing, or just plain un-cool. Unlike the fashion industry, old styles don't go out with a whimper, they often go out with a bang. This is usually in the form of some vitriolic screed by the proponents of the "One New Way." Sometimes the object of derision is a big thing - like pointers, and sometimes it is a small thing - like operator overloading. A classic example of this is white space. The parallel with the fashion industry could not be more simple, since white space is entirely about how code looks. The "white space matters" paradigm was in fashion, out of fashion, and now, with Python, back in fashion. Sheesh.

Sometimes, something comes along to remind you why a feature like operator overloading, while out of fashion, is still darn cool. While complaints against operator overloading are justified in many instances, in a domain specific area such as parsing, where there are well known forms (EBNF), operator overloading can be simply sublime. The Spirit framework is just such a case. Instead of thinking of it as C++ - I think it is much better to think of it as a way to easily embed a domain specific language (DSL) right within your C++ code. If you do any C++ coding and parsing, you owe it to yourself to check it out.

Thursday, May 12, 2005

Lesson for the day - No matter how fancy-dancy your programming language, it still must insterface with the real world if it is going to be of any use to anyone. That is when all the nice little abstractions start falling apart. Joel Spolsky calls this "The Law of Leaky Abstractions."

My developers love C#. They want to do everything in C# because they see it as so much easier than C or C++. Case in point - networking. C# has all these nice networking classes NetworkStreams, BinaryReader, etc. that make it soooo easy to create little networking applications. The problem is, as advanced as C# is, it cannot ignore the reality that is network programming. Things break down, packets are lost, there are ghosts in the machine.

In particular, just because you send 1024 bytes using

writer.Write(buff, 0, length);

it doesn't mean that

reader.Read(buff, 0, length);

on the other end is going to always give you 1024 bytes in one go. BinaryReader::Read has a return value that you cannot ignore - it is the actual amount of data it was able to read. Basic stuff, but we tend to forget the basic stuff when we think our programming lanuage is so much easier to use. I fell into the trap myself, and spent an hour trying to help debug the above networking code, assuming that C# was just taking care of all the little niggling bits. At one point, I was convinced the bug was in the BinaryReader class. New languages don't eliminate the need to remember the most basic cenventions, such as: Don't ignore return values!

Wednesday, May 11, 2005

One of our goals at Paragent is to try and create a community around our products. In part, this means creating products that have the features that are compelling, and benefit from community involvement. Konfabulator is a great example of software that enables the development of a community. It is a part of our development strategy to add these kinds of features to viewport, and I'll have more to say about that in the future.

There is another way to create a community around a company or product, and that is through transparency--make people feel like they are "inside" the process, so that they take ownership of the product. At Paragent, we do this in many ways, including focus groups, early adopter programs, etc.

This blog is another. While I first started (and stopped) writing this blog a long time ago, for entirely different reasons, I hope to start using it as a means of connecting the inside of Paragent to our existing and potential customers. Hopefully this will allow people to see what kind of a company we are, and what crazy ideas we have for the future. Stay tuned...