Charley Cunningham

About Me

Hello! My name is Charley Cunningham. I am an undergraduate at the University of Pennsylvania studying Computer Science. I love developing useful products and solving difficult problems. I have a diverse set of skills and experiences involving software engineering, web development, and data science. Earlier in my life, I did lots of projects involving robotics, embedded programming, mechanical design, electrical engineering, and fabrication (which helped me develop my skills and intuition for design and debugging). In my free time I am an avid sailor, and I hold FAA pilot certificates in single and multi-engine land categories with instrument ratings in both. I also hold a part-107 rating for commercial operation of unmanned aerial systems.

Degree & Major

I am pursuing a Bachelor of Science in Engineering Degree from the University of Pennsylvania, majoring in Computer Science.

Current GPA

My GPA at Penn is currently 4.0/4.0.

Computer Science


Spring 2021

How do you optimally encode a text file? How do you find shortest paths in a map? How do you design a communication network? How do you route data in a network? What are the limits of efficient computation? This course gives a comprehensive introduction to design and analysis of algorithms, and answers along the way to these and many other interesting computational questions. You will learn about problem-solving; advanced data structures such as universal hashing and red-black trees; advanced design and analysis techniques such as dynamic programming and amortized analysis; graph algorithms such as minimum spanning trees and network flows; NP-completeness theory; and approximation algorithms.

Data Structures and Algorithms

Spring 2020

This is a course about Algorithms and Data Structures using the Java programming language. We introduce the basic concepts about complexity of an algorithm and methods on how to compute the running time of algorithms. Then, we describe data structures like stacks, queues, maps, trees, and graphs, and we construct efficient algorithms based on these representations. The course builds upon existing implementations of basic data structures in Java and extends them for the structures like trees, studying the performance of operations on such structures, and the efficiency when used in real-world applications. A large project introducing students to the challenges of software engineering concludes the course.

Programming Languages and Techniques

Fall 2019
CIS 120 is a fast-paced introduction to the fundamental concepts of programming and software design. It introduces students to computer science by emphasizing the design aspects of programming. Topics include:
  • Data types and data representation
  • Abstraction, interfaces, and modularity
  • Test-driven development
  • Programming patterns (recursion, iteration, events, call-backs, collections, map-reduce, GUIs, …)
  • Functional programming
  • How and when to use mutable state
  • Object-oriented programming
CIS 120 teaches programming concepts in two different languages: OCaml and Java, spending approximately equal time on how to design programs in each language.

Computer Operating Systems

Fall 2021

This course surveys methods and algorithms used in modern operating systems. Concurrent distributed operation is emphasized. The main topics covered are as follows: process synchronization; interprocess communication; concurrent/distributed programming languages; resource allocation and deadlock; virtual memory; protection and security; distributed operation; distributed data; performance evalaution.

Scalable & Cloud Computing

Fall 2021

What is the "cloud"? How do we build software systems and components that scale to millions of users and petabytes of data, and are "always available"? In the modern Internet, virtually all large Web services run atop multiple geographically distributed data centers: Google, Yahoo, Facebook, iTunes, Amazon, EBAY, Bing, etc. Services must scale across thousands of machines, tolerate failures, and support thousands of concurrent requests. Increasingly, the major providers (including Amazon, Google, Microsoft, HP, and IBM) are looking at "hosting" third-party applications in their data centers - forming so-called "cloud computing" services.

Databases & Information Systems

Spring 2022

This course provides an introduction to the broad field of database and information systems, covering a variety of topics relating to structured data, ranging from data modeling to logical foundations and popular languages, to system implementations. We will study the theory of relational and XML data design; the basics of query languages; efficient storage of data, execution of queries and query optimization; transactions and updates; web-database development; and "big data" and NoSQL systems. The course assumes mathematical and programming experience equivalent to CIS160 and CIS121.

Compilers & Interpreters

Spring 2022

You know how to program, but do you know how to implement a programming language? In CIS341 you'll learn how to build a compiler. Topics covered include: lexical analysis, grammars and parsing, intermediate representations, syntax-directed translation, code generation, type checking, simple dataflow and control-flow analyses, and optimizations. Along the way, we study objects and inheritance, first-class functions (closures), data representation and runtime-support issues such as garbage collection. This is a challenging, implementation-oriented course in which students build a full compiler from a simple, typed object-oriented language to fully operational x86 assembly. The course projects are implemented using OCaml, but no knowledge of OCaml is assumed. Prerequisite: Two semesters of progrmming courses, e.g., CIS 120, 121, 240.

