A Guide to Data Structures at Rutgers University
Intro
Ahh yes, the dreaded Data Structures. Referred to by many as the Computer Science weed out class. This separates the puppies from the bulldogs. The boys from the men (not really men just boys that managed to pass). And the "eh ill do it later" student from the "I should do this now" student. I will not lie to you, the class is really difficult but it is not that hard if you put in the work. Everything is graded very fairly and there are plenty of recourses online to get you prepared for any project or exam.
Even though I just finished taking this course there were a lot of things that I could have done in order to ensure a smoother ride throughout the process. In this blog post, I will discuss some of these things to ease your transition from the introductory classes.
1. Understand the grading system
At the time that this is written the grading system is pretty simple and fair based on my experience. Obviously, this may change in the coming semesters but overall I don't think any changes will be major and the class should maintain a similar structure.
There are a total of 1000 points possible for Data Structures. The point breakdown is as follows:
- 400 points for projects (5 projects 80 each)
- 150 points for midterms (2 Midterms at 150 points each)
- 300 points for the final
Each midterm is 75 points each and the final is 150 points. The grade you receive is multiplied by two on every exam when it comes to the total point score. (Example- A grade of 100/150 on the final is 200 points)
2. Historical grade cutoffs
These are not set in stone. These are solely based on my own research from professors, older students, and various Reddit posts. Please take this with a grain of salt as these are not guaranteed by any chance. It is entirely based on the average and how well everyone performs for the given semester.
- A - 850 to 880
- B+ - Low 800s
- B - Low 700s
- C+ - Low 600s
- C - Low 500s (Magic number yay)
To pass the class your safest bet is getting above 500 as that seems to be the cutoff for most students. Its often considered to be "the magic number" for making it through the class. However, this isn't always the case but I would bet that it is pretty safe. The magic number varies from year to year, so be careful. For me personally, the magic number was 480 and for others, it was as high as 520, so try to stay above the average on all assignments. Also, some professors do not give out D's and simply fail you for getting lower than a C, keep that in mind for your GPA's sake.
3. Strategies to make sure you pass
Please understand that your goal should not be to just pass. You should honestly aim to learn as much as you can and to try to truly understand the concepts you learn. This is because Data Structures (and algorithms) are core concepts in computer science and you will see them repeatedly come up for the rest of your college career as well as for internship/job interviews.
Given that info, if you are desperate to pass or are only taking this class out of interest, there are strategies you can follow to get the highest possible grade.
The strategies are as follows:
Projects
These are huge. They make up a total of 400 points out of the 1000 and if you manage to ace everyone you are pretty much guaranteed a C as long as you manage to do okay on the 3 exams. How do you do well on these projects? Glad you asked.
- Start every project the day you are assigned it. You heard me. The day of. Some people will tell you to start it early but I am telling you right now that if you are struggling in this class then "early" is not enough time. When I took the class it took me at least a day just to understand the instructions. Start them right away and save yourself the anguish of trying to write 500 lines of code the day before the project is due.
- Ask for help. The projects are hard and confusing. You are going to make a lot of mistakes and make them often. The best course of action for dealing with this is to ask your professor or TA for help. They will guide you in the right direction. Go to their office hours show them your code and they will help (that's what they are there for). They might even point out some edge cases you might have missed which will save you valuable points when the project is graded. You can also check out The Cave, you will always find someone willing to help you there.
- Do your research on the specific algorithm that you just learned in class. In my experience, you will learn a specific algorithm or data structure and once you have moved on to the next topic you will have a project on the topic you just learned. Therefore, whenever you are assigned a new project look up the last topic you just learned and do your research. Often times you can find the exact algorithm you need in pseudocode on the internet. Many past projects are also available on GitHub. Obviously, I do not condone any sort of cheating or copying (Most of the projects are changed anyway), but every once in a while some of the projects have similar algorithms to current ones. It might be helpful to read some of the GitHub code to understand what the algorithm is doing in actual code rather than pseudocode.
- Test every test case given in the instructions. Once you do that start thinking of all possible edge cases and fix your code in order to account for them.
- Once you get your grade they will release the test cases they used. Double-check your program to make sure that they didn't grade it incorrectly. I managed to get a few points back this way.
Exams
Obviously, exams are very important as well. In my opinion, these are far more difficult than the projects as they are more conceptual and often have far less logic and coding problems. There are several things that you can do to make sure you are really well prepared. Those things are as follows:
- Less than 25% of each exam involves coding. Therefore I would focus on the other 75% percent of the exam more which usually involves time complexity and space complexity.
- Do all of the problem sets every week and make sure you understand all of them in and out. Almost all of the exam problems come from these problem sets. You will really suffer if you don't do them. Some of the exam questions are exact copies and others are slightly different from the problem sets. That is why it is important to do every problem set several times and to really try to understand every underlying concept in order to get to the solution. The solutions are usually posted by the end of the week, but make sure you do them without looking at them first otherwise it's hard to tell whether you actually understand the problem.
- Always write something down for the coding questions. Even if you have no idea what you are doing and you have a very vague idea of what the algorithm looks like, try to mimic what you remember about the algorithm. For example, If you remember that the algorithm had a nested loop, then try to write it down somewhere in the code. Some TA's will look if you had the right idea and will end up giving you more points.
- COMMENTS. Also for the coding questions, comment on what your code should be doing. Similar to the point above, commenting on what you think the algorithm should be doing can often help you get extra points even if your code is wrong. Some TA's will help you out if you know what the algorithm entails but you don't necessarily write it down in code properly.
- Focus on the current semester problem sets rather than past practice exams.
- Fight for every point. Never leave a section blank. Write anything that you think might be what they are looking for. Since points are doubled, 2 extra points mean you are 4 points closer to reaching the magic number. Always try.
Other Important Details
This is pretty much all you need to know in order to do well in Data Structures. It is a difficult class but it is entirely manageable and believe me when I say that you will learn a lot in the process. Give the class the respect it deserves and it will reward you in the end. These next few details are going to sound very obvious but are important enough to be reiterated.
- GO TO CLASS. I honestly thought that I could get by Data Structures and not go to class. A lot of the material is online but without a consistent schedule, you are going to push things back to the point where you get overwhelmed and you do not actually learn what you need to be learning. Online recourses are very good, but going to class will guarantee you a better grade in the long run.
- Your recitation really depends on the TA you have. Some are really great and others are okay. Considering the fact that all you really do is go over the problem sets it isn't really necessary unless you are really lost. In my opinion, I would go to the first few to see how good of a teacher your TA is and then consider not going unless you really need help.
- A lot of people cheat and get caught so don't risk it. Otherwise, you'll be set back a whole semester and you will most likely bomb any CS interview.
Conclusion
That's it. Good luck. I will update this blog post if something is incorrect or missing.