Archive for November, 2006

Education vs Training

Wednesday, November 29th, 2006

Scoble points to a post by Steve Sloan who has been teaching a podcasting/new media class at SJSU. It seems the administration would prefer to teach tools rather than theory.

I taught CS at University of Colorado, Denver for several years. Just one course per semester. We had many discussions about just this problem. UCD is a satellite campus. Most courses are taught at night. Students often have full time jobs. They want better jobs. They go to school specifically to get better jobs and they don’t have a lot spare resources to spend on school. They just want to learn the latest hot technologies like Java and .NET and be marketable. In other words, they want job training.

The problem with job training is that the information is perishable. In the mid-90s all the rage was C++. Many universities, ours included, altered their curriculum to use C++ as the teaching language in order to be more appealing to students. After all, you can teach theory using pretty much any general purpose programming language.

Except that C++ is a terrible teaching language. (Actually, its just a terrible langage). It is too complicated and I wasted many classroom hours helping students cope with the quirks in the language instead of focusing on the content. And now, the C++ knowledge is mostly useless. Nearly all C++ work has been supplanted by Java work. So the students need to retrain.

A better idea is to use languages that can most clearly illustrate the concepts with minimum extraneous complexity. More languages means more viewpoints, and tends to make students understand that the language or tool isn’t that important. It is the underlying concepts.

The University is between a rock and a hard place. With education funding cuts, they need to attract students to survive. To attract students, they need to offer classes the students want to take. Students find training classes most attractive as they offer instant gratification. But training classes are like candy. They’re not good for you in the long run and the fix is short lived. Education is more like vegetables. It is good for you, but maybe not so pleasant to digest. The University would like to stick to vegetables, but if noone orders them, they have to sell candy too.

Which is unfortunate. The state of the software industry is deplorable. I think 90% of the people programming out there ought to be doing something else. They suck at their job and aren’t even educated enough to understand that they suck much less how they suck. One trick ponies, they flounder if given a problem that isn’t pre-solved in their platform. FACT: the best indicator that a candidate is likely to fail the interview process at big river books is if they characterize themselves as a “Java Architect” or “Java Developer”. It usually means they don’t know anything else. They think Java (or .NET) is the pinnacle of software achievement. Without a proper education, they can’t conceive of anything else.

The real solution is to properly fund universities as institutes of higher learning and stick to education. If the universites want to also offer vocational training, that’s fine. Just don’t cheapen the academic programs by offering “degrees”. Certificates of completion should be adequate.

Downriver

Monday, November 27th, 2006

For the past 2 and a half years I worked at Amazon.com. It was fun for the first year – so many old assumptions and prejudices shattered. But Amazon is a special case. For most normal sized systems, my old design sense was pretty solid.

Still, it was a horizon broadening experience and I enjoyed that. I managed teams of people and we built software and I liked that as a change from the endless parade of crummy short term java contracts I was getting.

But I left last month. I joined as something of a new manager. My pay grade was commensurate with my lack of experience in that area. But eventually I grew weary of it and was itching to get back to doing nifty code if I could find a way to do it on my terms. Which means dynamic expressive languages and I get creative control of the technology. No “You’re the architect – so you’ll use this language and that vendor’s solution”. Huh, I thought I was the architect.

The other main driver to leave is no work/life balance. This isn’t Amazon specific. This is US company specfific. In the US, if you work for an established company, this is just how it is. You get 2, maybe 3 weeks of vacation and a few holidays here and there. You are expected to put in 50 hours a week. With ever rising property values and congested highways, you have to live about an hour away from work, meaning you lose 2 unbillable hours a day just travelling to work. You’re working your butt off, but you can’t enjoy the fruits of your labor.

I lived in France for about half a year. I’ve seen how Europeans live. They take 5-6 weeks of paid vacation. They can take long leaves of absence. They are able to travel the world. In the US, you can’t get enough days off to drive across the country, much less travel abroad. No wonder we are such an ignorant xenophobic lot.

I have a boat. I’d like to take the boat in the summer and explore Puget Sound, where I live. I’ll need about 4 contiguous weeks to do it. I couldn’t get the time off. Why have a boat if I can’t take the time to enjoy it?

I have friends abroad. I can never get the time to go see them. I have the money. Just not the time. Again, this is lame. So I walked. I give up on work camp America. US companies say they can’t find qualified workers. We’re around. But your terms stink. Improve them or go pound sand.

I left the big company to work for myself. I build software using tools I like. Unconventional, but productive and low-cost tools like Squeak and Seaside. I use other things too, depending on requirements. I work when I want to, from anywhere I like.

