(Image via: https://www.csecoalition.org/what-is-the-typical-computer-science-curriculum/ )
As an undergraduate computer science student, the push to get an internship and/or co-op has always seemed paramount – partially because experience is “everything” in the industry and partially because an alternative avenue, a position working on a project in a research lab, for example, is rarely discussed. While I don’t deny the practicality of gaining experience in a corporate setting, a scholarly approach provides different kinds of challenges that in turn may allow broadening of a student’s horizons – an opportunity for creativity and a different take on problem-solving skills.
Having started very recently in PVL, I was surprised at the reaction of many of my fellow CS students, who didn’t even realize that working on projects under the supervision of our professors was possible. Making the revelation even more fascinating was that my pursuit of a research assistant position was in a field outside our collective major discipline.
In a field as diverse as computer science, where we are constantly assured that the possibilities are endless, it would seem almost unremarkable for an adventurous CS student to pursue a scientific area in which they are interested under the umbrella of a research lab. The case for research assistant positions as an internship/co-op type of work experience is further strengthened by the science breadth requirement baked into our degrees; the possibility of working in a lab may encourage students who might otherwise see those courses as unnecessary to the industry. Taking my experience as an example: I have always been interested in programming in a scientific context but taking physics courses as part of my science-breadth requirement encouraged me to gain a deeper understanding of the type of field in which I might be interesting in working. As I’ve progressed through the years, I realized my curiosity went beyond the data-analysis discussions I've had in a classroom setting, which in turn led me to search for a way to pursue a deeper involvement in astrophysics-flavoured data analysis.
These kinds of positions give an entirely different perspective when learning and applying computer science – creativity, responsibility, and communication skills (all valuable points on a resume) are given equal weight alongside coding ability and language skills. My current role at PVL is an excellent example of this: by analyzing a series of photos (read data) taken of the Martian surface, we hope to find evidence of triboelectricity. To do this, I am writing scripts to mask sources of light which can then be applied to the images; thus, allowing only those points of light relevant to the analysis to shine through. The creativity part comes in the use of 3rd party libraries: since only the end goal is known, and there is no guarantee that the supplementary code we are relying on will work in this case, errors become even more mysterious – were they the result of an error in the code itself, or in one of the many imports that are being used? How do you go about understanding code that may be based on incomplete or incompatible libraries? In applying our knowledge to our schoolwork as undergraduates, many examples of very similar problems are easily found online – in research, that foundation upon which to fall back, if it exists at all, is significantly reduced.
I in no way mean to diminish the importance of the concepts and methodologies we are taught to manipulate at the undergraduate level; these are just as necessary for the problem-solving process that is at the core of research. The elation of solving a problem is further heightened when there is no one on the other end with the answer and those intuitive leaps that are nigh impossible to teach in a classroom setting are, in my limited experience, the core of learning to code in the context of scientific analysis.