Saturday, March 14, 2009

Last Day, First Day

I've decided to change employers again, so I'm going to have yet another first day next Monday.

I may be insane for doing this in these unsettled economic times, but fear drove me. My previous employer has been hit hard by the gyrations in the market place. When things appeared to be spiraling down last November I thought I should at least try to be the first one out on the street if the company crated. The one stable alternative that was available took a long time to decide, but an offer finally came through and I gave my notice.

This isn't the first time I've gone through this. I've had two careers: one as a mechanical engineer and another as a software engineer. The first one was pretty stable. I remained with one company for fourteen years before leaping onto a small start-up that wrote client/server accounting software for PCs using C++. That began a series of hops between four small companies, roughly one per year. Each one seemed like a good fit, but they suffered from the common problem of being unable to keep revenue flowing in.

After the fourth one laid me off I found a larger haven that knew how to make payroll twice a month. Unfortunately, it was an older manufacturing firm whose COBOL staff thought relational databases were a new thing. I was a lone Java EE freak in a sea of COBOL and FOCUS. I was allowed to think my own thoughts for three years, developing applications for a client who insisted on using the Internet and XML, but finally I decided that I needed to seek out more of my own kind. I found a nest of Java EE developers at another larger firm that was making money hand over fist. I thought that would be my last stop: they suited me fiscally and technically. There were a lot of wonderful people that I grew very fond of.

Unfortunately, that's the company I left yesterday afternoon.

I've had a lot of first days now. I remember my first day of work at my first job out of college pretty well. I was a December graduate, so I was the lone addition to the staff when I showed up at the small firm that manufactured steam turbines. They weren't ready for me. I was told to sit in a borrowed cube and given several 6" thick design manuals to read. This went on for a couple of days before somebody had mercy and gave me something a bit more meaty to do.

That company managed to survive the Great Depression, but a more modern recession and a savage industry consolidation forced them to reduce staff in several waves. I was young and naive - I worked until 5 PM the November day I was called into the chief engineer's office to be told that I was being let go. My wife and I had spent the fall searching for a house to buy. The plan was to meet the realtor that night to see one that had my wife very excited indeed. I had to go home and tell her that the house purchase would have to be postponed. I was scared to death, because the economy was very bad, but someone referred me to a Navy research lab down the road. Someone had mercy on me that day, because they agreed to hire me.

On my first day, I was escorted from human resources to join the department's pot luck Christmas party. I had neither food nor conversation to contribute; I knew no one in the room; I was excluded from every clique and work discussion. It was one awkward lunch.

I had my very worst first day ever when I stopped being an engineer and joined that company that wrote accounting software. I said "My God, what have I done?" when I returned home that night. It was a difficult situation. I only lasted ten months before I was able to find a less dramatic company closer to home.

All those first days have bookend last days. Yesterday I thought about all the work friendships I've acquired and lost in that time. There are so many people that I've liked and admired at each company I've joined. When I was working there I greatly enjoyed my interactions with them and looked forward to seeing them each day. Every departure brought a measure of sadness and promises to stay in touch that were rarely kept. I still miss some of them terribly.

The group that I left yesterday was especially hard to separate myself from. I've made no secret of my disagreements with some technical directions that management has taken. There are those in that very large organization that I'm glad to leave behind.

But the ones who were closest to me are very hard to walk away from.

Now I'm facing the coming first day with feelings of trepidation. Will they like me? Will I like them? Will the work be good? Will I be able to maintain balance between work and family? Will four years pass by as quickly as the previous four did? Will I be able to stay this time? Will this be my last first day?

Monday morning will tell.

Saturday, March 7, 2009

Living Moore's Law

We're reaching the limit of Moore's Law. I'm living it.

Just in case you don't know, Moore's "Law" is by no means a physical law; it's an observation made in 1965 by Gordon Moore, who was the CEO of Intel at the time. He noticed that the number of transistors being crammed onto a silicon wafer was doubling roughly every two years. He predicted that this would continue, and he was right.

This truth means that we all get more powerful computers for less money every year.

I bought my first personal computer for home in 1994. I taught a graduate mathematics course during summer session as adjunct faculty. The two-thousand dollars I earned by working all summer to come up with notes, homework, exams and grades was earmarked from day one. I chose a Gateway 2000 - how quaint. I'm fuzzy on the details now, but I believe it was on the order of 90MHz CPU, 8MB RAM, and 500MB hard drive. It seemed like a supercomputer compared to the VAX machines I shared with the rest of my department when I started my engineering career. It ran Windows 3.1 for its operating system and a heavy monitor. I had Microsoft Office and the Borland C++ development environment. It was the machine I used when I started taking computer science classes. The memory and disk didn't make development of software very easy. I was used to Unix workstations, so the discrepancy in power made software development at home painful. The hard drive was soon full; I had to buy a 1GB slave to extend the 500 MB master. By the time I was able to replace it in 1998 I couldn't wait to get rid of it.

The successor came from Dell. It ran Windows 95 on a CPU that was 5X faster than the Gateway. The hard drive was a green field. It would be impossible to ever fill up a device that huge. The monitor was still a big tube affair, but the view was more expansive. I was able to do all sorts of things - for a while. As time went on the cruft that accumulated made the wait times interminable. My work machines were still far superior to my kit at home. I took all the usual steps: I upgraded the memory, I added a slave hard drive. The few service calls I had to make to Dell were infuriating. Never again!

After seven years I couldn't bear it anymore. I was working for an employer who gave me a bonus, so I earmarked some of that money and bought an HP. It was a dual core 2.2GHz AMD CPU with 4GB of RAM and a 120GB hard drive, running Windows XP. It's the machine that I'm writing this blog on today.

Here's where Moore's Law comes in: Four years later I'm still happy with this machine. The hard drive is augmented by Passport external drives, but it's still doing fine. The memory is the most I can have without upgrading to 64 bits. The specs compare favorably in every way to the machine I use at work, so there's little drop-off when I switch between the two locations.

I could go out and buy a netbook or a laptop for a price that would have made me weep years ago. I'm sure there are blazing machines for gaming and video production that would eclipse my current setup. But the curve has flattened out. I'm not feeling too far behind after four years. I don't hate the machine. I don't have that sense that if I don't upgrade right away that I'll burst.

What happened?

Heat is the great enemy. Increased clock speeds mean more heat generated.

We're arguably running up against physical law. Decreasing the distance between transitors makes it harder to avoid unwanted interactions and is terribly expensive. Last I heard it cost Intel $1B to open a new factory with a new process; I'm sure that figure is higher now.

The marginal utility of faster CPUs is decreasing because the things we use computers for don't tax the processor very much. Most of the time it's doing nothing, waiting for something to operate on. The trend is to have more CPUs and divide the work between them. Software developers will have to become more adept at writing multi-threaded code, otherwise all those extra cores will sit idle.

Even number crunching applications like scientific computing are finding out that memory and the bus to transport data to the CPU is the bottleneck. Something fundamental will have to change.

It's bad news for the computer manufacturers out there. I think my requirements and expectations as a software developer are far beyond those of the general population that uses computers for little more than Internet access, e-mail, and doing their taxes. If my experience is typical, and other people don't have that feeling of "gotta buy or I'll explode", one of the most compelling reasons for buying computers is dead.

Corporate sales must be plummeting. My employer has decided to bypass Vista altogether and wait to see how Windows 7 turns out. Until then, we'll all be running Windows XP on the desktop. No profits, no capital investment.

Progress continues to be made, but the rate of change has declined. Where will it end?