ESC190: Computer Algorithms and Data Structures


Why do programmers prefer dark mode?

Because light attracts bugs 🐞

Now that you’ve learned the basics of programming from ESC180, you can start learning about its applications. In ESC190, you will be introduced to the C programming language, algorithms, and data structures. Algorithms are a set of instructions that process an input into a desired output. Examples of algorithms include data sorters, search engines, and shortest path finders. Data structures are ways of storing data. Examples include linked lists, stacks, queues, and hash tables. These are useful in a variety of contexts, as you’ll see in the course.  

The course will be separated into several parts, each covering a type of algorithm, programming method, or data structure. Along the way, you’ll code in Python and C, learn how to implement different algorithms and data structures, and analyze their performance. This course is not about learning every feature of a language. ESC190 is about using the simple tools learned last semester to build more advanced programs.  


Professor

Professor Michael Guerzhoy [Source]

Professor Michael Guerzhoy

The instructor for ESC190 is Professor Michael Guerzhoy, whom you will recognize from ESC180.


Course Highlights

  • Learning the C programming language! C, unlike Python from ESC180, is much more low-level, and memory management must be done by the programmer. While C programming is more difficult, C provides greater insight into what actually occurs inside the computer, and programs typically run faster.  

  • Learning about all the different data structures and algorithms that you might have heard of in the past: 
    • Linked lists, queues, graphs, trees, hash tables 
    • Sorting, dynamic programming, graph traversal (breadth-first and depth-first), shortest path (Djikstra’s, A*), gradient descent 

  • Complete projects that have real-world significance; last year’s projects were a weighted autocomplete function that worked on tens of thousands of words, and a seamcarving program for smart image-resizing 

Week in the Life of an ESC190 Student

Classes

There are typically three hours of lecture per week in ESC190. These cover a range of topics, from basic C programming to gradient descent. There is no textbook for this course, so make sure you go to lectures and take notes. Also, much like in ESC180, there will be many in-lecture quizzes throughout the semester. And while there are no tutorials for this course, ESC190 practicals are similar to ESC180 practicals.

Assessments

Like ESC180, ESC190 has two types of assignments: labs and projects. They are structured similarly as those in ESC180, but topics are much more advanced (and interesting). 

Exams are structured similarly to those in ESC180 and there is typically one midterm and a final. ESC190 exams can include a combination of Python and C programming. Exams are a little more theory-focused than in ESC180, so make sure to study the course theory on top of writing the labs. Past tests and exams are also good study resources. However, like with all other courses, the types of questions that appeared on previous years’ exams might not be the same as yours.  


How to Succeed

Quick Tips & Equations

  • Understand everything about pointers in C. Briefly put: * will provide the value at an address, and & will provide an address. 

  • Identify the key differences between each data structure and use these differences to memorize how the structure functions and how different operations (e.g., set, get, remove) can be performed.  

  • Practice different ways of implementing the same algorithm. During assessments, you may be asked to implement an algorithm in a specific way (e.g., using recursion).  

More Details

Many of the tips from ESC180 will be useful here too, so check them out in the Introduction to Computer Programming overview. We have included a few more below that are specific to ESC190. 

If you’re writing a function in C and are struggling with the beginning, remember that the most important parts of a function are the output (the very end) and the processing (the middle). So, try to write the middle or end of the function and then work your way up to the start. This might make things easier, as you’ll know whether the function meets processing and output specifications. This lets you focus on connecting the beginning of the function with the code you have already written.
Note: this technique can be especially useful when writing a recursive function.

When it comes to programming and computer science, you can easily get caught up in only writing and using code. Since there is more theory in ESC190 than in ESC180, you will need to review lecture notes and do the labs.
Warning: this doesn’t mean that you can get by only reading your notes. Your emphasis should still be on implementing algorithms and data structures for different applications. The theory will just help you structure your code and thinking.


Beyond First Year

  • By the end of this course, you will know how to program in C. 

  • In ESC180, you saw how small functions can interact to make a useful program. ESC190 will take this one step further: it will demonstrate how more complicated algorithms and data structures can be made to work together. These interactions form the basis of the complex software used in our daily lives. They’re also the basis of fields like machine learning and artificial intelligence.  

  • You’ll see that computer science is closely tied to math. Computer scientists use calculus (e.g., gradients) and linear algebra (matrices, vector spaces, etc.) extensively in their work.  

  • Given the theoretical foundation of computer science, you don’t need to be a great programmer to succeed in the field. Similarly, you don’t have to be a great computer scientist to be a great programmer. However, this doesn’t mean that you should neglect one or the other. We would recommend building your skills in both areas as much as possible.   

  • If you want to land a software-related internship, ESC190 will introduce you to the theory and implementation behind some concepts that are commonly seen on programming interviews. 

  • The programming skills gained here will help you in several upper year courses in the Electrical and Computer Engineering, Robotics Engineering and the Machine Intelligence majors. 

Note: The course code for Computer Algorithms and Data Structures used to be CSC190. You may still see it referred to as such on some websites (e.g. courses.skule.ca).