- 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
Your expectations
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:
UML: Best practice
git: Best practice
github: Make tools that other people can also benefit from
NBIS best practices: https://github.com/NBISweden/development-guidelines
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.
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
Menti:
<https://www.menti.com> with code valid the week: 69 32 18 8
Icebreaker
Which city do you work in?
The teachers
Lars Eklund (LE), lars.eklund@uppmax.uu.se
Björn Claremar (BC), bjorn.claremar@uppmax.uu.se
Jon Ander Novella (JN), jon.novella@nbis.se
Richèl Bilderbeek (RB), richel.bilderbeek@uppmax.uu.se
Marcus Lundberg (ML), marcus.lundberg@uppmax.uu.se
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
- Planning phase
- Start the project
- Start with coding!
- The iterations and Git
- Start with pushing your changes in the local Git to GitHub
- Alternative way to initialize Git
- Make the next iteration of the planet project
- git diff
- Stage and commit the changes
- Ignoring files and paths with .gitignore
- Branching and merging
- Let’s make our code modular (test in branch)
- Meanwhile…
- Merging
- Summary
- Deploy and document for usage
- Collaboration
- Summary