Syllabus

General info

Welcome to this programming track! Here, you’ll use the Python programming language while learning to solve scientific problems from several fields of science. This track is intended for students who have no experience in programming at all. The Scientific Programming track consists of three courses:

You learn about the Python language by working on programming problems from several scientific areas. The three courses from this track are designed to be taken together, but you can choose to only follow one or two of the courses.

Schedule

You can follow each course at different paces to fit your schedule. This means you could do all three courses in a single semester, or you could do them spread out over several semesters.

These are the most common schedules if you start in Semester 1:

SepOctNovDecJan FebMarAprMayJun
Fast SP1 SP2 DP
Standard SP1 SP2 DP
Relaxed SP1 SP2 DP next year?

And these if you start in Semester 2:

SepOctNovDecJan FebMarAprMayJun
Fast SP1 SP2 DP
Standard SP1 SP2 DP next year?
Relaxed SP1 SP2 next year?

The course load is of course dependent on your chosen track. The actual amount of work it takes to complete the course varies a lot for each student. But, as a rough estimate, count at least:

You don’t have to follow the entire Scientific Programming track, you can also follow a single course.

Attendance

There are no lectures (except for a non-compulsory kick-off meeting at the start of Scientific Programming 1) and the tutorials are flexible.

The fact that the track offers a lot of flexibility doesn’t mean you are on your own. In the tutorials, we do provide a lot of help with the programming assignments. You’ll work on campus (together with other students) in a classroom. You can ask us questions while you’re working on your assignments.

Programming modules

You’re going to learn programming through a number of programming modules. The modules are grouped into levels, you have to make one module per level. For some levels you have the choice between two different modules. When there is such a choice, you will learn the same programming concepts, but often in different thematic context (i.e. different scientific fields).

Each module consists of theory sections, assignments, and challenges. The assignments are required to complete the course, the challenges are optional and are intended for those who find the regular assignments too easy.

Here below is an overview of all modules for all courses. Click a module title to read what it is about.

Scientific Programming 1 (Level 1 - Level 3)

Level 0 Level 1 (choose one) Level 2 (choose one) Level 3
INSTALL

Before you can start programming you set up your own machine: learn to use the command line, install Python together with uv and checkpy, and install the Zed editor. Work through these steps before Level 1.

ALGORITHMS

Learn to think like a computer. Things that we intuitively know how to do, like drawing a pyramid or computing change for a payment, is hard to get a computer to do right. In this module you’ll learn how to break down such intuitive problems into steps that even a computer can understand.

or

NUMBERS

How do you know if a number is a prime number? Number theory is the science about properties of numbers. In this mathematically oriented module you create a series of programs that compute this and other properties of numbers. No math knowledge required for this module. (You will learn some, though.)

INTEGRATION

In many scientific fields you need to determine the surface area under a function. Integration is a mathematical tool for doing so. However this tool doesn't always work and in such cases we can use numerical integration techniques to let the computer do the work for us. You will learn two important techniques for numerical integration.

or

TEXT

Natural language processing is the science of making a computer understand (something about) natural human language. You will learn how you can get a computer to understand the sentiment of tweets. Is the tone of the tweet positive or negative?

BIG DATA

In this module you will learn to work with data. You will, for example, analyze weather from the Netherlands and answer questions like: When was the first heat-wave? What was the longest freezing period?

Scientific Programming 2 (Level 4 - Level 6)

Level 4 Level 5 Level 6
MONOPOLY

When playing Monopoly, a starting player's advantage seems unfair. To verify, you could play many (millions) real games, but this would take way too much time. Instead, you'll write a computer simulation. This also allows you to experiment with game adjustments to make it fair. You're doing all this for a board game, but this simulation principle applies to various scientific fields (economy, chemistry, biology...).

MONOPOLY 2

This is a continuation of MONOPOLY. You’re going to improve the design of your Monopoly simulation. You will learn about more advanced data structures that can help you improve the design of your code dramatically, making it easier to debug, maintain and extend. You will also learn about computational complexity, which gives you a way to reason about the efficiency of your algorithms and shows why picking the right data structure can mean the difference between a run time of a couple of minutes and one of weeks. Redesigning code that you already wrote using more advanced concepts might seem redundant, but it can be one of the most valuable learning experiences on the way to becoming a good programmer.

POPULATIONS

