Most people
enter into an endeavor expecting a finished product – something quantifiable to
show for their weeks, months, or years worth of labor. Even those observing them, whether
casually or professionally, look for tangible results. We live in a society where output is
praised and admired, but the lack thereof is met with confusion or
disdain. One of the most
significant lessons I’ve learned during the course of this internship is that,
while the destination can be important - finishing a product or meeting your
goals - often the journey there is more lastingly valuable.
My mentor
and I set out to design and implement an interactive application in the Canvas
learning system that creates customizable practice quizzes and exercises for
college intro-level Math students.
Right now, a professor can create a test bank in Canvas and upload
his/her own hand-made problem sets of any given size. Canvas then generates “random” quizzes from these test
banks, but there’s no real student input or feedback as to what they need more
practice in. We wanted to give the
student the option to select a topic, range of difficulty, number of problems,
and specific features regarding those problems. For instance, a student could say, “I really need more
practice factoring polynomials.”
They could log into Canvas and select easy, medium, or hard factoring
problems, whether they wanted single or multi-variable polynomials, and how
many problems they wanted to practice.
This application would act as a supplement to their current coursework –
a way to catch up if they were behind, review their weakest areas for exams, or
look ahead if they were nervous about upcoming material.
It's easy to bite off more than you can chew
I’ve been
told by several of my friends and colleagues that setting realistic goals and
outlines for a programming project is one of the most difficult factors. Often software developer teams are
initially too ambitious and will have to significantly scale back their project
features halfway through in order to meet their deadlines. But, we were optimistic. We figured that our concept was
challenging but workable in the span of a five-month internship. Our first step was to download the
proper software and register for developer permissions in order to edit and
submit code in Canvas. This took
two weeks. Our next step was to
work through some learning modules provided by Canvas developers to teach
others how to create interactive LTI applications that could be hooked up to
Canvas.
This involved implementing
security checks for parameters sent from the user, signature verification, and
finding or creating a library to carry out all these functions. This process lasted over two months. We had reached the point where the
semester was drawing to a close and we had no tangible product to show for our
efforts. By the end we developed a
simple piece of code to generate random single-variable polynomials, print them
to the web browser, and check the user’s input of their roots against SymPy’s
factoring method to spit out a result, but it was nothing close to what we had
envisioned at the beginning of the semester.
At first
our project seemed like a failure – we had worked so hard and yet were unable
to meet any of our previous goals.
But then I looked back on the entirety of the semester and realized how
valuable my work would be going forward.
I’ve learned how to create simple programs in three new languages. I know how to get a local server
running and mount files to that server to display on a web browser. I have access to a plethora of
resources to seek help when faced with a seemingly insurmountable obstacle or
daunting error message, and I’ve learned the basic techniques of gathering and processing
user input from a web form. These all
may seem like trivial concepts on their face, but they have taken months to
learn and implement in their most basic form, giving me a much more realistic
perspective and deeper understanding of what is involved in web development.
Even though
our finished product is not at all what we expected, I have walked away with
programming skills that will be invaluable to me in the future – skills that I
could only pick up through direct, hands-on experience in the field. Working with my graduate mentor, Itamar
Gal, has also made the world of academia and the people associated with it more
accessible – not just in the context of potential graduate school
opportunities, but also to mold my undergraduate career into a more worthwhile
experience. If I am interested in a particular topic,
want to learn more about a given field of study, or just want to discuss some
concept that I’ve recently discovered, I know now that there are professors,
graduate students, and even some undergraduates that would enjoy a lively
discussion. I feel more at ease
interacting in the academic sphere.
Through this internship I’ve gained a sense of belonging and right – a
sense that I am worthy of the knowledge I have gained and the encouragement to
share that knowledge with any willing ear, which to me is the most valuable
piece of all.