Monthly Archives: January 2015

Course Review: CPSC 110

Computation, Programs, and Programming 

“Trust the natural recursion!”

Text: (online videos via Coursera on Systematic Program Design)

Prof: Dr Ronald Garcia

Ron is a cool guy. Great sense of humour. He spent a lot of time answering basic questions and doing (generally) simplified examples which annoyed some, since they had already grasped the basics from the videos, and wanted him to explain the more complex aspects of the course. I didn’t mind, since I failed to fully grasp some of the basics from the videos. And sometimes Ron’s simplifications can be applied to a more complex setting. For example, the way he explained built in abstract functions was simple but did not leave out any nuances.


I worked very hard in this course. Some people who had serious prior programming experience, or got really addicted to programming once initiated by this course, found the assignments and tests a breeze. I did not. I got a very good result, but I think that was a result of generous scaling and a lot of hard work on my part. Problem sets are increasingly difficult. Though the first midterm is really easy if you made the faintest attempt to keep up with the material, the second midterm and the final are exponentially harder.

Key Concepts

HTDF recipe

HTDD recipe



Hard Concepts

Work-list accumulators: Required me to fundamentally alter the way I saw the structure of  my template, which was a challenge. Lots of moving parts as well.

Back-tracking search over generated trees: Most finals have a question on this, pretty tough, with so many moving parts, but the structure is pretty repetitive.

Abstract fold functions: Making one is easy, but using one to solve a problem is a challenge. Requires practice, insight and being methodical.


Generally okay lab, since the TA’s are on hand to help. This was in stark contrast to the problem sets which are generally harder, and you have to work on individually. I found the first few labs super-simple, but the one’s after the first midterm increased dramatically in hardness. I generally did not come close to the the 3-hour mark, though many people often remained till the end and many others would finish ahead of me within the first 30 minutes.


If you are not really  into programming, or have no serious programming experience, be prepared to work very hard to get the most out of this course. I honestly felt that the course was rushed and I didn’t have time to digest what I had learnt.

Course Review: CPSC 121

Models of Computation

 “The laptop that you are using is a lot more powerful than a DFA!”

Text: Discrete Mathematics with Applications 4th Edition by S. Epp (see website for other options)

Prof: Dr George Tsiknis

George Tsiknis is the kindest prof in the world. His amazing accent, and personal warmth really leave an impression. He also has a great sense of humour. Its unfortunate that he had family emergency towards the end. Even though he was really going through a lot, he came to class and made sure we were ready for our final. Great guy. Some of the questions in the slides are worded vaguely, making it difficult to get the I-clickers, but they are only for participation anyway, so its all good.  Really willing to slow down and take questions if you need help, in class. I suppose tutorials and office hours must have been equally beneficial.


I get the sense that the topics on this course are very deep. That said, we skirt at the surface of most of these topics, and as a result, the course is quite straight-forward for the most part.

Key Concepts

Elementary Logic

Proof Strategies

Logic Circuits

Hard Concepts

Algorithm Efficiency: The rigorous definition is quite long-winding. Knowledge of Big-Oh notation from Calculus class could help.

Interpreting Sequential Circuits: I found these really tricky in the lab and on exams. They are kind of puzzle like problems- in that you either get them or you don’t- but you can spend a long time just making sense of what’s going on, even if you understand the fundamentals really well.

Predicate: Conceptually easy, but also easy to make careless mistakes or you can confused in half-way through your own translation.


Fun lab. I kinda freaked out the first few days since I had no clue how to operate a Magic Box or breadboard, but after a while the labs started making sense and I started to enjoy simulating circuits with Logism (which is freely downloadable, btw) or cracking circuit puzzles. Ultimately you simulate a working computer, but it is still a long way a way from the real deal. Pre-labs are not too intense. Most labs are with a partner, so efficient teamwork can get you done a lot faster.


Fun course. Useful in learning basic logic, mathematical proof and simple models of a computer. But I get the feeling that the computer models we use are so simplified that they are ultimately interesting but have appear to have little real world application. I was waiting to connect what we learnt in class with my PC at home but that happened only superficially for me…The surprising immediate application I got out of this class were proof strategies that helped a lot in Math 121.