Coursework is a central part of the undergraduate mathematical experience. Through taking courses, students learn fundamental techniques and theories that are ubiquitous in mathematics. Courses are also often where students develop important relationships with faculty and their peers. For an individual student, deciding which courses to take can be challenging. Ask your peers, faculty mentors, and course instructors about UVa math department course offerings and which courses might be a good fit for you! You can also ask your peers about how they struggled or succeeded in a given course and the mathematical background they had prior to taking the course.
I'm currently in my last semester at UVA. I think it may be helpful to share the entire sequence of math courses I took while at UVA and to provide a thorough analysis of my experience. You should also ask your peers what courses you should take and what a reasonable schedule looks like. First, here are the MATH classes I took at UVA:
First semester (8th)
MATH 3310 (Basic Real Analysis)
MATH 4993 (Directed Reading Program)
Second semester (7th)
MATH 3340 (Complex Variables with Applications)
MATH 3354 (Survey of Algebra)
MATH 4993 (Geometry Lab)
Third semester (2nd)
MATH 4310 (Introduction to Real Analysis)
MATH 4770 (General Topology)
MATH 4993 (Analytic Number Theory Independent Study)
MATH 5653 (Number Theory)
Fourth semester (1st)
MATH 5653 (Bilinear Forms and Group Representations)
MATH 7310 (Real Analysis and Linear Spaces)
MATH 4330 (Calculus on Manifolds)
MATH 4652 (Introduction to Abstract Algebra)
Fifth semester (3rd)
MATH 7340 (Complex Analysis)
MATH 7360 (Probability Theory 1)
MATH 7410 (Functional Analysis)
MATH 7751 (Algebra 1)
Sixth semester (4th)
MATH 7752 (Algebra 2)
MATH 4840 (Introduction to Math Research)
MATH 8310 (Operator Theory 1)
Unofficial independent study in ergodic theory
Seventh semester (6th)
MATH 4900 (Distinguished Major Thesis)
MATH 4993 (Entropy Theory Independent Study)
MATH 8320 (Operator Theory 2)
MATH 8510 (Topics in Number Theory: Equidistribution in Analytic Number Theory)
Eighth semester (5th)
MATH 4901 (Distinguished Major Thesis)
MATH 8380 (Random Matrices)
MATH 8630 (Algebraic Number Theory)
Unofficial reading course on the Langlands Program
The parentheses next to the semesters correspond to how difficult/stressful that semester was for me. Generally speaking, the hardest semesters for me were the ones where I had the most exams. For me, hard=things I don't want to do (studying for exams), and easy=things I want to do (read more math). Keep in mind that my time management and mathematical maturity also improved over time, which means that objectively harder material didn't always correlate with how challenging I found a given semester. I remember thinking during my fifth semester, when I only took graduate courses, "wow, this is so much easier than last year," even though the content in those courses was conceptually more challenging. I am also not an Echols scholar, despite my best efforts, which means I had to take several general education requirements in addition to the listed courses.
Your goal should not be solely to take as many 4000-level and above courses as possible. Taking lots of advanced undergraduate/graduate courses is great, but I would argue that independent studies are more important in terms of developing your taste in math, establishing close relationships with your professors, getting to the research level, and standing out in the application pools for REUs and graduate schools.
Similar to most of the 4000 and below-level courses, many of the 7000-level/qualifying exam-based courses are still primarily tool-based classes. These are very important classes, and you probably won't be able to get very deep into any particular area of math without having taken at least a few of them. However, you don't need to try to take all of these as an undergraduate; you'll have time to/be required to/feel the need to take similar courses when you get to graduate school. I haven't taken much topology or geometry, for example, but I'm beginning to feel the need to learn more.
Instead, try to choose courses based on your research interests, which you hopefully start to develop by participating in independent studies/REUs early on. Notice how my fourth and fifth semesters are basically the only ones where I didn't do an independent study, and how almost every course I took beginning in my third year onward is directly relevant to my research interests (analytic number theory, additive combinatorics, and ergodic theory).
In short, the more independent studies, the better, and take qualifying exam/tool courses only as you need.
Here are a few suggestions for a highly motivated student who is willing to do some self-studying:
Take 4310 instead of 3310. I spent the summer before starting at UVA working through exercises in Abbott's "Understanding Analysis," and I know many other students who did something similar. As a result, I didn't learn much new math when I took 3310, which is based on Abbott's book. Many students skip 3310 and are completely fine. However, if you do this, I would highly recommend self-studying something like Abbott a bit beforehand.
Take 4652 instead of 3354. In my experience, there is a significant amount of overlap between the algebra courses at UVA. My 3354 class was entirely on group theory (the material in this class seems to change significantly between semesters). When I got to 4652, the first half of the class was group theory, and almost none of the group theory content differed from 3354. So, we essentially covered just as much group theory, but in half the time. It was also more or less completely self-contained. Again, if you do this, I would highly recommend self-studying an abstract algebra book a bit beforehand. I think 3354 would be an even easier class to skip than 3310.
Take 7340 instead of 3340. The content in 7340 is completely self-contained and is entirely proof-based, as opposed to the content in 3340, which more closely resembles a computation-based calculus class. It's also, in my opinion, the easiest first-year graduate course (even with a hard professor) and shouldn't require any self-studying to successfully skip to. It may be good to have taken or be taking 4310 concurrently, however.
I never took MATH 4651, Advanced Linear Algebra, for a few reasons. First, I heard of students in the years above me who got away with never taking it, despite it being a requirement for the DMP. Second, I took several adjacent classes that collectively covered all of the material in 4651. For example, my DRP project was largely based on an abstract linear algebra textbook, which I continued to read after I finished the project. I took MATH 5653, described in the course description as "Advanced Linear Algebra 2," and I took MATH 7751, which covers Jordan canonical form, for example (this is essentially the last topic you cover in 4651, as far as I know).
In general, if you're prepared to self-study to skip a course, go for it. Common courses people skip are MATH 3000, MATH 3250 (differential equations) in favor of MATH 4250 (Differential Equations and Dynamical Systems), and sometimes MATH 4770 (General Topology). The department is usually pretty flexible and will often let you at least try the harder course.
Lastly, I want to say a few things about some of the strategies I use to efficiently and effectively learn math:
Take notes in the margins of the references you use. I have hundreds of PDFs of math books and papers saved to various folders on my computer. Most of the PDFs are full of notes that I handwrite using the stylus from my computer. This makes returning to references after a long time significantly easier because you already know where everything is, you know the strategies of the proofs you marked up, and you filled in all the little details of the proofs. This is especially useful if you are trying to write a proof in your own words for a paper or a presentation.
When taking notes in a lecture, only focus on the big picture; don't try to write everything down. For example, write down the intuition the lecturer provides or what a complicated definition or theorem says in "plain English," the overall strategy and tools in the proof of an important theorem, the broader context or applications of a new result or definition, things to look up on your own later, and how a deep/abstract result or definition ties back down to "reality" or the initial problem at hand. In my experience, you can usually find all of the technical components you need for a class in either a textbook or the provided lecture notes. I didn't take notes for most of my time at UVA because I found it hard to take detailed notes of what was written on the board while also paying attention to what was said out loud. However, I recently started taking some very minimal notes, focusing on writing down what I likely won't be able to find in textbooks or lecture notes. I usually end up writing the most when the lecturer makes verbal remarks that aren't written down!
Broadly speaking, always look for the big picture! You will rarely be fed it directly in a class, but it will help you compartmentalize and remember the math you have learned. Math is huge, but doing this will make math seem so much smaller! You'll realize that many seemingly distinct problems in a given area or areas of math often reduce to the same sort of "toolbox" or strategies. Take time to reflect on your toolbox and the strategies you've learned.
Always try to ask yourself the following questions: Why should I care about this object/result? Why is this a natural definition/conjecture? Where is the first time a given assumption appears in a proof? Are there any important tricks appearing in this proof? How could I have come up with this proof myself? For the last one, a strategy I often use is to rewrite a proof backwards or reorganize it until every step seems almost obvious to me. This usually takes the form of starting with the original problem and continually reducing it to simpler problems and breaking a proof up into smaller pieces or lemmas. This is opposed to first proving the simpler problems and then stitching them together to solve the main problem, which is how a lot of math tends to be written. Pay close attention to whether a result is called a lemma, a proposition, or a theorem.
Sometimes you need to pick and choose what is worth your time. In contrast to the last point, sometimes it's best to just "blackbox" something. That is, to not worry about why a particular result is true, and to just use it for whatever you need. Maybe make an effort to come back to it later, and maybe not. Sometimes you just need to get something done and not get too bogged down with the details.
Learn from the experts. Go to your professors' office hours as much as you can. If you're completely stuck on a particular exercise for more than a few hours, go to office hours. Talk to your professors about content beyond the scope of the course. This will help contextualize the material and keep you motivated. Read the work of well-established mathematicians and try to figure out how they think about math (intuition, heuristics, etc.). Some mathematicians will even write about how they think about math. See Terence Tao's blog, for example.
Talk to your peers. My first year, I did most of my assignments completely on my own. However, when I got to my second year, many of my classmates and I quickly realized that we had more on our plates than we were prepared to handle alone. Working on exercises together allowed us to work more efficiently and to bounce ideas off one another. This also gives you a group of people to go to office hours with and or can count on to relay information from office hours to you. This is also how I made most of my friends in my second and third years. We often got dinner delivered to Kerchof as we completed our homework!