Tomas Petricek
University of Kent and fsharpWorks
tomas@tomasp.net | @tomaspetricek
Fundamental knowledge
What knowledge about software will remain
relevant in 100 years?
What should we teach students at university?
It is impossible to give a program
\(\Theta\) that, for any
other program \(p\) decides whether \(p\) terminates or not.
Agile and Scrum methodologies
UML or DDD modelling methods
Object-oriented design patterns
Tools like Git, Travis, Docker
What is impossible to build?
Can we guarantee cost or correctness?
Not a formal mathematical problem
Can we say anything certain at all?
Historically situated Software Engineering
History and critical analysis of software development tools and practices
Programming in the 1950s was a black art, a private
arcane matter (...), each problem required a unique beginning at square one,
and the success of a program depended primarily on the programmer's
private techniques and inventions.
NATO 1968 Conference on Software Engineering
Programming started transition from a craft for a long-haired priest-hood to a real engineering discipline.
Follow-up NATO 1969 Conference failed
Mathematical culture favours proofs
Business culture favours management
Roots of a cultural divide?
Apply industrial methods of production to software
Control over budgets, scheduling, workforce
Process should eliminate reliance on individuals
Heavy-weight processes like Waterfall make sense!
Product oriented
Software is seen as a product
serving some fixed use case
Process oriented
Software emerges from the totality
of interconnected processes of
learning and communication in
an evolving environment
Context, response and problems
Minority process oriented paradigm
Pushback against managerial culture
Application crisis of 1990s
Modelling using UML
Modelling via code and tests
What is more complex software system to build?
![]() Chess engine that can consistently win against grandmasters? |
![]() Accounting system that calculates VAT in UK and France? |
IBM System/360
Operating system
for a wide range of
IBM machines
Massively delayed
due to complexity
and conflicting requirements
Much of the complexity [software engineer] must master is arbitrary
complexity, forced without rhyme
or reason by the many human
institutions and systems to which his interfaces must confirm.
Essential complexity
Accidental complexity
Fundamental Software Engineering principle
There is no single development, in either technology or management technique, which by
itself promises even one
order-of-magnitude improvement within a decade in productivity,
in reliability, in simplicity.
Star Wars (1980s)
Fully automatic software system to track and shoot down Soviet nuclear missiles
Can reliable system to do this be built?
Analog systems
Small change in input causes small change in output
Analog computers of 1930s, audio synthesizers
Digital systems with repeated components
Non-linear, but we can test components in isolation
CPU units and much of modern hardware
Digital systems without repetition
Non-linear and very hard to test
Any modern software system!
Fundamental Software
Engineering Principle
Complex software can only be mastered if it is developed progressively, with the aid of extensive testing, and then operated more or less continually in a somewhat lenient and forgiving environment.
Defense would be unreliable
Since we have no spare planets
on which to fight trial nuclear
wars, testing of a global ABM
system is impossible.
Enemy has it easier
Very expensive defenses could give the Soviet Union an incentive to invest in relatively cheap offensive countermeasures, creating arms race instabilities.
Developed into the Patriot system
Accidentally hit British fighter
plane killing two
Software updated 9 times during
the Gulf War
Engineering metaphor
Many other metaphors
Why metaphors for programming matter?
New way of thinking and shift of emphasis
Goal of writing is communication
Growing needs long-term maintainability
Complexity of software
Complexity of cities
Dealing with problems
of organized complexity
City processes are too complex to be abstracted. Explore them in full complexity.
One unaverage value tells us more than statistic.
Evolve and need maintenance
Choosing a material
Meeting of cultures
What are the foundations
We Have Never
Been Modern
We must rework our thinking to conceive of a "Parliament of Things" where natural and social phenomena, and the discourse about them are not seen as separate objects, but as hybrids made by the interaction of people, things and concepts.
Fundamental Software Engineering principles
Tomas Petricek, University of Kent and fsharpWorks
tomas@tomasp.net | @tomaspetricek
Reading list