Big Data Analytics

Spring 2020

In the new era of big data, we are increasingly faced with the challenges of processing vast volumes of data. Given the limits of individual machines (compute power, memory, bandwidth), increasingly the solution is to process the data in parallel on many machines. This course focuses on the fundamentals of scaling computation to handle common data analytics tasks. You will learn about basic tasks in collecting, wrangling, and structuring data; programming models for performing certain kinds of computation in a scalable way across many compute nodes; common approaches to converting algorithms to such programming models; standard toolkits for data analysis consisting of a wide variety of primitives; and popular distributed frameworks for analytics tasks such as filtering, graph analysis, clustering, and classification.

Artificial Intelligence

Fall 2021

This course investigates algorithms to implement resource-limited knowledge-based agents which sense and act in the world. Topics include, search, machine learning, probabilistic reasoning, natural language processing, knowledge representation and logic. After a brief introduction to the language, programming assignments will be in Python.


Fall 2021

DevOps is the breaking down of the wall between Developers and Operations to allow more frequent and reliable feature deployments. Through a variety of automation-focused techniques, DevOps has the power to radically improve and streamline processes that in the past were manual and susceptible to human error.
In this course we will take a practical, hands-on look at DevOps and dive into some of the main tools of DevOps: automated testing, containerization, reproducibility, continuous integration, and continuous deployment. Throughout the semester we build toward an end-to-end pipeline that takes a webserver, packages it, and then deploys it to the cloud in a reliable and quickly-reproducible manner utilizing industry-leading technologies like Kubernetes and Docker. Evaluation is based on homework assignments and a final group project.

Solving Hard Problems in Practice

Fall 2020

What does Sudoku have in common with debugging, scheduling exams, and routing shipments? All of these problems are provably hard -- no one has a fast algorithm to solve them. But in reality, people are quickly solving these problems on a huge scale with clever systems and heuristics! In this course, we'll explore how researchers and organizations like Microsoft, Google, and NASA are solving these hard problems, and we'll get to use some of the tools they've built!

Python Programming

Spring 2020

Python is an elegant, concise, and powerful language that is useful for tasks large and small. Python has quickly become a popular language for getting things done efficiently in many in all domains: scripting, systems programming, research tools, and web development. This course will provide an introduction to this modern high-level language using hands-on experience through programming assignments and a collaborative final application development project.

Algorithmic Game Theory

Spring 2022

How should an auction for scarce goods be structured if the sellers wish to maximize their revenue? How badly will traffic be snarled if drivers each selfishly try to minimize their commute time, compared to if a benevolent dictator directed traffic? How can couples be paired so that no two couples wish to swap partners in hindsight? How can you be as successful as the best horse-racing expert at betting on horse races, without knowing anything about horse racing? In this course, we will take an algorithmic perspective on problems in game theory, to solve problems such as the ones listed above. Game theory has applications in a wide variety of settings in which multiple participants with different incentives are placed in the same environment, must interact, and each "player"'s actions affect the others.

Computer Organization and Design

Spring 2021

This is the second computer organization course and focuses on computer hardware design. Topics covered are: (1) basic digital system design including finite state machines, (2) instruction set design and simple RISC assembly programming, (3) quantitative evaluation of computer performance, (4) circuits for integer and floating-point arithmetic, (5) datapath and control, (6) micro-programming, (7) pipelining, (8) storage hierarchy and virtual memory, (9) input/output, (10) different forms of parallelism including instruction level parallelism, data-level parallelism using both vectors and message-passing multi-processors, and thread-level parallelism using shared memory multiprocessors. Basic cache coherence and synchronization.

Introduction to Computer Architecture

Fall 2020

The goal of this course is to teach you how a computer really works. We begin by discussing transistors, the basic switching elements that constitute modern computers. We then describe how these transistors can be aggregated into more complex units like gates and ALUs and ultimately datapaths that perform computation. Once we have described how we can build a computer we will move on to talking about assembly language and how the computer is programmed at the lowest level. We will spend the second half of the course talking about the C programming language and how the features of this language are mapped onto the lower level assembly constructs.

Automata, Computability, and Complexity

Fall 2020

This course explores questions fundamental to computer science such as which problems cannot be solved by computers, can we formalize computing as a mathematical concept without relying upon the specifics of programming languages and computing platforms, and which problems can be solved efficiently. The topics include finite automata and regular languages, context-free grammars and pushdown automata, Turing machines and undecidability, tractability and NP-completeness. The course emphasizes rigorous mathematical reasoning as well as connections to practical computing problems such as text processing, parsing, XML query languages, and program verification.

