Scientific Programming 2

Spring 2021

Welcome to this programming course! In the weeks ahead, you’ll use the programming language Python while learning to solve scientific problems from several fields of science. This second part is intended for students who already followed Scientific Programming 1.


Simon Pauw

Natasja Wezel

Iris Luden

Martijn Stegeman

If you have practical matters that you would like to discuss, always send an e-mail to the staff via We will answer within a couple of days, if not hours.

What to do

Your entry to the course is the sidebar, where you can leaf through all modules (levels) that you have to complete.

Passing the course

The course’s final result will be “pass” or “fail”, which means that no grades are assigned. To earn a “pass”, you must meet the following requirements by 29 May:

  • you have submitted a fully working solution for each module
  • you must pass the final exam

Asking questions

In this course you’ll mostly work on assignments independently. But you’re not on your own! We’re here to help. There are two ways you can get help:

  • Online lab-sessions: We have created an online classroom on In this classroom you can get help from us (and from your fellow students). We will be available at the office-hours mentioned here below. But you can log into the classroom at any time. So also outside of the office hours, you can use the classroom to meet up with other students.
  • You can also ask questions on Ed, an online discussion platform. You can use this to sign up link: sign up for the Scientific Programming forum. Try to formulate your question clearly. Use code fragments to illustrate the problem. But, never copy your entire code here (this would make it too tempting for your fellow students to copy your code).

There are four moments in the week that there is help available on

  Mon Tue Wed Thu Fri
09:00 - 12:00      
14:00 - 17:00      


Deadlines for each level are listed below. Only by agreement in advance is it possible to extend these deadlines. Send an e-mail detailing your plans to the course staff at and we will consider your proposal.

Start February 2021

Finish course in: 8 weeks 16 weeks
Level 5 Fri 12 Feb 2021 Fri 26 Feb 2021
Level 6 Fri 26 Feb 2021 Tue 06 Apr 2021
Level 7 Fri 12 Mar 2021 Mon 17 May 2021

Start March 2021 (directly following the 4 week SP1 schedule)

This schedule has been revised. In light of the Covid-19 measures, the deadline schema of Scientific Programming 1 has been shortened. If you followed the reduced schema you should be able to start this schedule on Thursday Feb 18 March 2021.

If for Scientific Programming 1 you did follow the original schedule (including level 3), you van follow the deadlines in parentheses ().

Finish course in: 4 weeks
Level 5 Fri 26 Feb 2021 (Fri 05 Mar 2021)
Level 6 Fri 05 Mar 2021 (Fri 12 Mar 2021)
Level 7 Fri 12 Mar 2021 (Fri 19 Mar 2021)

Note: If you’d like to take Data Processing in block 5, you will need to do this 4-week schedule in period 4 (directly after SP1), in order to leave enough time!

Start April (/end of March) 2021

Finish course in: 8 weeks
Level 5 Tue 13 Apr 2021
Level 6 Thu 29 Apr 2021
Level 7 Thu 20 May 2021


There are multiple opportunities to take the exam, depending on the schedule you follow.

Semester 2

  • Fri 26 Mar 2021
  • Wed 19 May 2021
  • Thu 20 May 2021

You can use the link below to book a time slot for the exam. Only book a slot when you’ve finished all the required modules of a course!

Book your exam!!

If none of the available slots is convenient for you, please send us an email:

It can happen that your exam is a couple of weeks after you finished the last assignment. Please, feel free to already make start with the next course (Scientific Programming 2)! Do send an email to let us know.

Asking questions

In this course you’ll mostly work independently and ask for help online. We have created a special “Stack Overflow” section, for which you will be invited as soon as you register on this website.

Besides Stack Overflow, you can come to the programming lab at the following time. Our teacher(s) will be ready to answer questions, help you find resources for programming, and help thinking about the problems at hand.

The lab is open for you on Tuesdays 15:00–17:00. You can find us in room A1.22 at the Science Park 904 building. When coming to the lab for the first time, please find your teacher and introduce yourself! That way it’s easier to ask questions when needed.


After this course you should be able to independently tackle typically 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:

  • can use native python data structures (like sets, dictionaries, and tuples)
  • analyze the complexity of an algorithm
  • quickly learn to use new python packages and know how to find documentation for them
  • create your own packages
  • write proper documentation
  • use higher level functional programming concepts (such as map, reduce and filter)
  • import and analyze data
  • create advanced plots


