The document discusses the importance of designing effective presentation slides. It emphasizes that slides should serve as visual aids to support the story or message being conveyed, not as the main focus. Key recommendations include using few details on slides to avoid clutter, leaving whitespace to guide the eye, and ensuring the slides emphasize the presenter's one main message. The goal is for slides to enhance and reinforce the story or talk, not distract from it.
3. presenting is storytelling
www.tudorgirba.com
why are
we here?
In abstract, a lecture is an educational talk.
lecture |ˈlek ch ər|
noun
an educational talk to an audience
legere
latin verb
action of reading, that which is read
But, where does the design of a lecture come
from?
Lecture come from legere which is a latin verb
denoting the act of reading.
A couple of centuries ago, before the printing
press, reading was a technological solution for
spreading information.
4. lecture |ˈlek ch ər|
noun
an educational talk to an audience
Lectures should not stick to the original
meaning anymore. There is no reason. We are
no longer in dire need of information.
What should the goal of a lecture be? To frame
the problem and to incite the audience to
investigate it further.
The best tool to animate an audience is
through a story.
presenting is storytelling
www.tudorgirba.com
The story does not have to be a fairy tale to
capture my imagination. In fact, it should not be
a fairy tale.
story = fairy tale
Good stories are typically not straightforward.
They require design and discovery.
design
your story
5. The first step is to figure out what your
audience is? What do they expect? What are
their values?
who is your
audience?
let me tell you a story
about
Paris
http://www.flickr.com/photos/pingnews/
421079337/sizes/l/
Let me tell you a story about how I went to
Paris ...
6. and I wanted to see how other people see
Paris.
I was surprised to see that some don’t even
look at Paris.
And when they do look, they do it in a strange
way.
At night, we finally got to Louvre.
7. And we set our minds to go see Mona Lisa.
So, the second day, we took the metro.
And we got to Louvre.
And just near the information sign ...
8. We found Mona Lisa.
Actually it was not really Mona Lisa, but just a
guide about The Da Vinci Code. We did not
want the guide, and we started to search Mona
Lisa by ourselves.
And we finally got to the room of Mona Lisa.
Because we were not allowed to take pictures
inside the room, I took a picture from outside of
it.
But, no one else took the sign seriously. My
take is that they did not regard themselves
taking pictures, they regarded themselves as
just looking at Mona Lisa.
9. Even though some not even looked.
Or when they did, they did it in a peculiar way.
If you want to tell a story, you have to know
your audience.
http://www.tudorgirba.com/blog/the-audienceis-your-friend
And you have to know how they see the world.
10. And if you think you know your audience and
how it sees the world, think again. Your
audience will never be the same and it will
never seize to surprise you.
The first step is to figure out what your
audience is? What do they expect? What are
their values?
who is your
audience?
message
message
message
message
message
message
message
message
message
messagemessage
message
message
message
message
message
message
message
message
message
message message
message
message
message
After you think you know your audience,
choose your message.
Any thing can be “sold” in several ways. Some
are more obvious than others.
message
message
message
message
message
message
message
message
message message
message
message
message
message
message
message
message
message
message
message
message
message
message
messagemessage
message
message
message
message
message
message
message
message
message message
message
message
message
message
message
message
message
message
message
message
message
message message
message
message
message
You should choose the message that matches
your audience and your contextual goal.
The message does not have to be as
comprehensive as the material it covers. Its
goal is to focus the story.
11. one
message
Strive to choose one message. Not two, not
one and a half. One. A 30 seconds ad has one
punch line. A good movie has one single
message that summarizes the main point (of
course, is the movie is not Pulp Fiction).
So should your talk have just one core
message. Bring plenty of evidence, but focus
on one message.
Ads have one message. Most movies have one
message.
Sometimes the message is directly in the title.
12. Modeling History
to Understand Software Evolution
Inauguraldissertation der
Philosophisch-naturwissenschaftlichen
Fakultät der Universität Bern
To provide a generic
meta-model for
expressing software
evolution analyses,
we need to recognize
evolution as an explicit
phenomenon and model
it as a first class entity.
You might say that ads and movies are just for
entertaining.
But, a PhD dissertation is also about one
thesis. 3-5 years of work and all you get to
defend is one single statement.
vorgelegt von
Tudor Gîrba
von Rumänien
Leiter der Arbeit:
Prof. Dr. Stéphane Ducasse
Prof. Dr. Oscar Nierstrasz
Institut für Informatik und
angewandte Mathematik
Strive to choose one message.
one
message
Slides used to be called visual aids. The
difference between the two terms is that
“slides” describes the technology, while “visual
aids” describes the goal.
slides
These days, it is a must for a talk to be
accompanied with slides.
slides are visual aids
Slides used to be called visual aids. The
difference between the two terms is that
“slides” describes the technology, while “visual
aids” describes the goal. We focused so much
on getting the technology right, that we forgot
about the goal. Always have the goal in mind.
14. few
details
The good news is that not all details are
important. In fact, only few details are
important.
are important
When it comes to the English language, the
Elements of Style is a book that should not be
missed.
omit needless words
we sell fresh fish here
fresh fish here
16. for sale: baby shoes, never worn
Ernest Hemingway
http://en.wikipedia.org/wiki/
For_sale:_baby_shoes,_never_worn
Twitter can be a great medium to exercise
conciseness.
This message is exactly 140 characters long.
design is not the abundance of simplicity
it is the absence of complexity
http://www.amazon.com/Elements-GraphicDesign-Space-Architecture/dp/1581152507
17. emphasizing everything
IS emphasizing nothing
One particular graphic design resource that is
most often forgotten is whitespace.
whitespace
Whitespace is defined by the objects inside.
Whitespace is not necessarily white.
18. What is background and what is foreground?
What about now?
One small difference solves the conflict.
You now perceive two blobs.
19. But, is whitespace a wasted space? No. If you
fill it completely, you lose everything.
Whitespace can guide your eyes. For example,
this arrangement implies no particular reading
order.
This one, however, will guide your eye line by
line.
… and this one, column by column.
20. Let’s take a chart
y
x
Simply not filling the whitespace reveals the
data.
y
x
Less can be even more.
y
x
http://www.edwardtufte.com/tufte/books_vdqi
remove chart junk
increase data ink
21. whitespace is a resource a resource
whitespace is
whitespace is a resource
whitespace is a resource
whitespace is
whitespace whitespace
whitespace is a resource whitespace is a resource
whitespace is a resourcea resourceis a resource is a resource
whitespace is a is a a
resource
whitespace is a resource
whitespacewhitespace is a resource
whitespace whitespace resource a resource
whitespace is a whitespace is
whitespaceresource resourceaisresource is a resourceis is resource
is awhitespace
whitespace is isresource
whitespaceresource awhitespace is a is whitespace a is a resource
iswhitespace whitespace resourceresource resource
a resource a resource a resource
whitespace is a is a resource
whitespacewhitespace
whitespace is a is a resource
whitespace
whitespace resource
whitespace isisaaresource whitespace is a
is a resource
whitespace whitespace is a is a resourceresourceis a resource
whitespacewhitespace is a resource whitespacea resource
resource
whitespace is
whitespace is a resource
whitespace is a resource
whitespace
whitespace is a resource
a resource
whitespace is a resource
whitespacewhitespace is a resourcewhitespaceaisresource
is a resource whitespace iswhitespaceaisresource is a resource
whitespace is
a resource whitespace is a resource
whitespacewhitespace is whitespace
is a
whitespace is a resource is a resourceis a resource is a resourceis a resource
whitespace whitespace
whitespace whitespaceresource a resource is a resource
whitespace is a resource whitespace is a resource whitespace is a resource
whitespace is a resource
whitespace is is resource
whitespace is a resource
whitespace is a resourcea a resource
whitespace
whitespace a resourcea is whitespace is a resource resource
whitespace is a whitespace is a resource
whitespace is iswhitespaceresource whitespace whitespace a resource resource
whitespace resource a
is is
whitespaceais aaresource resource
whitespaceresource
is a is a is
whitespace is a whitespace isis whitespace resource is a
whitespace aisresource a resource
whitespaceais a resourceresource whitespaceresource a resource
resource is awhitespace a a resource is is is a resource
resourcewhitespace
whitespace whitespace
whitespace
whitespace whitespace is aisresource whitespace isisaaresourcearesourceis a resource
is is is awhitespacewhitespace whitespace isresource resource
whitespace resource aa resource a is whitespace is resource
resource is is
whitespace
a
whitespaceisawhitespaceisresource is resource whitespacea is is a resource
whitespace is a resource
resource
whitespace resource
whitespaceresource resourcewhitespace resource
whitespace a resourcea resource resourcewhitespace
is is
whitespace
whitespacewhitespace iswhitespace a whitespacewhitespaceresourceresource
whitespaceisiswhitespace is iswhitespaceisresource isiswhitespaceaisresource a resource
aaresource resource whitespace is a resource
whitespaceiswhitespaceisawhitespaceisaaa a resource a a whitespace is
aaresource isresource is resource resource
whitespaceisiswhitespace aisisaa resourceresourceaisaresource is
whitespace iswhitespaceiswhitespace resourceresourcewhitespaceais a resource
whitespaceresourceisaresourcewhitespaceis isaaresource
resource
a resource a is whitespace
whitespace iswhitespace whitespaceresourceaaresourceresourceresourceresource
a resource
whitespace resourcewhitespace a resource
whitespaceiswhitespace resourceresource resourcewhitespace resource
whitespaceresource aaaaawhitespaceiswhitespaceresourceaa resource
is iswhitespaceis aa iswhitespace isaaresource
a resource resourcewhitespace
is
whitespaceiswhitespace aisresource whitespacewhitespaceawhitespaceais a resource
is
whitespacewhitespace
whitespacewhitespacewhitespaceresourceisawhitespaceawhitespace is isisa aresource
aaaaresource awhitespacewhitespaceisaisresource
whitespacewhitespaceisisaaresourceiswhitespace isisiswhitespaceaisresource resource
a resource
whitespaceresourceawhitespace iswhitespaceresource a resource
whitespaceis is isresourcewhitespacewhitespaceresource
is resourceais is whitespace
a
whitespace whitespaceresourceis aawhitespaceresource a resource
whitespacewhitespacearesourceresourcewhitespacewhitespace is a resource
is resource whitespace is resource is a whitespace
a whitespace is resource resource is isis a
whitespaceaaisresourcearesourceaawhitespacewhitespaceresourceresource
iswhitespace resourcewhitespace a aaisresource
aa resourceisresource whitespace whitespace
whitespace whitespaceresource aisresourceis is
is
resourceis
whitespace is resourceaawhitespaceis aaresourceresource
whitespaceresource iswhitespaceaisresource isiswhitespace is isaa resource
iswhitespacewhitespaceis is a resource resource
whitespace is a whitespace isiswhitespace
whitespacewhitespaceresourcea resourcea resourceaaresourceresource
whitespace resource
a a resourceresource whitespace resource
whitespaceiswhitespace is a resource resourcewhitespace whitespace is a resource
iswhitespace
whitespace isisisresource is a resourceresource a resource
whitespacewhitespace whitespacea whitespace is a
whitespace
whitespace isaa awhitespaceresourceis a aresourceis isaaresource
whitespace whitespaceresourcewhitespaceisisawhitespaceresource
whitespace aaresource isisa isisawhitespace aisaaresource
is a is a a whitespace whitespace is is resource
whitespace
resource
is resource resource is a resource
resource resource
whitespace isresource whitespace whitespace resource
resource
whitespaceiswhitespace resourceawhitespaceisiswhitespace is a resource
whitespace
whitespaceresource aaresourceiswhitespaceresource aiswhitespace is a resource
resource
whitespaceresource a resource whitespaceisisaaresource is a resource
whitespace is a
whitespace
whitespace a whitespace a whitespace
resource
whitespace is a a
whitespace whitespace isisisaresource
is whitespace a is whitespace whitespace a resource
a iswhitespace whitespace is aisresource resource
whitespace
whitespace iswhitespaceresource whitespace whitespace is aresource
is
whitespaceaa is a resourceresourceisisaaresourceisresource resource
whitespace resource whitespace is resource resource
a a
whitespaceresourceis whitespace is whitespacewhitespaceisisa aresource
whitespaceis a isresourceresource awhitespaceresource a is a resource
is resource a whitespace a whitespace resource
resource whitespace is aaresource is resource
is resource
a isisaa resource
whitespaceresourceis is a resource whitespaceaaisisa resource
whitespaceisis a whitespace is aaresourcea resourcewhitespace a resource
whitespace aisaaresource resource whitespacewhitespaceresourcea resource
whitespaceis
whitespacewhitespaceisisaaresourcea whitespaceiswhitespaceaisresource
whitespace is whitespaceis resource a resource
whitespace resource whitespace whitespacearesource resource
isis aisresource whitespace whitespace is resource
a a resource resource resourceresource is
whitespace whitespace isisaaresource
resource a resource a
is whitespaceresource
iswhitespace is a resource
aisresource
whitespace is a aresource is whitespace whitespace
whitespace
is
whitespace isis whitespaceaisresource whitespace isais resource is ais a resource
whitespace resourcewhitespace a is resource a resource
resource
whitespace isaawhitespace resource a is a
whitespacewhitespaceresource is aawhitespacewhitespace
whitespacewhitespaceaisresource
resource
whitespace awhitespacewhitespace whitespace iswhitespaceis a resource
isis resource resource
a
resource
whitespacewhitespace iswhitespace whitespacewhitespace resource
a resource
whitespaceaisis is aiswhitespace iswhitespaceresource resourceresource
resource
resourcewhitespace
whitespace whitespace
whitespacewhitespaceaaisresourceisresource whitespacea isa aresourceresource
is whitespace aresourcewhitespace is isaaresource
a is a whitespace a resourceresource resource
resource whitespace iswhitespace
resource
whitespacea is is
whitespace isisawhitespacea awhitespacewhitespace isisaa resource
whitespace is resourcea resourceis a resourceisresource is a
whitespaceais a
whitespacewhitespaceresourcewhitespaceaisresource
resource
whitespaceresourceawhitespace resourcewhitespace resourceresource
whitespacewhitespace whitespace is aaresource
whitespaceaiswhitespace is isisa isresourcewhitespace
whitespaceaiswhitespaceis a resourceisaa resource
whitespaceresource whitespace is resourceresource
aresource is a
a resource whitespace
whitespace aisresourcewhitespaceawhitespaceaiswhitespace is is a resource
whitespaceresource
is aisresource
whitespace aaisresource a whitespacewhitespace resource a resource
whitespace resource is resource resourcewhitespace is a
a resource
whitespace is iswhitespaceresourceisresourcea resourceis a resourcea resource
is a
whitespace is a resource whitespaceresourcewhitespace is
whitespace
whitespace is whitespace is is is is aaresource is a
a resource a
iswhitespace is resource
a resource whitespace
whitespace is a isa aresource whitespacewhitespaceis aaresource resourceresource
whitespace
resource
whitespace is resource
whitespace is a resource whitespaceais aa resource resource
whitespace isis a resource a resource
a resource
whitespace iswhitespace is a
whitespace resource
is
whitespace whitespace is
whitespace is a
whitespace is a resourceresource
whitespace is a resource
whitespace is a resource is a resource whitespace is a resource
whitespace
iswhitespace is a resource
a resource a resource
whitespace is a resource whitespace whitespaceais is a resource
whitespace resource
whitespace is a resource whitespaceresource whitespaceresource
whitespace is a is
whitespace is ais is ais a resource
whitespace resource
whitespace a resource
whitespace whitespace is a resourceresource whitespace is a resource
whitespace is whitespace is a resource is a resource
whitespace is ais a resource
resource
whitespace is a resource
a whitespace whitespace
is a resource
whitespace is a resource
whitespace is a resource whitespace is a resourceresource
is a resource whitespace is aisresource
whitespace a
whitespace is a resource whitespace resource
whitespace is a
whitespace is a resource
http://www.tudorgirba.com/blog/empty-yourslides
http://www.youtube.com/watch?v=aeXAcwriid0
fill it for a reason
One thing to remember is that slides are not
documents. They do not have the same
purpose and they do not have the same
capabilities. As such, they should not be
treated in the same way.
If you feel the need to rely on a template like
this, you are probably doing something wrong.
Why exactly do we see so many slides that
resemble documents?
Take a look at what we see when we open the
slideware program. The default template wants
us to enter a title and some content in form of
bullets.
It is difficult to not put too many things on a
slide, because the default look of PowerPoint
urges you to add them. Most templates just go
along these lines.
Bullet points are not evil. They are just not the
answer to everything.
And they are especially not the answer to
effective slide design.
22. The projector is a different medium than the
screen.
projector = screen
On the one hand, the projector has a much
poorer resolution, and as the distances from
which it is being watched differ greatly, we can
only rely on it to deliver very few details
accurately.
On the other hand, the projector offers an
opportunity: it allows us to focus on just one
thing, and we can control the advance. This is
an important characteristic that should be used
So, next time you open your slideware
program ...
Start the design of slides from an empty
canvas.
Do not let the default document metaphor
influence your choice.
Take control.
On the one hand, a slide is a poorer graphical
than a printed document.
On the other hand, their dynamic nature offer
an opportunity: focus. A slide should
encapsulate one concept and focus the
attention of the audience.
24. When points are encapsulated in a slide,
transition is what brings cohesion to the story.
trans
ition
The slides overview is perhaps the most useful
tool in your slideware because it is the one that
has the potential to reveal the story.
One rule of thumb is that if you cannot see
what a slide is about in the overview, you
probably have too much on it.
Use the presenter tools to take notice of the
next slide. This is the simplest approach to
control the transition between these points.
slides are
visual
aids
25. Beside being visual, slides should be just aids.
They should only complement the talk, not
replace it.
slides are visual
aids
This is how an empty slide looks like.
And this is how it looks on a white.
You should be able to deliver your message
without slides.
The audience is your friend and it wants you to
succeed because if you would not succeed
they would lose time. And who likes losing time
these days?
http://www.tudorgirba.com/blog/the-audienceis-your-friend
slides are visual
aids
27. Facts alone are boring. And that is a fact.
Regardless of how boring a subject appears to
be, there always is at least one exciting story
hidden in there.
any fact has its own story
Hans Rosling:
http://www.ted.com/talks/
hans_rosling_shows_the_best_stats_you_ve_e
ver_seen.html
content
form
Designing and building the form is typically
perceived as an effort that comes after the
main effort of designing and building the
content. That is not an optimal process,
because we cannot reason about content in the
absence of form.
Content and form must co-exist, because
neither has value without the other.
28. • The histories of class C and E have almost the same
methods were added or removed, therefore the values
LENOM 1..5 value, because of the similar amount of
of ENOM , EENOM 1..5 and of LENOM 1..5 of this
changes in1..5
their recent history. The ENOM 1..5 valclass history are 0.
ues differ heavily because class E was changed more
• throughout its history than class C. B and of class E,
In the histories of class A, of class
7 methods were detected as being added or removed.
3.2 The class histories differ in their LENOM 1..5 and
Measuring Yesterday’s Weather
EENOM 1..5 values which means that (i) the changes
Before defining the YW history of we introduce the noare more recent in the function, class B, (ii) in class E
tion of top n of entities out of an original setandof entities
the changes occurred in its early history, S (iii) in the
with the highestclass A the changes were scattered through
history of M measurement value:
the history more evenly. ˛
2
4
(i > 1; t , t
3
1)
6
D
yesterdayWeatherHits := 0.
2
2
2
8
> 1,
>
<
> 0,
>
:
2
T op
(S, t1)
T op
(S, t2) 6= ;
T op
(S, t1)
T opEEN OMi..n (S, t2) = ;
2
previousClassHistoriesSortedByWENM do: [ :each |
(each value getWENM ~= x) ifTrue: [
future
present
past
valuesCount := valuesCount + 1. x:= each value getWENM].
version
(valuesCount < topPreviousWENM) ifTrue: versions
[
versions
previousVersionsTopHistories addLast: each]
Legend:
].
last2VersionsTopHistories := OrderedCollection new.
a candidate history (i.e., in Top
f class
candie highYesterf these
elongs
on i at
ong the
rsion i.
unction
he two
Figure 4. The detection of a Yesterday’s Weather hit.
last2VersionsTopHistories := OrderedCollection new.
last2Versions := OrderedCollection new.
last2Versions addLast: (self allVersionNames at: (i-1)).
last2Versions addLast: (self allVersionNames at: i).
last2HistoriesSortedByENM := (self classHistories 10 11
System
2 3 4 5 6 7 8 9
selectFromReferenceVersionCollection: last2Versions)
sortBy: [:a :b | a value getWENM >= b value getWENM].
Versions
x := last2HistoriesSortedByENM first value getENM.
valuesCount := 0.
last2HistoriesSortedByENM do: [ :each |
(each value getENM ~= x) ifTrue: [
valuesCount := valuesCount 6 hits
+ 1. x:= each value getENM].
(valuesCount < YW =
topCurrentENM) ifTrue: [
= 60%
last2VersionsTopHistories addLast: each]
10 possible hits
].
previousVersionsTopHistoriesNames := previousVersionsTopHistories
collect: [ :each | each value name].
over := false.
Figure last2VersionsTopHistories do: [:each | overall Yesterday’s
5. The computation of the
((previousVersionsTopHistoriesNames includes: (each value name))
and: [over not]) ifTrue: [
yesterdayWeatherHits := yesterdayWeatherHits + 1. over := true].
].
].
^yesterdayWeatherHits/(self size - 1) asFloat.
(6)
=;
hits for
5
4
E
Figure 4. The detection of a1Yesterday’s Weather hit.
1
2
3
G
System
4
2
Versions
past
versions
F
4
3
5
7
4
5
4
3
6
present
version
7
6
8
6
9
3
hit
10 11
future
versions
Legend:
6 in
a candidate history (i.e.,hits
YW =
One way to explain Topis =via formulas. It can be
it LENOM60% )
1..i
10 possible hits
daunting.
a really-changed history (i.e., in TopEENOM
)
i..n
Figure 5. The computation of the overall Yesterday’s
Figure
Weather. 4. The detection of a Yesterday’s Weather hit.
Example. In Figure 4 we present an example of how we check
System
2 3 4 5 6 7 8 9 10 11
Yesterday’s Weather with respect to a certain version. We display
Versions
6 versions of a system with 7 classes (A-G). We want to check
Yesterday’s Weather when considering the 4th version to be the
present one. Therefore, the versions between 1 to 3 are the past
versions, and the 5th and 6th=are the 6 hits ones. 60%
future
YW
=
We also consider the dimensions of the candidates and the
10 possible hits
really-changed set to be 3, that is, we want to check the assump-
Figure 5. The computation of the overall Yesterday’s
Weather.
(6)
4
)
previousClassHistoriesSortedByWENM do: [ :each |
(each value getWENM ~= x) ifTrue: [
valuesCount := valuesCount + 1. x:= each value getWENM].
(valuesCount < topPreviousWENM) ifTrue: [
previousVersionsTopHistories addLast: each]
].
Weather.
)
)
last2Versions := OrderedCollection new. LENOM1..i
last2Versions addLast: (self allVersionNames at: (i-1)).
last2Versions addLast: (self allVersionNames at: i).
last2HistoriesSortedByENM := (self classHistories
a really-changed history (i.e., in TopEENOM
selectFromReferenceVersionCollection: last2Versions)
i..n
(5)
(7)
I actually did not use formulas. Once I had the
basic Figure 4 we present an example of how we check
Example. Inidea, I just implemented it.
Yesterday’s Weather with respect the implementation to measure
And I could use to a certain version. We display
6 versions of a system with 7 classes (A-G). We want to check
my assumption. It turned out to be my
Yesterday’s Weather when considering the 4th version that the
present one. Therefore, the versions between 1 to 3 are the past
assumption was right:
versions, and the 5th and 6th are the future ones.
On consider systems of the candidates and the
We also some the dimensions it makes sense, on others it
really-changed not.be 3, that is, we want to check the assumpdoes set to
previousVersionsTopHistories := OrderedCollection new.
he noentities
4
Y Wi (S, t1 , t2 )
3
n 26
a candidate history (i.e., in TopLENOM
2
x := previousClassHistoriesSortedByWENM first value getWENM.
hit
valuesCount := 0. 5
3
4
4
6
3
1
i=2
1..i
1
3
3
4
C
http://scg.unibe.ch/archive/papers/
a really-changed history (i.e., in TopEENOM
Girb04bYesterdayWeather.pdf)
2
2
2
2
2
2 i..n
D
(2 to: self allVersionNames size)
|
Yesterday’s 'this algorithm is do: [: iand complex'.
Weather is computed by counting the hits for
self smelly:
too big
all versions and dividing them by5the total number of pos1
4
E
previousClassHistoriesSortedByWENM := (self classHistories
selectFromReferenceVersionCollection:
sible hits. Thus,:bwea obtain the>= currentVersions)
sortBy: [:a
|
value getWENM result as a percentage with
b value getWENM].
currentVersions addLast: (self allVersionNames
values between 0% and 100%. 3 at: i).
1
2
4
7
6
F
G
5
Pn
2
B
7
1 2
yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENM
3
9
9
topCurrentENM 4
| currentVersions previousClassHistoriesSortedByWENM 1..i
LEN OM
yesterdayWeatherHits last2VersionsTopHistories last2Versions
EEN OMi..n
last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories
1 12
i
3
4
C previousVersionsTopHistoriesNames over | 3
LEN OM1..i
currentVersions := OrderedCollection new.
currentVersions addLast: (self allVersionNames at: 1).
2
B andTopCurrentENM:
Y W (S, t , t ) =
e same
ount of
.5 vald more
5
2
1
2
4
F
Let me tell you a7story about the first paper I
hit
ever 3wrote. 5It was about predicting changes in
4
4
6
3
G
a software system using a Yesterday’s Weather
2 past
4
3
5
6
A
future 7
present
versions
metaphor. 3 version versions
Legend:
2
4
9
9
changes in their recent history. The ENOM 1..5 values system version i, we compare the set of more
For a differ heavily because class E was changed class
throughout its history LENOM
histories with the highest than class C.values (the candi1..i
dates set) with the set of the class histories with the high3.2 Measuring Yesterday’s Weather
est EENOM i..n values (the really-changed set). The Yesterday’s Weather assumption holds if the intersection of these
setsBefore empty, that is at least one class history belongs
is not defining the YW function, we introduce the notion of sets.nThis means out of an original set S of entities
to both top of entities that for the classes in version i at
with the of the recently most changed classes is among the
least one highest M measurement value:
most changed classes in the near˛future relative to version i.
˛ S 0 S,
˛
If the assumption holds for version i0 ✓= n
we have a hit.
˛ |S |
(0 <formally define the Yesterday’s Weather hit function
n < 1) T opM (S, n) = S 0 ˛
(5)
We
˛ 8x 2 S 0 , 8y 2 S S 0
˛
˛ M (x) > M (y)
applied on version i of a system history S and given the two
threshold values t1 and t2 as follows:
For a system version i, we compare the set of class
histories t1 , t2 the highest LENOM 1..i values (the candi(i > 1; with 1)
dates set) with the set 8 the class histories (S, t1) highof
with the
>
> 1, T opLEN OM1..i
<
est EENOM i..n values (the really-changed set). t2) 6=YesterT opWeatheri..n (S, The ;
EEN OM applied on
We formally define, tthe=
Yesterday’s
Y Wi (S,
(6)
day’s Weather t1 2 ) > 0, T opLEN OM1..i (S, t1)of these
assumption holds if the intersection
>
:
n versions of a system history S given two threshold values;
T opone class history =
EEN OMi..n (S, t2) belongs
sets is not empty, that is at least
t1 and t2 as in Equation 7.
to both sets. This means that for the classes in version i at
Yesterday’s Weather is computed by counting the hits for
least one of the recently most changed classes is among the
all (n > 2; t1 ,and dividing them by the total number of posversions t2 1)
most changed classes in the near future relative to version i.
Pn
sible hits. Thus, we obtain the 1result(S, t1 , t2 )
Y W as a percentage with
If the assumption tholds = version ii we have a hit. (7)
Y W1..n (S, 1 , t2 ) for i=2
values between 0% and 100%. n 2
We formally define the Yesterday’s Weather hit function
applied on version i of a system history S and given the two
threshold values t1 and t2 as follows:
4
A
1
1)
Y W1..n (S, t1 , t2 ) =
˛ S 0 ✓ S,
˛
• < n <histories of(S, n) = S 0 ˛ |SE| = n almost the same
The 1) T op class C and 0 have
˛
(0
(5)
M
0
0
˛
LENOM 1..5 value, because 8x 2 S ,similar amount of
˛ of the 8y 2 S S
˛ M (x) > M (y)
lass E,
moved.
.5 and
hanges
class E
) in the
hrough
2
E (n > 2; t1 , t2
yesterday’s
weather
s D the
that no
values
of this
=;
t1 andDt2 as in Equation 7.
2
2
2
Example. In Figure 4 we present an example of how we check
Yesterday’s Weather with respect to a certain version. We display
6 versions of a system with 7 classes (A-G). We want to check
Yesterday’s Weather when considering the 4th version to be the
present one. Therefore, the versions between 1 to 3 are the past
But, something bothered me. Even if Smalltalk
is a beautifully concise language, my code was
loong.
29. yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENM
andTopCurrentENM: topCurrentENM
| currentVersions previousClassHistoriesSortedByWENM
yesterdayWeatherHits last2VersionsTopHistories last2Versions
last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories
previousVersionsTopHistoriesNames over |
currentVersions := OrderedCollection new.
currentVersions addLast: (self allVersionNames at: 1).
yesterdayWeatherHits := 0.
(2 to: self allVersionNames size) do: [: i |
self smelly: 'this algorithm is too big and complex'.
previousClassHistoriesSortedByWENM := (self classHistories
selectFromReferenceVersionCollection: currentVersions)
sortBy: [:a :b | a value getWENM >= b value getWENM].
currentVersions addLast: (self allVersionNames at: i).
previousVersionsTopHistories := OrderedCollection new.
x := previousClassHistoriesSortedByWENM first value getWENM.
valuesCount := 0.
previousClassHistoriesSortedByWENM do: [ :each |
(each value getWENM ~= x) ifTrue: [
valuesCount := valuesCount + 1. x:= each value getWENM].
(valuesCount < topPreviousWENM) ifTrue: [
previousVersionsTopHistories addLast: each]
].
last2VersionsTopHistories := OrderedCollection new.
last2Versions := OrderedCollection new.
last2Versions addLast: (self allVersionNames at: (i-1)).
last2Versions addLast: (self allVersionNames at: i).
last2HistoriesSortedByENM := (self classHistories
selectFromReferenceVersionCollection: last2Versions)
And I knew it was ugly and that I should do
something about it. I just did not know what.
yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENM
andTopCurrentENM: topCurrentENM
| currentVersions previousClassHistoriesSortedByWENM
yesterdayWeatherHits last2VersionsTopHistories last2Versions
last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories
previousVersionsTopHistoriesNames over |
currentVersions := OrderedCollection new.
currentVersions addLast: (self allVersionNames at: 1).
And the worse thing of all was that nobody
could really understand what I was doing. Of
course, the paper got rejected, too.
yesterdayWeatherHits := 0.
(2 to: self allVersionNames size) do: [: i |
self smelly: 'this algorithm is too big and complex'.
previousClassHistoriesSortedByWENM := (self classHistories
selectFromReferenceVersionCollection: currentVersions)
sortBy: [:a :b | a value getWENM >= b value getWENM].
currentVersions addLast: (self allVersionNames at: i).
previousVersionsTopHistories := OrderedCollection new.
x := previousClassHistoriesSortedByWENM first value getWENM.
valuesCount := 0.
previousClassHistoriesSortedByWENM do: [ :each |
(each value getWENM ~= x) ifTrue: [
valuesCount := valuesCount + 1. x:= each value getWENM].
(valuesCount < topPreviousWENM) ifTrue: [
previousVersionsTopHistories addLast: each]
].
last2VersionsTopHistories := OrderedCollection new.
last2Versions := OrderedCollection new.
last2Versions addLast: (self allVersionNames at: (i-1)).
last2Versions addLast: (self allVersionNames at: i).
last2HistoriesSortedByENM := (self classHistories
selectFromReferenceVersionCollection: last2Versions)
30%
90%
I stepped back. What exactly was I doing? I
thought of a metaphor.
In Switzerland, using yesterday’s weather as a
predictor for today’s weather is a poor
prediction model.
However, in Sahara, it is a great way to predict
weather, given that most days look like the
previous one.
This prediction model is contextual to the place,
or system, in which it is to be applied. So,
past
YesterdayWeatherHit(present):
past:=all.topChanged(beginning, present)
future:=all.topChanged(present, end)
past.intersect(future).notEmpty()
future
I eventually created a small picture and based
on that I rethought the model.
It turned out that the algorithm to check the
assumption for each day was three lines long.
30. Figure 4. The detection of a Yesterday’s Weather hit.
For a system version i, we compare the set of class
histories with During the displayed history (5 versions) of class D the
the highest LENOM 1..i values (the candi•
We formally define the Yesterday’s Weather applied on
dates set) with the set of the class histories with the highn versions of a system history S given two threshold values
est EENOM i..nnumber of methods remained 2. We consider that no
values (the really-changed set). The YesterSystem
2 3 4 5 6 7 8 9 10 11
t1 and t2 as in Equation 7.
day’s Weather methods wereifadded or removed, therefore the values
assumption holds the intersection of these
Versions
sets is not empty, ENOM least, one class history and of LENOM
of that is at 1..5 EENOM 1..5 belongs
of this
1..5
to both sets. This means that for the classes in version i at
(n > 2; t1 , t2
1)
least one of theclass history are 0.classes is among the
recently most changed
6 hits
Pn 1
most changed classes in the near future relative to version i. past
future YW = 10 possible hits = 60% W (S, t , t ) = i=2 Y Wi (S, t1 , t2 )
Y 1..n
(7)
• In the for version we have a hit.
1 2
If the assumption holds histories iof class A, of class B and of class E,
n 2
We formally define the Yesterday’s Weather hit function added or removed.
7 methods were detected as being
applied on version i of a system history S and given the two
Figure 5. and
The class histories differ in their LENOM 1..5 The computation of the overall Yesterday’s
threshold values t1 and t2 as follows:
Weather.
The pseudocode matches the math formula,
too.
EENOM 1..5 values which means that (i) the changes
2
4
3
A
1)
are more recent in the history of class B, (ii) in class E
8
> 1, T opLEN OM (S, t1)
>
the changes occurred in(S, t2) 6= ; history, Example. Inin the4 we present an example of how we check
its early
and (iii) Figure
<
T opEEN OM
2
3
B
Y Wi (S, t1 , t2 ) =
(6)
Yesterday’s through
history>of classLEN OM changes were scattered Weather with respect to a certain version. We display
> 0, T op A the (S, t1)
:
T opEEN OM
(S, t2) = ;
6 versions of a system with 7 classes (A-G). We want to check
the history more evenly.
Yesterday’s Weather when considering the 4th version to be the
6
7
4
9
9
3
3
4
2
2
2
1
5
4
1..i
i..n
1..i
i..n
1
C
Yesterday’s Weather is computed by counting the hits for
present one. Therefore, the versions between 1 to 3 are the past
all versions• The histories of classnumber ofE have almost and thesame 6th are the future ones.
and dividing them by the total C and posversions, the 5th and
sible hits. Thus, we obtain the result as a percentage with
We amount the
the
2
2
LENOM 1..5 value, because of the similar also considerof dimensions of D candidates and the 2
values between 0% and 100%.
really-changed set to be 3, that is, we want to check the assump-
changes in their recent history. The ENOM 1..5 values differ heavily because class E was changed more
4
throughout its history than class C.
3.2
E
F
(0 < n < 1)
of class E,
r removed.
M 1..5 and
he changes
) in class E
(iii) in the
ed through
t the same
amount of
M 1..5 valnged more
class D the
der that no
the values
1..5 the this
ce of noof entities
of class E,
r removed.
M 1..5 and
(5)
he S 0
changes
) in class E
(iii) in the
et of class
ed through
the candih the highThe Yestert the same
on of these
amount of
ry 1..5 valM belongs
version i at
nged more
among the
o version i.
it.
it function
ven the two
ce
noof entities
(5)
(6)
et of class
the hits for
the candiber of posh the high-
˛
˛
˛
˛
0˛
T opM (S, n) = S ˛
˛
˛
S 0 ✓YW = 3 / 8 = 37%
S,
|S 0 | = n
8x 2 S 0 , 8y 2 S S 0
M (x) > M (y)
Yesterday’s Weather applied
2
2
(i > 1; t1 , t2
2
2
2
7
3
6
3
4
5
4
6
3
hit
1..i
a really-changed history (i.e., in TopEENOM
(5)
)
i..n
)
Figure 4. The detection of a Yesterday’s Weather hit.
System
2
3
4
5
6
7
8
9
10 11
Versions
YW =
6 hits
= 60%
10 possible hits
Math formulas became more understandable.
Figure 5. The computation of the overall Yesterday’s
Weather.
2
1)
8
> 1, 1T opLEN OM1..i (S, t1)
5
4
>
<
T opEEN OMi..n (S, t2) 6= ;
Y Wi (S, t1 , t2 ) =
(6)
0, T opLEN OM1..i (S, t1)
>
:
1
2
4>
7T op
3
6 (S, t2) = ;
F
We formally define the Yesterday’s Weather applied on
EEN OMi..n
Example. In Figure 4 we present an example of how we check
Yesterday’s Weather with respect to a certain version. We display
6 versions of a system with 7 classes (A-G). We want to check
Yesterday’s Weather when considering the 4th version to be the
present one. Therefore, the versions between 1 to 3 are the past
versions, and the 5th and 6th are the future ones.
We also consider the dimensions of the candidates and the
really-changed set to be 3, that is, we want to check the assump-
n versions of a system history S given two threshold values
hit
3
4
5
4
6
3
Yesterday’s Weather is
t1 andG 2 as in Equation 7. computed by counting the hits for
t
all versions and dividing them by the future number of postotal
present
past
versions
sible hits.>Thus,t2 obtain version
the result versions
as a percentage with
(n 2; t1 , we 1)
Legend:
values between 0% and 100%.Pn 1 Y Wi (S, t1 , t2 )
i=2
Y W1..n (S, t1 , t2 ) =
a candidate history (i.e., in TopLENOM
n 2
1..i
a really-changed history (i.e., in TopEENOM
2
4
a candidate history (i.e., in TopLENOM
E
A
2
Obtaining the overall value was just an
future
present
past
versions
version
versions
average.
Legend:
Wehit
formally define the
hit
hit
hit
hit
hit
hit on
n versions of a system history S given two threshold values
For a system version i, we compare= the 8set87% class
YW 7 / = of
t1 and t2 as in Equation 7.
histories with the highest LENOM 1..i values (the candidates set)> 2; t ,the set of the class histories with the highwith t
(n
1)
1 2
est EENOM i..n values (the really-changed set). The YesterPn 1
Y Wi (S, t1 , t2 )
day’s Weather assumption )holds i=2the intersection of these
if
Y W1..n (S, t1 , t2 =
(7)
n 2
sets is not empty, that is at least one class history belongs
to both sets. This means that for the classes in version i at
least one of the recently most changed classes is among the
2
4
3
5
6
7
most A
changed classes in the near future relative to version i.
If the assumption holds for version i we have a hit.
2
3
4
9
9
B
We formally define the Yesterday’s Weather hit function
applied on version i of a system history S and given the two
1
3
3
4
C
threshold values t1 and t2 as follows:
D
1
G
Measuring Yesterday’s Weather
Before defining the YW function, we introduce the notion of top n of entities out of an original set S of entities
with hit highest M measurement value: hit
the
hit
class D the
der that no
the values
1..5 of this
1)
t2) 6= ;
S
1)0
t2) = ;
5
(i > 1; t1 , t2
4
3
5
6
(7)
)
i..n
)
4
7
Figure 4. The detection of a Yesterday’s Weather hit.
2
C
3
4
9
9
1
B
3
3
4
yWFor: yesterdayCheck for: tomorrowCheck
^ ( 3 to: self versions size ) collect: [ :i |
| System2
22 32 4 5 2 6 7 28 92 10 11
D yesterday tomorrow |
yesterday := self
Versions
selectByExpression: yesterdayCheck
appliedFromVersionIndex: 1
1
5
4
E
toVersionIndexAndPresentInIt: i - 1.
tomorrow := self
selectByExpression: tomorrowCheck
1
2appliedFromVersionIndexAndPresentInIt: i - 1
4
76 hits
3 = 60%
6
F
YW =
toVersionIndex: self versions size.
yesterday intersectWith: 10 possible]hits
tomorrow
hit
3
4
Figure 5.
past
G
5
4
present
6
3
future
The computation of
yWFor: yesterdayCheck for: tomorrowCheckthe overall Yesterday’s
versions
version
versions
| hits |
Weather.
Legend:
hits := (self detailedYWFor: yesterdayCheck for: tomorrowCheck)
sum: [ :each |
each isEmpty
a candidate history (i.e., in TopLENOM
)
ifTrue: [0]
1..i
ifFalse: [1]].
^ hits / (self versions size - 2)
Example. InaFigure 4 we present an example of how we check
really-changed history (i.e., in TopEENOM
)
i..n
Yesterday’s Weather with respect to a certain version. We display
6 versions of a system with 7 classes (A-G). We want to check
Yesterday’s Weather when considering the 4th Weather to be the
Figure 4. The detection of a Yesterday’s version hit.
present one. Therefore, the versions between 1 to 3 are the past
versions, and the 5th and 6th are the future ones.
And, in the end, even the actual
implementation became similarly simple (and
even more generic).
All in all, it was because I could not present the
idea, that I had to rethink the approach
altogether. Of course, I could have just
accepted that the problem is just too complex
and cannot be made simpler, but that is never a
good enough point.
31. Content and form must co-exist, because
neither has value without the other.
content
form
If you think design is for designers, please
change your mind. Design is not a job. Not
anymore. Today it is a responsibility.
are
you
a
designer?
Specifically related to talks, it is in everyone’s
best interest to have interesting talks. No
audience wants to be bored or be left
uninterested.
When you take the stand, the responsibility
falls on you.
presenting is storytelling
www.tudorgirba.com
moosetechnology.org
humane-assessment.com
www.tudorgirba.com
demo-driven.com
pharo.org