SlideShare a Scribd company logo
1 of 57
Download to read offline
Writing
                          Testable Code

                           Alvaro Videla - Cloud Foundry




Wednesday, April 10, 13
About Me


                     •    Cloud Foundry Developer Advocate

                     •    Blog: http://videlalvaro.github.com/

                     •    Twitter: @old_sound




Wednesday, April 10, 13
About Me
                          Co-author

               RabbitMQ in Action
               http://bit.ly/rabbitmq




Wednesday, April 10, 13
I’m not a:




Wednesday, April 10, 13
I’m not a:
                     • Application Testing Guru




Wednesday, April 10, 13
I’m not a:
                     • Application Testing Guru
                     • TDD Advocate




Wednesday, April 10, 13
Why is it so hard
                           to write tests?


Wednesday, April 10, 13
Unit Testing

                   The goal of unit testing is
                    to isolate each part of
                    the program and show
                   that the individual parts
                          are correct
                           http://en.wikipedia.org/wiki/Unit_testing


Wednesday, April 10, 13
Unit Testing


               […] unit testing by definition only
               tests the functionality of the units
                           themselves.



                           http://en.wikipedia.org/wiki/Unit_testing


Wednesday, April 10, 13
Unit Testing

                     […] Therefore, it will not catch
                      integration errors or broader
                       system-level errors (such as
                       functions performed across
                     multiple units, or non-functional
                     test areas such as performance)

                              http://en.wikipedia.org/wiki/Unit_testing


Wednesday, April 10, 13
Dogma
                            vs.
                          Reality

Wednesday, April 10, 13
A world of
                          Trade Offs
Wednesday, April 10, 13
What should
                       we test?
Wednesday, April 10, 13
How much
                           should
                           we test?
Wednesday, April 10, 13
“I get paid for code that works,
                 not for tests, so my philosophy is
                   to test as little as possible to
                 reach a given level of confidence”
                                                                                      – Kent Beck


                          http://stackoverflow.com/questions/153234/how-deep-are-your-unit-tests/153565#153565




Wednesday, April 10, 13
The Hidden
                            Secret
                           Of TDD



Wednesday, April 10, 13
The Secret of TDD




Wednesday, April 10, 13
The Secret of TDD




Wednesday, April 10, 13
Some books by Kent Beck




Wednesday, April 10, 13
To write good
                   tests first we need
                    to learn how to
                        program

Wednesday, April 10, 13
Wednesday, April 10, 13
We developers are
                 like those users we
                 like to complain so
                     much about

Wednesday, April 10, 13
Design evolves and
                 matures with time


Wednesday, April 10, 13
Good Code sits in
                      the small details


Wednesday, April 10, 13
TIPS



Wednesday, April 10, 13
Separate pure code
                     from impure or stateful


Wednesday, April 10, 13
Pure Functions




Wednesday, April 10, 13
Pure Functions
                     • Referential Transparency




Wednesday, April 10, 13
Pure Functions
                     • Referential Transparency
                     • Don’t modify external state




Wednesday, April 10, 13
Pure Functions
                     • Referential Transparency
                     • Don’t modify external state
                     • Don’t produce side effects




Wednesday, April 10, 13
What’s wrong with this code?


                          if($player->getScore() > 0) {
                            $player->setSwizzle(7);
                          } else {
                            $player->setSwizzle(
                               $player->getSwizzle() + 1
                            );
                          }



                          https://dl.dropboxusercontent.com/u/7810909/docs/what-does-fp-mean/what-does-fp-mean/chunk-html/ar01s05.html




Wednesday, April 10, 13
What’s wrong with this code?


         $newScore = $player->getScore() > 0
                                                ? 7
                                                : $player->getSwizzle() + 1;

         $player->setSwizzle($newScore);




                          https://dl.dropboxusercontent.com/u/7810909/docs/what-does-fp-mean/what-does-fp-mean/chunk-html/ar01s05.html




Wednesday, April 10, 13
Score calculation
                   can be moved into
                    its own function


Wednesday, April 10, 13
Score calculation
                    can be tested now


Wednesday, April 10, 13
First write
                          Pure Code


Wednesday, April 10, 13
Add impure code
                    step by step when
                         needed


Wednesday, April 10, 13
Write
                          Composable
                            Code


Wednesday, April 10, 13
Function Composition




                           http://en.wikipedia.org/wiki/Function_(mathematics)



