Also known as the official DrBracket survival guide.
Introduction
As the department’s de facto introduction to Computer Science, many UBC students become well acquainted with CPSC 110 and the infamous DrRacket at some point during their time on campus. The course presents a non-threatening introduction to programming and basic computer science concepts such as graphs, recursion, and binary search trees. Students learn to write code using several Racket derived teaching languages that ease first timers into the process and become progressively more complex through the term.
The course is designed to start slow enough that students from any background can follow along, with no prior programming experience required. However, this should be in no interpreted as CPSC 110 being an easy throwaway course, as the first several weeks are deceptively simple, with difficulty quickly ramping up soon after the first midterm.
It’s much easier than you’d think to become the person asking how to print “Hello World”, three weeks out from the final. Fortunately, Racket is a relatively forgiving language to pick up, so once you wrap your head around polish notation and the insane amount of brackets required, you’ll be a programming pro in no time!
Incidentally, the course textbook also happens to be called How to Design Programs. "How to Design Programs" it may teach you, but please save yourself the 50 dollars and pass the textbook over. You'll hardly reference the textbook at all throughout the term, plus you can find a free online copy here!
Grading
Evaluation of student performance is split across several different methods, with students taking two midterms and a final in addition to mandatory weekly labs and problem sets. In addition, some recent (as of Summer 2015) terms have taken clicker questions and Piazza participation into account as well.
Predicted Mark Breakdown:
Problem Sets: 20%
Labs: 10%
Clickers: 5%
Piazza Participation: 5%
Midterm 1: 15%
Midterm 2: 20%
Final: 25%
The first midterm tends to be generally quite easy as it mostly covers Racket syntax and basic programming practices, although averages tend to plummet by the second midterm as students get into the meat of the course. However, it is generally accepted that neither of the two exams come close in difficulty to the final, with some telling stories of Harry Potter themed exams as cryptic as something out of Hogwarts itself.
On the bright side, the scaling fairies usually tend to sprinkle a generous helping of magic before final grades are released, so I wouldn’t worry too much. Study hard, ask questions on Piazza, and don't be afraid to ask your TAs for help, most of us don't bite! With plenty of resources available, I'm sure that the vast majority of you won't have too much trouble with the course.
My Experience
As for my personal experiences with CPSC 110, I took the course with Meghan Allen in my first term at UBC during Winter 2013 and later went on to teach the course in 2014.
One thing that initially surprised me in my first term was that the class uses a flipped classroom model, wherein the vast majority of learning occurs outside of the classroom through online Coursera videos. Class time is instead dedicated to problem solving sessions and exploration of more difficult concepts, which should theoretically provide more opportunities to practice programming skills and master course material.
Whether this method of teaching translates into practical results is debatable and really depends from person to person, but one thing's for sure, you most definitely won't want to fall behind the pace of the course. From the halfway point of the term onwards, the material quickly picks up pace and I have no reason to believe that the instructor-provided figure of 48 hours of work for each week missed is inaccurate. Don't let that figure scare you too much though, as long as you commit to watching the videos on a regular basis you'll have no problem following along in class.
Labs were relatively simple and fairly enjoyable to do, plus the TAs were a joy to work with so don't hesitate to ask for help. For most labs with the exception of the Snake labs in the middle of the term, you'll most likely finish well before your three hours of lab time are up, so I wouldn't worry too much about scheduling a lab late in the day or in the evening. They're also excellent indicators of overall performance in the course so I'd definitely recommend asking your TAs for help if you're struggling with any particular concept or unit.
As for the dreaded problem sets, I can say as both an instructor and as a student that they are definitely tough to do and even more tedious to mark. However, they are an integral part of the learning experience, so do try to complete them to the best of your ability. They're marked with a rubric that heavily favours solutions that follow the HtDF recipes, so even if you can't find the time to write a full solution or have no idea where to start I recommend writing out your templates to at least salvage some marks. I can't stress the importance of doing your problem sets enough, I've seen countless students miss out on an A or lose a full letter grade to missing problem sets, you probably don't want to be that person.
It's also a good idea to do your problem sets individually as the department does check for plagiarism and you really don't want to end the term with an academic dishonesty hearing, trust me those are seriously not fun. I know the instructors drill it in you at the start of the term, but it does happen much more often than you'd think, so be safe and write your own code.
Closing Thoughts
One of the most common complaints that I hear about 110 is that it's a pointless course because you don't learn a "real" programming language like Java or C++. For a long time, I also echoed that sentiment myself. However, looking back years later, I do believe that the course served its purpose well as a solid introduction to computer science and I would definitely recommend that anybody interested in CS give it a shot. For a course that primarily caters to those with no previous exposure to programming, DrRacket packs a fully featured language in a simple and easy to use development environment, making it perfect for taking those crucial first steps
If you have any further questions about the course itself, what it was like to teach in the department or anything else tangentially related, don't hesitate to leave a comment below or shoot me an email.