At my friend Louis's suggestion, I just bought Richard Stevens book on Advanced Unix Programming. I have decided it was time to revisit my article on non-blocking IO. Seeing that the book was published originally in 1992, I find it amusing that ten years later I'm using it to track the "cutting edge" of Java development.
Computers are just like that. The fundamentals really don't change, or at least, haven't changed in the last 30+ years. We simply find easier different ways of doing the same basic tasks. Stevens wrote with C in mind and Java has gone and implemented a somewhat convoluted object-based version of the same thing. I get tons of hits on my non-blocking IO page, and I suspect that the reason is that people look at Sun's API and wonder how the heck they are going to use this crazy thing. I get tons of questions too. I suspect the next time I get one, I'll say, "go read Stevens book that he wrote back in 1992!" That'll teach em.
It doesn't always get worse. Sometimes it gets better. The classic computer problem that comes up again and again is the problem of binding variables passed between different programs. The first time I encountered this problem was with Oracle's Pro*C. What an ugly little API. Basically, you had to allocate spaces with malloc, bind your variables to that space and then call your SQL. The fundamental idea was, that you had to say, this is what I call an x in my code and it corresponds to an x in your database.
So anyways, every "new" technology I've looked at in the last few days solves this same problem that Pro*C did. I've been looking at Web Services for an interprocess version and Hibernate for a pure database version. Each project does pretty much the same thing as Pro*C did for me 10 years ago -- they let me schlep data between processes and maintain the meaning of each data element as I go. Pretty damn nifty.