All of the Math Courses I Took in College, Reviewed

In this post, I am going to lay out all of the courses I took in college while getting my math degree. Perhaps you are considering getting a math degree, or perhaps you are currently studying math and trying to decide which courses to take. Or perhaps you are just curious. Whatever your reason is, I hope you can take something away from my experiences. Every school has its own way of laying out a degree program, and there is lots of room for customizing electives so experiences can vary. I have ordered the courses roughly in the order I took them, but also made sure to put related courses near each other. In terms of time frame, the first five courses (up to symbolic logic) were scattered over a three year period, and the remaining seventeen classes were over a two year period.

The core of the my degree, and the core of most math degrees, is the following list of courses: the calculus courses, differential equations, linear algebra, real analysis, and abstract algebra. A mathematics degree will also include math electives, which is the category the rest of my courses fall into. A degree will also require general education courses, which I am not covering here.

Of course I cannot provide an exhaustive description of my experience in each subject in this post. Doing so would make for an unwieldly long post. Additionally, delving into all the mathematical details for each class would limit the readability of the post and deter people looking for a simple overview. So, in light of this, I will provide a brief description of what each class was about and some of the key points of my experience with the course. I will link to other posts with more in-depth coverage of specific courses that warrant it.

This is a long post, so here is a list of the courses I will describe if you would like to skip around:

  • Statistics
  • Calculus 1
  • Calculus 2
  • Calculus 3
  • Symbolic Logic
  • Linear Algebra
  • Differential Equations
  • Introduction to Proofs
  • Number Theory
  • Advanced Engineering Mathematics 1
  • Advanced Engineering Mathematics 2
  • Complex Analysis
  • Numerical Analysis
  • Abstract Algebra 1
  • Abstract Algebra 2
  • Algebraic Topology
  • Linear Programming
  • History of Mathematics
  • Real Analysis 1
  • Real Analysis 2
  • Lie Theory
  • Student Research: Topological Data Analysis

Statistics

Among all the courses in the list, statistics is likely the one that everyone can benefit from the most. Fundamentally, this course is about working with and understanding data. We started out looking at basic summary statistics, things like mean and median. We then moved on to some basic probability and sampling. The course finished off with with some more advanced topics such as hypothesis testing, linear regression, and different distributions. We learned how to answer questions such as: Given a sample from a population, what can we learn about the population as a whole? How confident can we be in our conclusions? How large of a sample do we need to reach a certain level of confidence?

I actually took this course twice. The first time I took it, I really was not interested in the topic. My focus was on my programming classes and statistics did not seem particularly relevant to me. This was ironic given that my goal was to get into artificial intelligence which is mostly about statistics. To be fair, the professor did not seem like he wanted to be there either. Every day, he would walk into the classroom, place the textbook (which he wrote) on the podium, and begin to read it verbatim in a monotone voice. Then, when class ended, he would close the book and leave without answering any questions or adding any supplemental material. I dropped the class and retook it with a different professor. The second time around it was much better, involving group work and many hands on experiments. Take my advice: find a fun professor for this class.

Calculus 1: Differential Calculus

Differential calculus was focused on the derivative, which is a way of quantifying the rate of change in some value. For example, if we have a function which expresses the position of an object over time, then the derivative (or rate of change) of that function gives the velocity (change in position) at each point in time. This can be carried further, since the derivative of velocity is acceleration, which is the rate of change of the velocity. After that there is jerk, followed by snap, crackle, and pop. I would love to know how those got their names. The majority of the course was focused on the derivative, and the supporting machinery of limits. We may (or may not) have touched on integrals near the end of the course, but we certainly covered them in the next course.

I had taken calculus in high school, but for whatever reason the credits did not carry over. This was not a bad thing, since the college course went much more in depth than my high school class did. It seemed like many of the students in the class already had some exposure to the topic, though certainly not all. A word of warning: it is often said that when people fail calculus they are really failing algebra. The concepts of calculus are quite manageable to understand, but executing them in practice relies on a solid ability to manipulate algebraic expressions.

Calculus 2: Integral Calculus

This course was mostly about the integral, which is often introduced as the anti-derivative. Probably the best way to conceptualize the integral is as a way of adding up the change over time to get the net change, although there is much more going on under the hood, mathematically. So if we are given the acceleration function for an object, we could use the integral to find the velocity, and then integrate the velocity to get to position function. The study of integrals worked up to the Fundamental Theorem of Calculus, which unifies derivatives, antiderivatives, and integrals in a clean, and useful way. The course also spent some time on sequences and series which I had a hard time with. At the time, they felt out of place and it was only much latter that it became clear why we spent time on them. Towards the end of the semester we got a taste of some basic differential equations and multiple integration.

