Benefits of college education
As I spent the last week hiking in Lassen NP the post this week will be somewhat lighter than usual.
Sometimes people say that colleges teach stuff that’s never used in the industry. I’d like to tell a story of my own about parallels between my college experience and my first task at Amazon.
During my 5th year at college my science advisor went to Milan, Italy and brought a Monte Carlo simulation program from University of Milan. My goal was to figure out how it works and improve its performance. I also had to make it work with completely different energy functions and molecular structures. There were several problems: the program was on tape that our IBM 360 clone couldn’t read. I had to find a part-time job at a place with micro VAX computers to even read it. After reading, more problems were discovered! I realized that the program is a single file of FORTRAN-4 code with about 50K operators and very few comments. Of course, the comments were in Italian. Italian wasn’t a popular language in the Soviet Union so even finding a small dictionary wasn’t easy. I figured out the path to understanding had to start with finding pieces of the program that performed particular functions (energy calculations, input/output, moved the molecules etc.). Then I would need to separate them into files, restructure the main program, and optimize. The only way to do that was to print the original file.
That’s what the print out looked like, except that mine was likely thicker. For the next couple of months the floor of my room was used as a giant table. I crawled over the paper and drew arrows from one part of the paper to another until I gained enough understanding to start experimenting with splitting the code and rewriting it, eventually mastering it. This work wouldn’t have been possible without first cross-referencing the code.
When I was hired by Amazon it didn’t have much in the line of boot camps or introductions. The group I was hired into was named E-commerce services (ECS for short). Its role was to run all other websites — the websites that weren’t Amazon.com. That was the time when Amazon was selling its “platform” to ToysRUs, Target, Bombay etc. I was given a mentor. My mentor was a Principal Developer. The role of the mentor at Amazon was to do what boot camp didn’t — introduce the new hire to the environment, answer any questions, and generally help the new hire become a productive member of society. One thing wrong with having a Principal Developer as a mentor is that a Principal has a lot to do. Helping me wasn’t big on his list of priorities. He was gracious enough to answer my questions but it was really clear that having a lot of questions wasn’t great. The way developers learned the ropes at the time was to pick a random middle priority issue from the ticket queue and fix it, rolling the fix into production. The idea was that this exercise would take a new developer a couple of weeks. I picked an issue with a problem on one of the website pages. At that time the site was run by a single humongous application named Obidos. Obidos was written in C and C++ and there was no computer in the development environment that could compile or run it. That’s because Obidos had grown so big it barely fit into RAM of the largest production machine. I had no idea what code participated in the functionality I needed to fix and using a debugger to step through everything wasn’t an option as I couldn’t run the app. One of the ways to handle the problem was to do what I did at college — print everything and manually trace the dependencies. The difference was that I didn’t have several months and the amount of paper needed would probably require a small truck to transport. Thankfully, Eclipse IDE with CDT plugin already existed at that time. My goal was to get Eclipse to the point where it could at least get a working cross-reference table and then use the IDE to find the code implementing the functionality I needed to fix.
This task as well wouldn’t have been possible without first cross-referencing the code. At the end I fixed the bug and went on working for Amazon for many years.