Hey there, welcome to my site! My name is Palmer and I am currently studying computer science as an undergraduate student in the School of Engineering and Applied Science at the University of Pennsylvania in Philadelphia, PA. I am very proficient in many programming languages, and I guess you could say that I have a knack for programming. At the moment, I am just trying to broaden my horizons as much as possible by working on various projects, which can be found on my GitHub. Since coming to Penn, I also have become quite interested in the theoretical side of computer science and have started analyzing algorithms and writing mathematical proofs both for courses and for fun.
This semester, I am enrolled in two computer science courses. CIS 552 Advanced Programming, which is taught in Haskell, “takes good programmers and turns them into excellent ones.” CIS 240 Introduction to Computer Architecture teaches you how a computer works starting from transistors and bits and working up the abstraction chain to assembly and eventually C. I am very excited for both of these classes particularly because of their different perspectives on programming, CIS 240 dealing with the lowest level and CIS 552 dealing with just about the highest level.
I am a TA for CIS 120 Programming Languages and Techniques I for my second straight semester. My responsibilities include leading a weekly recitation, holding weekly office hours, and grading homework and exams.
Over the summer, I successfully completed a Google Summer of Code project for the Elm Software Foundation. My project laid the foundations for using Elm to make native iOS apps. I learned a great deal during this project and really enjoyed it. You can look at the the code for the project on GitHub or read more about it on the GSoC website. (For the uninitiated, Elm is a functional programming language for creating web apps. It has no runtime exceptions, a superb refactoring and debugging experience, and an excellent community. It is a really fun and useful language and I strongly encourage you to check it out.)
During my freshmen year at Penn, I was enrolled in four computer science courses: CIS 120 Programming Languages and Techniques I and CIS 160 Mathematical Foundations of Computer Science in the fall and CIS 121 Data Structures and Algorithms and CIS 262 Automata, Computability, and Complexity in the spring. CIS 120, which is taught in OCaml and Java, covered abstraction and modularity, test-driven development, and how to implement basic data structures. In CIS 160, I learned graph theory, set theory, and combinatorics, as well as how to write rigorous mathematical proofs. In CIS 121 I implemented data structures such as union-find, tries, binary heaps, priority queues, hash tables, resizable arrays, graphs, and BSTs. I also learned about and how to perform rigorous runtime analysis on many algorithms including stable marriage (Gale–Shapley), minimum spanning tree algorithms (Kruskal’s and Prim’s), graph traversals (DFS and BFS), shortest path algorithms (Dijkstra), union-find operations, sorting algorithms, Huffman coding, LZW compression, min-cut approximation, etc. CIS 262 taught me about finite automata (deterministic and non-deterministic), regular languages, context-free grammars, complexity classes, NP-complete problems, RAM programs, and Turing machines.
In the summer of 2015, I experimented with computer vision using the OpenCV library. My primary project was finding an effective method of determining the gender of a person in real-time using full body images (i.e. no face detection). This project is still a work in progress.