Introduction of the week¶
Course mottos
- Turning scripters into computer scientists
- Add theory to bolster already present practical skills
Course overview¶
Programming Formalisms goal
Give scientists with some experience in programming and scripting an understanding of formal principles of software development.
Teach evidence-based or expert-recommended best practices on how to:
- write design documents for a project
- work as a team
- share code
- develop code
- test code
- optimize code
- write reusable code
- deploy code
Understand and do formal software development practices:
- understand, use and create a UML class diagram
- understand and use a formal git branching model
- understand and use a formal GitHub workflow
- understand and practice social coding, such as pair programming and code reviews
- understand and use a run-time speed profiler
flowchart TD
classDef bjorn_node fill:#ddf,color:#000,stroke:#00f
classDef lars_node fill:#dfd,color:#000,stroke:#0f0
classDef richel_node fill:#fdd,color:#000,stroke:#f00
subgraph day_1[Monday]
git_basic[git basic workflow]:::bjorn_node
class_design[Class design]:::lars_node
end
subgraph day_2[Tuesday]
class_diagram[Create project's class diagram]:::lars_node
pair_programming[Pair programming]:::richel_node
tdd[TDD]:::richel_node
end
subgraph day_3[Wednesday]
testing[Testing]:::richel_node
code_reviews[Code reviews]:::richel_node
git_branches[git branches]:::bjorn_node
end
subgraph day_4[Thursday]
data_structures[Data structures]:::richel_node
algorithms[Algorithms]:::richel_node
optimisation[Optimisation]:::richel_node
end
subgraph day_5[Friday]
modular_programming[Modular programming]:::lars_node
deployment[Deployment]:::bjorn_node
end
git_basic --> pair_programming
pair_programming --> tdd
git_basic --> git_branches
pair_programming --> code_reviews
git_branches --> code_reviews
class_design --> class_diagram
class_diagram --> tdd
git_basic --> tdd
tdd --> testing
git_branches --> testing
code_reviews --> data_structures
testing --> data_structures
testing --> code_reviews
data_structures --> algorithms
algorithms --> modular_programming
algorithms --> optimisation
The project¶
Help us add you to the project repository
- https://github.com/UPPMAX/programming_formalisms/issues/37
- Add your GitHub name!
- The project will be located here: https://github.com/programming-formalisms/programming_formalisms_project_summer_2024
Shared document¶
Schedule¶
This is a general course schedule, that intends to give a general overview of the course's teaching. For a detailed daily schedule, see the detailed schedule of that day.
Next iteration of the the course will take place in week 47, i.e. Monday 18th November to and including Friday 22nd November 2024.
Day | Time | Teacher | Subject |
---|---|---|---|
Monday | 09:00-12:00 | Lars | Parts from Björn's intro and Class design (in groups, on repo, using web interface only) |
Monday | 13:00-15:45 | Björn | Start project git basic on documents (no coding?) (in groups, on repo) |
Monday | 15:45-16:00 | Richel | Retrospect |
Tuesday | 09:00-12:00 | Lars | Create project's class diagram (using git) |
Tuesday | 13:00-15:45 | Richel | pair programming + TDD |
Tuesday | 15:45-16:00 | Richel | Retrospect |
Wednesday | 09:00-12:00 | Björn | Formal git workflow |
Wednesday | 13:00-16:00 | Richel | Formal GitHub and software development work |
Wednesday | 15:45-16:00 | Richel | Retrospect |
Thursday | 09:00-12:00 | Richel | Data structures (+ algorithms) |
Thursday | 13:00-16:00 | R (+M) | Algorithms + Optimisation |
Thursday | 15:45-16:00 | Richel | Retrospect |
Friday | 09:00-12:00 | Lars | Modular programming deep |
Friday | 13:00-16:00 | Björn | Deployment |
Friday | 15:45-16:00 | Richel | Evaluation |
Detailed overview¶
flowchart TB
classDef bjorn_node fill:#ddf,color:#000,stroke:#00f
classDef lars_node fill:#dfd,color:#000,stroke:#0f0
classDef richel_node fill:#fdd,color:#000,stroke:#f00
classDef project_node fill:#fff,color:#000,stroke:#000
subgraph day_1[Monday]
git_basic[git basic workflow]:::bjorn_node
class_design[Class design]:::lars_node
end
subgraph day_2[Tuesday]
class_design_2[Class design]:::lars_node
pair_programming[Pair programming]:::richel_node
tdd[TDD]:::richel_node
uml_class_diagram[UML class diagram]:::project_node
minimal_classes[Minimal classes]:::project_node
end
subgraph day_3[Wednesday]
subgraph testing[Testing]
testing_framework[Using a formal testing framework]:::richel_node
continuous_integration[Continuous integration]:::richel_node
testing_in_a_team[Testing in a team and project]:::richel_node
unit_tests[Unit tests]:::project_node
automated_tests[Automated tests]:::project_node
end
code_reviews[Code reviews]:::richel_node
git_branches[git branches]:::bjorn_node
end
subgraph day_4[Thursday]
subgraph data_structures[Data structures]
expressive_data_types[Expressive data types]:::richel_node
has_a_relationship[A has-a relationship]:::richel_node
class_design_in_code[Class design]:::richel_node
built_in_datatypes[Built-in datatypes]:::richel_node
has_a_relationship --> |needed for| class_design_in_code
classes_with_elements[Classes with elements]:::project_node
end
subgraph algorithms[Algorithms]
function_design[Function design]:::richel_node
assert[assert]:::richel_node
recursive_algorithms[Recursive algorithms]:::richel_node
classes_with_behavior[Classes with behavior]:::project_node
end
subgraph optimisation[Optimisation]
misconceptions[Misconceptions]:::richel_node
big_o[Big-O]:::richel_node
runtime_speed_profiles[Runtime speed profiles]:::richel_node
runtime_speed_profile[Runtime speed profile]:::project_node
end
end
subgraph day_5[Friday]
modular_programming[Modular programming]:::lars_node
deployment[Deployment]:::bjorn_node
end
git_basic --> pair_programming
pair_programming --> tdd
git_basic --> git_branches
pair_programming --> code_reviews
pair_programming --> |created| minimal_classes
git_branches --> code_reviews
class_design --> class_design_2
class_design_2 --> |creates| uml_class_diagram
class_design_2 --> tdd
git_basic --> tdd
tdd --> testing
git_branches --> testing
code_reviews --> data_structures
testing --> data_structures
testing --> code_reviews
data_structures --> algorithms
algorithms --> modular_programming
algorithms --> optimisation
testing_framework --> |creates| unit_tests
continuous_integration --> |creates| automated_tests
has_a_relationship --> |creates| classes_with_elements
function_design --> |creates| classes_with_behavior
runtime_speed_profiles --> |creates| runtime_speed_profile
Overview of the course content. Red: Richel. Green: Lars. Blue: Björn. Grey: Project. Project nodes are not connected to obtain a clearer graph
Project overview¶
flowchart TB
classDef bjorn_node fill:#ddf,color:#000,stroke:#00f
classDef lars_node fill:#dfd,color:#000,stroke:#0f0
classDef richel_node fill:#fdd,color:#000,stroke:#f00
version_control[Version control]:::bjorn_node
risk_analyis[Risk analysis]:::lars_node
uml_class_diagram[UML Class diagram]:::lars_node
minimal_classes[Minimal classes]:::richel_node
unit_tests[Unit tests\n+ automated]:::richel_node
style_tests[Style tests\ne.g. documentation\n+ automated]:::richel_node
classes_with_elements[Classes with elements]:::richel_node
classes_with_behavior[Classes with behavior]:::richel_node
runtime_speed_profile[Runtime-speed profile\n+ automated]:::richel_node
big_o[Big-O analysis\n+ automated]:::richel_node
package[Package]:::bjorn_node
module[Module]:::lars_node
refactoring[Refactoring]:::lars_node
documentation[Documentation]:::bjorn_node
deployment[Deployment]:::bjorn_node
version_control --> uml_class_diagram
version_control --> risk_analyis
uml_class_diagram --> minimal_classes
minimal_classes --> classes_with_elements
minimal_classes --> unit_tests
minimal_classes --> style_tests
classes_with_elements --> classes_with_behavior
classes_with_behavior --> module
classes_with_behavior --> big_o
classes_with_behavior --> runtime_speed_profile
classes_with_behavior --> deployment
classes_with_behavior --> refactoring
style_tests --> documentation
unit_tests --> runtime_speed_profile
module --> package
package --> deployment
documentation --> deployment
Overview of the course project. Red: Richel. Green: Lars. Blue: Björn.