---
title: "Course Introduction"
format:
html:
toc: true
number-sections: true
---
[In-class notes](hand_written_notes/intro.pdf)
## Today's Information
### Learning Goals for Today
- Define Algorithms
- Understand course structure
- Brainstorm group and learning strategies
### Announcements/Logistics
- Apply to do research with CS profs in the summer:
- Fill out application at [go/cs_summer_research](https://docs.google.com/forms/d/e/1FAIpQLSeGukYaUBHg4ngFvSvaAR7IorsSK6z36ND4iEqlfuXOHlt0xg/viewform)
- E-mail profs to set up a time to talk to them about their research
- Office hours (this week only), Th 2:30-4pm, Fr 9-10:30
- Upcoming assignments
- [Getting to know you quiz](https://middlebury.instructure.com/courses/14189/quizzes/32848) (due **today**)
- [PSet Rough Draft](https://middlebury.instructure.com/courses/14189/assignments/255304) (due Thursday)
- [Participation Check-in](https://middlebury.instructure.com/courses/14189/assignments/257121)
- Suggested Deadline Schedule
| Monday | Thursday |
| ------ | -------- |
| pset | pset rough draft|
|participation check-in | pset self-assessment|
| | quiz|
- Tutoring hours??
## What is an algorithm?
**Definition:** An algorithms is a finite, clearly defined sequence of instructions for carrying out a task.
Which of the following are algorithms?
A) ```
Go to Cambridge
```
A) ```java
int i=1;
while(i<5){
i=i+1;
}
```
A)
> function Fib($i$)
>
>> Input: integer $i: i\geq 0$
>>
>> Output: $i^{\textrm{th}}$ Fibonacci number
>
> If $i\in \{0,1\}$, then return $i$
>
> Return Fib($i-1$)+Fib($i-2$)
>
A) ```java
public static void fun(int j){
int k=1;
k++;
}
```
## Plan for the Semester
We will look at 3 paradigms for designing algorithms:
* Divide and Conquer
* Greedy
* Dynamic Programming
For each algorithm, we will do the following:
* Describe using pseudocode and/or java
* Prove correctness
* Analyze the asymptotic runtime
* Consider ethical implications of implementing in a particular domain
We will also study NP-completeness, which is a particular way of trying to understand and compare the difficulty of problems
### Learning and Collaborating
The first learning goal of the course has nothing to do with algorithms:
> Develop strategies to become a better learner and collaborator.
>
#### Learning
Think of something you are good at. How did you get good at it? Did you ever make mistakes? What did you do when you made a mistake?
Because learning is a process, and mistakes are one of the best ways to learn, I give you lots of opportunities to make mistakes:
- Problem sets are graded on effort, not correctness
- Quizzes and exams have unlimited revisions and credit/no-credit grading
#### Group Work
We will do group problem solving in class almost every period. This will help you learn course content
- by trying to explain your thinking to others
- by asking questions
- by making mistakes
It will also help you to learn to be a better team member and to meet lots of other cool CS students! I will always provide the solution in class after you've had a chance to work on it in groups.
In groups we are going to brainstorm ways to manage challenges that arise in group work.
See
- [go/CS302A_groups](https://docs.google.com/document/d/1ID53Xfdt1FqBjlVwRLkW2VPYwQm_j8TCSRzEGv4RT1I/edit?pli=1#heading=h.r32eeg1akgfx)
- [go/CS302B-groups](https://docs.google.com/document/d/1VXEKL1niznMRLrr4S1Xw9erWxgy-IRfH7n4fjXKvZk4/edit#heading=h.r32eeg1akgfx)