Wednesday, April 10, 13
Function Composition




                           http://en.wikipedia.org/wiki/Function_(mathematics)


Wednesday, April 10, 13
This looks familiar



Wednesday, April 10, 13
“Many UNIX programs do quite
                    trivial tasks in isolation, but,
                   combined with other programs,
                     become general and useful
                                tools.”



                            http://math.albany.edu/math/pers/hammond/unixphil.html




Wednesday, April 10, 13
Number of open connections per IP




           netstat -ntu | awk '{print $5}' | 
           cut -d: -f1 | sort | uniq -c | sort -n




                              http://www.commandlinefu.com/commands/view/1767/number-of-open-connections-per-ip.




Wednesday, April 10, 13
Why don’t we just
                          code in this style?


Wednesday, April 10, 13
This seems familiar
                                again…


Wednesday, April 10, 13
Welcome to
                           Functional
                          Programming


Wednesday, April 10, 13
“Writing unit tests is reinventing
                     functional programming
                  in non-functional languages”




                          http://noss.github.io/2009/02/25/writing-unit-tests-is-reinventing-functional-programming-in-non-functional-languages.html




Wednesday, April 10, 13
What can we learn from
                          Functional Programming?




Wednesday, April 10, 13
The proper use of Types




Wednesday, April 10, 13
What does ‘null’ mean?




Wednesday, April 10, 13
What does
                          ‘true|false’ mean?



Wednesday, April 10, 13
Functions with just one
                              responsibility



Wednesday, April 10, 13
Radical separation of pure
                      code from impure code



Wednesday, April 10, 13
Let’s see an example




Wednesday, April 10, 13
Food for Thought




                          http://thinking-forth.sourceforge.net
Wednesday, April 10, 13
“Inside every well-
                          written large program
                          is a well-written small
                                 program”

                                 http://www.linfo.org/q_programming.html




Wednesday, April 10, 13
Questions?


Wednesday, April 10, 13
Thanks!
                              http://twitter.com/old_sound
                              http://github.com/videlalvaro
                          http://www.slideshare.net/old_sound


Wednesday, April 10, 13

More Related Content

What's hot

What's hot (13)

Azure Networking: Innovative Features and Multi-VNet Topologies
Azure Networking: Innovative Features and Multi-VNet TopologiesAzure Networking: Innovative Features and Multi-VNet Topologies
Azure Networking: Innovative Features and Multi-VNet Topologies
 
AWSで自宅サーバ?
AWSで自宅サーバ?AWSで自宅サーバ?
AWSで自宅サーバ?
 
Hci solution with VxRail
Hci solution with VxRailHci solution with VxRail
Hci solution with VxRail
 
Way-Findingをやってやった ~ Azure Spatial Anchorsでね~
Way-Findingをやってやった ~ Azure Spatial Anchorsでね~Way-Findingをやってやった ~ Azure Spatial Anchorsでね~
Way-Findingをやってやった ~ Azure Spatial Anchorsでね~
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
 
unity 軌跡
unity 軌跡unity 軌跡
unity 軌跡
 
Private cloud with vmware
Private cloud with vmwarePrivate cloud with vmware
Private cloud with vmware
 
KVM High Availability Regardless of Storage - Gabriel Brascher, VP of Apache ...
KVM High Availability Regardless of Storage - Gabriel Brascher, VP of Apache ...KVM High Availability Regardless of Storage - Gabriel Brascher, VP of Apache ...
KVM High Availability Regardless of Storage - Gabriel Brascher, VP of Apache ...
 
What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...
What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...
What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil...
 
Guia oficial de la Expo 92
Guia oficial de la Expo 92Guia oficial de la Expo 92
Guia oficial de la Expo 92
 
API Gateway or Service mesh - Complementary or excluding concepts
API Gateway or Service mesh - Complementary or excluding conceptsAPI Gateway or Service mesh - Complementary or excluding concepts
API Gateway or Service mesh - Complementary or excluding concepts
 
2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...
2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...
2020-02-20 - HashiCorpUserGroup Madring - Integrating HashiCorp Vault and Kub...
 
VMworld 2013: VMware vSphere Replication: Technical Walk-Through with Enginee...
VMworld 2013: VMware vSphere Replication: Technical Walk-Through with Enginee...VMworld 2013: VMware vSphere Replication: Technical Walk-Through with Enginee...
VMworld 2013: VMware vSphere Replication: Technical Walk-Through with Enginee...
 

Similar to Writing testable code

Keeping your users happy with testable apps - Greg Shackles
Keeping your users happy with testable apps - Greg ShacklesKeeping your users happy with testable apps - Greg Shackles
Keeping your users happy with testable apps - Greg Shackles
Xamarin
 
Eclipse con 2012 - Devops - Luke Kanies
Eclipse con 2012 - Devops - Luke KaniesEclipse con 2012 - Devops - Luke Kanies
Eclipse con 2012 - Devops - Luke Kanies
Puppet
 
Engineering culture
Engineering cultureEngineering culture
Engineering culture
Pamela Fox
 
Eclipse con 2012 - Frictionless operations with Puppet - Luke Kanies
Eclipse con 2012 - Frictionless operations with Puppet - Luke KaniesEclipse con 2012 - Frictionless operations with Puppet - Luke Kanies
Eclipse con 2012 - Frictionless operations with Puppet - Luke Kanies
Puppet
 
Specking Interactors with PHPSpec and YOLO (DDD) at PHPConference Argentina 2013
Specking Interactors with PHPSpec and YOLO (DDD) at PHPConference Argentina 2013Specking Interactors with PHPSpec and YOLO (DDD) at PHPConference Argentina 2013
Specking Interactors with PHPSpec and YOLO (DDD) at PHPConference Argentina 2013
cordoval
 

Similar to Writing testable code (20)

When Tdd Goes Awry
When Tdd Goes AwryWhen Tdd Goes Awry
When Tdd Goes Awry
 
Writing the docs
Writing the docsWriting the docs
Writing the docs
 
Presentation @LAK13
Presentation @LAK13 Presentation @LAK13
Presentation @LAK13
 
Intravert atx meetup_condensed
Intravert atx meetup_condensedIntravert atx meetup_condensed
Intravert atx meetup_condensed
 
ChefConf2014 - Chef TDD
ChefConf2014 - Chef TDD ChefConf2014 - Chef TDD
ChefConf2014 - Chef TDD
 
Keeping your users happy with testable apps - Greg Shackles
Keeping your users happy with testable apps - Greg ShacklesKeeping your users happy with testable apps - Greg Shackles
Keeping your users happy with testable apps - Greg Shackles
 
The State of Puppet
The State of PuppetThe State of Puppet
The State of Puppet
 
Genestack BioIT-World-2013
Genestack BioIT-World-2013Genestack BioIT-World-2013
Genestack BioIT-World-2013
 
Testable Code ... In Joomla!?
Testable Code ... In Joomla!?Testable Code ... In Joomla!?
Testable Code ... In Joomla!?
 
Test Driven Infrastructure Development
Test Driven Infrastructure DevelopmentTest Driven Infrastructure Development
Test Driven Infrastructure Development
 
Test driven infrastructure development
Test driven infrastructure developmentTest driven infrastructure development
Test driven infrastructure development
 
NodeJS: Writing tests -- A Beginners' Guide
NodeJS: Writing tests -- A Beginners' GuideNodeJS: Writing tests -- A Beginners' Guide
NodeJS: Writing tests -- A Beginners' Guide
 
Eclipse con 2012 - Devops - Luke Kanies
Eclipse con 2012 - Devops - Luke KaniesEclipse con 2012 - Devops - Luke Kanies
Eclipse con 2012 - Devops - Luke Kanies
 
Engineering culture
Engineering cultureEngineering culture
Engineering culture
 
Piccolo coding dojo (milano xpug 2013-04-11)
Piccolo coding dojo (milano xpug 2013-04-11)Piccolo coding dojo (milano xpug 2013-04-11)
Piccolo coding dojo (milano xpug 2013-04-11)
 
Unmoderated User Testing
Unmoderated User TestingUnmoderated User Testing
Unmoderated User Testing
 
Connect and Collaborate C
Connect and Collaborate CConnect and Collaborate C
Connect and Collaborate C
 
Eclipse con 2012 - Frictionless operations with Puppet - Luke Kanies
Eclipse con 2012 - Frictionless operations with Puppet - Luke KaniesEclipse con 2012 - Frictionless operations with Puppet - Luke Kanies
Eclipse con 2012 - Frictionless operations with Puppet - Luke Kanies
 
Debugging Android - GDG Munich
Debugging Android - GDG MunichDebugging Android - GDG Munich
Debugging Android - GDG Munich
 
Specking Interactors with PHPSpec and YOLO (DDD) at PHPConference Argentina 2013
Specking Interactors with PHPSpec and YOLO (DDD) at PHPConference Argentina 2013Specking Interactors with PHPSpec and YOLO (DDD) at PHPConference Argentina 2013
Specking Interactors with PHPSpec and YOLO (DDD) at PHPConference Argentina 2013
 

More from Alvaro Videla

Rabbitmq Boot System
Rabbitmq Boot SystemRabbitmq Boot System
Rabbitmq Boot System
Alvaro Videla
 

More from Alvaro Videla (20)

Improvements in RabbitMQ
Improvements in RabbitMQImprovements in RabbitMQ
Improvements in RabbitMQ
 
Data Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring IntegrationData Migration at Scale with RabbitMQ and Spring Integration
Data Migration at Scale with RabbitMQ and Spring Integration
 
RabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft ConfRabbitMQ Data Ingestion at Craft Conf
RabbitMQ Data Ingestion at Craft Conf
 
Scaling applications with RabbitMQ at SunshinePHP
Scaling applications with RabbitMQ   at SunshinePHPScaling applications with RabbitMQ   at SunshinePHP
Scaling applications with RabbitMQ at SunshinePHP
 
Unit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveUnit Test + Functional Programming = Love
Unit Test + Functional Programming = Love
 
RabbitMQ Data Ingestion
RabbitMQ Data IngestionRabbitMQ Data Ingestion
RabbitMQ Data Ingestion
 
Dissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal ArchitectureDissecting the rabbit: RabbitMQ Internal Architecture
Dissecting the rabbit: RabbitMQ Internal Architecture
 
Introduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal LabsIntroduction to RabbitMQ | Meetup at Pivotal Labs
Introduction to RabbitMQ | Meetup at Pivotal Labs
 
RabbitMQ Hands On
RabbitMQ Hands OnRabbitMQ Hands On
RabbitMQ Hands On
 
Rabbitmq Boot System
Rabbitmq Boot SystemRabbitmq Boot System
Rabbitmq Boot System
 
Cloud Foundry Bootcamp
Cloud Foundry BootcampCloud Foundry Bootcamp
Cloud Foundry Bootcamp
 
Cloud Messaging With Cloud Foundry
Cloud Messaging With Cloud FoundryCloud Messaging With Cloud Foundry
Cloud Messaging With Cloud Foundry
 
Taming the rabbit
Taming the rabbitTaming the rabbit
Taming the rabbit
 
Vertx
VertxVertx
Vertx
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De Testear
 
Desacoplando aplicaciones
Desacoplando aplicacionesDesacoplando aplicaciones
Desacoplando aplicaciones
 
Messaging patterns
Messaging patternsMessaging patterns
Messaging patterns
 
Theres a rabbit on my symfony
Theres a rabbit on my symfonyTheres a rabbit on my symfony
Theres a rabbit on my symfony
 
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory LiteScaling Web Apps With RabbitMQ - Erlang Factory Lite
Scaling Web Apps With RabbitMQ - Erlang Factory Lite
 
Integrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendconIntegrating php withrabbitmq_zendcon
Integrating php withrabbitmq_zendcon
 

Recently uploaded

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Recently uploaded (20)

MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 

Writing testable code

  • 1. Writing Testable Code Alvaro Videla - Cloud Foundry Wednesday, April 10, 13
  • 2. About Me • Cloud Foundry Developer Advocate • Blog: http://videlalvaro.github.com/ • Twitter: @old_sound Wednesday, April 10, 13
  • 3. About Me Co-author RabbitMQ in Action http://bit.ly/rabbitmq Wednesday, April 10, 13
  • 4. I’m not a: Wednesday, April 10, 13
  • 5. I’m not a: • Application Testing Guru Wednesday, April 10, 13
  • 6. I’m not a: • Application Testing Guru • TDD Advocate Wednesday, April 10, 13
  • 7. Why is it so hard to write tests? Wednesday, April 10, 13
  • 8. Unit Testing The goal of unit testing is to isolate each part of the program and show that the individual parts are correct http://en.wikipedia.org/wiki/Unit_testing Wednesday, April 10, 13
  • 9. Unit Testing […] unit testing by definition only tests the functionality of the units themselves. http://en.wikipedia.org/wiki/Unit_testing Wednesday, April 10, 13
  • 10. Unit Testing […] Therefore, it will not catch integration errors or broader system-level errors (such as functions performed across multiple units, or non-functional test areas such as performance) http://en.wikipedia.org/wiki/Unit_testing Wednesday, April 10, 13
  • 11. Dogma vs. Reality Wednesday, April 10, 13
  • 12. A world of Trade Offs Wednesday, April 10, 13
  • 13. What should we test? Wednesday, April 10, 13
  • 14. How much should we test? Wednesday, April 10, 13
  • 15. “I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence” – Kent Beck http://stackoverflow.com/questions/153234/how-deep-are-your-unit-tests/153565#153565 Wednesday, April 10, 13
  • 16. The Hidden Secret Of TDD Wednesday, April 10, 13
  • 17. The Secret of TDD Wednesday, April 10, 13
  • 18. The Secret of TDD Wednesday, April 10, 13
  • 19. Some books by Kent Beck Wednesday, April 10, 13
  • 20. To write good tests first we need to learn how to program Wednesday, April 10, 13
  • 22. We developers are like those users we like to complain so much about Wednesday, April 10, 13
  • 23. Design evolves and matures with time Wednesday, April 10, 13
  • 24. Good Code sits in the small details Wednesday, April 10, 13
  • 26. Separate pure code from impure or stateful Wednesday, April 10, 13
  • 28. Pure Functions • Referential Transparency Wednesday, April 10, 13
  • 29. Pure Functions • Referential Transparency • Don’t modify external state Wednesday, April 10, 13
  • 30. Pure Functions • Referential Transparency • Don’t modify external state • Don’t produce side effects Wednesday, April 10, 13
  • 31. What’s wrong with this code? if($player->getScore() > 0) { $player->setSwizzle(7); } else { $player->setSwizzle( $player->getSwizzle() + 1 ); } https://dl.dropboxusercontent.com/u/7810909/docs/what-does-fp-mean/what-does-fp-mean/chunk-html/ar01s05.html Wednesday, April 10, 13
  • 32. What’s wrong with this code? $newScore = $player->getScore() > 0 ? 7 : $player->getSwizzle() + 1; $player->setSwizzle($newScore); https://dl.dropboxusercontent.com/u/7810909/docs/what-does-fp-mean/what-does-fp-mean/chunk-html/ar01s05.html Wednesday, April 10, 13
  • 33. Score calculation can be moved into its own function Wednesday, April 10, 13
  • 34. Score calculation can be tested now Wednesday, April 10, 13
  • 35. First write Pure Code Wednesday, April 10, 13
  • 36. Add impure code step by step when needed Wednesday, April 10, 13
  • 37. Write Composable Code Wednesday, April 10, 13
  • 38. Function Composition http://en.wikipedia.org/wiki/Function_(mathematics) Wednesday, April 10, 13
  • 39. Function Composition http://en.wikipedia.org/wiki/Function_(mathematics) Wednesday, April 10, 13
  • 41. “Many UNIX programs do quite trivial tasks in isolation, but, combined with other programs, become general and useful tools.” http://math.albany.edu/math/pers/hammond/unixphil.html Wednesday, April 10, 13
  • 42. Number of open connections per IP netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n http://www.commandlinefu.com/commands/view/1767/number-of-open-connections-per-ip. Wednesday, April 10, 13
  • 43. Why don’t we just code in this style? Wednesday, April 10, 13
  • 44. This seems familiar again… Wednesday, April 10, 13
  • 45. Welcome to Functional Programming Wednesday, April 10, 13
  • 46. “Writing unit tests is reinventing functional programming in non-functional languages” http://noss.github.io/2009/02/25/writing-unit-tests-is-reinventing-functional-programming-in-non-functional-languages.html Wednesday, April 10, 13
  • 47. What can we learn from Functional Programming? Wednesday, April 10, 13
  • 48. The proper use of Types Wednesday, April 10, 13
  • 49. What does ‘null’ mean? Wednesday, April 10, 13
  • 50. What does ‘true|false’ mean? Wednesday, April 10, 13
  • 51. Functions with just one responsibility Wednesday, April 10, 13
  • 52. Radical separation of pure code from impure code Wednesday, April 10, 13
  • 53. Let’s see an example Wednesday, April 10, 13
  • 54. Food for Thought http://thinking-forth.sourceforge.net Wednesday, April 10, 13
  • 55. “Inside every well- written large program is a well-written small program” http://www.linfo.org/q_programming.html Wednesday, April 10, 13
  • 57. Thanks! http://twitter.com/old_sound http://github.com/videlalvaro http://www.slideshare.net/old_sound Wednesday, April 10, 13