|
In 1998 I bought my first computer. The discipline of creating computer programs has always fascinated me. From a hobby hacker to a proficient software developer. Read the story.
In 1989 I bought my first computer - a Commodore C64. That was when I started to develop the taste for this discipline. It started with writing small programs in Basic and hacking computer games. Later, on an Commodore Amiga 500 I started cracking copy protections, which brought me in touch with machine code and C. That was very interesting for a teenager like I was.
Some years later, when I started to work for a software company in 1996, I was surrounded by very well educated people. By watching how passionated they did their business, everything became more and more serious for me. As they have seen my interest in this materia they spent a lot of time introducing me to the world of computer programming and the most elegant solutions for all different kinds of problems. I'll never forget what these persons did for me:
- Thomas G. Schiele, dipl. Ing. ETH
- Hanspeter Wachter, dipl. Ing. ETH
- Steven Seda, dr. techn. scn.
I started to understand, that programming computers is more than typing commands into an editor and watching what the computer does. Programming computers can be treated as an art! The beauty of a computer program lies in it's efficiency, extendability and readability. The competition might be finding the most elegant and generic solution for specific problem. Careful analysis, research and good understanding are basis of all work on it. Read the following three sections to learn more about what I mean:
Educators, generals, dieticians, psychologists and parents program. Armies, students, and some societies are programmed. An assault on large problems employs a succession of programs, most of which spring into existence en route. These programs are rife with issues that appear to be particular to the problem at hand. To appreciate programming as an intellectual activity in its own right you must turn to computer programming; you must read and write computer programs - many of them. It doesn´t matter much what the programs are about or what applications they serve. What does matter is how well they perform and how smoothly the fit with other programs in the creation of still greater programs. The programmer must seek both perfection of part and adequacy of collection. [...]
Every computer program is a model, hatched in the mind, of a real or mental process. These processes, arising from human experience and thought, are huge in number, intricate in detail, and at any time only partially understood. They are modelled to our permanent satisfaction rarely by our computer programs. Thus even though our programs are carefully handicrafted discrete collections of symbols, mosaics of interlocking functions, they continually evolve: we change them as our perception of the model deepens, enlarges, generalizes until the model ultimately attains a metastable place within still another model with which we stuggle. The source of exhilaration associated with computer programming is the continual unfolding within the mind and on the computer of mechanisms expressed as programs and the explosion of perception they generate. If art interprets our dreams, the computer executes them in guise of programs! [...]
Computers are never fast enough. Each breakthroug in hardware technology leads to more massive programming enterprises, new organizational principles, and an enrichment of abstract models. [...]
Among the programs we write, some (but not enough) perform a precise mathematical function such as sorting or finding the maximum of a sequence of numbers, determining primality, or finding the square root. We call such programs algorithms, and a great deal is known of their optimal behavior, particularly with respect to the two important parameters of execution time and data storage requirements. A programmer should acquire good algorithms and idioms. Even though some programs resist precise specifications, it is the responsibility of the programmer to estimate, and always attempt to improve, their performance.
[Structure and Interpretation of Computer Programs, Foreword]
Unfortunately it is not easy to find a place in the industry where customers pay for the elegance of a solution. Usually they want to see fast progress in the development process, which sometimes forces the developer to follow a trial and error scheme, which misses then the entire point of writing good software.
My deepest respect is for the people who managed to set new standards for the computer industry on the noncommercial way and pushed it lightyears ahead:
- Donald E. Knuth
TeX, MetaFont, The Art of Computer Programming - Erich Gamma
The Design Patterns - Larry Wall
Perl - Lesslie Lamport
LaTeX - Richard Stallman
Founder of GNU, Emacs, gcc, gdb, big parts of GNU Linux - Linus Thorvalds
Kernel for GNU Linux
I believe that it doesn't matter what language you are using to write your programs. It's more your ideas behind it and the way they're structured what counts. But even though I have some preferred languages to express my ideas - if suitable for the final product. These are: Other languages that I feel familiar with:
- APL (Dyalog)
- Basic, different dialects
- C
- (D)HTML
- JavaDoc
- LaTeX
| - JavaScript
- PHP4
- Perl5
- RegExp
- SQL and PL/SQL
- UML
|
Other languages that just came across my way and I have written some code in:
| - GNU Makefiles
- PostScript
- Skripting with csh, bourne, bash, ms-dos
- Tcl
- Tk
|
There are a number of techniques and technologies that I have professional experience with. I wasn't sure if I should list them because the list cannot be complete:
- lowlevel DCOM in C++ on Win32 and IBM AIX platforms
- database design, programming and tuning with Oracle 8.1.6
- Oracle OCI 7 and 8
- applied design patterns in C++ and Java
- threading models and interprocess communication
- socket programming
- Windows API, MFC, ATL and DirectX
- CVS, installation and usage
- firewalls and proxies on Linux with the TIS Firewall Toolkit
I don't know where to start and where to stop with the listing. But this should be enough give you an impression in what areas I have been moving around. |