Description: This course is an introduction to computer programming, focusing on how to solve mathematical and scientific problems. We will first cover fundamental programming concepts like variables, statements, loops, branches, functions, special data types, and composite data types and objects. You’ll also learn to use key mathematical and scientific tools, including arrays, floating-point numbers, plotting libraries, and symbolic algebra packages. These concepts will be applied to a wide range of applications, such as number theory, combinatorics, statistical analysis, efficient algorithms, computational geometry, Fourier analysis, and optimization. The course is primarily taught in the Julia programming language, though we will occasionally compare it with other languages.
Prerequisites: Math 53, 54, 55, or permission from instructor.
Lectures: TuTh 11:10am - 12:30pm, room 2060 VLSB.
Lecturer: Per-Olof Persson, persson@berkeley.edu.
Office hours: Wed 9:00 -
11:00am in Evans 1081.
Exams:
Midterm exam: Tue Oct 21,
11:10am - 12:30pm
Final exam: Wed Dec 17, 8:00am -
11:00am
Cloud Environment (Recommended) Thanks to generous support from the Division of Data Sciences, you have access to a cloud-based Julia environment through the campus Datahub. This platform runs Jupyter notebooks directly in your browser. Simply sign in with your CalNet ID to get started.
Using Jupyter Notebooks To help you get comfortable with the Jupyter environment, see the official Jupyter Notebook documentation and this handy keyboard shortcut cheat sheet.
Local Installation (Optional) If you prefer to work on your own machine, you can install Julia locally:
IJulia
package and other packages used in the course.Main Course Webpage: This is the main course webpage (the page you are on now). It contains the official schedule, homework/project assignments, and all other key course information. Please check it regularly for updates.
bCourses: We will use this platform for posting course materials, making official announcements, submitting homework and project notebooks, and recording your assignment scores. All official announcements, particularly those about policies and logistics, will be made exclusively on bCourses. Please note that we do not use the bCourses gradebook, so any percentages or totals it displays are inaccurate.
Ed Discussion: This forum is for all discussions about the course material. We encourage you to ask and answer questions here. While instructors will monitor the forum, it is primarily a space for student-to-student collaboration.
Gradescope: All quizzes and exams will be graded and returned to you via Gradescope. You can view your graded work and feedback here.
Homework: Weekly homework will be posted on the web page, and they are due before the first Wednesday discussion section (at 11:59am). The homework will be given and written in the form of Jupyter notebooks. The completed homework should be submitted as an ipynb-file on bCourses. Late homework will not be accepted, but the two lowest homework scores will be dropped when computing the grade.
Projects: There will be a total of 5 programming projects. Their due dates are on Fridays (at 11:59pm). The projects will be given and written in the form of Jupyter notebooks. The completed homework should be submitted as an ipynb-file on bCourses. Late submissions will not be accepted, and all 5 assignments will count towards the grade.
Quizzes: There will be a total of 6 pen-and-paper quizzes given in the Wednesday discussion sections. They will mostly cover the material from the last two homework assignments, but might include questions on any previous topic. There will be no make-up quizzes, but the lowest quiz score will be dropped when computing the grade.
Exams: Two pen-and-paper exams will be given. There will be one in-class midterm exam, scheduled for Tuesday Oct 21 between 11:10am - 12:30pm. The final exam will be given on Wednesday Dec 17 between 8:00am - 11:00am.
Grades: The final grade will be based on weekly homework assignments (15%), the projects (20%), the quizzes (15%), the Midterm exam (20%), and the Final exam (30%). If it improves your grade, we will count the Midterm exam (0%) and the Final exam (50%). This allows you to miss the midterm exam, but your chances are improved if you take it.
In this course, your goal is to master the material, not just produce correct answers. For the homework and the projects, you are encouraged to learn from any available resource, including collaborating with classmates, consulting online materials (e.g., Stack Overflow), and using AI assistants (e.g., Gemini, ChatGPT). These are powerful tools for brainstorming, debugging, and understanding complex concepts. However, the fundamental rule is that the work you submit must be your own. You are responsible for understanding and being able to explain every line of your code from scratch.
Think of it this way: discussing algorithms with a friend is great, and asking an AI to explain an error is smart. However, simply copying a solution from any source without understanding it is academic dishonesty. Be aware that you will be tested on these concepts in the quizzes and the exams, where these resources and collaborators will not be available. The homework is your opportunity to practice and genuinely learn the material, so make sure you are the one doing the learning.
Lec | Date | Topic | Notes | Other readings |
---|---|---|---|---|
1 | Th 08/28 | Introduction, notebooks, markdown, LaTeX | ||
2 | Tu 09/02 | Basic Julia operations, variables, expressions | 1.1-1.2 | Think: 1,2 |
3 | Th 09/04 | Functions, for-loops | 1.3-1.4 | Think: 3,6,4 |
4 | Tu 09/09 | Conditional statements, iteration | 1.5-1.6 | Think: 5,7 |
5 | Th 09/11 | Arrays, plotting | 2,3 | Think: 10 |
6 | Tu 09/16 | Debugging | 4 | Think: (every chapter) |
7 | Th 09/18 | Random number and Monte Carlo simulation | 5 | Insight: 6 |
8 | Tu 09/23 | More on arrays, vectorization | 6 | Julia: 19 |
9 | Th 09/25 | Recursion, divide-and-conquer algorithms | 8 | Insight: 14 |
10 | Tu 09/30 | Special Number Types | 7 | Julia: 6, 44.4 |
11 | Th 10/02 | Matrix operations, linear algebra | 9 | Julia: 77 |
12 | Tu 10/07 | Strings, File processing | 10 | Julia 7,21, Think: 8,11,14 |
13 | Th 10/09 | Floating-point, Algorithmic efficiency | 18.1-18.2 | |
14 | Tu 10/14 | Computational geometry | 12 | |
15 | Th 10/16 | Review | ||
16 | Tu 10/21 | Midterm exam | ||
17 | Th 10/23 | Computational geometry (continued) | 12 | |
18 | Tu 10/28 | Differential equations, dynamical systems | 14 | |
19 | Th 10/30 | Composite types and objects | 11 | Think: 15-17 |
20 | Tu 11/04 | Image processing algorithms | 13 | Insight: 12 |
21 | Th 11/06 | Graphs, data structures and algorithms | 15 | |
Tu 11/11 | Veteran’s Day - No lecture | |||
22 | Th 11/13 | Graphs, data structures and algorithms | 15 | |
23 | Tu 11/18 | Sparse matrices, the Google PageRank algorithm | 16 | |
24 | Th 11/20 | Symbolic algebra 1 | 17 | |
25 | Tu 11/25 | Symbolic algebra 2 | 17 | |
Th 11/27 | Thanksgiving Day - No lecture | |||
26 | Tu 12/02 | Optimization, packages and applications | 18 | Insight: 15 |
27 | Th 12/04 | Review | ||
RRR week 12/8-12/12 | ||||
Th 12/17 | Final exam |
To open the notebooks in the datahub: Download the file to your
computer (make sure the extension ipynb
is unchanged) and
then upload it to the datahub.
Homework | Quiz | Project | Due date |
---|---|---|---|
1 | Wed 9/10 | ||
2 | 1 | Wed 9/17 | |
3 | Wed 9/24 | ||
1 | Fri 9/26 | ||
4 | 2 | Wed 10/1 | |
5 | Wed 10/8 | ||
6 | 3 | Wed 10/15 | |
2 | Fri 10/17 | ||
7 | Wed 10/29 | ||
8 | 4 | Wed 11/5 | |
3 | Fri 11/7 | ||
9 | Wed 11/12 | ||
10 | 5 | Wed 11/19 | |
4 | Fri 11/21 | ||
11 | Wed 11/26 | ||
12 | 6 | Wed 12/3 | |
5 | Fri 12/5 |
Sec | Time | Room | GSI | E-mail (@berkeley.edu) | Office hours |
---|---|---|---|---|---|
203 | W 12 - 1 | B51 Hildebrand | Wanzhou Lei | wanzhou_lei@berkeley.edu | Tue 1-3pm in 828 Evans |
206 | W 2 - 3 | 71 Evans | Wanzhou Lei | wanzhou_lei@berkeley.edu | Tue 1-3pm in 828 Evans |