Definitely a hard class. Also, I'm fairly certain that this is Bloomfield's last semester teaching it. Regardless, it'll be a great class no matter who teaches it because Bloomfield has worked so hard to absolutely perfect the class. It's a really hard class. It definitely should be worth 4 credits. With that being said, if you work hard and complete all of the labs, following the directions exactly, it's relatively easy to get a good grade in the class (good grade being B or better). I put so much time into the labs and achieved nearly a 100% grade for that section. This allowed me to get average grades on the exams but still receive an A- with the curve. I think the main reason why people complain about this class is that they aren't willing to put the time in. Put the time in, and you will be rewarded.
Throughout the semester, you will absolutely hate life, but the feeling you get when you walk out of the final exam is incredible. I teared up the last day of lecture because I was so proud and amazed that throughout the blood, sweat, and tears, I had completed the class. Also, don't let the time allotment indicated above scare you. It's not 50+ hours a week. It's more like between 8-15 hours a week, depending on the lab. Only ~3 labs will take 15 hours. Most are between 8 and 10. Take a light semester and you'll be fine.
Grade Distribution
No grade data available
145 Reviews
Ton of great reviews on the class, so I'm not gonna waste your time with that. Instead, I'll talk about my personal experience. This was truly a great class. I learned so much more in this class than any other class in the university. It was an awesome feeling, but it does come at a cost: you do much more work in this class than any other class. Few of the topics are considered "hard." I would say the most difficult part is time management- there's just so much time you have to invest for this class. Bloomfield and Floryan are extremely knowledgeable and have a lot of field experience. This is the CS class that will show you whether or not you're a true CS major. If you love CS, you will enjoy every bit of 2150.
Great class that really taught me so many basics of CS in general. The labs are challenging and can take a lot of time, but they help emphasize the elements taught in class so much.
Great Class, take it with Bloomfield because he's taught it for so long, so he really knows how to tell you exactly what you need to know and explain it well. Both Floryan and Bloomfield are great people though, so don't worry if you can't go to his lecture. The most helpful thing for me to look at for the reviews was a good overview of some of labs, so that's what I'll do.
1. Introduction to C++: Intro to virtual box, make sure you actually read through all the info or you could get confused on very simple parts of the lab.
2. Linked List: Get a TA to explain how to write an insert method and you will be golden. Not actually that difficult, I think most people make it harder than it is. YAY POINTERS!
3. Stacks: I thought this one was harder than linked list for some reason...not sure exactly why, but most people find this easier than linked list, and get it done pretty easily.
4: Numbers: Not much coding here, wasn't really difficult, just use an online IEEE calculator to check your work and you should be good.
6: Hash lab: this one has a lot of hype, honestly I don't think it's that difficult. They make it a lot easier by giving you a way to get all of the combinations of letters out of the grid for you. I spent a decent amount of time on this lab, but it was mostly because I was so confused about what was supposed to be so hard about it. Basically, don't overthink it. This was one of my favorite labs because the postlab was just making it run faster, which was actually really really fun.
8 and 9: assembly sucks IMO, so have fun, step through the lines and keep track of what is in your registers if you are having trouble debugging
10: Huffman Encoding and Decoding: Some people thought this was really hard but it's not too bad. This one happened for us over thanksgiving (womp) but if you get a good start on it, it's not too bad.
11: Graphs: pretty open ended, you can pick however you want to solve the problem, I used an adjacency matrix which worked pretty well, and then you have to use doxygen to create documentation
12: CONGRATULATIONS!!! LAST LAB, it's not difficult and should not take long at all, GOOD LUCK ON THE FINAL :))))
I took Data Structures with Aaron 3 times getting an A- the last time I took it. Aaron is very systematic and detailed in the way he goes through lectures, he has has been teaching this class for many semesters. Review and have lecture slides ready before lectures to mark up during lectures and take advantage of the lecture recordings to review and reinforce course material in preparation for exams. As far as extensions on work are concerned he denied me an extension although I had a Drs note, he claimed that it would not be fair to other students, but according to one of his TA's Aaron did grant extensions on work to other students that semester. To me Aaron's actions are those of a hypocrite. As far as office hours are concerned, for some reason he will go to the office hours of other professors, like Abhi Shelat, and talk to Abhi during his entire office hours session while students are waiting to ask Abhi questions about the difficult material in his algorithms course, I personally witnessed Aaron doing this Fall 2011. However, regarding Aaron's office hours you are in luck if you are a female student. I have personally witnessed him complete an assignment for a group of female students while refusing to give me any assistance with my course related questions. It seems to be the norm in the UVa CS department to give female students preferential treatment, credit for work they haven't done and grades they haven't earned. Perhaps this is in exchange for a new building from Teresa Sullivan and Helen Dragas or to push the females in STEM agenda but this practice cheapens the value of the UVa CS degrees obtained by students like me that have earned every bit of that degree. Perhaps these female students are being prepared for management jobs where they really don't need to have the knowledge because they will manage those that can actually do the work. I guess this is one way to empower women. I am a non drug using heterosexual Latino male with a large amount of student loans, so I know I was the lowest on the handout priority list at UVa, but just because I don't remind some professors of their daughters or come from a family that can afford to pay UVa tuition or because I am not a homosexual or look like a geeky nerd that has been picked on his whole life shouldn't mean its appropriate to discriminate against me. In Aaron's defense, a professor at UVa once told me that the school makes them do stuff, if that is the case then UVa is a miserable institution that forces people that work for them to discriminate against certain types of people for one reason or another, in this case the discrimination took place against a heterosexual Latino male trying to obtain his degree to better himself and the options for his family. Any individual or institution that finds this to be a worthy cause to discriminate against someone for, is truly miserable. Or perhaps racism against Latino's is not considered discrimination at UVa or Virginia, only racism against other types and not giving handouts to females is considered discrimination. You can't blame Aaron for wanting to be like the rest of the UVa and Virginia community, making sure heterosexual Latino males know that their place is either in landscaping or janitorial services not in academia make believe thomas jefferson statue worshiping land. I wrote this review back in 2016-10-15 I don't know why I can't find this review when I search Bloomfield and CS2150, perhaps it was taken off of here? I also can't find a similar posting in college confidential, some people or entities are good at hiding the truth.
CS 2150 is the best class I have ever taken at UVA. Here's why:
1. The professor (Aaron Bloomfield) is amazing at teaching the course. He knows all the material inside out and can answer any of your questions. He's been teaching the course for like 10 years now, and has developed a very solid curriculum. He also makes the lectures interesting and keeps you engaged.
2. The course is just so well designed. Everything you need is laid out for you, grading is clear, you get to see ALL past exams to prepare adequately. Basically, what is expected of you is told to you. The main problem students have with the course is simply not putting in enough time. That is why the GPA for this course is so low (At least I believe). I think 75% of students can get an A or A- in the class, but that requires at least 10 hours of work every week. Since most kids don't put in that much time, their grade in the class suffers.
3. You figure out if you really like CS. Every week you're doing a lab; there's almost no break between labs and learning something new. That being said, this tells people if they really like CS or really hate it. For example, one of my friends could not stand the class and decided to quit CS, but I personally found myself to like it even more. The class really teaches the foundation of data structures and the "core" concepts that I think every aspiring CS major should understand.
Tips to succeed in this class:
-Go to lecture! Bloomfield makes it worthwhile to go
-If you signed up for Mark Floryan's section (sometime he teaches the course as well), try to go to Bloomfield's lecture. I found Bloomfield to be much more knowledgable about all the topics. Floryan doesn't usually teach the course so he tends to be rusty on a lot of topics and often could not answer questions that we asked of him.
-Ideally have some friends in the class that you can collaborate with on the labs. As long as you're not directly comparing code you can work with friends on the lab - share ideas, high-level implementation, etc. This is really helpful as multiple streams of ideas helps when some of the labs can be tough.
-If you're on the waitlist, don't give up as usually many people drop the class after the first lab. Even the professors scare you and act as if you probably won't get into the class. But every semester 99% of the kids who want to get into the class get in. You (most likely) will get into the class.
This is a required course for CS majors so there is really no point of reading reviews except to choose which professor to take this course with.
Take it with Professor Bloomfield because he basically created computer science.
Tips to succeed:
Do the prelab on Sunday (or Saturday).
Do the inlab before the actual lab and if you have questions, ask TA during lab.
Do the postlab right after the actual lab.
First midterm: study past midterms for 2-3 days and get an 85-90%
Second midterm: study past midterms 75% of the time and then study his lectures (video recordings + slides) 25% of the time and get an 80-85%
Final: study past finals 25% of the time for the gist of what he can ask and what the questions will look like. Then use those finals' questions to plan what you're ACTUALLY going to study. The final will be completely different so you should prepare by listening to lecture, taking crazy good notes, and reading slides. Then use Google and form a study group to study the material for about 3 days.
Labs are very important. Make sure you do them beforehand and you will be sexy.
Don't f*** around and skip lecture. You're going to have to listen to lecture or lecture recording anyways, and it's better to hear the information twice. ALL THE ANSWERS TO EXAMS ARE IN THE LECTURE. The slides only give you 70% of the knowledge you need.
Have fun spending 10 hours a week on lab! huehuehuehueheuhuehue!!!!!!11111oneoneONEONEONE
It was a great course. Take it and feel sooper dooper smart!
This is not a course for lazy people. If you wait until the last minute, Bloomfield will crush you faster than a C program can print "Hello World!". On the other hand, if you are consistent and dedicated, you really don't have anything to worry about. The course is highly structured, and it's easy to get into a rhythm and start cranking out 10's on the labs. The released exams make a huge difference, I studied from those exclusively. The exams tend to cover a very small percentage of the material actually taught in the course, but they are very consistent and you will likely see questions from previous exams on your own tests. One thing to watch out for are the booby traps: honest and trivial mistakes can earn you a zero on some significant assignment.
Bloomfield is great, by the way. He is really good at teaching this course, very dedicated, and humorous a lot of the time. Also likes to say "more better," so English majors might want to avoid this class.
Here's a little review of the labs and their difficulty:
1. Introduction: If you think this one is hard, there's always room in finger painting.
2. Linked List: Challenging for those of you new to C++; pointers are really the biggest difference from Java (or Python or whatever they teach now), so if you understand those it's not too bad.
3. Stacks: Not all that intense, certainly easier than lab 2. The UNIX tutorial is a nice added bonus here, this stuff is really useful. Stacks are about as simplistic as you can get.
4. Numbers: This one requires more reasoning on your part, not programming. That might make it easier or harder for some people.
5. Trees: You need to modify his code for this, depends if you like to do that. The Makefile tutorial is extra detailed and hard to sift through, but it is very important for later labs. (Realize that he could have made this lab much, MUCH more difficult.) This one has a report.
6. Hash Table: Here it's a good idea to start early; the problem itself is not overwhelming, but if you're not used to writing moderately-sized programs you might have a little trouble. The amount of code you have to write is not really that intense, mine was ~350 lines including whitespace, ending curly brackets and comments. You might want to use the diff command on your program's output before you submit the prelab, this is an easy way to check if it's right that for some reason is only introduced in the in-lab. This one also has a report.
7. Machine Language (Itty Bitty Computing Machine): Be careful here; it's easy to waste a lot of time if you don't plan well for these problems ahead of time. B is your friend. In case you were wondering, this one has a report.
8. x86 Assembly Language Part I: If you get stuck this can take a long time, if you don't it's really simple. Don't forget the report!
9. x86 Assembly Language Part II: Really a continuation of lab 8, not too difficult because you've already done similar stuff. Those similarities would include a lab report.
10. Heaps and Huffman Coding: Similar to lab 6, just a different problem and a different data structure. How else are they similar? They both have a report.
11. Graphs: Yes, this one also has a report. Apart from that, drink plenty of water and you won't get dehydrated from the crying. Doxygen is a little tricky, especially since he says to "use stuff we didn't teach you," which doesn't help much. But I got full credit, so it's not impossible.
12. Objective-C: NO MORE REPORTS! The euphoria of freedom will billow your sails into your infinite domination of the helpless final exam.
One more thing: if you get in trouble at the beginning, don't give up. In mid-September I had a 67 in the course; at the end I had a 98.
A great course, and a great lecturer. You will learn a ton, and if you're on the fence of doing CS or not, this will basically decide it for you because this is the heart of CS. You do some cool labs and learn some cool stuff, but apparently the course is getting revamped and possibly changed in a semester or two so double check that. If it holds true, the 2nd, 6th, and 10th labs are all pretty hard, so start those early. If you get the opportunity to take the class, then do it though because this was the most important and knowledge-gaining class I've taken so far.