Ray Tracing

Reflections on Research

My undergraduate research in oceanography allowed me to develop critical software engineering skills, work on an interdisciplinary team, and enhance my understanding of both physics and programming. This experience enhanced my learning beyond the standard CS curriculum and reshaped my perspective on many of the traditional classroom assignments.

Introduction

Before I begin with my experience, here is a recap of the Grand Challenges. The Grand Challenges are the product of an NAE-sponsored report and encompass 14 critical areas—from medicine to infrastructure to more—that represent opportunities for transformative engineering over the coming generations. As a student in the Grand Challenge Scholars Program, I gain hands-on experience and develop skills relevant to handling these large issues. This post, along with several others, forms my portfolio, unifying my college experiences across five key categories: innovation, service, research, interdisciplinary, and multicultural. Here, I focus on my growth in research. The Grand Challenges are grouped into four themes: joy of living, health, security, and sustainability. I completed this research component with a focus on sustainability and achieved savvy level by two years of research.

Since before I started college, I knew I wanted to get involved in research, but had no idea how to join or what to study. Initially, I explored different summer computer science research opportunities, but none stood out to me. Then, while skimming other project listings, I stumbled upon one that stood out titled ray tracing in Rust under the geophysics department label. As someone passionate about the ocean and also learning about software engineering in college, this seemed like a fun summer job and something that fit me well. After I applied, spoke to the professor, was accepted, and summer started, I was eager to begin researching.

Building a Foundation

When I started the project, I was introduced to a wide range of new concepts and technologies and began learning them. I learned Rust, a language known for its speed and safety guarantees. I also developed a strong understanding of version control using Git and GitHub, which later proved invaluable in my coursework. In addition, I worked with multidimensional data format, continuous unit testing, and optimization techniques, all of which would reappear in my classes in future semesters. After learning that and a little bit of physics I began to slowly build together the program. Though my initial code wasn’t perfect, it steadily improved over time as I gained more experience and took more classes.

Presentation

The first major milestone in my research experience was presenting a poster on our work. Although we were nowhere near complete with the project, we rushed to create a deliverable to showcase on our poster. This process taught me an important lesson: research posters should be simple, with a single main idea supported by clear, concise details; it was not really important that we did not finish the entire project because we could not have fit that much information on the poster anyway. This experience was a valuable experience in learning to present complicated research topics into a more accessible format for a general audience.

Preparing for Release

I continued this project beyond the summer for four more semesters, making progress little by little. During this time, I also learned more technologies and took on more responsibilities, since we began preparing the research for eventual release. This included fixing critical bugs and building documentation, but also writing examples to demonstrate the software’s functionality and validity. I worked closely to help the lab group understand the concepts and get the software working on their computers. Teaching this small group about the system helped me reinforce my own understanding and allowed us to better prepare for releasing the software to a wider audience by understanding the kinds of issues we might encounter.

Reflection

Through this research, I gained hands-on experience in software engineering practices that sometimes surpassed what I encountered in my Computer Science curriculum coursework. Concepts like unit testing, interdisciplinary collaboration, and documentation became ingrained in me long before they were formally introduced in my classes. Topics like Rust, Continuous Integration, FFIs, as well as the small bit of physics I learned were never covered by my classes. Additionally, I learned that research requires iteration, since we often did not write code correctly the first time; accuracy and precision, since this software was designed to be used, so we have to ensure it is correct; and finally patience, since there will always be unexpected challenges and issues that arise and need to be fixed. These perspectives have been invaluable in shaping my approach to problem-solving in computer science as well as researching in general.

Critical Critiques

Reflecting on my experience, I think I was lucky to find this research opportunity. I did not have any experience in geophysics and that was not even my major, but I had skills that would greatly help me and I only needed to gain a small amount of understanding of physics to effectively contribute. I know that there are huge intersections between different disciplines, so it would be interesting to see more collaborations between computer science and other fields.

Conclusion

As of this writing, my research project is in its final stages, at least for me, with ongoing efforts to finish documenting, examples, and package it for release. The experience has not only strengthened my technical skills but also prepared me for future work, whether in academia or industry. This research has been a critical part of my education and college experience, reinforcing my problem-solving and interdisciplinary collaboration skills, which I know will be skills that I can apply to whatever Grand Challenge I face in the future.