Do you remember how you became a programmer? What was your first program? I do remember. Frankly speaking at some point I wanted to be a helicopter pilot, because I really loved helicopters. But I didn’t make it because of my health. Later I decided to become a dentist, because dentists made good money. Fortunately I became a programmer, and here is how my journey started.
I grew up in a small town. Even though a lot of technologies already existed somewhere in the world, this small town was a decade behind the rest of the modern world from the technological point of view. We didn’t have access to the internet in the beginning (only companies did). Later we got nigthly dialup connection (from 10pm to 8am, charged for time). And only after couple of years we had 24/7 available dialup connection for individual usage. It was hard to find any information or program. Note that it was long before flash drives and CD-R disks. So we had to use floppy disks or bring an HDD to exchange information with your friends. Information was hard to find, therefore more valuable. I moved to a big city only after school. There were more communications and opportunities. This also gave me an unlimited access to the internet.
My father found an old soviet book in a garage: Basic in 24 hours (sadly I can not find its cover on the internet now). I was 11. I read the book, but unfortunately I had no interpreter on my computer. Friend of mine brought me qbasic. We made funny text quests for each other and colorful animations (as it was possible in VGA mode). Those programs were not portable executables, so we moved to VB 1.0 compiler to get fancy .exe files. Another friend of mine (I consider him my Mentor actually) gave me a giant book about VB 6.0 and an IDE for it. So I started making windows applications. Than I got Delphi 5, and it was a hot thing back then! Everything was possible: multi-threading, databases, networking, 3D. About that time I started playing with ASM, C, WinAPI. By the time I graduaded from school I used Delphi havily and also tried other things like PHP and Perl.
I was 18 when I got my first job. Given my Delphi experience and passion I was a good match for them, although I was young. 5 years in this company gave me production experience in manual memory management (and memory leaks profiling), multi-threading programming with mutexes and semaphores, native code debugging, UI building, performance tuning, etc. Apart from technologies I also got useful experience in team work, CVS, sprints, planning and long-term code maintaining. Later we started using C# for our production applications. In addition to my job, I was learning Java, Python. The university also acquainted me with microcontrollers, electrical engineering, networks, QNX, Prolog, math and algorithms. Later I was getting into web development and started learning Ruby. That helped me find another job. I do not stop and continue learning new things and getting broader knowledge in software engineering in paraller with my Ruby job (Scala, Erlang, R, Clojure). But the present is an another story. Here I want to focus on my childhood.
I was damn curious. I tried to look inside things and understand how they worked. In the beginning, before I knew any fundamentals of computing, I threw every file into text/hex editor (like Hiew, for example). Some things were human readable (text configs, *.ini, *.reg files, etc), others weren’t (executables). At that moment I used paper English dictionary havily and tried to learn things from thier names. Later I mastered tools like PE.Explorer, Restorator, etc. I had to read PE specification. But that wasn’t enough. To understand things in motion (in execution) I went deeper and read IBM PC Assembly Language book by Peter Abel. So I found new friends: Win32DASM, SoftIce, ollydbg. Obviously, packers came at that time as well. When I got my first dialup modem I started digging into it with HyperTerminal. The whole new world was opened when I got my first Linux dist, it was Red Hat 7.2 (not to be confused with RHEL). Things became bigger, but passion to look inside was still there.
I have to mention this magazine. It influenced me a lot. Yeah, I know, most of the people don’t take it seriously now and never did. It is considered a magazine for kids. Maybe. But back then it was the only source of information and inspiration for me. It was 2000. We bought it on our local marketplace and shared among friends. With our limited access to the Internet it was a good source of information about programming, debugging, network protocols, operating systems. And it was cool! The fact that it was cool is important because it inspired me to explore. I couldn’t get that inspiration from boring academic books. Now I am an adult, and I can consciously read boring books like Programming Erlang and get deeper knowledge in a sphere given my experience and perception of necessity. Back then I needed something like this to maintain my curiosity and learn fundamentals. And it was fun.
When I think about modern education I see that it can easily give knowledge on any topic, but fails to make kids curious. It is very important, especially in the beginning of education. I really like this TED talk. This guy is inspiring. And even though it looks more like a play now, I’m sure later the kids will continue learning more serious things because they already have a passion to do it.
I’ve mentioned some tools above. This is just a small fraction that I installed, used and tried during my childhood. And almost all these programs were cracked with patches and keygens. I think this is one of the reasons why we have so many talented self taught programmers in Russia. It was easy to play with many different tools for free. Illigally, yes, but here no one cares. Without free access to all these tools I wouldn’t have learnt so much by myself for sure.
What about you? What influenced you the most when you started? Are you still courious now? Or maybe this thing has become boring to you?
© 2011-2022 - Stanislav Spiridonov