Top

CSC263H: Data Structures and Analysis

Thank you to Prof. Francois Pitt for providing this information!

So, what exactly IS CSC263H1??

This course is one of the first ones where programming and theory, the branches that students have been seeing since their first year, come together. The course is taught from more of a theoretical point of view than a programming point of view.

On the theory side of this course, you’re building up your skills with proofs and reasoning about algorithms, etc., and it can all feel very abstract, mathematical, and not connected to programming. But CSC263 is where it comes together and where we start talking about interesting data structures that people use to solve real problems.

Trying out different approaches until something kind of works? That's not what being a good programmer is about. We want to make sure that you can do it in a more principled way. That's the importance of CSC263.

Keys to Success!

  • Make the effort to work through things carefully, pay attention to those details, understand those relationships. You’ll need to approach the material in a way that may be different to what has worked for you in the past.

    • If your approach to programming is to just hack away at it until it works, that will stop working. You start to realize that there's got to be a better way to do this. There is. That's what we're trying to teach you.

    • Students have noted that the approach in CSC263H is distinct from its prerequisite courses (like CSC240H): “Although both courses focus on runtimes and proving efficient implementations of algorithms, CSC240 took a very proof-based approach to the content in the course, which left the actual implementations as a bit of an afterthought, while CSC263 focuses on the implementations of specific data structures which can be used for optimizing and improving the efficiency of certain algorithms.”

  • Students say: “In my opinion, the most important thing to focus on in CSC263 was to keep on top of the topics in the course. In the semester when I took CSC263, we had weekly preparation modules which we needed to do before the weekly lectures, and in my opinion, using these modules to prepare for the lecture in advance was incredibly helpful, as the course content can be confusing, but having some level of preparation before the lectures made it much easier to follow the lectures as new content was being presented in class.”

  • Students say: “Try programming the data structures using both built-ins or from scratch. Knowing how these data structures work from a high level is useful, but dealing with the edge cases and implementation can help you better understand. Also, relating to point 2, at the PEY interview level, writing pseudocode is fine, but for a FT interview, you might have to write the code out, so having experience early can help.”

How is CSC263H1 going to help me?

  • Looking through examples until the patterns become clear is an approach that stops working as the material becomes more difficult because the patterns are getting more complex. You need to develop the skills to pull things apart a little more, focus on the components, and understand how they relate to each other.

  • In interviews, people love the kinds of problems where you need to know the different techniques and methods that we teach in CSC263. Companies care about this, so you should care about it too! The theory aspect of computer science actually DOES matter.

  • Students say: “Really helpful for interview preparation. It gave me a deep understanding of different data structures, and compar[ing] the time and space complexities of the different approaches I can take towards a problem which I have been able to demonstrate in my interviews. We didn't actually do interview questions in this class, but you come out knowing all the data structures and algorithms that are at your disposal during an interview question.”

  • Students say: “As a student in the Data Science Specialist program, I found that CSC263 was a very helpful course for me, since the course focuses a lot on efficiently implementing algorithms and designing data structures that can be used for efficiently performing tasks. Although being able to prove properties of algorithms is a useful skill to have, I have found that being able to ‘think outside of the box’ and utilize data structures which are able to efficiently implement my programs is much more practical in real-world programming scenarios, as well as coursework which I have had in other courses in the Computer Science and Statistical Science Departments.”

  • Students say: “A lot of the concepts are immediately applicable in upper-year CSC courses. It also helped during [internship] interviews as having a strong understanding of data structures can wow employers.”

How will CSC263H assignments help me learn?

There are key themes that come up across the assignments and the main one is problem solving when a new situation is thrown at students. Can you dig through what we've discussed and figure out how the pieces fit together to solve this problem? It's not just a question of just seeing if something works. Ask yourself: do you understand the tools that we're developing? Do you know the building blocks well enough to be able to say, here are the pros and cons of this approach and here are the pros and cons of that approach? And can you explain the reasons why an approach is better?

By the end of the course, we want students to be able to problem solve in and of itself, not just the specific examples. You must be able to generalize what you're doing to be able to transfer that knowledge and skill to other new situations. And that's the difficult part for some students, when something different comes along. Be able to take that step back. Take a deep breath. It's okay.

If you are comparing programming languages to natural languages, what we want students to be able to do is write well-reasoned essays in ancient Greek. When you begin, ancient Greek is so complicated that it’s all you can think about. But when you get far enough into it, you realize that saying things in ancient Greek isn't the hard part anymore. The hard part is figuring out how to organize your thoughts and how to express your points, which doesn't depend on the language you are using. That's what we're working towards and in CSC263.

A few last words from the instructor:

  • I see too many students who are very focused on making their way through this course so that they can make their way through the degree, etc. They don't realize they're missing out! Getting there is part of the experience and if you've got those blinders on, it’s too bad.

  • I enjoy leading students through discovering something. That's the best. When you see it click for a student, and you can almost physically see it, those are the best moments.

CSC263H is a prerequisite for...

  • CSC301H1 — Introduction to Software Engineering

  • CSC303H1 — Social and Information Networks

  • CSC324H1 — Principles of Programming Languages

  • CSC373H1 — Algorithm Design, Analysis & Complexity

  • CSC384H1 — Introduction to Artificial Intelligence

  • CSC420H1 — Introduction to Image Understanding

  • CSC448H1 — Formal Languages and Automata

  • CSC458H1 — Computer Networking Systems

  • CSC488H1 — Compilers and Interpreters

  • JSC370H1 — Data Science II