IN3110/IN4110: Problem solving with higher level languages#

credit: xkcd

The team behind this course#

Lecturers#

Jørgen Dokken
Min Ragan-Kelley
Miroslav Kuchta

Group sessions#

Several teaching assistants and assignment correctors

Do you have an idea how to make this course better? Contact us! at in3110@simula.no

What we use higher level languages for…#

  • creating efficient working (or problem solving) environments

  • developing large-scale simulation software

  • making flexible and user-friendly software

  • we mostly use the Bash and Python languages

What we use higher level languages for…#

Jupyter Notebook

What will you learn

This course teaches you the tools to become an effective programmer#

  • Problem: you are not an expert (yet).

    • Where to find detailed info, and how to understand it?

    • How to program in a team?

  • The effective programmer:

    • navigates quickly in the jungle of README files, source code examples, web sites, … and develops intuition for what to look for.

    • knows the tools and best practices for collaborative programming.

  • The aim of the course is to improve your practical problem-solving abilities.

This course teaches you how to become a practical problem solver#

  • Scripting in general, but with most examples taken from scientific computing

  • Find examples, online documentation and textbooks on demand

  • Learn by doing

  • Write robust, well-documented, and fast code

  • Provide feedback and learn from fellow student’s implementations

  • Have fun and work with useful things

An outlook of the first lectures#

  • Today: The Git version control system

  • Next weeks: Review basic and advanced Python

  • Following: survey of scientific tools and techniques in scientific Python (numpy, data analysis and visualization, web programming)

Required background (1): Programming#

  • Wide range of backgrounds with respect to Python and general programming experience.

  • Some Python programming knowledge is expected for IN3110/IN4110.

  • Two Python lectures will review (basic and advanced) Python features.

Required background (2): Mathematics#

  • Very little mathematics is needed to complete the course.

  • Basic knowledge will make life easier:

    • General functions, such as \(f(x) = ax +b\), and how they are turned into computer code

    • Standard mathematical functions such as \(\sin(x),\cos(x)\), and exponential functions

    • Simple matrix-vector operations

  • A learn-on-demand strategy should work fine, as long as you do not panic at the sight of a mathematical expression.

Course organisation

Lectures#

  • Wednesdays, 12:15-14:00, OJD, Aud Simula

  • As much as possible, lectures will be recorded and available on the course website

  • Lecture notes at https://uio-in3110.github.io will be fairly complete, up to the most recent lecture.

  • We also have some past videos from previous years available in our YouTube channel

Relevant literature will be presented at every lecture. You must find the rest: manuals, textbooks, web search, etc. Practicing your ability to find this information is part of the course.

Group sessions and assignments (1)#

  • Two types of assignments:

    1. Mandatory assignments (homework)

    2. Group session exercises (optional)

  • Assignments, excercises, and deadlines are published on the assignments page.

  • First assignment published by Friday (25. August), deadline next Friday (1. September).

  • 3-day extensions automatically granted via online form (link is also on the course website). Longer extensions should contact us at in3110@simula.no soon as possible for arrangements.

Group sessions and exercises are the core of the course: problem solving is the focus.

Group sessions and assignments (2)#

Mandatory assignments:

  • Mix of short (1 week) and large (3 week) assignments

  • Peer review conducted in group sessions

  • Must be solved individually

  • Give points towards passing the course

Group sessions:

  • Can be used to work on exercises or on mandatory assignment

  • Will offer (ungraded) peer review of assignments

  • No strict requirement to show up in group classes, but useful to ask questions and discuss solutions

How to pass the course#

  • Pass/fail course (no exam, no grades).

  • Mandatory assignments and peer-review give points towards passing the course.

  • IN3110: Max 110 points (plus some bonus points). Pass criteria: >=85 points.

  • IN4110: Max 140 points (plus some bonus points). Pass criteria: >=110 points.

There is no other difference between IN3110 and IN4110.

Mandatory assignments are handed in using github.uio.no#

  • Login to github.uio.no before Friday (in two days) with your UiO username and password. This automatically creates your account.

  • We created a github organization called IN3110.

  • You should be added to this organization automatically if you are enrolled in IN3110 or IN4110.

  • There, you find your personal git repository IN3110-username (same name for IN4110 students) where you need to upload the assignment solutions.

Software for this course#

See the course website for installation instructions.

Important: For compatibility reasons, it is recommended to test your assignment solutions on an IFI machine

Asking questions#

Why has the course been organized like this?#

  • “Problem solving” is best learned by solving a large number of problems.

  • With limited resources, this is the only way we can maintain the number of mandatory assignments.

  • You learn from reading and inspecting each other’s code.

  • Goal: more flexible implementation, but which still allows a high volume of programming exercises.

Things to do in the first week#

  1. Get your private git repo as described before.

  2. Solve the first assignment (will be posted Friday).

  3. If you want, join the group sessions from next week.