I think this is the future as more and more of my colleagues are opting for this kind of situation. The big company life holds no attraction for the seasoned employee.

Happy Thanksgiving!

Thursday, November 23rd, 2006

I love to cook, so this is my “recreation” day.

Turkey, pear stuffing, apricot cranberry sauce, yams, fruit salad, baked pears with hazelnut chocolate sauce for dessert.

What’s in your oven?

On Database Initialization Scripts

Friday, November 10th, 2006

When building a new system that has a database, there will be a collection of tables that are reference tables. Lists of possible values that contain human readable versions of numeric codes. An example might be a status code for an order. The statuses might be OPEN, PENDING, CANCELLED, SHIPPED. Well written applications will make use of these reference tables to populate the user interface pick lists, thus allowing a new status, like RETURNED, to be added quickly by just adding a row to the database.

Order Status
ID Name
1 Open
2 Pending
3 Cancelled
4 Shipped
5 Returned

Of course, that means that those tables must be populated. There are right ways and wrong ways to go about this. The worst thing you can do is to simply sit down at a terminal and start typing INSERT statements right to the database. If you do this, you have no reproducibility. You may have several instances of this database, for instance a test version and a production version. Being able to build an application database from a virgin install is critical. So write scripts, keep them in version controlled files, and keep them up to date. If, somewhere down the line, you do add a status code for RETURNED, you should just update the script for that table and run it.

Which brings me to the part that is frequently overlooked and that messes up a lot of people. Database initialization scripts must be written to be IDEMPOTENT. Idempotency is that property that guarantees that performing an action multiple times has exactly the same result as performing it once. Each table initialization script should be IDEMPOTENT.

This means checking for the table and if it is missing, create it. Check for each record and if it is missing, insert it. Hard code the primary key in your reference script so it will not change. If there is a sequence involved, be sure to reinitialize it appropriately.

The reason for this is that, one day, some idiot will accidentally delete or damage part of your database’s reference data, either through coding error or just mistyping commands. Probably, the idiot will be you. You’ll look like much less of an idiot if you can just whip out your trusty database initialization script and know you can instantly repair the damage because your scripts are all written to be IDEMPOTENT.

The rain stopped, sun is shining, Democrats win

Wednesday, November 8th, 2006

What’s not to like about today?  Tomorrow is my final day at big river books and I am really looking forward to my next adventure (and losing my commute).

Election Day – VOTE!

Tuesday, November 7th, 2006

Today is the day that the government returns to the people. Vote!

Also, please be aware that there are a lot of dirty tricks going on this year.

If you have received a phone call telling you your polling place has changed – call your local registrar and verify it. Lots of Democrats have received phone calls designed to discourage them from voting by misleading them about the location of their polling place, their voter registration status, or deliberately annoying them in the name of their Democratic challenger. This is all intimidation and voter suppression tricks and it is designed to deprive you of your fundamental right to vote.

Things to remember:

1) Voter registrars don’t call people. They just don’t. They have enough to do. That person calling you is someone you shouldn’t trust.

2) Nobody is ever arrested for trying to vote. They may be turned away on technicalities, but there are no law enforcement officials hanging out at the polls looking to take people away for trying to vote illegally.

3) Polling locations may change – but nobody is ever charged with calling everybody to tell them. Independently verify your polling location and go there.

4) Bring a video camera and film anything suspicious.

5) If someone tells you that you are not eligible to vote, immediately photograph them, get all details including their name, party affiliation, and reason you are being denied. Ask to fill out provisional ballots.

6) Long lines. Sorry – please tough it out and vote anyhow. It is important. Be angry about it though. Long lines are often produced by election commissioners trying to discourage voting intentionally because they know your district favors candidates they don’t like.

7) If you’ve been getting harrassing recorded phone calls – be aware that the republicans are running a misleading robo-calling campaign designed to trick people into getting annoyed at their opponenents.

8) Bring a photo ID.

Some useful links:

ProtectOurVotes.org

Election Protection 365

Video The Vote

VeektheVote (cellphone video reports)

Now go VOTE!

I’m a topic on Lambda The Ultimate

Thursday, November 2nd, 2006

It seems Blanchard’s Law is gaining traction.

It is now a discussion topic at Lambda the Ultimate. A discussion group for language and programming freaks.

Pretty cool.

5

Thursday, November 2nd, 2006

Which is the number of work days I have left at big river books. The only thing I have left to do is write the spec for the next version of the app I manage. Nothing big – just the next conceptual leap.

This kind of work always seems like more work than work work as I spend probably 70% of my work time simply imagining scenarios and trying to come up with effective software tools. Then I write down how I imagine it should be. Imagining dull things and then writing them down is hard work.