Mathematical Foundations of CS

Summer 2019

What are the basic mathematical concepts and techniques needed in computer science? This course provides an introduction to proof principles and logics, functions and relations, induction principles, combinatorics and graph theory, as well as a rigorous grounding in writing and reading mathematical proofs.

AP Computer Science A

Fall 2019

AP Computer Science emphasizes object-oriented programming methodology with an emphasis on problem solving and algorithm development. It also includes the study of data structures and abstraction. Topics include: Primitive Types; Using Objects; Boolean Expressions and if Statements; Iteration; Writing Classes; Array; ArrayList; 2D Array; Inheritance; Recursion.


Statistics for Data Science

Fall 2021

The course covers the methodological foundations of data science, emphasizing basic concepts in statistics and learning theory, but also modern methodologies. Learning of distributions and their parameters. Testing of multiple hypotheses. Linear and nonlinear regression and prediction. Classification. Uncertainty quantification. Model validation. Clustering. Dimensionality reduction. Probably approximately correct (PAC) learning. Such theoretical concepts are further complemented by exempla r applications, case studies (datasets), and programming exercises (in Python) drawn from electrical engineering, computer science, the life sciences, finance, and social networks.

Advanced Linear Algebra

Fall 2020

Topics include: Fields, vector spaces, subspaces; Intersection and sum, direct sum; Linear independence, basis; The dimension of a vector space; Dimension formula, matrices, systems of linear equations; Row-reduced echelon form, elementary row operations, elementary matrices, invertible matrices; Linear maps, the isomorphism theorem; dimension formula for linear maps, coordinates, and matrix representations of linear maps; more on matrix representations of linear maps, rank, equivalence and similarity, applications to systems of linear equations; congruence relations, quotient spaces, homomorphism theorem; Ways to think about quotients; Linear forms, duality, orthogonality; Dual linear map, permutations; Multilinear forms, alternating multilinear forms, determinant of an endomorphism; Determinants of matrices; Cramer's rule, Polynomials; Eigenvalues, characteristic polynomial; Minimal polynomial, primary decomposition; Generalized eigenspaces, Jordan normal form for nilpotent endomorphisms; Jordan normal form, Hermitian forms, inner products, orthonormalization; orthogonal complement, self-duality, adjoint maps, self-adjoint operators.

Engineering Probability

Spring 2020

This course introduces students to the mathematical foundations of the theory of probability and its rich applications. The course begins with an exploration of combinatorial probabilities in the classical setting of games of chance, proceeds to the development of an axiomatic, fully mathematical theory of probability, and concludes with the discovery of the remarkable limit laws and the eminence grise of the classical theory, the central limit theorem. The topics covered include: discrete and continuous probability spaces , distributions, mass functions, densities; conditional probability; independence; the Bernoulli schema: the binomial, Poisson, and waiting time distributions; uniform, exponential, normal, and related densities; expectation, variance, moments; conditional expectation; generating functions, characteristic functions; inequalities, tail bounds, and limit laws. But a bald listing of topics does not do justice to the subject: the material is presented in its lush and glorious historical context, the mathematical theory buttressed and made vivid by rich and beautiful applications drawn from the world around us.

Linear Algebra & Differential Equations (Honors)

Spring 2020

This is an honors version of Linear Algebra and Differential Equations which explores the same topics but with greater mathematical rigor. Topics include: Linear spaces; Linear transformations and matrices; Eigenvalues and eigenvectors; Eigenvalues of operators on Euclidean spaces; Introduction to differential equations; Linear differential equations; Systems of differential equations.

Multivariable Calculus (Honors)

Fall 2019

This is an honors version of Multivariable Calculus, covering the material in greater depth, with more challenging problems and more attention to theory and to the reasons behind the results. Topics include: Foundations (analysis); Vector algebra; Calculus of vector-valued functions (Selections); Differential calculus of scalar and vector fields; Applications of differential calculus; Line integrals; Multiple integrals; Surface integrals.

Computational Physics

Spring 2022

This course will familiarize students with computational tools that are utilized to solve common problems that arise in physics. The programming language that will be used in this class is Python. No prior programming knowledge is assumed and the semester will begin with learning basic programming skills. This course will introduce computational methods for graphing and visualization of data, solving integrals, derivatives, systems of linear equations and differential equations.