The Fundamental Theorem of Calculus: If \(f(x)\) is continuous on \([a,b]\) and \(F(x)\) is an antiderivative of \(f(x)\) on \([a,b]\) then \(\int_a^b f(x)dx = F(b)-F(a)\).

Many people consider calculus 2 to be much harder than calculus 1, and even more difficult that calculus 3. I did not feel that this class was much harder than calculus 1, overall. Perhaps it helped that I had the same professor for differential and integral calculus so the organization of the course was consistent. Perhaps the biggest difference between the first two calculus classes is that while derivation is mechanical and can be accomplished by following several simple rules, integration is more of an art that isn’t even guaranteed to be possible. The basic explanation for this difference is that there are fewer restrictions on which functions can be integrated, so they are not always as nicely behaved as functions which can be differentiated.

Together, differential and integral calculus form an invaluable toolkit that is used to some degree in every STEM field. For this reason, there was a broad range of students in these courses. At the time, I was not yet a math major. I was a computer science major and my friends in the class were mostly engineering students. If I could have done anything different in this class, I would have taken the opportunity to get to know more people outside of my major.

Calculus 3: Multivariable and Vector Calculus

I found this course to be the most challenging of the calculus sequence. There were two major sections to the course which could be (and sometimes are) separate courses: multivariable calculus and vector calculus. Multivariable calculus takes what was covered in the first two calculus courses and expands it to work with functions involving more than one variable. Surprisingly, generalizing the techniques this way is a straightforward process that has very few complications. Multivariable calculus opens the door to solving more realistic problems such as many of those commonly found in science, like particle motion or optimization with constraints. Personally, I enjoyed this portion of the course and did well in it.

The second portion of the course covered vector calculus, which involves vectors, vector fields, and scalar fields. If you have never heard of vectors before, picture some water flowing around in a container. Now imagine there is an arrow at every point that shows which way the water is flowing and how fast. These arrows are vectors, and the collection of all of them is a vector field. Vector calculus is useful for many fields, including physics, where it can be used to model forces on a particle as it moves through a magnetic or gravitational field, among many other uses. Vector calculus was fascinating but extremely challenging for me. What made it so exciting to learn was that it felt very ‘real world’. The real world is messy and in order to get a handle on modeling situations it is often necessary to overlook some of this messiness. In early math classes, problems were so simplified that they become somewhat detached from the original situation. With vector calculus, I felt like we were more capable of tackling that messiness than we had been before. The problems we solved and the answers we found were close enough to reality that they felt meaningful.

This latter section of the class was more challenging than the multivariable topics, for several reasons. First of all, the pace was more rapid because there was so much material to cover. Vector calculus could easily be its own full length course (in fact, it often is). Second, there were more parts to work with, a higher level of abstraction, and a higher number of dimensions. This made it more difficult to develop intuition for what was going on and use it to guide problem solving. By the time my intuition was beginning to solidify about a particular topic we were already on to the next one. Finally, the course was computationally focused and spent less time on understanding, since the mathematical machinery behind the material is advanced and the course could not include actual proofs. This is not a criticism, just a reality of the course’s place in the curriculum.

Overall, I appreciate this course much more now, looking back on it with additional perspective, than I did at the moment when my focus was mostly on doing well in the class.

Symbolic Logic

This course stands alone in this list in being the only course that was truly about “symbol pushing”, with no real connection to anything concrete. My symbolic logic course was dual listed as a math course and a philosophy course. I am pretty sure I was the only one out of a class of 30 that was taking it for the math credits. Almost every student in the class was a political science or philosophy major, which made for some fun socializing. The class began with an introduction to the ideas of logic such as syllogisms. For example, if we are give the premises that all humans are mammals and I am a human, we can conclude that I am a mammal. The course quickly moved away from concrete examples into the realm of symbols. The goal of the class was working with logical proofs. We would be given one or more statements with symbols and then need to show through a series of rigorous logical steps that those statements implied another statement. Here is an example of the kind of proofs we did in this class, taken from the class notes:

The professor recommended that we try to think of the class as a game and not to spend too much time thinking about what the proofs really “meant”. If this sounds too abstract, arbitrary, or tedious for you, don’t worry. This level of formality and symbol pushing is not the norm for a math degree and this class was purely optional. While most math involves this sort of logical thinking, it normally has some amount of meaning attached to it. I will say that as confusing as it was at times, this class truly prepared me for my introduction to proofs class, which I took later on.

Linear Algebra

I took linear algebra and differential equations (next course in the list) simultaneously over the summer. That was a mistake, although it did make sense with my course schedule. Summer classes were only six weeks so the pace could best be described as frantic. We were in class four hours per day (per course), four days a week. We covered more than a chapter of material per week and had an exam every week. I earned a decent grade, but the material did not stick well and I would end up having to relearn much of the material later when it reappeared in other courses.

I really did not know what to expect going into this class. The name is not particularly evocative. However, this is possibly the most useful math field out of the ones normally covered in the undergraduate curriculum. Linear algebra is all about linear transformations, which are particularly nice functions. These functions can be represented as matrices, which are rows and columns of numbers. Matrices, along with vectors, can be used to solve systems of equations and various geometric problems, do optimization and work with data. The power of linear algebra comes from the fact that elementary linear algebra is well studied and almost completely mapped out. There is a bit of a joke that a problem in mathematics is solvable if and only if it can be reduced to a problem in linear algebra. It is also well suited to being used by computers, since fast algorithms exist for manipulating matrices and vectors.

My class began by focusing on how to work with matrices and we spent most of the time running through computational problems. The math here is mostly arithmetic, which can be tedious, but it is powerful. After this, the course moved into more theoretical topics, such as eigenvectors, vector spaces, and inner products. In this portion of the class, we started to do some basic proof-like arguments. A few people had trouble with this but the professor was a forgiving grader. The most interesting application of the more theoretical subjects was the idea of a Markov Chain, which was one of the foundational pieces to the Google search algorithm.

Like I said earlier, I wish I could have taken the course during the normal semester so there would have been more time to absorb the material. You will see references to linear algebra pop up repeatedly in many of the following courses.

Differential Equations

Like my linear algebra class (previous course in the list), I took this course over the summer. As I stated before, this was not ideal since the pace was so fast that I did not retain as much as I could have. Although at most schools you can take linear algebra and differential equations in any order you wish, I strongly recommend taking differential equations after linear algebra (or at least taking them concurrently). Some of the topics in differential equations will make more sense if you understand some of the linear algebra theory behind it.

A differential equation is an equation that relates a certain quantity with that quantity’s rate of change (its derivative). The solution is a function that satisfies the differential equation (and possibly some initial conditions). For example, let’s say you have some money in a bank that earns ten percent interest per year. Here the interest is equal to 0.1 times the principal (the amount you put in the bank). The interest is the rate of change (or derivative) of the principal, so we have a differential equation. I am not going to go through a full example here, but solving this differential equation gives a function that will tell you how much money you will have in the bank at any given time. Differential equations are versatile and a single differential equation can represent many different situations. For example, the differential equation resulting from the previous example could also describe radioactive decay, the spread of a disease, and population growth. Differential equations are ubiquitous in science and engineering, and are therefore crucial to any applied field.

If my linear algebra course was an elegant building up of unified theory, then my differential equations course could best be described as a bag of dirty tricks. Differential equations are hard, and most of the time they are impossible to solve exactly. For this reason, most of the curriculum is about recognizing certain nice forms that can be solved, and then memorizing the tricks and hacks needed to solve them. I would say this was about the first two thirds of the course. The last third of the course focused on series solutions and numerical solutions which both allow us to generate approximations of solutions, especially with computers. I do not wish to give the impression that this was a bad course or that the study of differential equations cannot be beautiful and elegant. However, a first course in differential equations is a hands on, in the trenches, sort of affair that does not have the time or the prerequisites to get into the more elegant portions of the field. If you are majoring in math or other STEM subjects, you will likely explore more of the field in other courses.

Introduction to Proofs

In some ways, this course really marks the transition into fully studying mathematics. This was certainly the most formative math class that I took. This course was like a boot camp in logical thinking and writing mathematical proofs. The professor was tough and thorough, and whipped us into shape. If you missed a session, you failed. If you missed a homework assignment, you failed. She did not curve her tests. We had several pages of homework due every class session, and somehow she would hand the homework back the next class session with paragraphs of insightful feedback on every single problem, picking apart our arguments. I have no idea how she did it. She must have spent most of her time grading. The tough style worked well for me and for some others, but many people struggled. Only about a third of the class passed. Most of those who did not pass retook the class with other professors and did extremely well. I believe the symbolic logic course (see above) I had already taken had prepared me for this class so the hard style pushed me to grow.

There is no perfect definition of what mathematics is, but there seems to be a general consensus that whatever math is, proofs are an integral part of it. A mathematical proof is a formal, logical argument of why a statement must be true given certain axioms, definitions, and assumptions. This is necessary because mathematics has an extremely high bar for the strength of its results. Consider the statement “an even number plus an even number is an even number”. This statement feels true. If you try it out with a few numbers it seems to hold up. But how do we know there are not some even numbers out there that, when added together, create an odd number? Obviously we cannot check every possible pair of even numbers (since there are infinitely many of them). Luckily, this does turn out to be a true statement and can be proven (it was one of the things we proved in the course). Proofs are necessary to provide solid footing for all our mathematical statements, and because sometimes even simple statements can harbor dangerous pitfalls.

For this course we had to pretend to forget all of our previous mathematical knowledge and start from scratch. We were not allowed to use any fact or statement unless we could prove it from what we had already built up in the class. The course begins with the basics of set theory. Almost everything in mathematics is built off of sets, which are just collections of objects called elements. We learned about set operations, relations, functions, logical quantifies, and various other logical statements. Along the way, we learned different techniques of proof such as the direct proof (the simplest form of proof), proof by contradiction (a fun method where instead of proving a statement to be true you prove that it cannot be false and therefore conclude it must be true), and induction.

We then spent the last portion of the course using our new found skills to prove basic theorems in number theory and real analysis. Particularly, we did a lot of proofs related to prime factorizations, divisibility, and modular arithmetic for number theory, and proofs related to the convergence of sequences and limits for real analysis. I left this class feeling much stronger and more prepared to face the challenge of my other math courses. It was after this course that I really started to feel like a mathematician. Some universities meld this course into another math course (often real analysis), but I liked having this as a stand alone course.

Number Theory

This was a fun course, and a perfect one to take alongside the introduction to proofs course. There was some overlap in content between the two courses. There are many ways to structure a number theory course, with varying levels of initial sophistication. The course I took was set up with minimal prerequisite knowledge. One of the fun things about number theory is that the basics are simple (they could be explained to someone in grade school without much difficulty) but it quickly gets complicated, and interacts with many other fields of mathematics.

The course covered topics in divisibility, congruences, and an assortment of other topics. We did some work with prime finding and learned some basic encryption techniques. Those sections of the course were my favorite part. If I am being honest, although I enjoyed the class and learning about number theory, not much more than the basics has stuck with me or made much of a lasting impression. I did help a professor typeset their number theory course notes later on, and their approach was different enough to pique my interest again. Perhaps I will return to number theory again some day. I am not sure.

Advanced Engineering Mathematics 1: Linear Systems and ODEs

This class brought together many topics from previous courses and recovered them with an emphasis on applying them to solved “applied” problems. We began with a review of some linear algebra concepts such as vector spaces, determinants, eigenvalues, and linear maps. We talked a little bit about efficiently implementing these tools using computers, especially matrix multiplication which is foundational for some many things. Our first applications involved analyzing electrical circuits using Kirchhoff’s laws and analyzing network flow (water through pipes, cars along roads, and data on the internet). We learned how to construct systems of linear equations for these situations and then convert those systems into matrices, which can then be solved using the tools of linear algebra.

Next, we worked with some basic probability such as random vectors and random variables. This allowed us to start using Markov chains. Markov chains are a way of representing a situation where there a number of different states and certain probabilities of transitioning between those states. For example, in your house there are multiple rooms connected by various doors. Your state is the room you are currently in. The transition probabilities reflect which room you are most likely to go to next. If you are in the kitchen you have a higher probability of going to the dining room (or wherever you normally eat) than you do of going to the garage, perhaps. If you are in the bedroom, you have a high probability of staying in room for a while since you might be sleeping, while in the bathroom you are more likely to come and go quickly. All of this information can be represented as a matrix, and moving from one step to the next is just a matter of matrix multiplication. This can be used to answer questions about short term changes in state, and in the long term probability of states. Markov chains were central to the original working of the Google search algorithm.

After talking about Markov chains for a while, we began working with differential equations. Although I had already taken a course on differential equations (see above), I was extremely grateful for the renewed coverage. In addition, this course approached differential equations in a different way, starting from vectors and vector fields rather than the more calculus-centered approach in the dedicated course. Basically, we can convert problems involving systems of linear differential equations into problems in linear algebra, making them easy to solve. We also learned how to linearize nonlinear systems, so we could analyze them around specific points, even if we could not analyze them on a global level.

