DS210 Course Overview
About This Module
This module introduces DS-210: Programming for Data Science, covering course logistics, academic policies, grading structure, and foundational concepts needed for the course.
Overview
This course builds on DS110 (Python for Data Science). That, or an equivalent is a prerequisite.
We will cover
- shell commands
- git version control
- programming languages
- computing systems concepts
And then spend the bulk of the course learning Rust, a modern, high-performance and more secure programming language.
Time permitting we dive into some common data structures and data science related libraries.
New Last Semester
We've made some significant changes to the course based on observations and course evaluations.
Question: What have you heard about the course? Is it easy? Hard?
Changes include:
- Moving course notes from Jupyter notebooks to Rust
mdbook- This is the same format used by the Rust language book
- Addition of in-class group activites for almost every lecture where you
can reinforce what you learned and practice for exams
- Less lecture content, slowing down the pace
- Homeworks that progressively build on the lecture material and better match exam questions (e.g. 10-15 line code solutions)
- Elimination of course final project and bigger emphasis on in-class activities and participation.
Teaching Staff and Contact Information
See B1 Course Staff.
Course Logistics
Course Websites
See welcome email for Piazza and Gradescope URLs.
-
Piazza:
- Lecture Notes
- Announcements and additional information
- Questions and discussions
-
Gradescope:
- Homework
- Gradebook
-
GitHub Classroom: URL TBD
Course objectives
This course teaches systems programming and data structures through Rust, emphasizing safety, speed, and concurrency. By the end, you will:
- Master key data structures and algorithms for CS and data science
- Understand memory management, ownership, and performance optimization
- Apply computational thinking to real problems
- Develop Rust skills that transfer to other languages
Why are we learning Rust?
- Learning a second programming language builds CS fundamentals and teaches you to acquire new languages throughout your career
- Systems programming knowledge helps you understand software-hardware interaction and write efficient, low-level code
We're using Rust specifically because:
- Memory safety without garbage collection lets you see how data structures work in memory (without C/C++ headaches)
- Strong type system catches errors at compile time, helping you write correct code upfront
- Growing adoption in data science and scientific computing across major companies and agencies
More shortly.
Course Timeline and Milestones
- Part 1: Foundations (command line, git) & Rust Basics (Weeks 1-3)
- Part 2: Core Rust Concepts & Data Structures (Weeks 4-5)
- Midterm 1 (~Week 5)
- Part 3: Advanced Rust & Algorithms (Weeks 6-10)
- Midterm 2 (~Week 10)
- Part 4: Data Structures and Algorithms (~Weeks 11-12)
- Part 5: Data Science & Rust in Practice (~Weeks 13-14)
- Final exam during exam week
Course Format
Lectures will involve hands-on practice. Each class includes:
- Interactive presentations of new concepts
- Small-group exercises and problem-solving activities
Because of this active format, regular attendance and participation is important and counts for a significant portion of your grade (15%).
Discussions will review and reinforce lecture material through and provide further opportunities for hands-on practice.
Pre-work will be assigned before most lectures to prepare you for in-class activities. These typically include readings plus a short ungraded quiz. The quizz questions will reappear in the lecture for participation credit.
Homeworks will be assigned roughly weekly before the midterm, and then longer two-week assigments after the deadline, reflecting the growing complexity of the material.
Exams 2 midterms and a cumulative final exam covering theory and short hand-coding problems (which we will practice in class!)
The course emphasizes learning through practice, with opportunities for corrections and growth after receiving feedback on assignments and exams.
More course policies
Let's switch to the syllabus to cover:
- grading calculations
- homeworks
- deadlines and late work
- collaboration
- academic honesty
- AI use policy discussed after class activity
- attendance and participation
- regrading
- corrections
In-class Activity
AI use discussion (20 min)
Think-pair-share style, each ~6-7 minutes, with wrap-up.
See Gradescope assignment. Forms teams of 3.
Round 1: Learning Impact
"How might GenAI tools help your learning in this course? How might they get in the way?"
Round 2: Values & Fairness
"What expectations do you have for how other students in this course will or won't use GenAI? What expectations do you have for the teaching team so we can assess your learning fairly given easy access to these tools?"
Round 3: Real Decisions
"Picture yourself stuck on a challenging Rust problem at 11pm with the midnight deadline looming. What options do you have? What would help you make decisions you'd feel good about? What would you do differently for the next homework?"
AI use policy
You are allowed to use GenAI (e.g., ChatGPT, GitHub Copilot, etc) to help you understand concepts, debug your code, or generate ideas.
You should understand that this may may help or impede your learning depending on how you use it.
If you use GenAI for an assignment, you must cite what you used and how you used it (for brainstorming, autocomplete, generating comments, fixing specific bugs, etc.).
You must understand the solution well enough to explain it during a small group or discussion in class.
Your professor and TAs/CAs are happy to help you write and debug your own code during office hours, but we will not help you understand or debug code that is generated by AI.
For more information see the CDS policy on GenAI.
How to Do Well in the Course
- All the usual advice about attending lectures and discussions, engaging, etc..
Insiders tips on how to do well in this particular course:
- Do the pre-work/pre-reading before lecture so you are seeing the concepts for a second time in the lecture.
- Actively engage in the pre-reading... try executing the code and making changes
- Do as much Rust coding as you can.. preferably 15-30 minutes per day
- Learning a programming language is like learning a human language, or learning and instrument or training for a sport... you need to practice regularly to get good at it.
- Exams are paper and pencil, so you need to write code quickly from memory.
- Use in-class activities and homework to practice for the exams... try to do as much of it as possible without autocomplete and AI assistance.
Intro surveys
Please fill out the intro survey posted on Gradescope.