In a previous article, I posted my schedule and about my decision to double major in mathematics and computer science. The computer science department seems to be quite backed up at the moment, so I have not received any official response yet.
I can see why the CS department is really backed up. In most of my experience at Cornell, I had class sizes of 10-30, with larger class sizes (150-250) only at introductory level courses such as Sociology 1101 or Astronomy 1102. It would be quite rare to have an advanced level course with that many people in them.
But, CS easily has 150-250 people in each class. In the first few days of class, even in large lecture halls, there were no seats left and the late-arrivers had to sit in the aisles. I think students here see CS as too lucrative of a skill to pass up. Some difficult or otherwise time-consuming homework assignments have caused class sizes to drop significantly, but there are around 150-250 people in the CS classes. On the other hand, my math classes have 14 and 6 people respectively.
Math 4340 – Abstract Algebra
Professor: Shankar Sen
This is a fairly trivial class so far. We are covering basic group theory and it is quite a relief compared to some of the more intense math I did last semester (*cough* topology). The course is supposed to move on to rings and modules later; however, in linear algebra we actually covered much of the foundations of ring theory and modules.
However, given the lack of difficulty of the topic so far, the homework grading has been quite harsh. I usually skip writing down every rigorous step if I think some part is obvious. Learning the material is more important than writing down every detail of the proof, in my opinion.
Math 7370 – Algebraic Number Theory
Professor: Shankar Sen
There are no exams, no prelims, and no homework. However, it is a graduate level seminar-type class and it is pretty insane. I have put up my lecture notes on Scribd, and even if you know nothing about college math, if you click that link, you can probably see how much more difficult 7370 is than 4340.
It is a really good thing I had a basic introduction to ring theory and modules before taking this course. Knowing what PID (principal ideal domain) and UFD (unique factorization domain) mean, knowing the difference between prime and irreducible, etc., was extremely helpful.
This class is even more difficult than the graduate Complex Analysis course that I took last year. Before I took complex analysis, I actually knew quite a bit about complex variables, complex functions, and contour integrals. I had even studied the Riemann zeta function in high school. And on top of that, I was not the only undergraduate in that class—there were at least 3 others.
But for algebraic number theory, this is really new material, most of which I haven’t seen or even heard of, and moreover, I am the only undergrad in the class. However, I talk with the professor outside of class and I am confident that I can learn the material if I really try.
Math 4900 – Independent Research/Reading – Elliptic Curves
Since I felt that I was doing too much CS and not enough math, I decided to add on an independent reading class. The book is The Arithmetic of Elliptic Curves by Joseph Silverman.
I have seen elliptic curves in complex analysis in the form of the Weierstrass P-function and equating points in the complex plane by a lattice. To see the algebraic side of it will be interesting though, especially because I am interested in number theory for possible research.
In addition to this official reading, I am also reading and doing problems from Tom Apostol’s Introduction to Analytic Number Theory, so that I can get both the algebraic and analytic sides to it.
CS 4820 – Introduction to Algorithms
Professor: Dexter Kozen
This is a really fun theoretical and mathematically oriented class. After all, Kozen is practically a mathematician.
Given my mathematical background, especially the combinatorics class I took last semester, this algorithms course is not too difficult and in fact fairly trivial so far. But, I expect it to get more sophisticated once we get over the introductory stuff. For instance, on our discussion board on Piazza, one student asked how to use a contradiction proof. In just topology alone, I probably used about a hundred.
In addition, Kozen shares some very interesting stories during lecture. Just last Friday, he was talking about dynamic programming and discussed a project using body scan data to analyze the number of dimensions it took to store the size information of a human body. “Are women 2-dimensional? I don’t think so,” said Kozen. In fact, he recalled from the study that women were around 5-dimensional and men were fewer.
Also, when he was explaining the growth of the Ackermann function A(n), he noted that even A(4) was an extraordinarily large number, and in fact that it was “even higher than Hopcroft’s IQ.”
CS 4850 – Mathematical Foundations for the Information Age
Professor: John Hopcroft
From the title of this course, one might think it is really easy, but even as a math major, I find it nontrivial (that means hard, in math terms). In fact, I’d say at least 30-40% of the class has dropped since the first day. The fact that Hopcroft won a Turing award makes the class no easier.
It is essentially a mathematical and statistics course with applications. We proved the Central Limit Theorem on the first day of the class and then looked at spheres in high dimensions, with the intent of generating random directional vectors in high dimensions. As it turns out, most of the volume of a high-dimensional sphere is on a narrow annulus or shell, and when a given point is taken to be the north or south pole, the rest of the volume is located at the equator.
Currently we are studying properties of large random graphs, in particular, properties that appear suddenly when the edge saturation of the graph passes a certain threshold. For instance, below a certain number the components of the graph are all small, but above that number, a giant component arises. For an assignment I showed how this giant component phenomenon arises in connections of the Reddit community.
CS 3410 – Computer System Organization and Programming
Professor: Hakim Weatherspoon
In contrast to the high-level programming I have done in the past, this course is about low-level programming and the hardware-software boundary. The programming language for this course is C.
We are building up a processor from the ground up, one could say, with basic logic gates to begin with. The first project was to design a 32-bit arithmetic logic unit (ALU) using Logisim, a circuit simulation program. For instance, for a subcircuit we needed to create a 32-bit adder with overflow detection.
The above picture is actually a screenshot of the overall ALU that I designed for the class. The subcircuits are not shown (this project is not due yet, so it would break academic integrity to show a more coherent solution).