Thursday, February 1, 2007

The world from 60,000 feet

Well, I haven't gotten involved in this whole blog thing up until now but... well... why not.

This blog is probably going to mostly be about high level programming languages. I think the tide is slowly starting to shift toward higher level, more productive programming languages.

I know it has for me. I was a Perl programmer for more then half a decade, but I always hated that language. My favorite language at the time was C++. It was syntax I knew from C, but it was the most powerful language I had seen yet. You could change and add to the language! This is what drew me to it. Power.

About 6 months ago I got back into programming a bit and started looking around. A new friend had ask me to take over his web site. He is pretty talented at graphical stuff, but running a web site always winds up involving technical details that he didn't feel comfortable doing. And since I "do computers" he figured I wouldn't mind taking it.

But the fact is I always hated web programming. Stateless programming, templates, etc. I just didn't like it at all. But looking around something caught my eye: a little web framework called "Seaside".

Now the last I heard, PHP was the king of web programming and PHP was similar to Perl. Not to mention a heavy user of templates. So I wasn't interested at that at all. But this Seaside thing was talked about like it was quite the big deal, so I took a look.

They had this little counter, just a 0 with a ++ and -- under it. When you click on one of those you affect the number. At first I was pretty underwhelmed, but I clicked the button for "show source code". Now I didn't know anything at all about smalltalk, but I saw something that really grabbed my attention.

All the code did was update the object. No stuffing variables into some hidden field, writing files, none of that. Just updates and object and nothing more. I read everything on the site, just to see how they did this, so I could steal, er, use it for whatever system I made. But the more I looked, the more crazy it got.

So I downloaded Smalltalk, it wasn't that intimidating. Just download a file, click it and it runs. No installer menu filling my registry with God knows what. Just a nice little executable like 'putty' (an SSH tool).

Gradually, my love for C++ slipped away. Replaced with something new. A language that was even more powerful, but at the same time much simpler. C++ gained some of it's power allowing you to override what a given operator means for certain classes. Since smalltalk is written in itself, it goes so much further. All the control statements are written in the language, and thus accessible to the coder. Or you can write your own.

The other big thing was this concept of a "live" system. A Perl system I wrote way back when had to do some operations on a very large number of network devices. Unfortunately, at close to device 59,000 something bad happened. A bug. Rather then try to guess what was happening and do some logging, I just ran the whole system in the debugger. The system normally took 6 hours to run. In the debugger, running single threaded, it was much more then that. This meant I got 1 chance per day to try and figure out what the problem was. But with logging it would have been the same.

Finally, after about the 3rd or 4th day I found it. I don't remember the details, but I do remember that I had a fix in about 30 seconds after seeing what was going on. But the problem is, the devices behind this one had not been backed up for some time now and some people were getting more then a little excited about this. But I only had a couple of thousand devices to go, why not just start from here?

Well, because I couldn't. There was nothing I would be able to do from inside the debugger to convince the program to go on from this point, and starting again meant waiting another day. Obviously it wasn't a huge deal, or I could have written a little "one off" to touch the untouched devices (and maybe I even did, I don't remember). But it was something I wished I could have done, but something like that is just impossible. Or is it?

Not with Smalltalk (or Lisp as it turns out). In Smalltalk, I sometimes write portions of the code from the debugger, since this is the best place to get instant feedback of what the code is doing.

I will talk more about this later, perhaps. But let me just finish with, going to smalltalk has also peaked my interest in other high level languages as well. I am looking at Haskell (incredible language as well, and possibly the most terse there is) as well, and keep turning my head toward Erlang, but I haven't bit quite yet.

No comments: