SlideShare a Scribd company logo
Development
By The Numbers
We Are Going To
Measure Complexity
Why Should We Care
About Complexity?
- Geer et al.
"The Central Enemy Of
Reliability is Complexity"
Complexity And
Quality Are Strongly
Related
Basic Metrics
Cyclomatic
Complexity
Cyclomatic Complexity
Number Of
"Decision Points"
In A Routine
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
4
Simple
Right?
Cyclomatic Complexity
(Single Method)
1 - 4: Low Complexity
5 - 7: Moderate Complexity
8 - 10: High Complexity
11+: Very High Complexity
Cyclomatic Complexity
(Average Per Method)
1 - 2: Low Complexity
2 - 4: Moderate Complexity
4 - 6: High Complexity
6+: Very High Complexity
Compare:
Average CC per Method
Wordpress: 6.28
Drupal 7: 3.02
Drupal 8: 2.10
Symfony 2: 1.81
Zend Framework 2: 2.62
Laravel: 1.79
Cyclomatic Complexity
(Average Per Line Of Code)
.01 - .05: Low Complexity
.05 - .10: Moderate Complexity
.10 - .15: High Complexity
.15+: Very High Complexity
Compare:
Average CC per LOC
Wordpress: 0.20
Drupal 7: 0.04
Drupal 8: 0.07
Symfony 2: 0.06
Zend Framework 2: 0.10
Laravel: 0.07
N-Path
Complexity
N-Path Complexity
Number Of
"Unique Paths"
In A Routine
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
function foo($a, $b) {
$c = 0;
if ($a) {
$c = $a;
} elseif ($b) {
$c = $b;
}
if ($a && $b) {
$c = $a + $b;
}
return $c;
}
4
They Are
The Same?
Not
Generally!
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC:
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC:
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath:
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath: 8
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
CC: 4
NPath: 8
2^(CC-1)
N-Path Complexity
<16: Low Complexity
17-128: Moderate Complexity
129-1024: High Complexity
1025+: Very High Complexity
N-Path Complexity
Minimum Number Of
Tests Required To
Completely Test
A Routine
N-Path Complexity
entity_load()
CC:
N-Path:
N-Path Complexity
entity_load()
CC: 2
N-Path:
Cyclomatic Complexity
1 - 4: Low Complexity
5 - 7: Moderate Complexity
8 - 10: High Complexity
11+: Very High Complexity
N-Path Complexity
entity_load()
CC: 2
N-Path: 2
N-Path Complexity
drupal_http_request()
CC:
N-Path:
N-Path Complexity
drupal_http_request()
CC: 41
N-Path:
Cyclomatic Complexity
1 - 4: Low Complexity
5 - 7: Moderate Complexity
8 - 10: High Complexity
11+: Very High Complexity
N-Path Complexity
drupal_http_request()
CC: 41
N-Path: 25,303,344,960
To Completely Test
drupal_http_request()
At 1 Line Of Code Per Test
Would Require
2 Terabytes
Worth Of Tests
To Completely Test
drupal_http_request()
At 1 Line Of Code Per Test
Would Require
412 DVD's
Worth Of Tests
To Completely Test
drupal_http_request()
At 1 Line Of Code Per Test
Would Require
670k Drupals
Worth Of Tests
And That's Not
The Worst One!
N-Path Complexity
_date_repeat_rrule_process()
CC:
N-Path:
N-Path Complexity
_date_repeat_rrule_process()
CC: 81
N-Path:
N-Path Complexity
_date_repeat_rrule_process()
CC: 81
N-Path: 19,781,719,256
N-Path Complexity
_date_repeat_rrule_process()
CC: 81
N-Path: 19,781,719,256
,250,000,000,000
N-Path Complexity
_date_repeat_rrule_process()
CC: 81
N-Path: 19,781,719,256
,250,000,000,000
,000,000,000
To Completely Test
_date_repeat_rrule_process()
At 1 Line Of Code Per Test
Would Require
336T 2009's
Worth Of Tests
MicroSD Card
● About 387GB / cm^3
○ Current Density Record
MicroSD Card
● About 387GB / cm^3
○ Current Density Record
● About 184PB / Butt-Load
○ The text from every piece of written material in the
world...
MicroSD Card
● About 387GB / cm^3
○ Current Density Record
● About 184PB / Butt-Load
○ The text from every piece of written material in the
world...
● About 387PB / m^3
○ About 20 “MegaUpload.com Sites”
MicroSD Card
● About 387GB / cm^3
○ Current Density Record
● About 184PB / Butt-Load
○ The text from every piece of written material in the
world...
● About 387PB / m^3
○ About 20 “MegaUpload.com Sites”
● About 387YB / km^3
○ About 100,000 Google’s
To Completely Test
_date_repeat_rrule_process()
At 1 Line Of Code Per Test
Would Require
1 Greenland Ice Cap of
microSD cards
Worth Of Tests
N-Path Complexity
compose_pm()
CC:
N-Path:
N-Path Complexity
compose_pm()
CC: 331
N-Path:
Because Sending Private
Messages Is Hard...
N-Path Complexity
compose_pm()
CC: 331
N-Path:
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
,333,860,397,338
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
,333,860,397,338
,867,187,500,000
N-Path Complexity
compose_pm()
CC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
,333,860,397,338
,867,187,500,000
,000,000,000,000
N-Path ComplexityCC: 331
N-Path: 12,334,686,665
,165,904,892,028
,680,955,918,269
,333,860,397,338
,867,187,500,000
,000,000,000,000
,000,000,000,000
To Completely Test
compose_pm()
At 1 Line Of Code Per Test
Would Require
1B BlackHoles
Worth Of Tests
CRAP
CRAP
(Change Risk Analysis Predictions)
CC = Cyclomatic Complexity (method)
COV = Test Coverage (percent)
CRAP = CC + (CC^2 * (1 - COV)^3)
CRAP
Relates Complexity
And Test Coverage
CRAP
Increasing Test Coverage Lowers CRAP
Decreasing Complexity Lowers CRAP
CRAP
A Low Complexity Method
With No Tests
Is Good
CRAP
A Low Complexity Method
With Good Tests
Is Great
CRAP
A Moderate Complexity Method
With Good Tests
Is OK
CRAP
A Moderate Complexity Method
With No Tests
Is CRAP
CRAP
< 5: GREAT Code
5 - 15: Acceptable Code
15-30: Eih... Code
30+: CRAPpy Code
A Word On
Refactoring
function foo2($a, $b, $c) {
$d = 0;
if ($a) {
$d += $a;
}
if ($b) {
$d += $b;
}
if ($c) {
$d += $c;
}
return $d;
}
function foo2($a, $b, $c) {
$d = 0;
$d += checkValue($a);
$d += checkValue($b);
$d += checkValue($c);
return $d;
}
function checkValue($v) {
if ($v) {
return $v;
}
return 0;
}
Quality Is A
Tradeoff
Between
Complexity And
Bloat
How Do We
Measure These
Metrics?
Quiz:
Only 2 Major QA Tools
NOT Made By Germans
What Are They?
PHP-CodeSniffer
Behat
Let’s Talk Tools
PHPLOC
PHPLOC
By Sebastian Bergmann
PHPLOC
By Sebastian Bergmann
Command Line Tool
PHPLOC
By Sebastian Bergmann
Command Line Tool
Summarizes An Entire
Codebase
$ phploc path/to/Drupal7/
Directories: 73
Files: 180
Lines of Code (LOC): 63347
Cyclomatic Complexity / Lines of Code: 0.04
Comment Lines of Code (CLOC): 19321
Non-Comment Lines of Code (NCLOC): 44026
Namespaces: 0
Interfaces: 1
Traits: 0
Classes: 38
Abstract: 2 (5.26%)
Concrete: 36 (94.74%)
Average Class Length (NCLOC): 197
Methods: 433
Scope:
Non-Static: 378 (87.30%)
Static: 55 (12.70%)
Visibility:
Public: 255 (58.89%)
Non-Public: 178 (41.11%)
Average Method Length (NCLOC): 17
Cyclomatic Complexity / Number of Methods: 3.02
Anonymous Functions: 0
Functions: 521
Constants: 22
Global constants: 15
Class constants: 7
PDepend
PDepend
By Manuel Pichler
(Also German)
PDepend
By Manuel Pichler
(Also German)
Like PHPLOC, But Granular
PDepend
By Manuel Pichler
(Also German)
Like PHPLOC, But Granular
Lower Level Analysis
Fanout: Describes Outward Dependencies
- Describes Dependence on Other Classes
ANDC: Average Num of Derived Classes
- Describes How Much Inheritance Is Used
AHH: Average Hiearchy Height
- Describes How Deep Of Inheritance Is Used
PHPMD
(Mess Detector)
PHPMD
By Manuel Pichler
(German)
PHPMD
By Manuel Pichler
(German)
Finds "Messy" Parts Of Code
PHPMD
By Manuel Pichler
(German)
Finds "Messy" Parts Of Code
Finds Rule Violations
PHPMD Rules
CodeSize
- (CC, NPath, Number of Methods, Size of Methods, etc)
Design
- (Eval, Goto, Exit(), Inheritance Depth)
Naming
- (Short names, Inconsistent Names)
Unused Code
Controversial
- (Superglobal Access, Naming Conventions)
Prevent Complex Code
From Even Getting In!
By Themselves
Useful
Over Time
Over Time
Invaluable
Jenkins-PHP
jenkins-php.org
Sonar
SonarSource.Com
Insight
insight.sensiolabs.com
Time For Some Fun!
Drupal 8.x Branch
Non-Comment Lines Of Code
Drupal 8.x Branch
Number Of Classes
Drupal 8.x Branch
Cyclomatic Complexity Per Method
Drupal 8.x Branch
Cyclomatic Complexity Per Line
Drupal 8.x Branch
One More Thing
To Keep In Mind
Do Not Rely Solely On
These Numbers
Instead,
Try To Understand At The
Bigger Picture
Anthony Ferrara
@ircmaxell
me@ircmaxell.com
blog.ircmaxell.com
github.com/ircmaxell
youtube.com/ircmaxell

More Related Content

What's hot

All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2goMoriyoshi Koizumi
 
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
corehard_by
 
Tuga it 2016 - What's New In C# 6
Tuga it 2016 - What's New In C# 6Tuga it 2016 - What's New In C# 6
Tuga it 2016 - What's New In C# 6
Paulo Morgado
 
C++ Programming - 2nd Study
C++ Programming - 2nd StudyC++ Programming - 2nd Study
C++ Programming - 2nd Study
Chris Ohk
 
Ee 3122 numerical methods and statistics sessional credit
Ee 3122 numerical methods and statistics sessional  creditEe 3122 numerical methods and statistics sessional  credit
Ee 3122 numerical methods and statistics sessional creditRaihan Bin-Mofidul
 
Static and const members
Static and const membersStatic and const members
Static and const members
mohamed sikander
 
Stl algorithm-Basic types
Stl algorithm-Basic typesStl algorithm-Basic types
Stl algorithm-Basic types
mohamed sikander
 
C++ Question on References and Function Overloading
C++ Question on References and Function OverloadingC++ Question on References and Function Overloading
C++ Question on References and Function Overloading
mohamed sikander
 
Functional Programming in PHP
Functional Programming in PHPFunctional Programming in PHP
Functional Programming in PHP
pwmosquito
 
C++ file
C++ fileC++ file
C- Programs - Harsh
C- Programs - HarshC- Programs - Harsh
C- Programs - Harsh
Harsh Sharma
 
C++ TUTORIAL 7
C++ TUTORIAL 7C++ TUTORIAL 7
C++ TUTORIAL 7
Farhan Ab Rahman
 
Pratik Bakane C++
Pratik Bakane C++Pratik Bakane C++
Pratik Bakane C++
pratikbakane
 
C++ TUTORIAL 8
C++ TUTORIAL 8C++ TUTORIAL 8
C++ TUTORIAL 8
Farhan Ab Rahman
 
Cquestions
Cquestions Cquestions
Cquestions
mohamed sikander
 
C++ Programs
C++ ProgramsC++ Programs
C++ Programs
NarayanlalMenariya
 
Functional C++
Functional C++Functional C++
Functional C++
Kevlin Henney
 
Sol10
Sol10Sol10
Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)
David de Boer
 

What's hot (20)

All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2go
 
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
Как работает LLVM бэкенд в C#. Егор Богатов ➠ CoreHard Autumn 2019
 
Tuga it 2016 - What's New In C# 6
Tuga it 2016 - What's New In C# 6Tuga it 2016 - What's New In C# 6
Tuga it 2016 - What's New In C# 6
 
C++ Programming - 2nd Study
C++ Programming - 2nd StudyC++ Programming - 2nd Study
C++ Programming - 2nd Study
 
Ee 3122 numerical methods and statistics sessional credit
Ee 3122 numerical methods and statistics sessional  creditEe 3122 numerical methods and statistics sessional  credit
Ee 3122 numerical methods and statistics sessional credit
 
Static and const members
Static and const membersStatic and const members
Static and const members
 
Stl algorithm-Basic types
Stl algorithm-Basic typesStl algorithm-Basic types
Stl algorithm-Basic types
 
C++ Question on References and Function Overloading
C++ Question on References and Function OverloadingC++ Question on References and Function Overloading
C++ Question on References and Function Overloading
 
Functional Programming in PHP
Functional Programming in PHPFunctional Programming in PHP
Functional Programming in PHP
 
C++ file
C++ fileC++ file
C++ file
 
C- Programs - Harsh
C- Programs - HarshC- Programs - Harsh
C- Programs - Harsh
 
C++ TUTORIAL 7
C++ TUTORIAL 7C++ TUTORIAL 7
C++ TUTORIAL 7
 
Pratik Bakane C++
Pratik Bakane C++Pratik Bakane C++
Pratik Bakane C++
 
C++ TUTORIAL 8
C++ TUTORIAL 8C++ TUTORIAL 8
C++ TUTORIAL 8
 
Mpibhseguranca3
Mpibhseguranca3Mpibhseguranca3
Mpibhseguranca3
 
Cquestions
Cquestions Cquestions
Cquestions
 
C++ Programs
C++ ProgramsC++ Programs
C++ Programs
 
Functional C++
Functional C++Functional C++
Functional C++
 
Sol10
Sol10Sol10
Sol10
 
Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)Being functional in PHP (PHPDay Italy 2016)
Being functional in PHP (PHPDay Italy 2016)
 

Viewers also liked

Development by the numbers
Development by the numbersDevelopment by the numbers
Development by the numbers
Anthony Ferrara
 
Don't Be STUPID, Grasp SOLID - DrupalCon Prague
Don't Be STUPID, Grasp SOLID - DrupalCon PragueDon't Be STUPID, Grasp SOLID - DrupalCon Prague
Don't Be STUPID, Grasp SOLID - DrupalCon Prague
Anthony Ferrara
 
Don't Be STUPID, Grasp SOLID - ConFoo Edition
Don't Be STUPID, Grasp SOLID - ConFoo EditionDon't Be STUPID, Grasp SOLID - ConFoo Edition
Don't Be STUPID, Grasp SOLID - ConFoo Edition
Anthony Ferrara
 
Beyond design patterns phpnw14
Beyond design patterns   phpnw14Beyond design patterns   phpnw14
Beyond design patterns phpnw14
Anthony Ferrara
 
Password Storage And Attacking In PHP - PHP Argentina
Password Storage And Attacking In PHP - PHP ArgentinaPassword Storage And Attacking In PHP - PHP Argentina
Password Storage And Attacking In PHP - PHP Argentina
Anthony Ferrara
 
PHP, Under The Hood - DPC
PHP, Under The Hood - DPCPHP, Under The Hood - DPC
PHP, Under The Hood - DPC
Anthony Ferrara
 

Viewers also liked (6)

Development by the numbers
Development by the numbersDevelopment by the numbers
Development by the numbers
 
Don't Be STUPID, Grasp SOLID - DrupalCon Prague
Don't Be STUPID, Grasp SOLID - DrupalCon PragueDon't Be STUPID, Grasp SOLID - DrupalCon Prague
Don't Be STUPID, Grasp SOLID - DrupalCon Prague
 
Don't Be STUPID, Grasp SOLID - ConFoo Edition
Don't Be STUPID, Grasp SOLID - ConFoo EditionDon't Be STUPID, Grasp SOLID - ConFoo Edition
Don't Be STUPID, Grasp SOLID - ConFoo Edition
 
Beyond design patterns phpnw14
Beyond design patterns   phpnw14Beyond design patterns   phpnw14
Beyond design patterns phpnw14
 
Password Storage And Attacking In PHP - PHP Argentina
Password Storage And Attacking In PHP - PHP ArgentinaPassword Storage And Attacking In PHP - PHP Argentina
Password Storage And Attacking In PHP - PHP Argentina
 
PHP, Under The Hood - DPC
PHP, Under The Hood - DPCPHP, Under The Hood - DPC
PHP, Under The Hood - DPC
 

Similar to Development By The Numbers - ConFoo Edition

Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)
Nikita Popov
 
