SlideShare a Scribd company logo
1 of 104
Download to read offline
Universal
programming recipes
Kateryna Trofimenko
iOS developer
What do we do?
What do we do?
Application
What do we do?
Application
Service
What do we do?
Application
Service
Platform
What do we do?
Application
Service
Platform
User experience
What are the properties
of good code?
Clean
Structured
Readable and well documented
Testable
Working
Difference engine by Charles Babbage
Patterns
Patterns
a general solution to a problem
Patterns
a general solution to a problem
a reusable architectural outline
Delegate
Delegate
Customise behaviour without
subclassing
Delegate
Customise behaviour without subclassing
UIApplication UIApplicationDelegate
Data Source
Data Source
Customise data retrieval
without subclassing
Data Source
Customise data retrieval without subclassing
UITableView DataSource
Data Source
Customise data retrieval without subclassing
UITableView DataSource
UICollectionView DataSource
Data Source
Customise data retrieval without subclassing
UITableView DataSource
UICollectionView DataSource
UIPickerView DataSource
Data Source
Customise data retrieval without subclassing
section count
cells count
headers
cells
UITableView DataSource
Target - Action
Target - Action
A consistent way to connect
controls to custom logic
Target - Action
A consistent way to connect controls to custom logic
UIButton
@IBAction func buttonAction(sender: AnyObject)
button.addTarget(self, action: "buttonAction",
forControlEvents: .TouchUpInside)
Target - Action
A consistent way to connect controls to custom logic
UISwitcher
switcher.addTarget(self, action: "switchAction",
forControlEvents: .ValueChanged)
Target - Action
A consistent way to connect controls to custom logic
UIGestureRecognizer
gestureRecognizer.addTarget(self, action:
"tapGestureAction")
Responder chain
Responder chain
Handle events without
knowledge of which object
will be used
Responder chain
Handle events without knowledge of which object will
be used
user
action
Responder chain
Handle events without knowledge of which object will
be used
user
action UIView
Responder chain
Handle events without knowledge of which object will
be used
user
action UIView
UIView
Responder chain
Handle events without knowledge of which object will
be used
user
action UIView
UIView
UIView
UIView
Composite
Composite
Manipulate a group of
objects as a single object
Composite
Manipulate a group of objects as a single object
UIView
Composite
Manipulate a group of objects as a single object
UIView
UIView
UIView
UIView
Composite
Manipulate a group of objects as a single object
UIView
UIView
UIView
UIView
Composite
Manipulate a group of objects as a single object
U
IView
U
IView
U
IView
U
IView
MVC
MVC
Model View
Controller
MVC
Model View
Controller
Updates
User actionsNotifications
More…
More…
MVP
More…
MVP
MVVM
More…
MVP
MVVM
VIPER
iOS Architecture Patterns
bit.ly/iOS_Patterns
Bohdan Orlov
iOS developer
Sprint #1:
Sprint #3:
Sprint #5:
Sprint #10:
Sprint #11:
Sprint #12:
Sprint #13:
Sprint #13:
Sprint #13:
Refactoring!
Information Flow
find the truth
find the truth
ask why, not how
Clear responsibilities
Profile View
Controller
Input validator
Profile View
Controller
Input validator
Chat View
Controller
Input validator
Profile View
Controller
Input validator
Chat View
Controller
Input validator Tests
Mutation
Mutation
Mutation
Mutation
Mutation
Mutation
Mutation
Mutation
Simplify with
immutability
Simplify with immutability
Simplify with immutability
Simplify with immutability
Simplify with immutability
Simplify with immutability
Feature flags
Feature
flags
Feature
flags
Feature
flags
Feature
flags
Feature
flags
Feature
flags
Core iOS Application Architectural Patterns
bit.ly/wwdc2014-224
Advanced iOS Application Architecture and Patterns
bit.ly/wwdc2014-229
Designing Intuitive User Experiences
bit.ly/wwdc2014-211
Protocol-Oriented Programming in Swift
bit.ly/wwdc2015-408
• developer.apple.com
• iosdevweekly.com
• ios-goodies.com
• natashatherobot.com
• swiftnews.curated.co
• mikeash.com/pyblog
• www.objc.io
• nshipster.com
• www.jessesquires.com
• yalantis.com/blog/category/programming/
• lists.swift.org/pipermail/swift-users/
• lists.swift.org/pipermail/swift-evolution/
Veronica Ray
Cathy Birdy
Erica Sadun
Ayaka Nonaka
Mike Ash
Ash Furrow
Andy Matuschak
Chris Eidhof
Marcin Krzyzanowski
Ørta
Peter Steinberger
Javier Soto
Nate Cook
Felix Krause
Ray Wenderlich
A. Nelson-Hornstein
2007
2007 2008
2007 2008 2010
2007 2008 2010 2014
2007 2008 2010 2014
Professions that don’t exist - yet!
techblog.badoo.com
BadooTech @BadooTech
kateryna.trofimenko@corp.badoo.com
kutusha @_fima346
Badoo

More Related Content

Similar to Universal programming recipes​ - Ekaterina Trofimenko - Women In Technology

UI2code : A Neural Machine Translator to Bootstrap Mobile GUI Implementation
UI2code : A Neural Machine Translator to Bootstrap Mobile GUI ImplementationUI2code : A Neural Machine Translator to Bootstrap Mobile GUI Implementation
UI2code : A Neural Machine Translator to Bootstrap Mobile GUI Implementation
Chunyang Chen
 

