Self-reflection

Herein I present a short reflection on my time at the University of Montana as a Master’s student in Computer Science. I started the program in August 2011 after working as a software engineer since May 2009 (when I graduated from Montana State University with a B.S. Physics and B.S. Computer Engineering).

Before graduate school…

I thought that I wanted to become a teacher. In fact, in my application, I wrote, “my primary objective for graduate study in CS is to enable myself to pursue a career which includes teaching at an institution of higher learning.” I also stressed my interest in learning the breadth of computer science, since I had focused quite strongly in PC applications built on the .NET framework. Now, after teaching a semester of Intro to Programming, I can say that my interest in teaching is still strong, but it is not the primary direction I see my career taking. However, regarding the breadth of my CS knowledge, I have had great exposure to new languages and paradigms, as well as a good dose of theory, with some interdisciplinary challenges to round it all out.

During…

I was able to learn and utilize Python, a simple but powerful language, in classes ranging from Simulations to Machine Learning (ML), Artificial Intelligence (AI), and even prototyping for an Android application in Game & Mobile App Development. For Pattern Recognition, I delved deeply into the R ecosystem, while in Bioinformatics I got to play with Perl and some linux commandline applications. Perhaps hardest of all was not writing code in the Theory of Computation and Algorithms classes (I admit, sometimes I broke down and implemented the algorithms rather than just doing proofs!). Add in the low-level C code written for Networks and Operating Systems, plus functional programming in OCaml and functional-style JavaScript used in a research project, and I’d say I got plenty of exploration of the breadth of programming languages and paradigms.

I think that I am most proud of my perseverence in studying the theoretical models underlying computation. Theory classes have always challenged me, especially when instruction is not tied to real-world examples, but Mike Rosulek was a terrific teacher, and I worked hard to do well in his classes.

Perhaps the best take-away, though, was a better perspective on design which I gained from Human-Computer Interaction (HCI)- I am now constantly checking my designs with (real or anticipated) users. I must say that Machine Learning was probably my favorite class - teaching a computer to be an expert is so rewarding and so revealing of human cognition. I guess, in a way, ML and HCI are both trying to learn about what makes humans tick, only for very different purposes.

And After…

So that’s a quick summary of what I’ve learned and where I’ve come. As for where I’d like to go, I’d love to learn more about Bayesian statistics and ensemble classification methods. I’m also compelled to search for better methods of code reuse - the fact that the most portable language today is still C is very frustrating. I look forward to a resurgence of a paradigm of systems communicating efficiently but each doing only one thing, well, in the appropriate language for the task.

For the time being, though, I am happy to expand my web know-how. I have been interviewing with a web-based document management software company looking to open a Missoula branch. If offered the position, I would start on the platform services team, creating libraries and frameworks for front-end (javascript and html) and back-end (python on Google AppEngine) development.