Sunday, June 26, 2005

The US/China embrace

This is a weird situation: China's past willingness to buy up "low yielding debt paper of Fannie Mae and the other agencies fueling America's housing bubble" has postponed the (hopefully slow) downhill slide of the US economy while foolish US consumers who mistake cheap credit for personal wealth fuel the short term success of China's economy.

There are very real risks to both China's and the US's individual economies - the fact that our economies are so tightly coupled (tight coupling is bad in software also :-) is something to keep more than a casual interest in.

Friday, June 24, 2005

I am actually enjoying writing a JFC application

I usually like to do server side Java but I must say that I am having a lot of fun writing a Java client application this week using JFC/Swing.

I am using both Netbeans 4.1 (for the UI designer capability) and IntelliJ for general coding. I could never get into IntelliJ's UI editor, so I use NetBeans to design plugable components (JPanels) in NetBeans and then copy the code over to my IntelliJ project. This sounds cumbersome, but it is really a fast operation. Also, in trying hard to keep the line count down, I like to do a lot of refactoring of common presentation components and very little of my time is actually spent using Netbeans 4.1.

BTW, the Netbeans UI designer keeps getting better and better, really a pleasure to use :-)

Wednesday, June 22, 2005

Everything belongs in a source code control or content management system

Having used software source code control systems for almost 20 years, it seems unreasonable to not maintain software in a system like CVS (I have not made the move to Subversion yet).

Recently, I made a fairly obvious extension to my own work flow process by creating additional CVS repositories for customer work logs, design artifacts, etc. In addition to obvious benefits of versioning, etc., I also like the ability to sit down at any computer anywhere and securely have access to all of my work materials.

Sunday, June 19, 2005

Is language oriented programming the next paradigm shift?

When I was lucky enough to use Lisp for a lot of my software development, I would sometimes think in terms of growing the Lisp language towards my application domain: in effect, build a new language on top of Lisp. This is probably the most natural style for Lisp development.

I have been reading an article by Sergey Dmitriev on an IntelliJ plugin for the MPS that is a workbench for growing application specific languages. There is also a tutorial for using this plugin.

If I had to make a prediction on the viability of tools like MPS, it would be that tools like MPS will be effectively used by highly skilled architects and developers, but probably not by mainstream programmers. The idea of building languages that closely model, for example, the way that your company does business is compelling because it would make it easier to engage domain experts in software development projects.

Code refactoring and cleaning out the garage

My wife and I did a major garage cleanout this morning. We have a general rule: anything that has not been used for a year or two years goes to the Good Will charity (or the recyclers, or the trash - in that order). The same rule is not so bad for software systems also :-)

I made a small mistake recently while refactoring code in a large system written by other people. Refactoring is a functionality-preserving activity. It is usually a mistake to try to add functionality while refactoring; rather, we should make small changes with lots of intermediate testing in order to minimize debugging time (i.e., make one or two changes at atime, and is is more obvious what caused a new bug). I added some functionality to the system that I was refactoring and in the end, I think that it took me more time than breaking this process into two pieces: refactoring, then adding functionality.

Friday, June 17, 2005

Open sourcing GlueCode

Suddenly, GlueCode gets to be a more interesting option. I noticed in James' blog that Mark Fleury (of JBoss) is unhappy that IBM bought a commercial JBoss competitor and open sourced their software.

I am downloading GlueCode SE 1.1 beta right now, and will hopefull have a chance to evaluate it in some depth in the next few days. I have quite an investment in using JBoss, so GlueCode will have to be fairly compelling to switch. Possibly, GlueCode might also be a replacement for the Tomcat + JoramJMS combination that I sometimes use.

James argues that open source is better for huge companies like IBM than for small companies, and he is probably right. However, I would argue that open source infrastructure software is even better for consultants (like me!) because it facilitates driving down the overall costs of projects so customers can afford more consulting (and in house) work.

PS. I did just take a quick look at GlueCode: installation was very simple, and the admin console looks great - maybe Mark Fleury does have something to worry about.

Thursday, June 16, 2005

The Middle Path

I have been involved with a few projects that were either way over designed or not designed well enough. The middle path is almost always the best. It is a good idea to look at software development as a cost and evaluating the utility of steps in the development process by how much they cost vs. immediate and long term benefits.

I once came into a project where a half dozen people had been using CASE tools to design a large system for almost a year. I was impressed until I asked to see a demo of the system that they were developing - there was no software written (to speak of) almost one year into the project. Oops.

I think that we have all experienced projects that errored on the opposite end of the spectrum: small under designed projects that evolved into expensive to maintain large projects.

I think that design artifacts should "pay their own way". If a dozen use cases written on 3x5 cards, a few activity, sequence, and perhaps really high level class diagrams are adequate, why do more? It is great when design artifacts can be kept in CVS along with code. Plain text and diagrams in a portable text based format are best. It is not so easy to do, but it is best when designs and the software evolve together over time. It is fine to refactor code - it is also fine to refactor designs.

