I arrived at 2 Park Ave on the first day of my internship not quite sure what I was getting myself into. I had just finished my sophomore year at Dartmouth and was looking forward to my first time living in New York City. My sophomore year was packed with computer science. I had taken the notorious software design and algorithm design courses, I was doing research with the chair of the Dartmouth computer science department, and now, I thought as I exited the elevator on the fourth floor, surely I was ready for the industry.
My first experience working with the Distribution team was a two day long architecture plan-a-thon for the new messaging system at Gilt, a system that facilitates seamless communication and synchronization between Gilt admin, distribution centers, and shipping companies. As the second day drew to a close, my boss, Chris Hazlett, began to explain my role in this slick new messaging system that we were designing. The start of that conversation went something like this:
Me: “Um, yeah… What’s a web server?”
Everyone: “Oh boy.”
I had a lot to learn. We spent the next half hour going over a lot of the concepts I was missing. “web servers”, “model-view-controller”, “ajax”, and more. Often these words would rest on a whole stack of other important concepts that I also did not yet understand.
“Oh, well its just the process of making asynchronous requests to a separate web server to dynamically fill in content on a webpage. Don’t worry, you’ll just use jquery for that.”
And so on.
My first few weeks at Gilt, I was very frustrated. How could my computer science program have left me unprepared for industry? Granted, my background is focused more on theory than systems. I do research in algorithm design and until I began to learn languages outside of my classes, my strongest languages were Haskell and C. But still, regardless of my theoretical focus, I was a computer science student, damn it. What was I missing?
It gradually dawned on me that most of my frustrations could be reduced to two missing links in my CS education: object-orientation and the web. These are two topics that are not strongly emphasized in traditional computer science programs. I resented the fact that there were no web development topics covered in any classes at Dartmouth, and that instead I had been exposed to what now seemed to be esoteric, dated concepts. The hours spent in gdb sifting through hundreds of lines of C to fix elusive seg faults and memory leaks now seemed futile now. The mind bending recursion, pointers, the linked lists, the hash tables, the mallocs, reallocs, the frees, ALL FOR WHAT! After briefly wallowing in my sorrow, my boss reminded me that the whole reason I was here was to learn. So I started to learn.
In reality, once I overcame that initial shock and the task of setting up my development environment (surely a twisted form of tech hazing), the general learning process was much more painless than I had anticipated. Most of the tools I was using were well documented, and when in doubt I had the most thorough and accessible form of documentation around: people! I consulted frequently with folks in all different groups, front end, algorithms, distribution, etc. As I learned the tools, my team was making fantastic headway on the new messaging system. We moved into a small conference room to make collaboration and communication easier. Danger Zone by Kenny Loggins became the natural theme of our industrious lair as we moved steadily towards the completion of our first iteration on the project.
Around this time, about halfway through my internship, the focus of my work in the office shifted from learning to building. As I finally understood how tools like Lucene, Jquery, and Scala worked and how all the pieces of a full web-app stack fit together, I began to feel more at ease and developed much more efficiently. I quickly made headway on the new user interface and the actor-based search engine library.
I also started to meet others outside of the tech team. Settlers of Catan frequently occupied my Thursdays, volleyball occupied my Mondays, and occasionally there would be, ahem, modest company gatherings held in abandoned four-story tall synagogues. The Friday of my second to last week with the company, I was able to present my final project to the rest of the tech team during the 5@4, which seemed well received. All in all, it was clear that my work was going to have a lasting impact, and would make the distribution team’s job faster and easier.
As my internship draws to a close, its now quite clear to me that the frustration I initially felt towards my computer science background was naïve. A Computer Science degree is not supposed to be a vocational degree. Computer Science is truly a science, and the point of studying it is to gain exposure to and mastery of the foundations. Once you know how to think like a computer scientist, learning new tools in the field comes quite naturally. That’s the idea, and thankfully, it works.