How to Code: Simple Data
Institution: University of British Columbia (edX)
Date: April 25, 2017 - May 23, 2017
Bio: A little over a year back, I took part in the course Systematic Program Design - Part 1 and had intended to visit the 2nd and 3rd parts of the course later. Since then, the series was condensed into two parts and made part of a Software Development MicroMasters program. Even though a lot of it is the same exact material, it was good to review the material before progressing a little further into the advance material.
To recap, How to Code: Simple Data is a course more about software architecture then it is about teaching basic programming. It lays out a systematic approach of using design templates and methodology to simplify the process of making large scale or complicated programs. Data design is used to dictate the form of functions, the world design is used to create the function stubs ahead of time, and test driven development is then used to complete individual functions.
Most of the lectures involve the Instructor walking through the design process with various examples, introducing new concepts as the material progresses. Students are tasked with programming along with the instructor so that they get used to working through the design methodology. The course also provides a large number of example programs for the students to work through themselves.
All of this is done using the DrRacket editor and the Beginning Student Language. The Beginning Student Language will be pretty basic for experienced programmers, and was a little frustrating at first. They don't use classes, arrays, or even for loops at this point in the class.
In fact, the method they use for list/arrays is one of the most awkward implementations I have ever seen. It is effectively a series of nested compound data of the form: (cons Data (cons Data (cons Data (cons Data empty)))) for as many layers deep as you have items in the list.
However it does serve a purpose. Instead of using for loops, the programs they use focus on recursive functions and self-reference. The nature of this data allows students to more easily visualize the structure of recursive programs, and complex programs in general. Which will probably become more relevant when they start introducing polymorphism and lambda functions.
Once they reached the last week of material, they did introduce a much more sane way to define list (list "data" "data" "data"), and upgraded from Beginning to Intermediate Student Language. So the limitations they put on the students early on seems intentional in a way that properly supports the material.
Still, it becomes increasingly clear that the strict methodology they teach in this course to template out programs will have to be changed once you switch to a different programing language or production environment. But the lessons you've learned in visualizing programs and taking a systematic approach to them will be a valuable tool in your kit going forward. I look forward to the next course in the series.
Accomplishments: The entirety of this course is self assessed and not all that strict in its grading. The final project involved using the design methodology to complete a simple version of the game Space invaders.