Finally, we ended the class by working with some topics from vector calculus and using them to solve various physics problems, such as particle motion and forces in a vector field. We combined this with topics from the previous section to handle some more complicated differential equations. Overall, I really enjoyed this class. It was here that I began to suspect that I enjoyed applied mathematics more than the strictly pure math subjects. I love abstraction, but I also love taking those abstractions out for a spin in the real world and seeing what they can do.

Advanced Engineering Mathematics 2: Fourier Analysis and PDEs

This class was the direct sequel to the previous course and I took it the semester afterwards with the same professor. However, there was a large jump in content between the two courses. The course began with an in-depth coverage of series and power series. This involves infinite sums of terms, and they may or may not converge to a particular value, or they may go off to infinity. We learned how to tell whether various series converged and, if they did, what value they converged to. This involves a number of different tests and clever techniques. I had difficulty with this material, since much of it was based off of the similar topics in calculus 2 and that had been a long time ago for me. Power series involve a variable and have a radius of convergence which represents which values of the variable the series will converge for. We learned how to use these series tools to solve differential equations by representing the solution as a series. We went through several specific, famous problems involving these tools.

The bulk of the course was dedicated to studying partial differential equations using Fourier series. A partial differential equation involves more than one variable, whereas ordinary differential equations (which are what I have been referring to prior to this as differential equations) involve only one variable (most often time). For example, if we want to look at how the temperature at various points on a metal bar changes over time, we have two variables: position along the bar and time. We spent time deriving the models for several situations such as heat and waves and then looked at how to solve the resulting partial differential equations. It turns out that the best way to solve these sorts of problems involves using Fourier series, which are a way of representing (almost) any function as an infinite sum of sines and cosines. This allows us to get an ‘exact’ answer, but more than that, it allows to calculate results to any desired level of accuracy by working out a finite number of the terms in the series. As it happens, the ability to do this all comes from some advanced linear algebra tools. I will not get into the details here, but if there is an overarching theme to this post it is that linear algebra shows up everywhere.

To provide a better (and more visual) description of this process than I can currently provide here, I refer you to this video by the outstanding YouTube channel 3Blue1Brown:

This class and the rest of the courses in the list, were unfortunately during the COVID-19 pandemic and were interrupted by the transition to online learning.

Complex Analysis

Complex analysis extends the tools of calculus from the real numbers to the complex numbers (numbers which have a real component and an imaginary component). Some aspects transfer easily enough that it almost seems redundant to prove them again in the complex case, but other aspects are not so straightforward. The complex numbers introduce some extra structure over the real numbers. This extra structure can make some things tricky, but in general it results in well-behaved and elegant tools. Despite having a pure math feel to it, complex analysis can be useful in a variety of applications. Among these, complex analysis can help with evaluating certain difficult real integrals.

The exact structure and prerequisites for a course in complex analysis can vary from school to school. Some universities require students to take real analysis prior to complex analysis, but my school did not. The only official requirement was calculus 2, although there was an unofficial assumption that students would be a familiar with proof techniques before beginning the course. The students in my class were almost all math majors, but there was a small handful of physics and engineering majors.

Numerical Analysis

In this class I learned efficient ways to implement some of the material from other courses with a computer. This is important because for most applications the goal is not absolute precision, but fast approximate solutions that are within a certain error tolerance. This was the only one of my math classes that explicitly required programming (although many of them did work some in, plus I had dedicated programming classes). The first month of the class was important but also boring. We were learning about the standard binary representation of floating point numbers, how to do arithmetic with them by hand, and convert between various number systems. As I said, this was important since it reveals how the computer does math and the common sources of error that naturally build up in calculation do to the inherent limitations of this representation.

We then moved into root finding, which many people will remember being the primary focus of much of high school algebra: looking for what value of \(x\) makes the function equal zero. There are various methods to do this and they have different advantages and disadvantages depending on the properties of the function being worked with. Thus far, this has been one of the most useful tools I gained from the course since in many simple physical problems things can be arranged so that finding the solution to the problem is the same as finding the root of some equation. As I move into my career and more advanced self-study, other tools from the course will probably supersede root finding in importance.

The next section we worked on was all about linear algebra. Linear algebra pops up almost everywhere in mathematics and, as I mentioned earlier, many times problems are first converted into linear algebra so they can be solved. We learned fast ways to handle matrix multiplication, and solve linear systems using several methods. A key point here was also understanding the sources of error and how to bound it. Learning this material was informative and I feel more confident in selecting the right methods for the job when I encounter linear systems in the future.

The latter half of the course was a bit unorganized due to the hasty transition to online learning, but we covered interpolation, which is important for working with data, numerical differentiation and integration, which allow using the tools of calculus when we do not have nice, clean representations of the functions, and finally numerically solving differential equations. I loved solving differential equations. It is just so applicable and exciting. Now that I am graduated, one of my goals is to spend more time working on numerical analysis in general. A significant portion of my self study time over the past few months has been dedicated to expanding my numerical skills. I have been practicing implementing and using the methods from this course in different programming languages: R, Python, Julia, C++, and Java. If you want to get into anything applied and can take this course, I recommend it.

Abstract Algebra 1: Group Theory

Abstract algebra (also called modern algebra) was all about structure. This course picked up where my introduction to proofs course left off. Algebra is the study of structures, and the object we studied in this course was the group. A group is a set with an operation that ‘combines’ two elements of the set to produce a third element of the set. The set must have an identity element, be associative, and have inverses. A basic example of a group is the addition of integers: zero is the identity element since anything plus zero is itself, it is associative, and the inverse of any integer is the negative of that number. Examples of groups are not limited to numbers, however. Groups can appear in the symmetries of physical objects, rearrangements of patterns, error-correcting codes, and the solving of Rubik’s cubes, to name only a few. Studying groups abstractly gives us insight into every example in which they appear. The course used examples primarily from number theory and some geometry.

This course was proof based, so most of the work revolved around proving various things about groups rather than doing calculations. I enjoyed how the course felt like puzzle solving, and how the abstract nature of groups means they can be applied to so many things. This was the first course where I began to feel that math could be applied to anything rather than just to numbers or to things which can be described by numbers. Most of the material was elegant and, with the proper prompting by the professor, emerged naturally from the definitions. It seemed like most people who had difficulty in the class were mainly struggling with proof techniques rather than the material itself. People who were comfortable with proofs did just fine.

A major theme of the course involves functions mapping between two groups (or from a group to itself). As it turns out, looking at how these functions behave can tell us a lot about the structure of a group. This approach can also allow us to make connections and comparisons between groups representing entirely different objects.

For a more in-depth explanation, I once again turn to the excellent YouTube channel 3Blue1Brown:

Abstract Algebra 2: Rings and Fields

A group is a set with an operation on it, as described in the previous course, but this is an extremely basic structure. In this second part of the abstract algebra sequence we built on the previous course by working with some more advanced structures called rings and fields. A ring is a set with two operations on it, instead of just one, plus several other assumptions. An example of a ring is the integers with multiplication and addition. Having the interplay between two different operations can create some more complicated behavior. A field is essentially a fancy ring. The course introduced each structure and then went through the various properties and components for each one. Many of these topics were similar to ones that we covered for groups which made the concepts easier to pick up. Like in the first course, there was a large focus on how functions can behave between various structures, and what the behavior of those functions can tell us.

The latter portion of the course was dedicated to exploring some uses of rings related to solving polynomials. You may remember polynomials from high school algebra where they essentially look like \(ax^2 + bx + c\) with \(a\), \(b\), and \(c\) being coefficients and \(x\) being a variable. The main difference is that in high school, the coefficients and variable were all numbers, while here they can be any element of a ring. Since rings do not have to involve numbers, neither do the polynomials. This laid the foundation for an entry into Galois theory. Sadly, we did not have time to get into studying that, so Galois theory is left for future self study.

Algebraic Topology

This was a special problems course, meaning that it was not one of the standard courses offered to undergraduates by my university. The course came about from a reading group one of my professors put together the previous semester. It was four undergraduates, two or three grad students, and the professor. We would get together during the evening every week in one of the empty classrooms by the math department and talk about algebraic topology. Topology can be simply described as the study of shape, but less rigid than geometry. In topology you can bend, twist, and stretch a shape without changing it, so long as you do not tear or glue it. For this reason, some people call topology “rubber-sheet geometry”. Algebraic topology involving algebraic tools (groups, rings, fields) to study topological problems.

We worked out of the book “Algebraic Topology” by Hatcher. It was a lot of fun. It was also my first exposure to many of the topological concepts (homeomorphism, homotopy, homology) that would play a central role in my research project (last course in the list). I gave my first (long) mathematical presentation in this group, giving a proof that the first fundamental group of the circle is isomorphic to the integers. The presentation did not go particularly well, and the professor kindly helped me along through my mistakes. Luckily, it was a small group so the pressure was low and feedback helped better prepare me for future presentations. Joining the small group helped me to hear about other opportunities which allowed me to join a topological data analysis research group (last course in the list). If you ever have the opportunity to participate in something like this, I cannot recommend it enough.

Linear Programming

Linear programming uses the tools of linear algebra to solve certain kinds of optimization problems. The list of potential problems that can be solved using linear programming seems almost endless. For example, perhaps you run a business and need to decide how many of each good to produce given certain demand and resource constraints. Or you need to determine what composition of metals to use in producing a certain alloy to minimize costs while still meeting certain purity requirements. Or you need to decide whether to invest in one resource or another, such as welders vs sanding machines. Or you need to schedule certain tasks in the most efficient way possible. Or you need to choose how to route things through a transportation network. The list goes on. What all these problems have in common is that they involve a linear cost (or profit) function and a series of constraints. The main workhorse for the course was the simplex algorithm, which converts the problem into one of vectors and matrices. The algorithm works by finding the feasible region in the space of solutions and choosing a basic feasible solution. Then by iterating through the algorithm it moves to progressively better solutions until the optimal solution is found.

The material was fascinating and powerful but my main frustration for the course was that we did everything by hand. This meant pages and pages of rows and columns of numbers, even for fairly simple problems. Like the early portion of my linear algebra course, the main difficulty was not with the material itself but with small arithmetic errors. There is nothing like the frustration of completing four pages of work only to find that there was a missed negative sign on page one and now all of it has to be redone. This kind of work is best done by computer once the basic theory is understood. We talked briefly about using MATLAB to solve these problems, but I wish we could have spent a bit more time on that since it is so important.

History of Mathematics

I mostly decided to take this course because I enjoyed learning from the professor who would be teaching it. The course began by looking at the development of ancient mathematics in places such as Egypt, Mesopotamia, Greece, India, and China. We looked at how the locations and cultures influenced the mathematics that was developed in each location. Our homework involved solving problems using the ancient techniques and number systems of the cultures we studied. However, this was during online school due to the pandemic so after the first assignment I do not think we had any more assignments. Everyone, including the professor, was stressed so I do not think anyone minded. After talking about ancient mathematics we talked about math in the middle ages, particularly in the Islamic world but also in Europe. Finally, we spent the last month or so talking about more recent (meaning within the last three hundred years) developments at a breakneck pace.

This class was pleasant, but I am not sure if I would recommend it broadly. The course was completely optional for me and I was familiar with the professor. I know others who took the course with different professors and did not enjoy it that much. The focus of the course is normally on using the old techniques, which are mostly geometric in nature. This might not be to everyone’s liking. If you are interested in the ‘story’ of math history, you might be better served by reading some of the many excellent popular mathematics books on the subject. If you are more interested in the technical details of historical mathematics (especially relating to anything more recent than a few hundred years ago) you would probably be better off seeking out those details directly. Integrating both story and technical details into a single course is difficult, although my experience was affected by COVID-19.

Real Analysis 1

Real analysis has a special and often frustrating position in the undergraduate mathematics curriculum. It sits in between the calculus course sequence and the graduate level analysis courses. Real analysis is best described as a rigorous re-coverage of calculus, with proofs. My professor described calculus as “math for believers” and real analysis as “math for skeptics”. Calculus mostly works with nice functions, whereas analysis considers all functions including pathological ones that would confound the tools of calculus.

Like my introduction to proofs class, we were instructed to ‘forget’ everything we had learned prior to the course other than basic proof techniques. We started with some basic definitions and axioms about how numbers work and built up from there. The first major topic of the course was working with sequences of real numbers by proving the sequences converged (or not) to a value and finding that value. The idea of proving convergence is a central one in analysis that comes up repeatedly. Next we used sequences to construct a formal definition of a limit. Limits allowed us to talk about continuity. Continuity was a much more involved topic in real analysis than it was in calculus, so we spent a couple of weeks on it. The course ended with talking about taking derivatives.

Most of the material on sequences and continuity was new, but the other material was basically the same from calculus, just at a higher level of rigor.

Real Analysis 2

Unfortunately, I had to switch sections between real analysis 1 and 2, so I was with a new professor. The next section was a chapter further ahead (using a different textbook) than my former section so I was playing catch up from day one. This was the third semester of online school due to the pandemic and I (and everyone else) was feeling it. This made the course harder than it might normally have been. This second semester of real analysis started out with a definition of the integral. At first, the integral we worked with was essentially a formal version of the Riemann sums definition from calculus. However, as we moved on we integrated (pun intended) some basic bits of measure theory in order to deal with more difficult functions. After this we began to cover series of real numbers. Series are like sequences, but the terms are all added together. I admit that I was dreading this section since series are something that I had struggled with in calculus, but the rigorous treatment here helped me gain confidence with them. Our final chapter covered sequences and series of functions, which tied in every other topic we had covered.

