Sydney Morton: Learning, Studying and Teaching Team-oriented Programming
Sydney Morton, a junior majoring in Computer Science at Penn Engineering, has a lot on her plate. The captain of the varsity volleyball team and active member in the Chi Omega sorority, Morton’s next act is to spend the summer working at Microsoft. She credits a computer science course with getting her prepared, both with coding and leadership knowledge. The course, Software Design and Engineering, is meant to train students not just how to write programs, but to design full-fledged software products. Touching on all aspects of an app’s development, including an app’s design, implementation, testing and maintenance for the customer, the course is designed to mimic the workplace environment of a professional software engineer. Morton experienced this course from multiple angles, going from a student to a teaching assistant, and co-authoring a paper on the efficacy of the course’s approach along the way.
I took CIS 350: Software Design and Engineering, taught by Dr. Chris Murphy, the spring of my sophomore year. The course is structured within a framework of programming projects, in which teams of 3 or 4 students are led by a product manager who keeps the project on track and grades the team on their progress. The projects are run using an “agile” approach, gradually refining and improving an app in incremental stages. Every two weeks, the team must turn in a fully functioning program along with an iteration report to their product manager. In the first iteration, the only thing the app may do is allow a user to log in and out, for example, but there can be no bugs or glitches. By the last iteration, the team should have a complete app that does the specific task that they originally set out to implement.
My team chose to build an app that lets users keep a record of movies they have watched, along with rankings and notes. We implemented a program that searches and extracts information from an internet movie database so that we could have information on every movie filmed. We then use this information to create a way to search for specific movies, and keep track of how the user ranked them and comments the user had when watching the film.
My team was expected to learn a completely different language to code in in order to create this program, so there was a huge learning curve. Most companies in the working world do not explicitly care what languages you have worked with as long as you understand the logic and how to implement certain algorithms. They expect you to be able to learn any given language quickly and efficiently so learning a different language for this project helped me prepare for this.
Because my teammates and I all had completely different, very busy schedules, using GitHub, the industry-standard platform for managing multiple programmers’ changes to source code, was a must, but it was a brand new experience for me and my team. Learning how to share, merge, and build off of another person’s code was challenging at first, as every programmer has a different coding style. However, as we continued to work together, it became very easy and natural to work off of one another’s code. By the end of the semester, we had created a beautiful working app that we were all proud of.
In this class, I learned more that I will take into the working world than I had in any other class leading up to that point. I had to learn another language and take my existing skills such as algorithm implementation and apply them to a real-world application.
The summer after completing CIS 350, I had the opportunity to work with Dr. Murphy on a study that explored the effects this course has on enrollees. Our goal was to answer two research questions: Do the group projects have a positive effect on student learning and does working with a customer have a greater impact than not working with a customer? The data was from course surveys that each student took at the beginning and the end of the course. The students answered three different questions pertaining to the research questions we were looking to answer, using a 5-point Likert scale with 1 being “not confident” and 5 being “very confident.”
I conducted the data analytics for the paper using Python to organize the data, and R to analyze it. Using methods that I learned in one of my statistics classes, we determined that the data was statistically significant, and the answer to both research questions was “yes.”
Beyond learning new programming languages and the process of writing an academic paper, working on this study was personally rewarding. Although my own experience told me that the course was extremely helpful and relevant in preparing students for the real world, where programmers always code with a team, I actually got to prove that the majority of the students who took the course agreed with me as well. The paper received an Exemplary Paper Award at the SIGSCE conference in Seattle that took place this spring.
Given this additional experience, Dr. Murphy invited me to product manage two teams in this semester’s course. It is very interesting being on the opposite side of the class, for I am able to witness my students working together to complete the app. I can see the struggles they have in getting everyone to participate, and the pride they feel when their apps actually do what they want them to do at the end of each iteration. Each team has learned how to program in a language that they had not learned before and incorporate a database into an app to store all of their data.
Thanks to my experience in athletics, I know how to lead people on the volleyball court. However, before this course I didn’t have much experience leading in the classroom. I have learned a lot about how to manage my CIS 350 teams, motivating them to create an amazing app, and I hope to utilize this leadership in the real world. I am very proud of my two teams because their apps are fun and impressive, and I also share in their pride in what they have accomplished.
CIS 350 has been a great experience for me. From being a student in the course to seeing the results that this course has on students, I have learned valuable lessons about programming as a team. I have learned how to code efficiently in a team, and I have learned how to lead a team of young programmers to create an extremely cool product. I hope to use the skills I have learned to do the best job I can at Microsoft and in the real world.