From Marching Band to Software Engineering

I enjoyed everything in my high school marching band but one – understanding the drill pages. Every time we prepared a new drill, I spent much time flipping through a pile of drill sheets, figuring out my position on the court. Seeing this, our instructor developed a drill creation software. Using it, we could easily check our positions by swiping on our phones. It also showed where I should start and where I should go next by playing the move from the previous to current pages. Seeing him dragging and placing cast members as dots on the screen to form one page with ease, I couldn’t help but imagining my developing software to solve problems.

As I delved into the field of computer science at the university, I’ve realized that software engineering is far more complicated. Besides developing, software engineering also means finding clever solutions to the problems, including designing, testing, optimizing, documenting, maintaining, researching, collaborating, and many more. I’ve dreamt about building large software applications such as Facebook and Instagram to keep people connected after meeting many friends when competing with marching bands around the world in Shanghai, South Africa, and Indonesia. But when handling over 2 billion active users that Facebook engineers have been doing, keeping the site up and running smoothly is even harder. Having understood the challenges awaiting me, I’m excited about the opportunities that graduate schools can bring me to further my knowledge and improve the skills.

To succeed as a software engineer, I’ve honed my problem-solving skill through many project experiences. KJDrill was the first piece of software that I applied multithreading to. It provided me more insight into the process by modifying the program in ways such as maintaining locks and replacing HashMap by ConcurrentHashMap. By creating one thread for running graphics and two others for saving pages/states, I was able to make better use of the available CPU resources and improve the performance. When developing the Android application Book Flow, my group found that loading book images from Firebase was slow and it was affecting our App’s user experience. To solve it, I adopted Glide to load a thumbnail that was about 5% quality of the original image into each ImageView. By doing so, the speed of loading images was improved by over 80%. Users could still check the full-sized image by tapping on an ImageView, which simulated a real-life application behavior and minimized the possible negative effect. After figuring out that one of the biggest performance bottlenecks in my web application SpringBlog was database queries, I decided to integrate caching into the backend of it. I started with Ehcache as it’s widely adopted in Java programs and learned how to work with EhCacheCacheManager offered by Spring. To discover more possibilities to improve my program, I went on to try Redis as an alternative solution and used RedisCacheManager that worked with a Redis server to store cache entries. Both tools had positive impacts on the performance of SpringBlog by reducing the cost of fetching data.

Another quality of mine is my curiosity and eagerness to learn. After my NoGo program achieved top 4 in the tournament held in our Search, Knowledge, Simulation course, I wasn’t satisfied with the result. To further improve my program, I continued to read some academic papers such as Asymmetric Move Selection Strategies in Monte-Carlo Tree Search: Minimizing the Simple Regret at Max Nodes and Pattern matching and Monte-Carlo simulation mechanism for the game of NoGo. Inspired by the ideas in those papers, I was able to perform simple regret minimization for selecting moves and pattern matching in my program. I also applied the Epsilon-Greedy Sampling Technique that I first learned in the Reinforcement Learning course to my program. As a result, my new program dominated its old version in a series of 6 matches, scoring 6:0.

To be better prepared as a competent software engineer, I find the MSCS program at [University Name] very attractive. To gain first-hand experience and knowledge in modern practices in software engineering, I aspire to take courses such as CSE210 Principles of Software Engineering to learn classical best practices and current trends in software engineering practices, and CSE218 Advanced Software Engineering to gain more insight into methods and tools for software modularity from Professor William Griswold. His interests and research output in software evolution and analysis, software design, and educational technology impress me a lot. Nowadays with the increasing user base, there’s an increasing demand for better performance and usability in software. Therefore, software systems have become more complex than before, leading to higher costs for maintenance and restructuring. Some of his projects focus on automated techniques to assist the maintenance, understanding and restructuring of very large software systems are quite interesting topics for me. Learning about the ideas behind these techniques will give me a better understanding of designing and building large software systems, and enable me to achieve my goal as a lead software engineer dealing with large software systems.

Besides in-depth study in software engineering, the MSCS program at [University Name] will also provide me with great exposure to many cutting-edge computer science technologies that are changing the field of software development. AI and Machine Learning have been integrated into fields such as automated testing, designing, and prediction services in software. The rise of Amazon Web Services and other cloud platforms has led to an increasing trend of going serverless, freeing up backend developers from server provisioning and maintenance. At [University Name], not only will I have the chance of taking courses such as CSE232 Database Systems, CSE221 Operating Systems, and CSE224 Networked Systems that combine theory with practice to enrich my knowledge in building software systems, but I can also take courses such as CSE258 Recommender Systems and Web Mining and CSE291 Cloud Computing to broaden my horizon and prepare myself to the recent changes happening in the field of software engineering.

After finishing my graduate study, I will seek to work as a software engineer at a tech company with well-established systems and regulations. A more structured environment means more mentorship and more opportunities for me to learn and grow. In the next three years, I will keep acquiring system design knowledge, developing a neat coding style, and honing my problem-solving ability through tackling various tasks. My long-term goal is to work as a lead software engineer where I can design and build large software applications such as Facebook or Instagram that connect people and bring the world closer together. The MSCS program at [University Name] will provide me with unparalleled opportunities to enable me to achieve my goals.

I am ready.