Data Binding in qooxdoo
Data Binding in qooxdooData Binding in qooxdoo
Data Binding in qooxdoo
Martin Wittemann
 
Graph Databases
Graph DatabasesGraph Databases
Graph DatabasesJosh Adell
 
C test
C testC test
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
Mark
 
Super TypeScript II Turbo - FP Remix (NG Conf 2017)
Super TypeScript II Turbo - FP Remix (NG Conf 2017)Super TypeScript II Turbo - FP Remix (NG Conf 2017)
Super TypeScript II Turbo - FP Remix (NG Conf 2017)
Sean May
 
Functional php
Functional phpFunctional php
Functional php
Jean Carlo Machado
 
Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)
Michael Schwern
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolve
XSolve
 
From typing the test to testing the type
From typing the test to testing the typeFrom typing the test to testing the type
From typing the test to testing the type
Wim Godden
 
lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
inovex GmbH
 
Lessons learned from functional programming
Lessons learned from functional programmingLessons learned from functional programming
Lessons learned from functional programming
BryceLohr
 
C - programming - Ankit Kumar Singh
C - programming - Ankit Kumar Singh C - programming - Ankit Kumar Singh
C - programming - Ankit Kumar Singh
AnkitSinghRajput35
 
JavaScript for PHP developers
JavaScript for PHP developersJavaScript for PHP developers
JavaScript for PHP developers
Stoyan Stefanov
 
How to not write a boring test in Golang
How to not write a boring test in GolangHow to not write a boring test in Golang
How to not write a boring test in Golang
Dan Tran
 
Method::Signatures
Method::SignaturesMethod::Signatures
Method::Signatures
Michael Schwern
 
Advanced php
Advanced phpAdvanced php
Advanced php
Anne Lee
 
Things to consider for testable Code
Things to consider for testable CodeThings to consider for testable Code
Things to consider for testable Code
Frank Kleine
 
Concurrent applications with free monads and stm
Concurrent applications with free monads and stmConcurrent applications with free monads and stm
Concurrent applications with free monads and stm
Alexander Granin
 

Similar to Development By The Numbers - ConFoo Edition (20)

Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)Static Optimization of PHP bytecode (PHPSC 2017)
Static Optimization of PHP bytecode (PHPSC 2017)
 
Data Binding in qooxdoo
Data Binding in qooxdooData Binding in qooxdoo
Data Binding in qooxdoo
 
Graph Databases
Graph DatabasesGraph Databases
Graph Databases
 
C test
C testC test
C test
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Super TypeScript II Turbo - FP Remix (NG Conf 2017)
Super TypeScript II Turbo - FP Remix (NG Conf 2017)Super TypeScript II Turbo - FP Remix (NG Conf 2017)
Super TypeScript II Turbo - FP Remix (NG Conf 2017)
 
Functional php
Functional phpFunctional php
Functional php
 
Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)Simple Ways To Be A Better Programmer (OSCON 2007)
Simple Ways To Be A Better Programmer (OSCON 2007)
 
PHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolvePHPCon 2016: PHP7 by Witek Adamus / XSolve
PHPCon 2016: PHP7 by Witek Adamus / XSolve
 
From typing the test to testing the type
From typing the test to testing the typeFrom typing the test to testing the type
From typing the test to testing the type
 
lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
 
Lessons learned from functional programming
Lessons learned from functional programmingLessons learned from functional programming
Lessons learned from functional programming
 
C - programming - Ankit Kumar Singh
C - programming - Ankit Kumar Singh C - programming - Ankit Kumar Singh
C - programming - Ankit Kumar Singh
 
JavaScript for PHP developers
JavaScript for PHP developersJavaScript for PHP developers
JavaScript for PHP developers
 
How to not write a boring test in Golang
How to not write a boring test in GolangHow to not write a boring test in Golang
How to not write a boring test in Golang
 
Method::Signatures
Method::SignaturesMethod::Signatures
Method::Signatures
 
Advanced php
Advanced phpAdvanced php
Advanced php
 
Ai4 heuristic2
Ai4 heuristic2Ai4 heuristic2
Ai4 heuristic2
 
Things to consider for testable Code
Things to consider for testable CodeThings to consider for testable Code
Things to consider for testable Code
 
Concurrent applications with free monads and stm
Concurrent applications with free monads and stmConcurrent applications with free monads and stm
Concurrent applications with free monads and stm
 

Recently uploaded

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 

Development By The Numbers - ConFoo Edition