Pure Functional Programming in Excel

Felienne Hermans

Recorded at GOTO 2016

Get notified about Felienne Hermans

Sign up to a email when Felienne Hermans publishes a new video

hello everyone my name is Flint animals
I'm assistant professor at Delft
University of Technology I'm on Twitter
as well so if you want to rape me not
through the app but by sending a tweet
then feel free to do so
so maybe you're wondering at a
Developers Conference why we are talking
about spreadsheets so my view on this is
spreadsheets are definitely mislabeled
many people think of spreadsheets as
being data but spreadsheets are not data
spreadsheets are code this is the gospel
of my life spreadsheets are gold I go to
all sorts of conferences to share the
happy word that spreadsheets are code so
if you want to leave now or fall to
sleep or do some email that's fine
because this is already the most
important message of my talk right there
right cheats are good so you might
wonder why well I have three reasons for
this the first reason that spreadsheets
are code is they're used for similar
problems as you see here this is an
investment calculation where you put in
some numbers and an investment advice
comes out you could make this in any
programming language I mean you could do
it in and C or an objective-c if you
want an iPad app in Java or in a
spreadsheet it doesn't really matter
there's nothing special about this
problem that makes it spreadsheet
specific of course you could wonder why
do people do this in a spreadsheet I
have asked people this so during my PhD
dissertation I've worked with several
banks and investment companies in the
Netherlands and I asked them like why
are you building this why aren't you you
know asking your IT provider for some
software you know why because we are bad
at making software seriously they have
tried this they've went to their IT
provider either internally or externally
and they say look I've I've made this
spreadsheet and it's sort of okay it's
like a prototype can you can you build
me some so far for that and the IT
provider goes like yeah sure no problem
that will be at six months and a million
euros and if that were only true it
wouldn't be that bad but it's never six
months in a million euros is nine months
and it's three million euros and in
has half the features they want so
end-users perceive themselves as better
programmers than us and I mean they're
not entirely wrong in that because they
can quickly build prototypes to do what
they want so I go to great lengths to
make my points to such great lengths in
fact that I have built a Turing machine
in Excel formulas to show that
spreadsheet formulas are Turing complete
so no more saying please that
spreadsheet are not a real programming
language because this is a Turing
machine every row by the way is one
iteration of the tape and with
conditional formatting I'm moving the
head over the tape so it's also I think
a nice visualization of a Turing machine
you can easily see what's going on you
see the history stored in the rows as
well instead of just a head moving over
a real tape and many people and enjoy
this lots it sort of went viral on the
internet and it brought my personal blog
down for half a day because it was on
Hacker News and already so the third
reason that spreadsheet should
absolutely be treated as pieces of
source code is this suffer from typical
software engineering problems only one
entry spreadsheets has a manual an
average spreadsheet is used by 12
different people over life span of five
years does that sound familiar that is
exactly the type of problems that
software is suffering from and
especially was suffering from let's say
30 or 20 years ago in those days
everyone was an end user there were no
so friend hearing degrees yet there were
no tools everyone was just building
their own stuff and then so for
engineering software suffers from those
problems as well and spreadsheets still
do today so in summary the activities
the complexity and the problems
surrounding spreadsheets are the same as
software's or spreadsheets are code
there's no denying it anymore but I'm
going to go for it on that it's not just
a programming language Excel actually is
the next programming language you should
learn why the resistance is
why first of all spreadsheets are live
programming who knows who made this is
anyone familiar with this picture yeah
who made it you know that's okay
so it's made by a guy called bread
Viktor and what he proposes here is the
idea of life programming so on the left
side you have the instantiation of the
source code that you see on the right so
if you change something here a number or
color or an integer the tree will change
immediately so there's no compiling
involved it live update and he go into
this from live programming well that's
awesome bread Victor where we had that
since VisiCalc
I mean a spreadsheet is live programming
you change your formula and
automatically everything updates there's
no compilation involved there either so
functional programming is sort of like
back from from the almost dead it's
getting more and more mainstream so you
know what else is pure functional
programming excel is pure functional
divided by definition side-effect free
the only thing a formula can do is take
input from different formulas and
produce a value a formula cannot change
the results of an order formula or
another cell so there are no side
effects isn't that fantastic thirdly
everyone knows spreadsheets people
is managing his soccer team's finances
in a spreadsheet your accountant is
probably doing your taxes in a
everyone knows Fred sheets except us
developers isn't that sort of sad I I
really like to say that spreadsheets are
the most successful programming language
in the history of mankind it's such a
good programming language that people
don't even know their programming isn't
that fantastic I mean imagine doing Java
by accident that will never happen when
people are programming in a spreadsheet
without even knowing their programming
how successful is that so I'm going to
assume now that you're convinced that
spreadsheets are good and that you're
also good
the spreadsheets are pretty cool so let
me show you some typical programming
ideas implemented in a spreadsheet to
show you how super awesome they are
let's so Uncle Bob says that functional
programming is programming without
assignment statements so let's see how
that looks like in the spreadsheet we
are going to take a typical example
we're going to square some integers and
let's take it easy I know it's late in
the day so I have a number of values
here and what I want is the square so
that is still pretty easy what I can do
is I just multiply the number with
itself now I can drag that down or
probably you know this you can drag a
formula down and then it automatically
updates the location you can also double
click there and then it goes
automatically so what we have is a list
of inputs and we have a function
definition this is just defining a
function over an input it's like a map
we're mapping the function over all the
inputs but now you're going to say as
developers and this isn't pretty because
all those formulas look slightly
different but I can fix that I can give
those that first column a name I'm going
to call that input and what I can do now
is I can refer to that names range in
this way I'm dragging this input down
and what happens now is every value in
this range gets the value that's the
intersection of this row and the named
range so I can delete that and what I
can do now there instead of referring
directly to the formula I can say inputs
times inputs isn't that nice and now it
looks like more proper programming at
school huh it's the same everywhere so
it's really like a function and you can
do that without having the ugly
spreadsheet like a 2 and a 3 so let's do
something a little bit more exciting
because this is still quite easy so what
we want what we would like to have is
the sum of all squares that are over 30
so I can make a simple boolean I'm going
to say which of those values is bigger
than 30 that's still you know super easy
and see we have square here so again
here everywhere we have a nice
consistent formula no a 3s and a 7s just
a nice formula we can use this sum F now
to sum all of the values in the squares
over 30 it's sort of nice in that zoom
if over 30 if this is true then I'm
swimming the square value but it takes
it takes a lot of real estate there's a
lot of room I need for all those extra
squares and extra boolean's so what do
we want to do is something a little bit
more efficient what I would like to do
is I would like to multiply those two
ranges directly so multiply the squares
with the boolean that internally is
re-written to 0 or 1 so you can multiply
with it what I could do is multiply
input by input but that's not it because
what I showed you earlier is if you have
a range if you refer to the range you
get the intersection of the row and that
range so that's not what we want
but it is close what we can do is use
control shift and then Excel makes this
into an array function and that means we
can calculate with ranges or arrays as
first-class citizens so if I just type
the same formula and hit control shift
enter I get this and I got a different
value C without curlies it's this and
with Curly's it's this what's happening
here is this entire input range is
multiplied by an entire second input
range and the result of those two ranges
because it's pairwise multiplication is
another range so what we're seeing here
is the first item of the results of this
range multiplied by itself and if I
would give it a little bit of space I
going to show you I think the first five
elements so I'm copying this formula now
here and then we get the first five
elements of the array so now you can see
that that array formula action
the results in a real second array of
which I'm showing a few values what I
can do then is I can reduce that array
so I have all the values now I could sum
it so I could do this
the sum of this range multiplied by
itself so in just one formula we don't
need all the extra cells just in one
formula I'm multiplying the range pair
wise with itself and I'm swimming
everything and then I can also put in
the filter I can multiply input by input
and then multiply it by whether or not
that is bigger than 30 and then I get
the same value here but I could delete
all those extra cells I don't need them
because everything is reduced so it's
pretty efficient if you know about all
these special functions like array
formulas so something else I want to
talk about is how error values work in
Excel probably you've never really
thought about it because they are so
intuitive and nice but there's something
interesting going on there so suppose
again you have a number of inputs and
I'm going to see this with some random
data between 0 and 3 so sometimes we get
zeros there suppose I would want to
divide by that random data column and
I'm going to call that the danger zone
because it's really very dangerous
danger dividing by 0 Excel warns us
Excel gives an error and say watch out
this is an error so think about this for
a minute what is the data type if we're
saying this is an integer what is the
data type of that range who's a
functional programmer here yes
look at this guy's it's a monads in
Excel it's a maybe int this is a
700-million Excel users they just use
monads without any problems they don't
even think about it
because if we have another column that
uses this may
baby ends as an input it just works look
we have Veera calculate some more column
that just takes the maybe int and works
with it
without any problem so this plus here is
lifted and just apply it to the ends so
we go from a plus that works on integers
seamlessly to a plus that works on maybe
an integer or an error value isn't that
awesome I think it's pretty cool so
let's do some more real programming
because now you're saying yeah but a
little bit of filtering a little bit of
swimming that's that's not something
that I'm really going to use let's
tackle a bit more exciting problem so
what we have here is a maze and it's
filled with money so I want to have a
walk through this maze that gives me
most money I'm a poor academic so I need
to get my money from programming
examples that are set in a maze so what
I could do of course would just work is
going to start here so this is the
beginning of my maze but it's easier to
start at the end and work our way back
so what we can do is we can say the
value then what we can achieve most but
the most money is that we can get from
our maze there are two options either I
came from that way or I came from that
way that's that's the only two options
that could have happened if I have
reached the end of the maze so I'm
simply going to take the maximum of
those two so the maximum that I could
achieve here or the maximum that I could
paths through the maze so this this is a
solution that works however there is a
problem with this solution does anyone
know what our problem is so it's not
very efficient yes it's not very
efficient it's not really solve it so
but it's not really solved because for
example this path through the maze every
recursive goal you would try all the
paths next
course of goal so if you're here you try
all the pads and then you're again
you're here and you try all the pads so
it works but it's very expensive because
you keep exploring the entire maze so
what we could use here is a technique
called dynamic programming and what
dynamic programming does is it saves
half states of the problem in order to
be more efficient you don't have to
calculate everything you calculate
subproblems you calculate the whole
problem from subproblem so here is our
maze and we're going to have an extra
worksheet called max and what we're
saving there is the maximum value at
that square in the maze so those are
easy this one and that one there's only
one way you can reach that square the
only way to get there is like that
because we're only moving that way so
those are easy but the rest of the maze
what I want to do there is I want to
look at what is the best way I could
have achieved this sub-problem so far so
I'm taking the maximum of those two
steps before me plus whatever is in this
field of the maze so either I came from
that way or it came from that way plus
whatever was already there now I have
the same formula for all those squares
in the maze and I have my answer that's
it that's the whole solution and if you
compare that to this is a very famous
problem in computer science with the
solution in C or even in high school it
really looks very easy in a spreadsheet
this is the only formula you need for
the entire maze and you have your answer
however it's a bit cumbersome because
now I have the value but what I also of
course would want to know is what is the
path through the maze how am I supposed
to walk in order to obtain all that
money and of course I could find it out
because every time I could look what is
the best of those two and what is the
best of those two and I could retrace my
steps but that's too much work I'd
rather have Excel do the thinking for me
I do it myself so what I'm going to do
is instead of printing the values I'm
going to print the pads with arrow like
symbols and those error like symbols are
going to indicate how I'm walking
through the maze so here is relatively
easy because again if we're on the
border of the maze there chose one way
we could go up and in this case left
those are the only options we have
because we're only walking now we're
walking back so we're only walking up
then in this case if I want to detect
where I was coming from in my optimal
solution I can just say well I'm going
to point at a maximum if the maximum is
above me I'm going to print this and if
the maximum is next to me I'm going to
print that and now we have sort of a
vector field of our maze Lutz looks
interesting and I could say it's solved
because I can just follow the arrows now
I could go like this to two that way and
then that way that's that's how we're
going but still it's too much thinking
so let's just tweak the formula a little
bit such that the solution looks
somewhat nicer I'm only going to print
something if the cell is being pointed
at only if I'm really in the fat I'm
printing and otherwise I just brands and
at the antis tree because that will look
very pretty so there we go if the value
below me is this if I mean points it at
from the bottom then I'm printing
something and otherwise I'm printing the
empty string still sort of an easy for
malonic it looks nice but we're only
going one way now you see we're only
here is now stalled so we need one more
thing because now we're only pointing to
that from below we also want to print if
we're point to that from the sides
almost the same we just add this
we're just saying if the value next to
us is that arrow we're printing as well
and otherwise it's the empty string and
then we get this at all
that's our bad our money-making fads
true the whole maze and it's really a
very easy formula it's just if I'm being
pointed at I'm going to print the
maximum and otherwise I print the empty
string and the nice added value that you
see now the power of live programming
and having the data and the formulas
together is that every step of the way
it was very clear what was happening now
I'm printing values now I'm printing
strings you're very in touch with your
data whereas if you're doing this by
reading from a text file probably you're
using pen pen and paper to track okay
what am i printing what am i doing
there's print statements everywhere or
you're using the debugger you have to
spend lots of efforts to remain in touch
with your data hours here the day eyes
is right there it's screaming at you
like use me
give me some formulas and I will tell
you what I'm up to and that makes
spreadsheet programming really very very
easy and intuitive
so in summary spreadsheets are good if
everyone said anyone close to you said
it's just a spreadsheet hit them on the
head with something really tell them
it's untrue spreadsheets are real
programming and it's super cool so of
course this is sort of the the main idea
behind all the research I'm doing at
Delft University of Technology is if
spreadsheets are code then maybe they
need some software engineering maybe we
as software engineers know how to
support people that are building
spreadsheets because in software as I
said in the beginning of my talk thirty
years ago 25 years ago everyone was an
end-user programming everyone was
building their own compiler and then 10
years later people were like oh yeah no
the program is so burning probably we've
lost a compiler and also the person that
built it isn't working here anymore
died and no either so we saw those
problems and we realize as community we
need to improve we need to build some
tools to help people maintain
in legacy code so if you look at a
modern ie while this screenshot isn't
all that modern anymore but if you look
at a IDE you see it at all as all sorts
of features like debugging and testing
and analyzing those features are not
helping me to build codes to write codes
they're helping me to write responsible
code to be a good developer I'm going to
test my code I'm going to analyze code
metrics from now now and then it's
helping me to be a good developer then
if I look at Excel yeah it has support
for making things to different phones or
a different color it has no support for
anything no IDE lying features helping
spreadsheet developers to build good
spreadsheets so whether they have the
first version of my of the first example
I showed you with a two times a three or
they use nice names for everything no
one at least not the interface is
telling them maybe you shouldn't you
shouldn't go everything a five maybe
should give some names here and there so
we go spreadsheets are so similar to
source code is what I observe maybe we
can help
spreadsheet developers with some ideas
from source from so for engineering so
one of the things I build mi PC
dissertation is the idea of code smells
for spreadsheet formulas for example the
long method smell if you have a method
that's very long that does lots of
things it easily translate to long
formula if you have a formula and then
we're not really saying long in terms of
real length but we're looking at the
number of different operations so in
this formula we're summing and
multiplying and dividing if a lot is
going on in a formula it's just a smelly
and for the same reason as long
Methodist smelly another smell we know
from source code is the many parameter
smells you have a method and it has all
these knobs and buttons you can press
that's not very maintainable well if you
look at the spreadsheet format it's
referring to that and that and that and
that very very hard to read
conditional complexity is a smell it's
it exactly translates to spreadsheets we
have an if so you can mess them and I
used to be a limit I think of seven
layers of nesting but for reasons
unknown to me they have lifted that band
so you can now nest up to I'd and I was
sixty-four depths or something like that
oh this really really happens that
people nest six seven eight ifs well if
you have to be bug that it's just
horrible something we also inspected is
the use or the occurrence of clones like
we know clones in source code can be bad
because if you have the same
functionality in multiple places if you
have to make a change it has to be
changed everywhere this happens in Excel
as well for example in this formula you
have this soup formula that occurs twice
and this is not just bad for
maintainability but actually also for
execution speed of Excel because the way
the Excel caching model works is Excel
caches sell results but it doesn't cache
all sub formula so the execution engine
in this case would be like oh you want
to have the exponent of zero minus G 36
times C 36 no problem calculate pool and
then it would be there and then again we
think oh the exponent of 0 minus 336 it
would not remember that has already been
calculated so if you would extract that
sub part into a cell you would also get
the added benefit of more speed because
it's only calculate at once so we found
that those smells not only occur at the
formula level we have a tool that
visualizes dependencies between
worksheets as you can see here so the
blocks are worksheets and the arrows
connect worksheet so if there's a
formula here that would be a formula in
calculation 2 that would say input a 1
times 12 or something like that so
unfortunately not all visualizations
looked as structured as this one some
visualizations look like this still ok
some visualizations look like this which
is particularly interesting you can't
read it but these are the three quarters
2 3 and 4 with their corresponding month
but this is q1 with January February and
March so it somehow had a different
structure than all the other moms I mean
we asked the person that build this he
said yeah yeah
you know I started like a prototype in
q1 and I didn't really know what I
wanted yet
and then in q2 of course I I started all
afresh and then I really knew how to
build my model but then of course time
went by and as it goes it became January
again I totally forgot that that first
quarter was like back of a napkin I
didn't know what I'm building yet in the
model state of life with those two
different calculations so how would you
know without a visualisation tool like
this other visualizations look like this
also interesting so that's Dutch for
sheet 1 and G 2 you can't really see but
this is an arrow going both ways so all
the data went from the one worksheet to
that all the sort of the worksheets had
the same structure and all these
formulas were connecting and all the
connecting of the same worksheets so
there was definitely an opportunity
visualization like this where the
pinkish blocks are external worksheets
so this spreadsheet is referring to
different worksheets in different files
so they got this thing the model sheet
where we got it from and the whole
process around it was people emailing
someone spreadsheets they were put in a
special folder and then you open the
spreadsheet and it were freed all the
other spreadsheets yeah exactly you know
it was very wobbly to say the least so
we concluded that those smells don't
really occur only at individual formula
level but you can also have inter
worksheet smells like you can also have
inter class smells so who knows what
smell these classes are exhibiting when
I did this talk at another conference
someone yelled bad naming which is true
when I was what I was going for and I
was too lazy to change my slides so it's
not bad
yes a t-shirt for you this is the
feature and we smell because that method
here XY is it's it's envious its jealous
of those wonderful fields X&Y in Class A
it would rather live in Class A where
the fields are that it's so interested
in so this is a smell that also easily
transforms to spreadsheets if you have a
formula that refers to cells on another
worksheet then probably it's better if
it would go there this is an example
from an actual open data spreadsheet set
that we've analyzed so you see formulas
like this so we're on the income
statement worksheet and we have this
formula so if you if the quo if my boss
asks me what does that formula actually
really do ah if I have to debug it it
would go like this
okay required funds b9 that is buildings
amount of amount of buildings divided by
a required funds c9 that is depreciation
of the buildings etc etc you have to go
back and forth between all those cells
all the time to really read what's going
on then we know from cognitive science
that context switches are very expensive
if you have to switch views all the time
that's super annoying so what you could
do is take that formula and put it on
the required funds worksheet just take
it and copy paste it there and the added
benefit is that if you click it now
Excel will Cooler the dependence for you
which is nice I mean it's still sort of
a rainbow because these this is actually
three different color screen but at
least it's better because you can sort
of see what's going on and you don't
need to prefixes anymore either because
you're already on the required funds
worksheet or you can drop them which
makes the form a load shorter and then
you start to see some structure all your
these three things divided by each other
plus these three things divided by each
other so it's really a lot better like
it is in source code to place the
formula where it belongs
oh you could factor out 2/12 that's true
that's definitely true too so we started
a spin-off company called import wrong
we have a tool that does this smell
detection for you quick commercial break
where you can just upload your
spreadsheet and we tell you all the
smells that are in there so this would
be how it will look like for the
spreadsheet I just showed you well look
there then there more than 10 references
to that worksheet you should move it to
a different sheet then of course if you
say smells you say I have my hopes when
you're really reassuring definitely if
you have smells then you should refactor
your source code which also goes for
spreadsheets so in addition to giving
the suggestions as we did in the
beginning in the slide I showed you we
also have a refactoring tool that helps
people refactor their spreadsheet so
this is how it looks like it's called
bumble bee and the spreadsheet user can
ask for example for this formula it's a
simple example but it's sum divided by
account so you could also use a average
function so maybe this person isn't
aware that that average function exists
probably in this case it would be aware
over there for example also refactoring
tree supports going from assumed to
assume if and not everyone knows what is
some it is or how it works so you can
ask bumblebee do you have some
interesting rewrites for me can I
improve this formula and says yeah sure
we have some accounts to average
refactoring for you and like in modern
IDs you get a preview as well this is
how the formula will look like if you
have refactor it in and then you can
apply it and we'll movie just applies
the formula for you and those
transformations are programmable so boom
will be if you downloaded it it comes
with a set of refactorings but you can
also write your own refractories in a
little language so here for example is
the sum and counts to average
refactoring swimming arrange divided by
the count of the same range results in
tried this yet with users if you have
spreadsheet users in
your company let me know at the end of
this talk but we envision that
spreadsheet users that are power users
that they can write array formulas and
maybe can write some VB we think they
could also be capable of writing those
transformations themselves and in
addition we also want to explore the
idea of programming by example here a
little bit where if we observe a user is
changing formulas a few of them we could
deduce a refactoring pattern from it and
say hey you're doing the same thing
maybe we can apply that transformation
for you in the entire spreadsheet if
you're interested to try it or want to
encourage business users in your company
to try it you can download this from
fleadome slash bumblebee all the links
will be also in the final slide so you
don't necessarily to make a picture or
not I'll wait for you then if you say
refactoring of course you say that's a
good woman that's not it yes testing
you're not going to refactor your
spreadsheet without the security of some
tests and this is actually do haha oh
you don't believe in testing that's
happen fair enough
ok so this is actually the chronological
order in which I did the work but it
would have made sense also to start with
testing to do that at least before
refactoring however and this was typical
ivory tower thinking I thought yes but
how am I going to get spreadsheets users
to test and convince their management to
test it's already quite hard to get
professional developers to test and to
give their bosses you know to have them
get permission for testing but this was
really thinking the wrong way because
spreadsheet users are actually quite
good at testing we observed in the same
open data set I talked about earlier
that these type of formulas are actually
quite common so what this expresses is
if the sum of those guys if there are
100% together it outputs 100 but if it's
not it out
or this is like a test it's like an
assertion it expresses the knowledge
that those five things together should
be a hundred percent and in the lack of
real testing framework what do
spreadsheet users use for formulas they
have no other language and formulas we
found that eight percent of spreadsheets
that we analyzed had this type of test
formula so they're not all that in
common and then of course we thought huh
we could exploit those test formulas if
people are already testing a little bit
we could use that to extract a test
suite so we build an order to code
expector and you can ask expector to
search for those type of test formulas
in your spreadsheet and then I would say
hey look at that
I found a formula that looks a little
bit like a test we use some heuristics
there so we have a number of words that
we know that look like test outputs so
okay and or yes/no in real-life
spreadsheets we even found test formulas
outputting in smiley or a sad e face
depending on the results of the test
definitely so we know what a test
formula is we say hey what we found here
is that the sell on that the formula net
cell expresses that those guys should be
100% and as you see we've done some
parsing here to represent the test
formula in natural language to make it
easier for people to see it and then you
can add those formulas to the test suite
you can have the little tick mark save
the tests and then we say well it passed
that test pass because this is actually
a hundred percent and none of the tests
failed and what we also do is we show
users coverage of their tests they can
say show me what's tested and everything
that's covered by a test formalised
marked yellow and this is because this
is a test formula that depends on those
cells we say they are tested as well so
we're not really talking branch coverage
or statement covers here advanced ways
of coverage we just want to give users a
feel for how well everything is tested
so if you have a test all the
and also tested nearly as of course if
you would change one of the 20s then
that would show up this is not foolproof
of course because one could be too and
there are ways you could you could have
other cells here that depend on it it's
not foolproof however it is helping a
little bit giving people an idea of
what's testing what we also do is we
help people then add more tests and
instead of just letting them free we
thought it might be easier to just give
them one formula to test I have five
minutes before I'm going to a meeting
let me add one test to my formula so
that you can pick in three categories a
complex formula a formula with a big
value that represents a lot of money or
a lot of orders or whatever or formula
that has many precedents that that many
cells are referring to so you could say
for example if you ask for a complex
formula hey this formula here looks
looks pretty nifty that's probably
something you want to test if you just
want to add one test and then you can
express some tests building test so you
could say it's a number this is the
upper limit the lower limit and in a
slightly newer version of the two we
also have an extra value there where
users can write a formula so whatever
formula they won because we found this
is slightly too restrictive just having
types and upper and lower bounds and we
give people compliments we say wonderful
you have increased your test coverage
from 6% to 8% you want to encourage
people and show them that higher
coverage is is indeed better so we have
added two tests so now you see our test
suite is bare because now three tests
have passed and still no more failing
this tool too is available from my
website fill in a little comb slash
expect overages at this point giving the
plugins away for free because it's
active research and so no guarantees if
it doesn't work you can send me an email
but probably there's nothing I can do
about that
this is everything I wanted to share
with you but before we go over to
questions I do think we have some time
for questions we have some time for
let me summarize my entire talk for you
in one minute so if you came in late or
it's the end of the day and you're
slightly sleepy this is your second
chance to get the gist of the talk in
like 30 seconds and otherwise of course
this is optimal preparation for
question-asking spreadsheets our codes
it's the most important message to
remember and tell all your friends and
tweet about it in and put it on a tee
shirts why because they're used for
similar problems there are just as
powerful namely turing-complete and they
suffer from typical software engineering
problems even cooler they are what every
programming language in 2016 aims to be
live and functional and used by everyone
what more is there to wish for I showed
you a few examples of how to implement
real-life programming problems in an
easy way in a spreadsheet including a
nice may solved with dynamic programming
so if spreadsheets are indeed code they
can use a little bit so for engineering
magic and I've showed you that in the
form of a smell detection tool every
fracturing to and attest to if you want
to know more this is the website perfect
excel of the smell detection tool that
is now commercially available you can go
to my website to download the
refactoring too and a testing tool
because they're still active ongoing
research and we really want people to
try that and I have a research group in
Delft as well where I force grad
students to also like this and you can
find out more about all the sorts of
research we do at our websites Prezi Lab
the lauric and if you want to connect
with me later I will be at the party
tonight you can send me a tweet if you
want to meet or an email or you can ask
a question now of course
yeah so one question is what is the
reach of people what is the audience not
everyone would use Excel like I do well
some people use it in way way more
advanced ways than I do with my little
programming example so of course there
are people that just use it for simple
lists but there are companies and
organizations that really depend on
Excel for for that core business so
insurance companies banks that really
make models that the company depends on
so we do think there are lots of people
that could benefit from this type of
software yeah that's just Excel user so
it's very hard for us to know how many
people you know where's the threshold of
serious use at what point this is also I
mean a general question for developers
at what point is it worth it to go from
notepad plus plus to a full fledged IDE
because you would have refactoring
support that's it's not a very easy
question to to answer and it could also
depend on your go well I'm actually in
two weeks going to go for a research
visit I will work there for three months
to to improve Excel and to maybe also
I'm not sure if they will give me a
given you look at the data but yeah they
actually were one of the funders of my