Microsoft - Software Development Engineering Intern - May through August 2013

I was a member of the Advanced Information Processing team at Microsoft, which develops tools to allow data scientists to explore data in new, innovative ways. My intern project was prototyping applications that run on Hadoop YARN. As YARN is in alpha, especially in terms of Windows support, I encountered many challenges along the way to a working product. My work was largely independent of the day-to-day work of my colleagues on the AIP team, so I had to be an independent learner and problem solver throughout my internship to make steady progress. I had an incredible, challenging, and engaging summer at Microsoft.

Garmin - Software Engineering Intern - May through August 2012

I worked on the Garmin Connected Services team doing primarily Java development. During my time there I gained experience with Git, SVN, Maven, Spring, Swing, bash, and various terminal tools. I wrote a Swing desktop app that allowed us to test and demo a variety of new features and services to management. I was able to adapt this to our changing needs throughout my internship and had the opportunity to create an attractive UI for the program. I am also pleased to have had the opportunity to engage in research and development of machine learning models for solving natural language processing problems. For example, I designed a technique for extracting US street addresses from bodies of text. This was a fun application of some things I learned in a Machine Learning and Information Extraction class I took while abroad at the University of Birmingham in combination with a good deal of personal research and experimentation. At Garmin I was able to take the basic premises of a problem and run with them, providing greater knowledge on these topics to my team and branching into related problems and new solutions. Due to the highly independent research focus of my work, I documented my progress heavily with the goal of making it easily reproducible (given my code snippets and input) so that a team of engineers could pick up my work and be immediately productive after my internship. As much of my work was in prototypes of larger systems, I was able to take part in the analysis of larger business costs associated with full solutions to the proposed problems and developed a better understanding of the resources necessary to see a project through to fruition.

Telligen - Programmer Analyst Intern - June through August 2011

At Telligen (formerly the Iowa Foundation for Medical Care) I worked on a team of four engineers to develop a system that analyzes a patient’s medical record to determine the outcome of a specific procedure or visit. The project was written in Java in an Agile development environment. Another intern and I were the primary developers on the product, and we practiced test-driven development, with one of us writing the test cases for a specific class while the other programmed it. During the course of this project I was charged with creating a simple JUnit testing library in Scala in order to more efficiently use our regression tests. Scala offered an advantage over Java because it allows inline XML, which is the default format for the patient data files we used. This removed the maintenance complexity associated with a separate XML patient-data library. Telligen used JIRA for issue tracking, and SVN for version control.

Dr. Julie Dickerson, Iowa State University - Bioinformatics research application developer - May through August 2010

I spent the summer of 2010 updating and extending Subgraph Creator, a plugin for Cytoscape, which is used for analyzing protein networks and other biological data. I got experience working with Swing (in the Netbeans GUI builder), Java, JUnit, and SVN. Entering this experience after my freshman year, this project was an excellent opportunity to develop my skills as a programmer and engineer. Though I had not taken a data structures class yet, I worked extensively with graphs (as is implied by the name of the product). I researched new topics independently and learned to understand and use new APIs quickly. This project stressed to me the importance of complete documentation, both inline and external to the code. The project as given to my team (myself and one other student) consisted of multiple disparate versions of the code, both in a subversion repository and local, without any indication as to the most complete. Updates to the main Cytoscape application and API had broken the plugin, meaning that no version of Subgraph Creator compiled or ran at the start of the summer, and what documentation existed did not indicate which version was the most recent or complete. Cytoscape’s API, too, taught a painful lesson about documentation, having entire classes that consisted of no more helpful Javadoc than “DOCUMENT ME” as can be seen here. As a result, I carefully documented all existing and new files in Subgraph Creator, and voluntarily rewrote the end-user documentation for our plugin.