The manual that never was written (but should have been)…

Tom has only started blogging a week ago, but obviously he decided to not waste any time with long useless stuff. After all, he’s a Smalltalker ;-)

His first posts so far were all very interesting, tearse, and provide a lot of useful information and ideas around build automation with VA Smalltalk. One of the big mysteries in VA Smalltalk is the role of the abt.cnf file, which was said to support the execution of Smalltalk scripts on startup of an image, but there’s never been much documentation about it. Since the execution of the Smalltalk code in abt.cnf happens very early in the startup sequence, simple attempts of doing anything useful in abt.cnf failed miserably. So I gave up on it long ago and had almost forgotten about it.

In his latest post, Tom shows how to use abt.cnf for loading code into a virgin image which really contains no pre-loaded code (meaning a copy of abt.icx from the /newimage subdirectory). So I’ve learned something new that I will definitely use to get rid of the necessity of building “basic preloaded kernel images” for our Stream-based configuration and packaging tool. We can just use abt.cnf to pre-load that base image without any prerequisites – a cool thing!

You know, in a world where you have these ever-re-occuring steps like loading the latest code into a virgin image every morning and performing all the same 43 steps for packaging again and again, every little improvement pays back after a very short time (just imagine your machine prepares a new image in the morning for you while you discuss the latest soccer results at the coffee machine or during your standup meeting…).

And I liked this one:

I have a deep and abiding hatred for the Application Organizer, so I like to ensure that it won’t offend me with its presence…

My favorites are the question whether I want to go to the Organizer or start a new project every day ;-)  and the fact that StSDebugger is always deactivated bay default (luckily, I fixed that one a year or two ago).

New Blogger with Smalltalk topics

Tom Koschate has finally decided to join the Blogosphere with his Blog named “Nothing About Elks“. He also has a welcome present for all VA Smalltalk users which he just announced the other day on the VA Smalltalk Support Forum:

I’ve uploaded the code I use to support automated packaging using the Jenkins (formerly Hudson) integrated build server to VastGoodies.com. There’s a lot of overlap in functionality with Melissa, but there are some important differences too, including the ability to package XD images.

As you may know, I’ve been working on very similar topics, including coupling our build process with Hudson and I really look forward to having a look into Tom’s goodie and to see how he solved things. I didn’t have look into XD packaging for our customers yet, so I hope I find the time soon.

His first blog post explains a bit of why he built the tool and what scenario he found when he started on his current project:

Generally speaking, this results in having to package four to five different Windows images and a half-dozen UNIX images for each plant. Historically, each plant has been treated as a separate system with a separate release schedule. As you can imagine, this has led to some interesting forks in development.

This not only sounds familiar but also as if he’s got a lot of experience to learn from.

So welcome, Tom! I look forward to reading more and learning from your experience!

Cobol ist 50 – und keiner will’s wissen

Irgendwie war mir das schon klar, dass Cobol sehr alt ist. Aber dass gestern offenbar der Tag des 50. Geburtstages war, ist mir nicht bewusst gewesen.

Ich selbst habe vor einiger Zeit mal ein bisschen Cobol-programmiert, und bin ganz froh darüber, dass ich es lesen kann und auch mal mitreden, wenn’s um Cobol-Themen geht. In den Projekten, durch die ich mich so kämpfe, ist Cobol fast immer die Sprache auf dem Back-End, also dem dicken IBM-Hobel im klimatisierten Hochsicherheitskeller.Und das, was Cobol da tut, tut es in beeindruckend schneller und stabiler Weise: Massendaten durchmassieren und von A nach B schaufeln. Das Gespann Großrechner und Cobol ist da ziemlich ungeschlagen das performanteste, was es gibt.

Umso schlimmer finde ich, dass man sehenden Auges in eine Situation hinein schlittert, die katastrophaler nicht sein könnte: Cobol ist bald nur noch was für alte Recken oder verkrachte EDV-Quereinsteiger, die sonst nix drauf haben. Dabei bewegt Cobol weltweit dermassen viele Daten und damit auch Geld, dass es befremdlich und unheimlich ist, zu sehen, wie stiefmütterlich sowohl der Mainframe als auch Sprachen wie Cobol oder PL/1 behandelt werden, wenn es um den Aufbau von KnowHow und die Ausbildung von Nachwuchs geht.

So hip und sexy Web und Rich Client sein mögen, so unbedeutend sind sie doch (leider?), wenn es um die Verarbeitung von Buchungen, Lastschriften, Abbuchungen, Massenmailings und so weiter geht.

Keiner bildet mehr Cobol aus, schon gar nicht unsere Universitäten, denn Cobol ist ja simpel und schon so alt. Mir hat man im Studium Anfang der neunziger Jahre erzählt, bis ins Jahr 2000 gäbe es den Mainframe nicht mehr. Das macht dann alles eine Unix-Maschine. Zwar hinkt dieser Vergleich ziemlich, denn das eine schliesst das andere ja nicht aus, aber das war den Herren Professoren wohl so noch nicht aufgefallen. Und mit der geänderten Hardwarearchitektur würde dann auch alles aussterben, was man auf dem Hobel damals eben so machte. Und damit auch Cobol.

Zugegeben, wir haben heute bunte und intuitivere Oberflächen in der Hinterhand als einen 3270-Bildschirm in Bernstein oder mit 6 Farben, und mehr als 80*25 Zeichen können heute sogar unsere Mobiltelefone darstellen.

Aber wir scheinen gerne zu vergessen, dass die Erfassung und Plausibilisierung von Daten zwar eine wichtige und unterstützenswerte Aufgabe ist, aber in den meisten unserer Projekte steckt am Ende ein Jobnetz aus Batchprozessen am Host, die dann morgends um Drei Uhr im bereits angesprochenen Keller die Schmutzarbeit machen.

Ein paar interessante Zahlen zum Thema aus dem Heise-Artikel:

  • weltweit 200 Milliarden Zeilen an Cobol-Code, und es kommen mehrere hundert Zeilen täglich hinzu. (Anmerkung des Autors: es sind ganz sicher deutlich mehr als ein paar hundert pro Tag!)
  • Ungefähr 1,5 bis 2 Millionen Entwickler haben mit Cobol-Code zu tun.
  • David Stephenson von dem britischen Cobol-Experten Micro Focus geht davon aus, dass heute 200-mal mehr Cobol-Transaktionen täglich durchgeführt werden als Suchanfragen bei Google.

Ist es nicht Wahnsinn, dass wir uns keinen Cobol-Nachwuchs mehr heranziehen, ohne bereits heftigst an einer geeigneten Nachfolgetechnologie zu arbeiten? Sind wir nicht ziemlich schräg unterwegs, wenn man bedenkt, dass wir noch nicht einmal eine müde Idee davon haben, wie diese Nachfolgetechnologie aussehen könnte?

Und selbst wenn wir schon eine hätten, wie lange müssen wir wohl in die Zukunft schauen, bis diese die bestehende ersetzen kann.

Jeder, der schonmal einen neuen Buchungslauf eingeführt hat, oder unter der alljährlichen Urlaubssperre zum Jahreswechsel dem großen GAU entgegengefürchtet hat, weiss, wieviel vergessenes Know-How und Detailwissn in diesen teilweise 30 Jahre oder noch älteren Programmen steckt. Wieviel Testaufwand steckt in diesen Systemen? Ich vermute, wir können hier global betrachtet von einigen Taused Personenjahren ausgehen.

Heise schliesst seine Geburtstagslaudatio mit den Worten:

Spannend dürfte für die Zukunft sein, wie viele Systeme Firmen aufgrund mangelnder Programmierer mit Cobol-Know-how auf andere Programmiersprachen wechseln.

Die Frage ist nur, auf welche sollte das sein?

Java-Batchprozesse? Technisch sicher machbar, und das Zeug zur Legacy hat Java ja durchaus.

Ruby on Iron? Immerhin sehr hip zur Zeit.