Similar to Universal programming recipes​ - Ekaterina Trofimenko - Women In Technology (20)

Swiz DAO
Swiz DAOSwiz DAO
Swiz DAO
 
Lessons-Learned-SwiftUI.pptx
Lessons-Learned-SwiftUI.pptxLessons-Learned-SwiftUI.pptx
Lessons-Learned-SwiftUI.pptx
 
UI2code : A Neural Machine Translator to Bootstrap Mobile GUI Implementation
UI2code : A Neural Machine Translator to Bootstrap Mobile GUI ImplementationUI2code : A Neural Machine Translator to Bootstrap Mobile GUI Implementation
UI2code : A Neural Machine Translator to Bootstrap Mobile GUI Implementation
 
How Android Architecture Components can Help You Improve Your App’s Design?
How Android Architecture Components can Help You Improve Your App’s Design?How Android Architecture Components can Help You Improve Your App’s Design?
How Android Architecture Components can Help You Improve Your App’s Design?
 
Android Architecture MVP Pattern
Android Architecture MVP Pattern Android Architecture MVP Pattern
Android Architecture MVP Pattern
 
Building Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript SpaghettiBuilding Rich User Experiences Without JavaScript Spaghetti
Building Rich User Experiences Without JavaScript Spaghetti
 
Acrhitecture deisign pattern_MVC_MVP_MVVM
Acrhitecture deisign pattern_MVC_MVP_MVVMAcrhitecture deisign pattern_MVC_MVP_MVVM
Acrhitecture deisign pattern_MVC_MVP_MVVM
 
MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )
 
Delegateless Coordinators - take 2
Delegateless Coordinators - take 2Delegateless Coordinators - take 2
Delegateless Coordinators - take 2
 
JavaCro'15 - Web UI best practice integration with Java EE 7 - Peter Lehto
JavaCro'15 - Web UI best practice integration with Java EE 7 - Peter LehtoJavaCro'15 - Web UI best practice integration with Java EE 7 - Peter Lehto
JavaCro'15 - Web UI best practice integration with Java EE 7 - Peter Lehto
 
Lean Development: Design Through Iterative Experiments
Lean Development: Design Through Iterative ExperimentsLean Development: Design Through Iterative Experiments
Lean Development: Design Through Iterative Experiments
 
Mobile architectures
Mobile architecturesMobile architectures
Mobile architectures
 
MVVM Design Pattern NDC2009
MVVM Design Pattern NDC2009MVVM Design Pattern NDC2009
MVVM Design Pattern NDC2009
 
Password security system for websites
Password security system for websitesPassword security system for websites
Password security system for websites
 
Persentation
PersentationPersentation
Persentation
 
Uber's new mobile architecture
Uber's new mobile architectureUber's new mobile architecture
Uber's new mobile architecture
 
C# Cookware - presented at CukeUp! 2014
C# Cookware - presented at CukeUp! 2014C# Cookware - presented at CukeUp! 2014
C# Cookware - presented at CukeUp! 2014
 
IPHONE ONLINE TRAINING
IPHONE ONLINE TRAININGIPHONE ONLINE TRAINING
IPHONE ONLINE TRAINING
 
IPHONE ONLINE TRAINING
IPHONE ONLINE TRAININGIPHONE ONLINE TRAINING
IPHONE ONLINE TRAINING
 
Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.Refactoring Wunderlist. UA Mobile 2016.
Refactoring Wunderlist. UA Mobile 2016.
 

More from Badoo

More from Badoo (6)

iOS Parallel Automation: run faster than fast — Viktar Karanevich — SeleniumC...
iOS Parallel Automation: run faster than fast — Viktar Karanevich — SeleniumC...iOS Parallel Automation: run faster than fast — Viktar Karanevich — SeleniumC...
iOS Parallel Automation: run faster than fast — Viktar Karanevich — SeleniumC...
 
Mobile Web Test Automation: to the Desktop! - Alexander Bayandin - Mobile Tes...
Mobile Web Test Automation: to the Desktop! - Alexander Bayandin - Mobile Tes...Mobile Web Test Automation: to the Desktop! - Alexander Bayandin - Mobile Tes...
Mobile Web Test Automation: to the Desktop! - Alexander Bayandin - Mobile Tes...
 
iOS Parallel Automation - Viktar Karanevich - Mobile Test Automation Meetup (...
iOS Parallel Automation - Viktar Karanevich - Mobile Test Automation Meetup (...iOS Parallel Automation - Viktar Karanevich - Mobile Test Automation Meetup (...
iOS Parallel Automation - Viktar Karanevich - Mobile Test Automation Meetup (...
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Half way to clean architecture - Dmytro Voronkevych - Droidcon Berlin
Half way to clean architecture - Dmytro Voronkevych - Droidcon BerlinHalf way to clean architecture - Dmytro Voronkevych - Droidcon Berlin
Half way to clean architecture - Dmytro Voronkevych - Droidcon Berlin
 
How Badoo Saved $1M Switching to PHP7 - Nikolay Krapivnyy - PHPDay Verona 2016
How Badoo Saved $1M Switching to PHP7 - Nikolay Krapivnyy - PHPDay Verona 2016How Badoo Saved $1M Switching to PHP7 - Nikolay Krapivnyy - PHPDay Verona 2016
How Badoo Saved $1M Switching to PHP7 - Nikolay Krapivnyy - PHPDay Verona 2016
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
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...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
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
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
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...
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
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
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
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
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 

Universal programming recipes​ - Ekaterina Trofimenko - Women In Technology