Between January 1999 and August 2001, I worked as the head of the software development team for the Institute of Economic Sciences, Belgrade, Serbia. I developed software for share trading and stock exchange based on the mathematical model created by Dr. Božo Draškovic', at that moment the head of the Institute. The software included all of the characteristics of East-European economies in transition. Besides algorithm implementation, I developed functions for basic and complex database management (database engine), network communication, and laser printer control which means that theware was independent of the components supplied by other developers. It was presented at the Jisa Info (Yugoslav informatics alliance) congress in 2001, the largest meeting of the Serbian IT community.
The program was sold to many companies across Serbia/Montenegro such as:
The Coca Cola Company - AD IBP Beograd, Belgrade, Serbia
Vet pharm, Belgrade, Serbia
Kikinda mill, Kikinda, Serbia
and many others
I wrote the share trading program in Borland's Turbo Pascal. Although outdated by modern standards, at that moment (January 99), when I started working on the project, Pascal was the best possible choice because it was the programming language I was the most fluent in. I had a couple of commercial applications and a lot of graphics code written in it. Back then, my primary interest was in 3D graphics. I used Turbo Pascal to explore visualization because it had an excellent set of graphics routines. Besides Pascal, I was familiar with Fortran and wrote a good deal of graphics code in C. I also had a pretty good knowledge of Fox Pro because I spent a year in a local start-up company. However, I did not want to use any commercial database package because I wanted to do everything on my own. Sounds silly, and maybe naive, but I always thought that programming should be fun, and what was going to give me more fun than designing everything by myself! An approach similar to the approach Silicon Valley pioneers had back in the late '70s, and early '80s.
A couple of years earlier, a cousin of mine who is a horse-racing expert, asked me to write him a program able to generate a genealogical tree for a given horse, and I did what he asked of me. It was a simple, albeit efficient "database" application. Initially, I believed that the code of that application is a good starting point for the share trading project. When I started writing the share trading code I thought the racing horse database needed just a small tweaking to make things run. Well, I was wrong, very wrong :).
The share trading application was a relation database. The shareholders were one database/file and shares (separated into different series) were different bases. In addition, selling shares and exchanging votes based on the shares, were creating additional files/bases, all in relation to the shareholders' database. They were all connected by a common set of indexes. That approach made the data manipulation and programming easy and efficient. The program was separated into different units (to use the Pascal terminology here) which were flawlessly interconnected. The database binary format was designed by me and it was not readable by any other commercial application.
Borland had its own text-based user interface framework called Turbo Vision. I did not use it because I did not like its drop-down menus, nor did I like how it handled "windows". Therefore, I wrote my own set of user interface routines. They enabled the program to have a "modern-day" look with the main many on the top of the screen and the status bar on the bottom. Aesthetically, the user interface was more pleasing than the one offered by Turbo Vision (to me, at least). On the plus side is the fact that I had a chance to learn a couple of more tricks. The people who used the program found it very easy and friendly to use. It was idiot-proof, bug-free, and solid as a rock. The decision to create a text-based application proved correct because the program was sturdy the way it would not be if it were written as a Windows application. Of course, today the story is much more different (but if you ask me, for that kind of task, I would again choose to create a console-based application :) ).
Turbo Pascal did not have native Laser Printer support, it only worked with dot matrix printers. However, the project requirement was a laser printer output. Therefore, I had to master the Hewlett-Packard's Printer Command Language, commonly known as PCL. I found a manual on PCL written by the Serbian IT journalist Dejan Ristanovic' and developed a library of routines for laser printer control. I wrote procedures for string positioning, text alignment, and font manipulation (basic fonts derived from True Type fonts supplied through Microsoft Word for Windows). In the end, the program was able to access a laser printer without any drivers or other support mechanisms.
Am I satisfied with the program? I am, definitely, I am satisfied. I run it even today from time to time, and it works flawlessly. Would I do something similar now? No, I would definitely not. It was once in a lifetime project where I did everything (almost everything). I have to admit that it was a sort of challenge to me, but also a labor of love (like a graduate education before I even became a PhD student). However, I do not find it entertaining anymore to explore the deep intricacies of user interface design, laser printer control, and network communication..... Not that I do not respect people who do that, I only say that in the meantime I faced other challenges and passed them with flying colors. Those challenges shaped me, as life shapes people. I am now more interested in a higher level design (although I do not run away from simple low-level tasks). During my undergraduate and graduate studies I have written many mathematically oriented programs, applied many computational routines, read parts of Knuth's TAOCP in my spare time, and found that kind of work more satisfying from the creative point of view than the simple hardware control.