Tomáš Petříček, 309 (3rd floor)
petricek@d3s.mff.cuni.cz
https://tomasp.net | @tomaspetricek
Lectures: Monday 12:20, S7
https://d3s.mff.cuni.cz/teaching/nprg075
Understanding and solving complex problems
Organizing large number of diverse entities
Useful concepts and methodologies?
How to organize systems?
How can we study what organization makes sense?
How languages and tools shape organization?
How systems grow as requirements change?
Problems of simplicity
Fully analyzable
Unorganized complexity
Statistically analyzable
Organized complexity
Non-reducible
Analogy systems
Continuous models
Repetitive digital
Reduce via abstraction
Non-repetitive digital
Non-reducible
Adaptation over generations
Problem analysis and fresh design
Prefers cleverness, humour over fit!
Based on Christopher Alexander's work on architecture
Useful but criticized
Missing the point of Alexander's work
Workarounds for coding
in a poor language
A system has it when
it is true to its inner
forces, when it is free
from contradictions
Each "living" pattern resolves a system of forces. When all forces
are resolved, the quality appears.
Context: Where people want to live is different
Forces: Some want to live where the action is, some in more isolation
Problem: How to organize a cluster of homes?
Solution: Distinguish private homes, public homes and in-between
Literate programming environment - code, outputs, comments
Used for exploration, scientific tasks, data science, learning
How to design exploration environment?
Environment that lets you figure something out interactively..
Data science, but also general programming
Are there common patterns of working?
"It is all about you working on a project in an environment while continually switching between different interaction contexts"
Solution structure
Iterative question and answer interaction with persistent context
Support for revising questions asking follow-up questions
Pattern languages
for creating
pattern languages
No single systematic method that would always work
(Meszaros+Doble, '97)
How to structure, write and present patterns & pattern languages
(Iba+Isaku, 2016)
Hints on
pattern mining
Collect experiences Map and find overlaps Structure in clusters
(Jacobs, 1961)
Cannot reduce city
to a single statistic
Look for informative singleton clues!
POKE
for hackers(Jacobs, 1961)
Elegant theories
that are convincing
but do not work
Document what actually works
in practice instead!
(Brooks, 1975)
A clean, elegant programming product must present to each of its users a coherent mental model of the application.
Conceptual integrity
is the most important factor in ease of use.
I set out to deconstruct all the computer languages and recombine them. I lovingly reused features from many languages.
How do we navigate around cities?
And codebases?
Districts, landmarks
and pathways
Good design supports navigability and legibility
Building materials
that look bad before
they go bad
Software tends to
break abruptly without
any warning...
Is there an alternative?
Achieves a good fit without the continuous reinvention of forms
Can we build software without reinventing forms? Spreadsheets? Configuration?
Conceptual design rather than empirical science
Powerful methodologies
for idea generation
Appropriateness is harder to evaluate - wait and see!
Learning from architecture and design
Tomáš Petříček, 309 (3rd floor)
petricek@d3s.mff.cuni.cz
https://tomasp.net | @tomaspetricek
https://d3s.mff.cuni.cz/teaching/nprg075
Recommended
Just for fun...
Design patterns
Software classics
Architecture books
Programming design