Sunday, June 12, 2005

Making time for personal projects

I have been swamped with work lately, so I have been OK with pushing back two personal projects that have been 'itching' for while: a re-write and updating of my free Java AI web book to use Ruby and a free web portal for sharing healthy recipes (macrobiotic, vegetarian, low meat, etc.). I am hoping to have some free time after this summer, so I will put off deciding which personal project actually gets done until then. Right now, I am leaning towards doing the recipe web portal because my wife recovered from cancer and I believe that a macrobiotic diet helped her - I would feel great about promoting organic food and healthier eating habits. Also, I believe that I could write a very good web portal for cooking and recipes because I can leverage:
  • a strong interest in cooking
  • Ruby on Rails to facilitate a writing a database backed (with AJAX support) web application
  • a few clever ideas to use limited case based reasoning to help people use what ever ingredients that they have on hand
Anyway, my consulting work comes first, but I still like to plan for personal projects even if I can't get to them for a while.

Wednesday, June 08, 2005

Hibernate Developer Wizard

The Ruby on Rails development pattern of using good naming conventions while designing a database schema and then automatically generating a CRUD application (the automaticly generated scaffolding code is easy to modify and/or replace, BTW) is compelling. The architech of Jaffa (which I have been using a lot in the last 6 weeks) was telling me that they have code in progress to do the same sort of reverse engineering of a database schema.

The new Hibernate Tools contain a wizard for reverse engineering a database schema and for automatic generation POJO files and cfg.xml Hibernate files - exciting stuff! For now, this is an Eclipse plugin, and I have not been using Eclipse much lately (sort of addicted to IntelliJ). It would be great if eventually these tools were also wrapped as custom ant tasks (and/or command line tools). [Update: reader Max pointed out that the tools do have ant wrappers - the latest version that I downloaded was packaged as Eclipse plugins but a tools jar that is included is independent of Eclipse - my mistake.]

Hibernate supports more interesting (complex) data relationships than Ruby on Rails, but both tools taken together cover a lot of application development space.

Joy of Ubuntu Linux on my laptop - bad show for PC vendors not supplying Windows install CDs

I wrote a few days ago about Averatec not supplying Windows install CDs - their customer support guy told me this morning to send the laptop in for service: still under warranty and they would install a new disk with Windows installed.

No thanks. Ubuntu Linux was an easy install, everything works, and large code builds, etc. run faster for me under Linux than under Windows XP. I do wish that I could occasionally dual boot into Windows XP, but so it goes. I now have one Linux laptop, one high end Windows XP desktop PC, and three older Macs. Funny thing is that there is not a huge difference between developing Java (IntelliJ and ant builds) and Ruby on these three different operating systems.

The Averatec laptop has great hardware at a low price - too bad that they don't sell a version without Windows for $75 cheaper :-)

Sunday, June 05, 2005

Sometimes it takes an 'expert' to screw things up

I bought a Averatec 3200 laptop a few weeks ago - a nice little laptop for a modest price, but it did not come with a backup Windows install CDROM. It did have a Phoenix bios option to restore Windows from a hidden partition - this is what got me into trouble. I went into this bios setup option to see what options there were for re-installing Windows from the hidden partition and mistakenly started the re-install operation, which failed and left my laptop in a non-bootable state.

Now, for my work, all I need are a Java JDK, IntelliJ, Tomcat, JBoss, Ruby, Ruby on Rails, emacs, and OpenOffice.org. Everything else is fluff - this is the stuff that I use to earn a living. I have standard setups for OS X, Windows, and Linux, so it does not matter that much which operating system that I use.

So, I took a half hour and installed Ubuntu Linux on my 3200 laptop - everything (including wireless with WEP after a driver build + install) works great except there is no 3D GL acceleration and I can live without that.

It is irritating to lose Windows, but it was my fault.

Saturday, June 04, 2005

Use of only a single programming language considered harmful

Java is a universal programming language and platform. While standardization on a single programming language/platform has huge benefits (e.g., good supply of trained programmers, competition for infrastructure software, etc.) I really like to see programmers develop skill in multiple programming languages.

Different languages allow us to think differently about problem solving. In psychology, the Sapir-Worph Hypothesis states that language influences thought (talking about natural or human languages here).

We spend a lot of time developing skills and acquiring knowledge based on programming experience. Some of that time should be spent learning additional programming languages. Have some fun - pick a new language like Ruby, Lisp, Smalltalk, etc. and program your brain in different ways to solve problems.

PS. the title of this article is obviously a tip-of-the-hat to Edsger Dijkstra and his 1968 article "GoTo Considered Harmful"