Welcome page and syllabus
  • Also link at House symbol 🏠 at top of page

Programming formalisms — Introduction day

Course punchlines

  • “Turning scripters into computer scientists”

  • “Add theory to bolster already present practical skills”

This course aims to

  • give scientists

    … with some experience in programming and scripting:

    • an understanding of the underlying principles of software development, design, and programming.

  • strengthen the understanding of:
    • more advanced programming concepts

    • ability to produce more reusable scripts through modular programming

    • enable a better understanding of how to evaluate a script or programs performance.

  • encourage the use of software development tools, like:
    • Unified Model Language

    • Git and Github

  • convince the benefits of sharing and social coding

Your background

spiral

Your expectations

spiral

Content and expectations

  • We will cover an introduction to

    • Algorithms and Data structures: *Programming skills*, *Train logic*

    • Programming Paradigms: Classical training, Big-picture architecture of programs
      • especially structured: Readable code

      • functional programming: Modular development

      • modular development: Modular development

      • code reusability: Reusable code

      • Object oriented programming: Modular development, Object-oriented programming

      • testing: Best practices

      • optimisation: Optimize

    • Reproducible research:
      • dependencies Package development, Make tools that other people can also benefit from

      • documentation Readable code, Make tools that other people can also benefit from

    • Tools:
  • The course modules will cover theory with bridging practical examples and applications to enhance the theoretical understanding of the principles.

Prerequisites

  • Python

  • Git

  • GitHub

  • PlanUML

  • 💡 Visual Studio code can work as an integrated environment

  • See the setup.md file

Some practicals

ZOOM

Important

  • The course is run over Zoom. You should have gotten an email with the links

  • When you join the Zoom meeting, use your REAL NAME.

  • Please MUTE your microphone when you are not speaking and

    • use the “Raise hand” functionality under the “Participants” window during the lecture.

  • Behave politely!

  • There will be breakout rooms used in the Zoom for some of the exercises.

  • Use Zoom chat only:

    • in breakout rooms

    • for Zoom specific technical issues

    • otherwise use HackMD, see below

Collaboration document HackMD

Important

  • Use the HackMD page for the workshop with your questions.

  • <https://hackmd.io/lPmOnlj4Qw6FSVgizuFJKg?both>

  • Tell us directly if it is too fast or you need clarification.

    • Either a helper will answer the question or the helper will pose the question to the teacher.

  • Depending on how many helpers there are we’ll see how fast there are answers.

    • Some answers may come after the workshop.

  • Type in the left frame

    • “-” means new bullet and <tab> indents the level.

    • don’t focus too much on the formatting if you are new to “Markdown” language!

  • Have a try with the Icebreaker question

Icebreaker

  • What topic do you work with?

Interctive questions/discussion

Important

Icebreaker

  • Which city do you work in?

The teachers

Schedule

https://uppmax.github.io/programming_formalisms/#schedule

Reflections at the end of day

  • Students will have the opportunity to give feedback to the teachers at the end of each day.

  • A reflection session will be conducted in a similar fashion to an Agile Software Development retrospective meeting.

  • It is important that all students and teachers involved in the lessons actively engage in this event.

Learning outcomes

Learning outcomes of course

The particpants shall …
  • have an introductory understanding of formal algorithms and Algorithm design

  • have an introductory understanding of Testing and test driven design

  • have an introductory understanding of source control

  • have an introduction to common concerns and practices in optimisation in development of software

  • be familiar with common development practices and “best practices” of software development

  • be familiar with the object-oriented paradigm

  • have an overview of other design and development paradigms

  • have a basic understanding of modular programming and modular design

  • have an understanding of the software life cycle

  • know some common data structures and how to utilise it in our design

Reference:

Indices and tables