This course is not fundamentally about the Homework or the grading system at all but instead it is about the fundamental differences between programming languages, how they started from Functional weak typed languages up to strongly typed static programming languages. You are introduced to functional programming, dynamic programming and tail recursion; you will understand what is currying and what a scope (dynamic and lexical). You will understand What is object oriented programming about and why was it indroduced and what problems it specifically solves. Finally at the end of the course, Prof. Dan will compare the paradigms with each other so that you get the full picture. Furthermore, in Part C, he didn't use a programming language to describe subtyping because at this point you knew what this course is about.
This course fundamentally makes you realize why and what any programming language acts in a certain way. So, if you see yourself casting Object arrays in java into another type because you can't instantiate a Generic class as generics are statically checked while casting is dynamically checked and it is not type-safe to instantiate a generic array (check this stackoverflow anser for further description). So when you are typing in C and you see that "It is a weakly statically checked language" you realize that a lot of false positive can happen and you need to make sure yourself that nothing fatal goes wrong.
My Solution & TA solutions for:
Other Solutions on Github by doct0rx, sefakilic and diversario (not all solutions are correct) as we were required to grade other student's code to learn from them.
Assignment was just an introduction to ML functions, Tuples, Lists and much more syntax and semantix. Assignment date conversion and finding oldest date between two dates and much more.
Assignment was about Datatypes, Pattern Matching, Tail Recursion and so on. We were supposed to swap first name with another name. We were also supposed to implement a simple solitaire game that plays and calculates a player's score.
Assignment was about First-Class Functions & colsures (AKA Blocks in Ruby). Assignment was about finding only capital letters, longest string from a list of strings and the longest capetalized and so on.
Part A Final Quiz.
Assignment is about Delaying evaluation, Memoization, Macros, thunking and so on, using Racket Dynamic programming language. Assignemnt was about to write a sequence function that takes start, end and step to produce a list (E.g., sequence 3 11 2 gives 3 5 7 9 11). Also write a map function that takes a list of strings and only prints the suffix. Write a stream of steps and much more in the HW assignment.
Assignment was the hardest as it was supposed to be an interpreter mimic but instead of using symbol tables we replaced variables (keys) with their associated value. We were supposed to know and implement a static interpreter in a dynamically typed language to understand the fundamental differences. The interpreter was for a language called MUPL (Made up programming language) by Prof. Dan.
Part B Final Quiz.
Assignment was an Intro to Object Oriented programming using ruby; subclassing and dynamic dispatching and so on. We were asked to implement a graphgical tetris game.
Assignment was about Object Oriented programming using Ruby Programming Language to show the fundamental differences between a strong statically typed language and a dynamically typed language. We were asked to implement the same assignment twice; once for each language to illustrate the differences and when to use each paradigm.
Final Exam of the entire course.