ESC190: Computer Algorithms and Data Structures


Why do programmers prefer dark mode?

Because light attracts bugs


[Source]

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 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 to store 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 learn how to compare different algorithms or data structures in terms of speed and memory allocation. Some applications are covered in labs, but there are far too many to cover them all! 

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

ESC190 is taught by Professor Michael Guerzhoy, who also teaches ESC180. Check out that overview for his bio!

Professor Michael Guerzhoy

Professor Michael Guerzhoy [Source]


Interview


Week in the Life of an ESC190 Student

Lectures

There are typically 3 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! 

Tutorials

There are no tutorials for this course.

Practicals

ESC190 practicals are the same as ESC180 practicals.

Assignments

Like ESC180, ESC190 has two types of assignments: labs and projects. They are structured similarly as those in ESC180.

Exams

There are typically two midterms and a final. 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

  • To get the address of a variable, put “&”, followed by the variable name. 

  • To get the value of a pointer, put a “*”, followed by the name of the pointer.  

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; these are specific to ESC190.

When struggling, start with the middle or end of the function

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. 

Review Your Notes!

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 in addition to doing 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. The theory will just help you structure your code and thinking.


What Will You Take Out of It?

  • 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.  

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).