Programming is like writing. You can gradually learn to write programs that are more beautiful, functional, short, elegant or simple. To learn this, you’ll need some feedback, and it’s mostly up to you to get it. You can show your programs in class to fellow students or your teacher; you can post a fragment of your code on Stack Overflow and ask for advice on improving; or you can send the staff an e-mail and we’ll have a look (this might take a while though!).

Doing your own work

This course’s philosophy on academic honesty is best stated as “be reasonable.” The course recognizes that interactions with classmates and others can facilitate mastery of the course’s material. However, there remains a line between enlisting the help of another and submitting the work of another. This policy characterizes both sides of that line.

The essence of all work that you submit to this course must be your own. Collaboration on problem sets is not permitted except to the extent that you may ask classmates and others for help so long as that help does not reduce to another doing your work for you. Generally speaking, when asking for help, you may show your code to others, but you may not view theirs, so long as you and they respect this policy’s other constraints. Collaboration on the course’s test and quiz is not permitted at all.

Below are rules of thumb that (inexhaustively) characterize acts that the course considers reasonable and not reasonable. If in doubt as to whether some act is reasonable, do not commit it until you solicit and receive approval in writing from the course’s heads. Acts considered not reasonable by the course are handled harshly.


  • Communicating with classmates about problem sets’ problems in English (or some other spoken language).

  • Discussing the course’s material with others in order to understand it better.

  • Helping a classmate identify a bug in his or her code at office hours, elsewhere, or even online, as by viewing, compiling, or running his or her code, even on your own computer.

  • Incorporating a few lines of code that you find online or elsewhere into your own code, provided that those lines are not themselves solutions to assigned problems and that you cite the lines’ origins.

  • Reviewing past semesters’ quizzes and solutions thereto.

  • Sending or showing code that you’ve written to someone, possibly a classmate, so that he or she might help you identify and fix a bug.

  • Sharing a few lines of your own code online so that others might help you identify and fix a bug.

  • Turning to the course’s heads for help or receiving help from the course’s heads during the quiz or test.

  • Turning to the web or elsewhere for instruction beyond the course’s own, for references, and for solutions to technical difficulties, but not for outright solutions to problem set’s problems or your own final project.

  • Whiteboarding solutions to problem sets with others using diagrams or pseudocode but not actual code.

  • Working with (and even paying) a tutor to help you with the course, provided the tutor does not do your work for you.

Not Reasonable

  • Accessing a solution to some problem prior to (re-)submitting your own.

  • Asking a classmate to see his or her solution to a problem set’s problem before (re-)submitting your own.

  • Decompiling, deobfuscating, or disassembling the staff’s solutions to problem sets.

  • Failing to cite (as with comments) the origins of code or techniques that you discover outside of the course’s own lessons and integrate into your own work, even while respecting this policy’s other constraints.

  • Giving or showing to a classmate a solution to a problem set’s problem when it is he or she, and not you, who is struggling to solve it.

  • Looking at another individual’s work during the test or quiz.

  • Paying or offering to pay an individual for work that you may submit as (part of) your own.

  • Providing or making available solutions to problem sets to individuals who might take this course in the future.

  • Searching for or soliciting outright solutions to problem sets online or elsewhere.

  • Splitting a problem set’s workload with another individual and combining your work.

  • Submitting (after possibly modifying) the work of another individual beyond the few lines allowed herein.

  • Submitting the same or similar work to this course that you have submitted or will submit to another.

  • Submitting work to this course that you intend to use outside of the course (e.g., for a job) without prior approval from the course’s heads.

  • Turning to humans (besides the course’s heads) for help or receiving help from humans (besides the course’s heads) during the quiz or test.

  • Viewing another’s solution to a problem set’s problem and basing your own solution on it.

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.


This course has been designed by Martijn Stegeman, Simon Pauw, Tim Doolan.

This work 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. Feel free to re-use! If you would like to use the work commercially, please send an e-mail for arranging a 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:

  • Quinten Post (video)
  • Marleen Rijksen (revisions)
  • Vera Schild (revisions)

We have used materials from the following sources: