SlideShare a Scribd company logo
1 of 54
Spreadsheets are code
Felienne Hermans (@felienne)
Spreadsheets are code
Felienne Hermans (@felienne)
In this slidedeck I explain whyy
spreadsheets are code, and what
we can do with that idea.
Spreadsheets are mislabeled
Spreadsheets are mislabeled
People often think of spreadsheets
as data, but...
Spreadsheets are code
Spreadsheets are code
I have made it my life’s work to
spread the happy word
“Spreadsheets are code!”
Spreadsheets are code
I have made it my life’s work to
spread the happy word
“Spreadsheets are code!”
If you don’t immediately believe
me, I have three reasons*
* If you do believe me, skip the next 10 slides ;)
1) Used for similar problems
This tool (for stock price
computation) could have been
built in any language. C,
JavaScript, COBOL, or Excel.
The problems Excel is used for are
often (not always) similar to
problems solved in different
languages.
2) Formulas are Turing complete
2) Formulas are Turing complete
I go to great lengths to make my
point. To such great lengths that I
built a Turing machine in Excel,
using formulas only.
Here you see it in action. Every row
is an consecutive step of the lint.
This makes it, in addition to a proof
that formulas are Turing complete,
Also a nice visualization of a Turing
machine.
3) They suffer from the same problems
3) They suffer from the same problems
3) They suffer from the same problems
3) They suffer from the same problems
In summary: both the activities,
complexity and problems are the same
So if spreadsheets are code, can we
apply software engineering methods?
In software, tools have been created to
help programmers understand code
Speadsheets however, lack support
for testing, refactoring and code
analysis.
My goals is to bring those tools to
spreadsheets
In my dissertation, I defined smells
for spreadsheet formulas
www.felienne.com/publications
In my dissertation, I defined smells
for spreadsheet formulas
If you say smells
If you say smells, you say refactoring
So, we built BumbleBee:
a refactoring tool for spreadsheets
So, we built BumbleBee:
a refactoring tool for spreadsheets
You can download BumbleBee from
my website (felienne.com/BumbleBee)
The transformations are entirely
programmable, with a small language
And of course, if you say refactoring,
you say …
And of course, if you say refactoring,
you say testing
Spreadsheets tests are hiding in plain
sight
These test formulas are common,
and they can be exploited
Our tool Expector can find test formulas
Expector helps users to understand
robustness of their spreadsheets
Also available:
felienne.com/Expector
Thanks for viewing the slides for
Spreadsheets: are code!
Want to know more?
• Visit my sites
 felienne.com
 spreadsheetlab.org
• Send a tweet
 @felienne
• Send an email
mail@felienne.com

More Related Content

What's hot

Collaborer en utilisant Microsoft Teams.pptx
Collaborer en utilisant Microsoft Teams.pptxCollaborer en utilisant Microsoft Teams.pptx
Collaborer en utilisant Microsoft Teams.pptx
Ludovic Bianay
 

What's hot (20)

Automation Testing using Selenium
Automation Testing using SeleniumAutomation Testing using Selenium
Automation Testing using Selenium
 
Programming Languages Categories / Programming Paradigm By: Prof. Lili Saghafi
Programming Languages Categories / Programming Paradigm By: Prof. Lili Saghafi Programming Languages Categories / Programming Paradigm By: Prof. Lili Saghafi
Programming Languages Categories / Programming Paradigm By: Prof. Lili Saghafi
 
Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)Plugin architecture (Extensible Application Architecture)
Plugin architecture (Extensible Application Architecture)
 
GoF Design patterns I: Introduction + Structural Patterns
GoF Design patterns I:   Introduction + Structural PatternsGoF Design patterns I:   Introduction + Structural Patterns
GoF Design patterns I: Introduction + Structural Patterns
 
Spring Web Service, Spring Integration and Spring Batch
Spring Web Service, Spring Integration and Spring BatchSpring Web Service, Spring Integration and Spring Batch
Spring Web Service, Spring Integration and Spring Batch
 
Word Embedding to Document distances
Word Embedding to Document distancesWord Embedding to Document distances
Word Embedding to Document distances
 
An Introduction to ANTLR
An Introduction to ANTLRAn Introduction to ANTLR
An Introduction to ANTLR
 
SharePoint Workflow Migration
SharePoint Workflow MigrationSharePoint Workflow Migration
SharePoint Workflow Migration
 
Grokking Techtalk #42: Engineering challenges on building data platform for M...
Grokking Techtalk #42: Engineering challenges on building data platform for M...Grokking Techtalk #42: Engineering challenges on building data platform for M...
Grokking Techtalk #42: Engineering challenges on building data platform for M...
 
Anti patterns part 1
Anti patterns part 1Anti patterns part 1
Anti patterns part 1
 
Utilizando JMeter para realizar testes de carga em aplicações WEB
Utilizando JMeter para realizar testes de carga em aplicações WEBUtilizando JMeter para realizar testes de carga em aplicações WEB
Utilizando JMeter para realizar testes de carga em aplicações WEB
 
Introduction to LaTeX (For Word users)
 Introduction to LaTeX (For Word users) Introduction to LaTeX (For Word users)
Introduction to LaTeX (For Word users)
 
001 - Nova interface do GLPi 10.pdf
001 - Nova interface do GLPi 10.pdf001 - Nova interface do GLPi 10.pdf
001 - Nova interface do GLPi 10.pdf
 
Collaborer en utilisant Microsoft Teams.pptx
Collaborer en utilisant Microsoft Teams.pptxCollaborer en utilisant Microsoft Teams.pptx
Collaborer en utilisant Microsoft Teams.pptx
 
Python in Test automation
Python in Test automationPython in Test automation
Python in Test automation
 
Webinar: Camunda und Liferay
Webinar: Camunda und LiferayWebinar: Camunda und Liferay
Webinar: Camunda und Liferay
 
Text features
Text featuresText features
Text features
 
[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...
[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...
[PYTHONSUL2018] Apresentação do Tutorial - Automação de Testes com Robot Fram...
 
Migration to share point online
Migration to share point onlineMigration to share point online
Migration to share point online
 
Beyond the Symbols: A 30-minute Overview of NLP
Beyond the Symbols: A 30-minute Overview of NLPBeyond the Symbols: A 30-minute Overview of NLP
Beyond the Symbols: A 30-minute Overview of NLP
 

Viewers also liked

Reverse Engineering Spreadsheets
Reverse Engineering SpreadsheetsReverse Engineering Spreadsheets
Reverse Engineering Spreadsheets
Devnology
 

Viewers also liked (6)

Spreadsheets for developers
Spreadsheets for developersSpreadsheets for developers
Spreadsheets for developers
 
TEDxDelft
TEDxDelftTEDxDelft
TEDxDelft
 
Reverse Engineering Spreadsheets
Reverse Engineering SpreadsheetsReverse Engineering Spreadsheets
Reverse Engineering Spreadsheets
 
Small, simple and smelly: What we can learn from examining end-user artifacts?
Small, simple and smelly: What we can learn from examining end-user artifacts?Small, simple and smelly: What we can learn from examining end-user artifacts?
Small, simple and smelly: What we can learn from examining end-user artifacts?
 
The power of symmetry
The power of symmetryThe power of symmetry
The power of symmetry
 
55 New Features in JDK 9
55 New Features in JDK 955 New Features in JDK 9
55 New Features in JDK 9
 

Similar to Spreadsheets are code

Basics of Programming - A Review Guide
Basics of Programming - A Review GuideBasics of Programming - A Review Guide
Basics of Programming - A Review Guide
Benjamin Kissinger
 
Generic Tools, Specific Laguages
Generic Tools, Specific LaguagesGeneric Tools, Specific Laguages
Generic Tools, Specific Laguages
Markus Voelter
 
UPA2007 Designing Interfaces Jenifer Tidwell
UPA2007 Designing Interfaces Jenifer TidwellUPA2007 Designing Interfaces Jenifer Tidwell
UPA2007 Designing Interfaces Jenifer Tidwell
nikrao
 
UPA2007 Designing Interfaces Jenifer Tidwell
UPA2007 Designing Interfaces Jenifer TidwellUPA2007 Designing Interfaces Jenifer Tidwell
UPA2007 Designing Interfaces Jenifer Tidwell
guestf59d1c4
 
Testing and Refactoring Spreadsheets - Felienne Hermans at Eusprig 2014
Testing and Refactoring Spreadsheets - Felienne Hermans at Eusprig 2014Testing and Refactoring Spreadsheets - Felienne Hermans at Eusprig 2014
Testing and Refactoring Spreadsheets - Felienne Hermans at Eusprig 2014
eusprig
 

Similar to Spreadsheets are code (20)

6. spreadsheet are code
6. spreadsheet are code6. spreadsheet are code
6. spreadsheet are code
 
Improving Spreadsheet Test Practices
Improving Spreadsheet Test PracticesImproving Spreadsheet Test Practices
Improving Spreadsheet Test Practices
 
Basics of Programming - A Review Guide
Basics of Programming - A Review GuideBasics of Programming - A Review Guide
Basics of Programming - A Review Guide
 
Mastering Python lesson3b_for_loops
Mastering Python lesson3b_for_loopsMastering Python lesson3b_for_loops
Mastering Python lesson3b_for_loops
 
Better problem solving through scripting: How to think through your #eprdctn ...
Better problem solving through scripting: How to think through your #eprdctn ...Better problem solving through scripting: How to think through your #eprdctn ...
Better problem solving through scripting: How to think through your #eprdctn ...
 
Rubykin
Rubykin Rubykin
Rubykin
 
Software Design
Software DesignSoftware Design
Software Design
 
60 terrible tips for a C++ developer
60 terrible tips for a C++ developer60 terrible tips for a C++ developer
60 terrible tips for a C++ developer
 
Generic Tools, Specific Laguages
Generic Tools, Specific LaguagesGeneric Tools, Specific Laguages
Generic Tools, Specific Laguages
 
Advanced java script essentials v1
Advanced java script essentials v1Advanced java script essentials v1
Advanced java script essentials v1
 
Build your own Language - Why and How?
Build your own Language - Why and How?Build your own Language - Why and How?
Build your own Language - Why and How?
 
The D language comes to help
The D language comes to helpThe D language comes to help
The D language comes to help
 
Software fundamentals
Software fundamentalsSoftware fundamentals
Software fundamentals
 
UPA2007 Designing Interfaces Jenifer Tidwell
UPA2007 Designing Interfaces Jenifer TidwellUPA2007 Designing Interfaces Jenifer Tidwell
UPA2007 Designing Interfaces Jenifer Tidwell
 
UPA2007 Designing Interfaces Jenifer Tidwell
UPA2007 Designing Interfaces Jenifer TidwellUPA2007 Designing Interfaces Jenifer Tidwell
UPA2007 Designing Interfaces Jenifer Tidwell
 
Programming of c++
Programming of c++Programming of c++
Programming of c++
 
Testing and Refactoring Spreadsheets - Felienne Hermans at Eusprig 2014
Testing and Refactoring Spreadsheets - Felienne Hermans at Eusprig 2014Testing and Refactoring Spreadsheets - Felienne Hermans at Eusprig 2014
Testing and Refactoring Spreadsheets - Felienne Hermans at Eusprig 2014
 
Learn Programming with Livecoding.tv http://goo.gl/tIgO1I
Learn Programming with Livecoding.tv http://goo.gl/tIgO1ILearn Programming with Livecoding.tv http://goo.gl/tIgO1I
Learn Programming with Livecoding.tv http://goo.gl/tIgO1I
 
What do static analysis and search engines have in common? A good "top"!
What do static analysis and search engines have in common? A good "top"!What do static analysis and search engines have in common? A good "top"!
What do static analysis and search engines have in common? A good "top"!
 
Programming in C++
Programming in C++Programming in C++
Programming in C++
 

More from Felienne Hermans

Do Code Smell Hamper Novice Programmers?
Do Code Smell Hamper Novice Programmers?Do Code Smell Hamper Novice Programmers?
Do Code Smell Hamper Novice Programmers?
Felienne Hermans
 

More from Felienne Hermans (13)

Using F# and genetic programming to play computer bridge
Using F# and genetic programming to play computer bridgeUsing F# and genetic programming to play computer bridge
Using F# and genetic programming to play computer bridge
 
Functional Programming in Excel
Functional Programming in ExcelFunctional Programming in Excel
Functional Programming in Excel
 
How does code sound?
How does code sound?How does code sound?
How does code sound?
 
Programming is logical reasoning?
Programming is logical reasoning?Programming is logical reasoning?
Programming is logical reasoning?
 
Do Code Smell Hamper Novice Programmers?
Do Code Smell Hamper Novice Programmers?Do Code Smell Hamper Novice Programmers?
Do Code Smell Hamper Novice Programmers?
 
Programming by Calculation
Programming by CalculationProgramming by Calculation
Programming by Calculation
 
A board game night with geeks: attacking Quarto ties with SAT solvers
A board game night with geeks: attacking Quarto ties with SAT solversA board game night with geeks: attacking Quarto ties with SAT solvers
A board game night with geeks: attacking Quarto ties with SAT solvers
 
Presenting: structure story and support
Presenting: structure story and supportPresenting: structure story and support
Presenting: structure story and support
 
Putting the science in computer science
Putting the science in computer sciencePutting the science in computer science
Putting the science in computer science
 
Spreadsheets are graphs too: Using Neo4J as backend to store spreadsheet info...
Spreadsheets are graphs too: Using Neo4J as backend to store spreadsheet info...Spreadsheets are graphs too: Using Neo4J as backend to store spreadsheet info...
Spreadsheets are graphs too: Using Neo4J as backend to store spreadsheet info...
 
Social media for the busy scientist
Social media for the busy scientistSocial media for the busy scientist
Social media for the busy scientist
 
Detecting and Visualizing Inter-worksheet Smells in Spreadsheets
Detecting and Visualizing Inter-worksheet Smells in Spreadsheets Detecting and Visualizing Inter-worksheet Smells in Spreadsheets
Detecting and Visualizing Inter-worksheet Smells in Spreadsheets
 
Spreadsheet Testing
Spreadsheet TestingSpreadsheet Testing
Spreadsheet Testing
 

Spreadsheets are code