Core Skills – Software Engineering

Python

Python is by far the language with which I am most comfortable. I did all of my Master's work in Python. I did my entire Qualcomm project largely in Python. More than half of the projects on the main page include Python. At this point, I can't write pseudocode without it just showing up as Python. Here are the libraries which I've used the most.

numpy – I've used this library more extensively than probably any other. Not only do I love linear algebra, but they are essential for data analysis. Much like I write pseudocode in Python, I use Numpy even when discussing vector spaces in a purely mathematical context. Nearly all of the Python related projects on the main page use Numpy, as did nearly every course in my Master's program.

pandas – Much like Numpy, I've used Pandas for nearly every data science project in my portfolio. Dataframes have now begun to supersede databases in my mental hierarchy of useful paradigms.

torch – PyTorch is my go-to library for machine learning related work. Nearly all of the machine learning work I've done, through both my industry and academic experience, utilized PyTorch.

tensorflow – Most of my TensorFlow experience is out of personal interest (and is mostly limited to Keras). I've been a Mac user for my entire life, and TensorFlow was initially one of the first libraries to leverage the new M1 chip's capabilities. For this reason I took up the skill of converting my knowledge in PyTorch to TensorFlow, as to be able to leverage the GPU acceleration on my personal machine. Since then, despite PyTorch updating to support the Metal framework, being fluid in both libraries is important to me as a data scientist.

sklearn – SciKit-Learn is a must-know for data science work, especially outside a strict machine learning context. I've used this extensively throughout my Master's program, undergraduate coursework, and even personal projects.

• Other libraries I've used include matplotlib as an essential visualization tool for data analysis, BeautifulSoup extensively for web scraping, requests for REST APIs, angr for symbolic execution, more standard libraries like os, and many more..

C/C++ and Assembly

I first got exposed to C at Harvard, through a shortened version of their world-renowned CS50 course. Then a bit of C++ for Arduinos in high school, but all without truly understanding either language.

Carnegie Mellon really doesn't like Java or Python. You start with their version of C (with garbage collection), and then the training wheels are slowly removed as you ready yourself for a whole major of work in C/C++. And this is exactly how I've learned the language. Algorithm after algorithm, one systems class after another. I've built memory allocators, servers, and even entire databases in C and C++. In particular, I've taken Introduction to Imperative Programing (15-122), Introduction to Computer Systems (15-213), in Introduction to Computer Security (15-330) in C, each of which at some point required careful stack tracing and following assembly code. I've also taken Algorithm Design and Analysis (15-451) and Database Systems (15-455) in C++.

When I got to Qualcomm, these skills were invaluable, because computer security often deals with the lowest-level concepts. The project analyzed assembly code, although test cases were written in C/C++. You can't get much work done at a chip company without knowing the ins and outs of the C's.

SML

Standard ML was my introduction to functional programming. I used it extensively in my undergraduate work, in courses like Introduction to Functional Programming (15-150), Parallel & Sequential Data Structures & Algorithms (15-210), and Constructive Logic (15-317). As the language is used most often in an academic context, this is the sort of work I'm most familiar with in a functional context but have become enamored with the elegance of the functional style while at Carnegie Mellon.

Swift

My work in Swift has been mainly through two projects: Atlas Resonate (at Audition Technology) and some volunteer work for Kindred Spirits Rescue Ranch. In the former case, I used UIKit at the hearing health startup and worked on asynchronous data analysis algorithms for noise exposure data. In the latter case, I employed instead SwiftUI to design a user-friendly app for a Western Pennsylvania animal sanctuary (an ongoing project). In both cases, I'm entirely self-taught through educational internet resources.

SQL

Getting a Master's in Data Analysis is impossible without understanding the basics of querying. I've even written my own database from scratch in C++, which had to interface properly with SQL code. I am far from an expert, but querying languages reak of mathematics under the surface, and for that reason it has always been a natural subject for me to appreciate and learn well.

Others

  • Bash – I'm quite comfortable in Bash (a necessary but not sufficient skill for a programmer), but putting it outside of this section would really be overselling my skills. I've done what every curious programmer has: brutally beat the terminal with disgusting scripts until it does my bidding. Does that mean I really know Bash? Yes, I would say so.
  • PHP – While at Meta/Facebook, nearly all of the projects I worked on in the two-month period were in Hack, a variant of PHP. I got used to the syntax and style quite quickly, as it was all I used during an intense period of learning.
  • Haskell – I understand Haskell academically, especially through reading Bartosz Milewski's Category Theory for Programmers. While I am completely comfortable with functional paradigms, I've implemented far less code with Haskell than I have SML, however, I've read enough of it to feel comfortable picking it up to experiment with.
  • Java/C# – I spent about a year toying with automated trading algorithms on the Ninjatrader platform, which uses C#. I also took AP Computer Science in high school, and have since helped dozens of people with Java assignments. I'm certainly no expert, but I know enough to really dig in if that's a needed skill. P.S. I know these aren't the same language, but in my limited experience, folks who are proficient in one are typically proficient in the other. Hence the grouping.
  • MATLAB – For my Neural Computation course, nearly all of the work was done in MATLAB, likely because the Professor was most comfortable with the language. As with Java, I now know enough to be dangerous and to dig in if need be.
  • Javascript – This was my first language (I started on Codecademy). It's the only language I knew well enough to use for my ninth-grade science fair project. It's the only language in which Google Sheets allows scripting, so I've acquired some by necessity. Web programming isn't my strong suit, but I've always gone back to Javascript periodically to ensure I can use it if need be.
  • HTML/CSS – Shortly after I learned Javascript, I picked up a bit of HTML and CSS to round out my web programmning knowledge. I've used it sparingly since then, mostly in web security contexts, and of course to edit this website!