SmartMonsters, Inc.
Zachary Schuetz, 2011
My experience as an intern at SmartMonsters was even more instructive overall than I had hoped. I learned a great deal about not only the computer science industry, but also myself. A key part of this success was the excellent relationship I developed with my supervisor, but in the end the most important factor in my success turned out to be my ability to be flexible and apply creative problem-solving to each challenge I faced.
My objective for this internship was to aid in quality assurance of SmartMonsters’ primary product, the multi-user online textual role-playing game TriadCity. To this end, I was tasked with developing an automated software “bot” that would enter the game world through the player interface and automatically perform a series of tests such as spell-checking room descriptions, ensuring that doors opened and closed on command, etc. Using the Eclipse development environment and “Extreme Programming” methodologies including iterative development and “test-first” program design, my supervisor and I wrote Java code and integrated it with the existing SmartMonsters code base, taking advantage of tools and methods already in place as well as writing many new ones. I also ensured that the way the bot performed tests and outputted the results was customizable at runtime using any of several command-line arguments. Additionally, I was solely responsible for integrating third-party libraries into the project in order to perform the common but complex tasks of spell-checking and part-of-speech tagging. All code had to be thoroughly documented using the JavaDoc specification, which allows for automatic generation of HTML documentation for the program using a specialized compiler.
Overall, I would categorize my performance during this internship as excellent. Having never worked on a project of this scale before, I was initially overwhelmed, especially since I was still struggling with the syntax at first. In the future, I would attempt to practice more in advance in order to make the first few days a smoother experience. However, I quickly settled into a comfortable rhythm. I was surprised at the degree of control over the project that my supervisor, Mark, gave me – although he set the initial objectives, and offered crucial advice and suggestions at each step, by and large it was I who decided what to do next on a day-to-day basis.
Over the course of the month, I learned when to research technical questions on my own in textbooks and official documentation, and when it was more appropriate to ask for Mark’s help as an experienced programmer. The degree to which he made himself available to answer questions helped me to feel at ease, but since we were telecommuting, I was working for hours at a time with no one hovering over my shoulder. I am particularly proud of the degree to which I was able to separate work from leisure time. Unless we were working closely together on some particular problem, Mark often had little direct evidence of what I had done all day besides my brief daily reports, but he trusted, correctly, that except for designated breaks I was working steadily until I signed off at the end of the day. Partly as a result of this work ethic, we were able to implement our first crucial round of objectives for the project within approximately two weeks, leaving time to work on more complex optional features.
Another interesting aspect of this project was that, for technical and security reasons, Mark was the only one with access to certain data. This ended up meaning that he had to write several classes with an extremely simple structure but many lines of code, leaving me in charge of the majority of the more interesting and challenging work. The creative problem-solving I had to do in order to make the bot perform as it should was thoroughly engaging. Although there were moments of frustration, that made it all the more rewarding when I did find workable solutions.
Besides figuring out that I enjoy exercising the parts of my brain necessary for programming, I learned that I do have the capacity to work steadily in a full-time position of 8 or more hours a day. I also learned the importance in such a situation of taking short breaks to rest my eyes and hands and restore circulation, lest I become too stiff to get out of my chair. Although it may not sound like a serious problem, Mark stressed that many novice programmers become so engrossed in their work that they become dehydrated or even ill through carelessness.
Another fact about myself that significantly increased my productivity once I figured it out is that, when I need to leave something and come back to it, it is best to make myself do so when not at a “stopping point.” Generally, if I stop in the middle of something, whether it be a paragraph of text or a single line of code, it is obvious what needs to be done when I come back to it. This saves me from forgetting what my immediate plans were, and allows me to gradually regain my concentration.
Also important throughout this process has been follow-through. In casual situations, I sometimes have the habit of examining a puzzle only long enough to determine that I could find a solution, without determining what the solution is. Having to not only conceive of ideas and solutions but actually implement them myself has, in many cases, led to a re-adjustment of my thinking, and I have learned to recognize the importance of balancing the efficiency of my work with the effectiveness of what I produce.
In addition to the valuable insights into myself that I gained through this internship, my conversations with Mark yielded many stories about how things work in the computer science industry. Our discussions of dress code, hiring practices, and the difference between Silicon Valley and traditional corporate culture allowed me to get an insider’s view of the different aspects of working with computers. As a programmer with many years of experience, Mark was also able to explain programming style conventions that are sometimes well-justified, and sometimes arbitrary but time-honored.
All things considered, I would have to say that this internship is one of the best experiences I have had at Middlebury. Although I had less free time than most students during J-term, the amount I was able to learn both in terms of Java programming and in terms of how I work best made it an unquestionably valuable process. I still may not pursue computer programming as my main field of study, but I am now confident in my ability to work from home, which is a distinct possibility in today’s world. Also, some of the work I did sparked an interest in the field of computational linguistics, with which I was previously wholly unfamiliar. Since I enjoy linguistics as well as mathematics and computer science, this is an area I certainly plan to investigate further.
When I first conceived of the idea of doing an internship at SmartMonsters, it was an idle daydream borne of the desire to contribute in some way to a game that I enjoyed. The fact that I took the initiative to contact the company, secure the position, fill out the necessary paperwork, and realize the situation is one of the achievements I am most proud of in my life to date. Through this process, I have gained both technical knowledge and confidence that will be essential for securing a paying position in the future.
Contact the Career Services Office for more information on this internship.