Engineering Electromagnetics

Fall 2019

This course covers basic topics in engineering electromagnetics, namely, electric charge, electric field, electric energy, conductors, insulators, dielectric materials, capacitors, electric current, magnetic field, inductors, Faraday's law of induction, alternating current (AC), impedance, Maxwell's equations, electromagnetic and optical wave propagation, with emphasis on engineering issues. Relevant engineering topics are emphasized in our lectures in order to prepare students for other courses in ESE that rely on the contents on this course. Several laboratory experiments accompany the course to provide hands-on experience on some of the topics in the lecture and prepare students for the capstone project.

AP BC Calculus

Spring 2019

Calculus BC is a full-year course in the calculus of functions of a single variable. Topics include: Analysis of graphs (predicting and explaining behavior); Limits of functions (one and two sided); Asymptotic and unbounded behavior; Continuity; Derivatives; Integrals; Fundamental theorem of calculus; Antidifferentiation; L'Hôpital's rule; Separable differential equations; Convergence tests for series; Taylor series; Parametric equations; Polar functions (including arc length in polar coordinates and calculating area); Arc length calculations using integration; Integration by parts; Improper integrals; Differential equations for logistic growth; Using partial fractions to integrate rational functions.

AP Physics C: Mechanics

Spring 2019

Intended to be equivalent to an introductory college course in mechanics for physics or engineering majors, the course modules are: Kinematics; Newton's laws of motion; Work, energy and power; Systems of particles and linear momentum; Circular motion and rotation; Oscillations and gravitation. Methods of calculus are used wherever appropriate in formulating physical principles and in applying them to physical problems. Therefore, students should have completed or be concurrently enrolled in a calculus class.

Business & Economics

Analytics & the Digital Economy

Spring 2021

The goal of this course is to provide students with applied experience with the world of data science. In doing so, a course objective is to ensure that students who complete the course are comfortable in any business or policy environment where data are extensively used to inform strategic decision-making. Students should leave the course with an understanding of what is required to build "dataproducts", and with the confidence that they have the skills necessary to acquire, analyze, and communicate insights in a data rich environment.

Introduction to Management

Fall 2020

We all spend much of our lives in organizations. Most of us are born in organizations, educated in organizations, and work in organizations. Organizations emerge because individuals can't (or don't want to) accomplish their goals alone. Management is the art and science of helping individuals achieve their goals together. Managers in an organization determine where their organization is going and how it gets there. More formally, managers formulate strategies and implement those strategies. This course provides a framework for understanding the opportunities and challenges involved in formulating and implementing strategies by taking a "system" view of organizations, which means that we examine multiple aspects of how managers address their environments, strategy, structure, culture, tasks, people, and outputs, and how managerial decisions made in these various domains interrelate. The course will help you to understand and analyze how managers can formulate and implement strategies effectively. It will be particularly valuable if you are interested in management consulting, investment analysis, or entrepreneurship - but it will help you to better understand and be a more effective contributor to any organizations you join, whether they are large, established firms or startups.

Managerial Economics

Fall 2019

This course will introduce you to "managerial economics" which is the application of microeconomic theory to managerial decision-making. Microeconomic theory is a remarkably useful body of ideas for understanding and analyzing the behavior of individuals and firms in a variety of economic settings. The goal of the course is for you to understand this body of theory well enough so that you can effectively analyze managerial (and other) problems in an economic framework. While this is a "tools" course, we will cover many real-world applications, particularly business applications, so that you can witness the usefulness of these tools and acquire the skills to use them yourself. We will depart from the usual microeconomic theory course by giving more emphasis to prescription: What should a manager do in order to achieve some objective? That course deliverable is to compared with description: Why do firms and consumers act the way they do? The latter will still be quite prominent in this course because only by understanding how other firms and customers behave can a manager determin what is best for him or her to do.

Behavioral Economics

Spring 2020

Behavioral economics applies insights from psychology to the study of economic phenomena. This course will take the possibility of deviations from rational, self-interested behavior as a starting point, and explore two main questions: How does psychology play out in markets, where sophisticated and unsophisticated consumers and firms interact and compete? And what does behavioral economics imply for public policy? Markets have the potential to protect consumers from their biases, when firms compete to give biased consumers the best deal. In addition, markets allow for the emergence of informational intermediaries that give biased consumers advice. We will examine whether and how this remedy is provided in a diverse array of markets. Behavioral economics also affects what governments should do and what governments actually do, when they address market failures, combat poverty and inequality, and raise revenue. This course therefore also explores "Behavioral Public Finance" -- optimal policy in the presence of biases -- and "Behavioral Political Economy" -- how biases affect the choices of politicians and regulators themselves.

