IN3110/IN4110: Problem solving with higher level languages#
The team behind this course#
Lecturers#
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…#
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:
Mandatory assignments (homework)
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#
Git (see https://git-scm.com)
Bash
Python 3
C (GCC)
Various Python packages
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#
We have a Q&A repo set up for questions about the course and assignments: https://github.uio.no/IN3110/Q-A/issues
For private questions, contact your group teacher first, or you may email in3110@simula.no (we may repost anonymized answers on GitHub for other students’ benefit if they are generally relevant)
We have a mattermost channel for informal chat between students: https://mattermost.uio.no/ifi-undervisning/channels/sin3110
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#
Get your private git repo as described before.
Solve the first assignment (will be posted Friday).
If you want, join the group sessions from next week.