Hey, did you catch that redirect? The Toad World URL is now community.toadworld.com. Don't worry -- you'll still find all the same great content here (and more on the way). We're just in the process of giving our Toad World site some well-deserved love. Stay tuned for some more updates coming this way.
Meanwhile, enjoy community.toadworld.com.
The most inventive thing I’ve done is a software program that I wrote for my first employer almost 30 years ago. I was a fresh-faced COBOL programmer for a software company in Bombay (now Mumbai) which had won a turnkey contract to write hundreds of COBOL reports for the very first computerization effort of the Department of Banking Operations and Development (DBOD) of the Reserve Bank of India. The report layouts had been designed by systems analysts from the software company I worked for. I was one of two programmers assigned to writing the COBOL programs. The computer was a “minicomputer” sold by Wipro running an operating system called “Wipro Disk Operating System” or WDOS. I parked in front of one of the three green-screen terminals all day and typed COBOL programs on a big clunky keyboard. Since those were the days before universal internet connectivity and email, the systems analysts visited the Reserve Bank of India once a week to review our progress.
We produced COBOL reports at a rapid clip because there was a predictable pattern to the reports. Today, we would recognize them as two-dimensional “pivot tables” created from a “fact table.” An example of a fact was deposits held by a branch of a particular bank at the end of a particular quarter. Examples of dimensions were Bank (vertical dimension) and Fiscal Quarter (horizontal dimension). In this example, each cell of the pivot table would list the sum of the deposits held by all branches of the bank in question at the end of the fiscal quarter in question.
Typical print elements seen in business reports—such as headers, footers, subtotals, and totals—were also needed.
There were some design variations in the reports. For example, multiple facts could be listed side by side. Or computations could be printed; for example, the ratio of loans to deposits. Or the dimensions could be different. Or the subtotaling requirements could be different.
A relational database management system and the SQL PIVOT clause of Oracle Database 11g was what I needed back then but Oracle Database 11g was still 20 years in the future. Instead, I and my colleague wrote a 1000-line COBOL program for each custom report. Though all we needed to do was take a similar report that we had already completed and modify it.
At first, there was a gratifying sense of accomplishment as thousands of lines of COBOL code piled up. A big plus was that we were treated like royalty by the bank officials. We were even served sit-down lunches every day in the officers’ dining hall—until the clerical workers’ union objected and we were relegated to the clerical workers’ cafeteria. I still remember the first courses of soup and buttered bread that we ate in the officers’ dining hall while the good times rolled.
At some point, I realized the drudgery of the work I was doing. But the only tool at my disposal was a COBOL compiler. There was literally nothing else. So I conceived of a “program generator”—a master COBOL program that would generate custom COBOL programs. The program generator allowed the user to select from a choice of report templates and to specify the facts and computations to be printed. It then generated the required COBOL program.
Needless to say, I had to write the program generator in COBOL. Not something that one would do today.
The bank officers could hardly believe that they now had the ability to generate not only the few hundred custom reports that the Reserve Bank of India was paying for but any custom report that could be imagined in the future.
I expected to be congratulated by the system analysts but instead I got a earful for not keeping them in the loop. They had a valid point.
But there was no going back. The Deputy Governor himself paid us a visit with a crowd of curious bank officials in tow. “This report generator can produce any report you want,” I told the Deputy Governor. “I keep requesting a report on bad loans but I never receive it in timely fashion,” he replied. “Give me just a few minutes,” says I. From the corner of my eye, I could see a bank official making frantic hand signals for me to cease and desist—perhaps bad loans was a taboo subject that day. But I could not be stopped. I generated and printed a report for the Deputy Governor right then and there.
I pride myself that my report generator gave senior officials of the Reserve Bank of India the information that they had not been receiving in timely fashion. And that new custom reports could be generated without programmer intervention.
Over the years, I did other things that were fairly inventive. At the biggest microprocessor manufacturer in the world, I created a suite of graphs that became an indispensable tool for monitoring database health for multi-billion dollar factories. At an “Application Services Provider” (ASP) in the days before SaaS and the Cloud, I wrote scripts to automatically provision application and database environments. They said it could not be done but I did it. They said that the Oracle data dictionary could not be updated but I did it. When I meet friends from that company, our standing joke is that one of my scripts was called “create_three_sets_of_Peoplesoft_databases_and_batch_environments.sh.” Who could possibly forget that name?
But at the top of my favorites list is the report generator that I wrote 30 years ago when I was a fresh-faced COBOL programmer.