Predator-prey simulations are models used in ecology and computer science to study the dynamics between populations of predators and their prey within an ecosystem. What's particularly interesting about these simulations is how they can reveal emergent patterns and complex behaviors that arise from relatively simple rules. To make it easier to program such a simulation you will learn a programming technique called object oriented programming (OOP).

Data Processing (Level 7 - Level 10 + final project)

Level 7 Level 8 Level 9 Level 10 Final project
PANDAS

Data processing is the art of reading and transforming data so that it can be easily analyzed, visualized and used in machine learning. You could do all of that with the for-loops and file I/O you already know, but it gets cumbersome very quickly, which is why Python has packages built for the job. In this and the next module we focus on the most widely used one, Pandas, though the principles carry over to most data-oriented packages and programming languages, such as SQL or R. Some subjects you will see in this module are: reading, selecting and grouping data, and dealing with missing values. In the end you will see how some of the *Weather* assignments from Scientific Programming 1 become considerably easier with Pandas.

XKCD

This is a continuation of PANDAS. Some subjects you will see in this module are: data quality, combining data sets with concatenation and joins, reshaping data between long and wide form, and rolling windows. You finish with an assignment in which you have to combine data from wildly different sources, from biology, physics and astronomy, to reproduce an XKCD comic.

DATABASES

When working with really large amounts of data, you typically won't store it in simple (text) files on your computer. You'd use something like a relational database. To get information from a database you'll need a specific language called Structured Query Language (SQL). You're going to practice SQL by solving a mystery...

WIKIPEDIA

When you’re working with data, it does not always come packaged in a nice “machine readable” way, like a CSV file or a database. Sometimes the information we have is embedded in the HTML of a website. Knowing how to access, transform and visualize that information can be an extremely useful tool in many real-world data projects. In this module you will learn how to use BeautifulSoup, a Python package that allows you to extract data from websites, on a copy of Wikipedia that we host ourselves.

FINAL PROJECT

Do you have data from your own studies or research that you would like to analyze? Do this with our help for the final project of this course. The goal here is to work on something that you find interesting and care about.

Grading

Scientific Programming 1 and 2 are pass/fail. You pass a course by completing all of its modules and passing an on-campus programming exam of about two hours.

Data Processing is graded (1-10) and has no exam. Your grade comes from two of the modules and the final project:

Once you are enrolled, the syllabus for your own schedule has the full rules and the deadlines.

Prerequisites

Scientific Programming 1 assumes no prior programming experience. If you have already done a course in Python, or if you have extensive experience in another programming language, this course might not be your best starting point.

Other than that, some modules assume high school mathematics or physics, but in those cases you can choose an alternative module that doesn’t.

Scientific Programming 2 and Data Processing only assume the preceding course as prior knowledge.

Learning goals

Scientific Programming 1 is a beginner’s course. You will learn the basics of Python programming as well as several different ways of solving computational problems. After this course, we envision that you:

After Scientific Programming 2 you should be able to independently tackle typical programming challenges that you might encounter in your field of studies/research. We will teach you more intermediate Python concepts. And some more advanced concepts pertaining to data analysis. After this course, we envision that you:

For Data Processing you’ll learn how to read, transform and analyze data that you might find in various scientific areas. After this course we envision that you:

Course materials

All the reading and video material is available on this website. You do not need to purchase any books or software. Every module consists of short explanations (written and in the form of videos) and assignments. You do need to bring your own laptop.

Doing your own work

This course’s philosophy on academic honesty is best stated as “be reasonable”. Discussing the material with other students helps you learn, and pair assignments are meant to be done together. But the essence of all work you submit must be your own.

Handing in someone else’s solution is not acceptable, and neither is handing in work produced by an AI assistant such as ChatGPT or Copilot.

In all cases we follow the directives regarding fraud and plagiarism of the University of Amsterdam and of the Computer Science BSc programme. Find them here in English and Dutch. Once you are enrolled, the syllabus for your own schedule sets out in detail which acts the course considers reasonable and which it does not.

Acknowledgements

This course has been designed by Simon Pauw, Martijn Stegeman, Wouter Vrielink, Tim Doolan and Ivo van Vulpen.

It is partially based on many great programming resources that have been published as Open Courseware under a Creative Commons license. The resulting work itself is also published under the Creative Commons License Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

We have had lots of help from students as well as teaching assistants who tried the course or added ideas of their own. We especially thank:

We have used many programming recourses for inspiration: