Browse By

Programming Design Paradigm (PDP) Course Review : What, Why, and How to Get an A

Recently I noticed some discussions in NEU CS Facebook group about people’s comments on the PDP course. As always, there are people on both the positive and negative side. I’d like to join the discussion but I think writing in my blog would be better so people can read about it without joining the group.

I took PDP in Fall 2010, Prof. Mitchell Wand and Prof. Riccardo Pucella taught the lecture, but I believe the grades came from Prof. Wand based on the codewalk scores. Personally, I thought I and my partners did pretty good on most codewalks and I got A as final grade.

In this post I will tell you more about the setup of the course when I took it, why I think it’s one of the best course in MSCS program, and everything that I believe matters to get high scores.

What is PDP?

PDP is the first core course every new NEU MSCS student should take on their first semester. The course is actually composed of two section, the lecture (CS 5010) and the recitation (CS 5011).

In the lecture, as with every type of lecture, the Professors will explain the lessons, answer questions, and discuss concepts that students would need to do the assignments.

The recitation time is where the students will present the assignments in front of the TAs (PhD students) and graders. The students will not only be graded on whether the code run and complete, but also on how they explain the code. This session is called codewalk.

When I took the course, all assignments need to be completed in a week (or less) and everyone will get a partner to do the assignments (pair programming). They encourage everyone to do the assignment ONLY when the partner is present, which should catch errors quickly and made both of them know the codes well.

No students are allowed to copy or discuss details of the assignment to other students if they’re not partners, the penalty for this is a zero score on the assignment.

The language used in the course is Scheme (also called Racket now), a dialect of Lisp.

The textbook is How to Design Programs. It is available at Amazon and freely at website.

How to get an A

1. Follow the Design Recipes

This is mandatory, disregard this at your own peril. Although it has a funny name, it is no laughing matter. In fact, more points are usually lost from not following the design recipes than from other reasons.

Follow the design recipes exactly starting from the very first assignment in your code, and you will save the later agony.

2. Google and StackOverflow are useless

Since Racket is not commonly used in the industry, you won’t get StackOverflow answers to your questions, so forget on the idea of finding the code snippets for your assignment answers online. Spend time on reading the textbook, discussing with your partner, ask the TAs, and code until it works.

3. Don’t underestimate the first assignment

One of the most common mistake that I notice from my batch is they messed up on the first assignment. Don’t do what they did. In fact, you should spend a lot of time for the first assignment because, high chances is, you never use Racket language before. So give yourself enough time to learn the DrRacket editor and syntax.

4. Don’t underestimate the first FEW assignments

Again, the basics extend into the first few assignments as they will introduce you with more data structures (and their recipes). Getting high scores on first few assignments will give you confidence and peace of mind for the rest of the semester.

5. Take a light course along with PDP

You will spend a lot of time doing the assignments, and you will also need to adjust your life on the first semester at the MS program (and maybe in Boston). With so many dynamics, taking a light course as the second course is what you want to do. Light courses are courses that are non-CORE, has no prerequisites, and usually has a “database” or “fundamental” word in it.

Why I like PDP?

You might have heard about how hard the course is, yes it’s not easy and there are many times when I’m still awake and code until 3AM in the morning, but it’s manageable and it gives most rewarding experiences.

The course is hard because of several reasons:

  1. Hardly anyone ever use the programming language (Racket).
  2. It requires very strict software development practices.
  3. The codewalk grading can be subjective.

Compared to most other courses, PDP emphasize principles rather than techniques.

What’s the difference? Principles are always true for all programming language, while techniques are specific.

Principle is how we should write clear comments and multiple test cases for every function.

It is how we should keep every function simple and do one thing.

It is how the input data structure affects the function design.

It is how to write a readable codes and good software.

I can surely say that it is easily one of the best course (if not the best) I ever take from the MSCS program at Northeastern.

I know some people will argue this and I’m may be biased because of the final grade I received. But it is the course that changed the way I do programming for the rest of my programming career.

If you have comments or some more tips to pass the PDP, feel free to drop comments below! 😀

14 thoughts on “Programming Design Paradigm (PDP) Course Review : What, Why, and How to Get an A”

  1. Sai Pendela says:

    Djito, nice attempt. I second you completely…

  2. Anon says:

    I agree, but only because I think what you say is true. Almost everyone I knew hated this course for the codewalks. But I think that is the best thing the course offers which teaches you to not only to write good code but also present it in public which is scary and forces you to do even better.

  3. Trijito Santoso says:

    @Sai, thanks man! 😀

  4. Trijito Santoso says:

    @Anon, you’re right, the codewalks is never easy because we got criticized for our beloved code, but it’s a necessary evil.

  5. Harsh Gada says:

    Well written Djito! And I believe this is one course you will never forget in your life for all its experiences, good or bad!
    I think the new students receive a lot of negativity before they begin, they should judge it on their own experiences. This will surely help them!

    1. Trijito Santoso says:

      @Harsh, thanks, we certainly had that ‘bad’ experience that we’ll never forget! 😀

      You’re right, we should encourage the new students and let they ‘codewalk’ through it.

  6. Eric Moras says:


    I could never agree more so I will not add anything to what you have said. However,

    Pair programming is crap.

    1. Trijito Santoso says:

      Thanks! But you disappointed me, I’m expecting more of your ‘cut through the heart’ comments in Eric Moras’ style. 😀

      We all had both good and bad experiences with pair programming, and it totally sucks if we got unsuitable partner. But for me, I made good friends with all of my partners. So it might be crap, but totally worth it!

  7. rohan joshi says:

    Hey, a great blog and very helpful. What do you mean by design recipes? (the first point that you are making).

    1. Trijito Santoso says:

      Thanks for the kind words! You will know more about it from the first lecture. For now, think of it as a list of items you should ALWAYS do when doing the assignments.

  8. Anand says:

    Is it mandatory to only use the language Scheme(Racket) for this course? can we use other functional programming languages such as Scala or Haskell?

    1. Trijito Santoso says:

      @Anand, yes, it is mandatory when I took the course in 2010.

  9. Prema says:

    This course has ruined my daughter’s self confidence who is actually an intelligent and hard working girl. The TAs are least helpful.

    1. Trijito Santoso says:

      @Prema, I’m sorry to hear about your daughter’s experience. The course requires a significant amount of study hours because it’s not an easy one.

Leave a Reply

Your email address will not be published. Required fields are marked *