“One of the best programming skills you can have is knowing when to walk away for awhile.” – Oscar Godson
There were many times throughout this course where I did walk away, and it is a sign of what a great course it is, that I kept coming back to it. That or the fact that I had to pass it.
Anyway, CS61BL is a great course and continuation to the Digital World course taken in term 3. It is a rigorous 8-week course that serves to further build on concepts of Data-oriented and Object-oriented design. It introduces various data recursive data structures – Lists, Trees, Heaps and how best to utilise each one efficiently, in terms of runtime and design.
The workload of the course is intense, and it is recommended to take it with another easier course, so that sufficient time and effort can be given to the difficult concepts of the class. Throughout the 8 weeks, there will be 12 hours per week in lab, one two-hour lecture per week, four exams in the 8 weeks of the course (on every alternate week), and three projects in the 8 weeks of the course. The above is in addition to the work assigned in lab.
Of the various algorithms taught in class, my favourite would be Dijkstra’s Algorithm. It helps to find the shortest route to a destination from a source. When first confronted with this task, the natural instinct is to consider all routes, and then determine which is the shortest route. However, that method will clearly not work once the scale is increased.
The above is a diagram, where every circle is a node, a line connects two nodes and the number above the line represents the distance. For example, 0 and 1 are both nodes, connected by a distance of 4. Dijkstra makes the simple but key assumption, that every node only needs to be visited once to determine the shortest distance, and if the destination has already been visited, the shortest path is found with no need to visit the other nodes. The order in which nodes are visited, is determined by their distance from the source, and once visited the previous node visited is the parent of that node.
For example, if 0 is the source and 8 is the destination. I would first visit 1 as it has a distance of 4. This would be followed by 7 (distance of 8), 6 (distance of 9), 5 (distance of 11), 2 (distance of 12) and finally 8 (distance of 14). Giving us the correct route of 0-1-2-8. It is a little hard to explain with words, and a visual representation in the link below would be easier to follow.
The above algorithm is but one example of how a shift in perspective, can lead to a simple and elegant solution to a problem. That is really the essence of CS61BL, which teaches its students how best to approach a problem (usually recursion) in the simplest and most efficient manner possible.
I would highly recommend taking this course, even if ISTD isn’t your first choice of pillar. Even if it doesn’t serve as a gateway into the way of computing, it will certainly challenge and aid in the design thinking that SUTD promotes.