Monetary Economics & Global Economy

Summer 2019

FNCE 101 is an intermediate-level course in macroeconomics and the global economy, including topics in monetary and international economics. The goal is to provide a unified framework for understanding macroeconomic events and policy, which govern the global economic environment of business. The course analyzes the determinants and behavior of employment, production, demand and profits; inflation, interest rates, asset prices, and wages; exchange rates and international flows of goods and assets; including the interaction of the real economy with monetary policy and the financial system. The analysis is applied to current events, both in the US and abroad.


Spring 2022

This course examines the art and science of negotiation, with additional emphasis on conflict resolution. Students will engage in a number of simulated negotiations ranging from simple one-issue transactions to multi-party joint ventures. Through these exercises and associated readings, students explore the basic theoretical models of bargaining and have an opportunity to test and improve their negotiation skills.

AP Microeconomics

Spring 2019

The course begins with a study of fundamental economic concepts such as scarcity, opportunity costs, production possibilities, specialization, and comparative advantage. Major topics include the nature and functions of product markets; factor markets; and efficiency, equity, and the role of government.
Throughout the course students work through projects, problem sets, and simulations to deepen their understanding of the material. Analysis of current events is a key component of the course and news articles, podcasts, and other media resources are used regularly to supplement the texts. Students in Economics will participate in several required field trips around New York City and hear from multiple guest lecturers.

AP Macroeconomics

Spring 2019

Study begins with fundamental economic concepts such as scarcity, opportunity costs, production possibilities, specialization, comparative advantage, demand, supply, and price determination. Major topics include measurement of economic performance, national income and price determination, fiscal and monetary policy, and international economics and growth.
Throughout the course students work through projects, problem sets, and simulations to deepen their understanding of the material. Analysis of current events is a key component of the course and news articles, podcasts, and other media resources are used regularly to supplement the texts. Students in Economics will participate in several required field trips around New York City and hear from multiple guest lecturers.

Writing, Social Sciences, & Humanities

Engineering Ethics

Spring 2021

In this course, students will study the social, political, environmental and economic context of engineering practice. Students will develop an analytical toolkit to identify and address ethical challenges and opportunities in the engineering profession, including studies of risk and safety, professional responsibility, and global perspectives. The course will begin with a foundation in the history of engineering practice and major Western ethical and philosophical theories. Students will then apply this material to both historical case studies, such as Bhopal, the NASA Shuttle Program, and Three Mile Island, as well as contemporary issues in big data, artificial intelligence, and diversity within the profession. Students will consider how engineers, as well as governments, the media, and other stakeholders, address such issues.

Writing Seminar

Fall 2019

Critical writing seminars are small, innovative, discipline- and genre-based courses organized around a specific scholarly inquiry. These seminars focus on helping students improve their writing skills and each student is required to take one.

Introduction to Philosophy

Summer 2019

Philosophers ask difficult questions about the most basic issues in human life. Does God exist? What can we know about the world? What does it mean to have a mind? How should I treat non-human animals? Do I have free will? This course is an introduction to some of these questions and to the methods philosophers have developed for thinking clearly about them.

The Social Contract

Summer 2019

This is a critical survey of the history of western modern political philosophy, beginning from the Early Modern period and concluding with the 19th or 20th Century. Our study typically begins with Hobbes and ends with Mill or Rawls. The organizing theme of our inventigation will be the idea of the Social Contract. We will examine different contract theories as well as criticisms and proposed alternatives to the contract idea, such as utilitarianism. Besides the above, examples of authors we will read are Locke, Rousseau, Hume, Mill and Marx.

AP Spanish Language and Culture

Spring 2018

This advanced course is built around four main units: family and communities, science and technology, arts and beauty, and finally, individual and community identities. These topics will be studied through three different lenses: the world, the Spanish-speaking world, and the student's individual experience. Through literary texts, newspaper articles, videos and other media, students will be introduced to these topics. Students will develop advanced listening, speaking, and expository writing skills while thoroughly reviewing Spanish grammar. The assessment focus will be less on quizzes and tests, and more on original, creative work - produced individually or in groups - such as projects and presentations. Students will present Noticiero projects on topics of personal interest and lead the class in mini discussions of their chosen topics.

Please enable JS to see my email (or download my resume)