Wie lange werden diese Technologien leben, und welchen Vorteil hätte man daraus, eine neue Technologie mit Milliardenaufwänden zur Legacy von Morgen zu machen?
Sterben uns dann in dreissig Jahren nicht wieder die Ruby-Batch-Programmierer aus? Okay, wir hätten dreissig Jahre gewonnen, und die Konjunktur enorm gefördert.
Wieso denn überhaupt eine neue Technologie, wenn die alte doch eigentlich keinen Anlass zur Klage gibt, ausser, dass wir uns selbst den Nachwuchs abschrecken?

Achja, und egal, welche Programmiersprache man sich immer aussucht: schnödes Datenmassieren ist es allemal.

Wahnsinn…

keysAndValuesDo:

Over at Vox, Randal is showing some interesting methods he found in Smalltalk for iterating collections. The really interesting thing he found is that Collections in Squeak support #keysAndValuesDo: .

I was quite surprised by this because the method name is not really intention revealing or hinting at its purpose. If I want to iterate over a collection and also need the index of an element I’d use myList doWithIndex: [:item :index| ...] rather than #keysAndValuesDo:.The latter is of tremendous help when working with Dictionaries and LookupTables (hash collections) and makes life much easier for a code maintainer.

One of the commenters said VA ST implements keysAndValuesDo: only for keyed collections, which I think is a good thing. Using keysAndValuesDo: polymorphically on completely different types of collections is not helping the reader of the code very much. “Heck, what does he mean with a Key, it’s just a list of customers? I must have missed something. What the heck is he doing there?”

Randal also presents a very nice new way of using do:separatedBy:

| index |
index := 1.
myItems do: [:item | ... ] separatedBy: [ index := index + 1 ].

I’d never ever have thought of this one, but this surely looks familiar to many developers. Not that this is actually bad code, but why add so much syntactical noise to a simple job?

One of Smalltalk’s strengths is that it sometimes makes complex things easy to do and – even more important – to read. The messages supported by the Collection hierarchy are a really bright example here.

Ted Leung über dynamisch getypte Sprachen

Ein paar Interessante Zitate zum Thema dynamisch getypte Sprachen fand ich zuletzt in Ted Leung’s Post “IDE’s and Dynamic Languages“, der sich auf jeden Fall zur vollständigen Lektüre eignet – auch die Kommentare…

Im wesentlichen führt Ted aus, wie verwundert er darüber ist, dass gerade in der Benutzerschaft der dynamisch getypten Sprachen  wie Python, Groovy oder Ruby eine gewisse Phobie gegen Entwicklungsumgebungen herrscht, und zeigt gleichzeitig auf, dass gerade die Texteditoren, die sich in der Benutzergemeinde als Geheimtipp verbreitet haben, nach und nach zu IDEs werden, und sie sich genau deshalb zunehmender Beliebtheit erfreuen.

Eine Perle ist eine seiner Eröffnungsbemerkungen:

One of the points that I’ve been trying to make since I’ve gotten back in to the languages space is that a lot of what is happening in languages now is unpausing the nuclear winter that Java imposed on the programming language space.

Und das von einem Sun-Mitarbeiter ;-)

Ted nennt auch Smalltalk als einen der ausgereiftetsten Vertreter der dynamisch getypten Programmiersprachen:

If you haven’t been following this space for a while, you’d believe that all this dynamic language stuff was invented in the last 5 or 10 years or so. But it wasn’t. Today when you say dynamic languages, people assume that you are talking about Ruby, Python, Groovy, Javascript, PHP, or Perl, with a number of other languages also entering the mix. The truth is that the intellectual forbears of these languages, Lisp and Smalltalk, were invented about 30 years ago or so.

Und führt dann aus, dass diese Sprachen schon vor einiger Zeit mit umfangreichen IDEs daherkamen und viele der Dinge, die die Entwicklung besonders effektiv machen, ihre Wurzeln hier haben: Refactoring oder Live-Debugging.

In der Tat ist es sicher kein Fehler, sich einmal eine aktuelle Smalltalk-Entwicklungsumgebung herunterzuladen und auszuprobieren, um die Vorteile einer IDE gegenüber selbst einem exzellenten Texteditor kennenzulernen. Vor allem beim Live-Debugging erweist sich sehr schnell, dass Sprachen wie Smalltalk selbst einem Eclipse noch einiges voraus hat – und das schon seit einiger Zeit…