At times, I was annoyed with the real analysis courses. Some portions felt like a tedious rehash of calculus and others seemed like a tantalizing tease of more useful, advanced material. Some of the statements we proved felt so obvious that proving them did not appear necessary. On the other hand, there were some surprising results, and the high level of rigor and formality improved my mathematical maturity. I have greater confidence in the tools of calculus/analysis after this course. In some ways I wish I had not saved this class for my senior year and had instead taken it prior to courses like numerical analysis, complex analysis, and the Fourier analysis we covered in my advanced engineering mathematics class.

Lie Theory

This course was a bit of an experimental course offering. One of the professors wanted to try out teaching a course on Lie Theory with an eye towards making it a regular course offering. It was technically listed as a graduate course, with a couple undergraduates invited in as well. Since it was a graduate class, the style was much different from any of my other courses. We did not have any regularly collected homework or an assigned textbook. Instead, we had some suggested exercises, a few recommended readings, and some course notes that we helped the professor write as the semester progressed. Grading was based on two tests and a final portfolio that included some exercise solutions, peer review of notes, and some original notes on a topic of our choosing. We were each also required to write a section of notes and teach that section during one of the lectures.

The material was hard, abstract, and moved fast. We did not have an exact schedule of topics, so the course meandered between Lie algebras, Lie Groups, Representation theory, and root systems. Basically, a Lie algebra combines the material from linear algebra (a vector space) with some material from abstract algebra (rings) to form a new object. This gives us a tool that is well suited to studying symmetry. Outside of mathematics, Lie algebras and Lie groups have found major applications in particle physics and quantum mechanics by describing the symmetries of the universe. Representation theory allows us to convert things that seem like they have nothing to do with matrices into matrices, which are easier to work with.

I loved this class and the material, but it would have been so much better in person. This class helped my school experience to end on a high note, despite the interruptions of the pandemic. For various reasons I decided not to continue on into graduate school straight after undergraduate, but if other graduate classes are similar to this one, then I am open to taking more in the future.

Student Research: Topological Data Analysis

Although this is not technically a course, I spent a year (two semesters and a summer) working with other students and a couple professors to learn about topological data analysis and apply it to some real world projects. This research was supported by two grants, so I was paid for my participation and my time. I worked between ten and forty hours per week, mostly during a schedule of my choosing. The pandemic complicated things by forcing all of the work to be remote and I had only ever met one member of the team in person before.

Topological data analysis applies the tools of algebraic topology to study the ‘shape’ of data in order to find insights that may be otherwise hard to notice. This focus on the overall shape rather than the exact position of each data point makes topological data analysis (TDA) fairly resistant to small errors (as are common in noisy data). For this reason, TDA is a good tool for exploratory data analysis which involves looking for insights without having a specific hypothesis in mind.

The project can be divided in to three phases: background material, research, and presentations. During the first phase, we studied topology from several topics before moving into research papers related to topological data analysis. With that foundation we began to use the tools we had learned to study the spread of COVID-19 and data on wildfires in the United States. This involved mostly programming, testing, and frustration as we worked to convert the abstract techniques into solid tools we could use. Since TDA is best used as an exploratory tool, we did not end up with any specific, solid insights, but we did identify some patterns which may be interesting to investigate further with different tools. Finally, we presented our work in the form of write-ups, slide shows, talks, and videos at 6 or 7 conferences and seminars. These different presentations improved my soft skills, such as public speaking and explaining abstract topics in simpler language.

Conclusion

So there we have it: every math course I took in college to get a mathematics degree. This does not constitute the sum total of my math experience, since during and in between my courses I spent a significant amount of time self-studying additional topics. Plus, there was so much knowledge gained by chatting with peers and professors, and by attending social events such as math club, talks, and seminars. There were also the many classes that I wish I could have taken but did not or could not, for various reasons. These include combinatorics, vector analysis, mathematical logic, set theory, probability theory, and mathematical statistics. Plus, I wish I would have had more time to take some graduate topics as well. At the end of the day, the point of an undergraduate degree is not to cover every topic and explore every subject. To cover such a vast expanse in any depth is impossible anyways, even if one spent a lifetime trying. The point of a degree is to provide an introduction to various fields, point the way to other areas of knowledge, and provide a set of tools to move forwards.