SlideShare a Scribd company logo
Object	Calisthenics
9	steps	to	better	OO	code
Agenda
Learn	how	to	make	our	code	more:
readable
reusable
testable
maintainable
Raise	you	hand	if	you	know
one	of	the	following:
DRY
KISS
SOLID
YAGNI
Zen	of	Python
Calisthenics
Cal	•	is	•	then	•	ics	-	/ˌkaləsˈTHeniks/
"Calisthenics	are	exercises	consisting	of	a
variety	of	gross	motor	movements;	often
rhythmical	and	generally	without	equipment
or	apparatus."
Wikipedia
Object	Calisthenics
Jeff	Bay
Written	for	Java
Why	bother?
Code	is	read	more
than	it's	written
Rule	#1
Only	one	level	of
indentation	per	method
class	Board(object):
				def	__init__(self,	data):
								#	Level	0
								self.buf	=	""
								for	i	in	range(10):
												#	Level	1
												for	j	in	range(10):
																#	Level	2
																self.buf	+=	data[i][j]
class	Board(object):
				def	__init__(self,	data):
								self.buf	=	""
								self.collect_rows(data)
				
				def	collect_rows(self,	data):
								for	i	in	range(10):
												self.collect_row(data[i])
												
				def	collect_row(self,	row):
								for	j	in	range(10):
												self.buf	+=	row[j]
Benefits
Single	responsibility
Better	naming
Shorter	methods
Reusable	methods
Rule	#2
Do	not	use	else	keyword
if	options.getCategories()	is	None:
				...
elif	len(options.getCategories())	==	1:
				...
elif	SPECIAL_CATEGORY	in	options.getCategories():
				...
elif	options.getCategories()	and	options.getQuery():
				...
elif	options.getContentType():
				...
def	login	(self,	request):
				if	request.user.is_authenticated():
								return	redirect("homepage")
				else:
								messages.add_message(request,	
																													messages.INFO,	
																													'Bad	credentials')
								return	redirect("login")
def	login	(self,	request):
				if	request.user.is_authenticated():
								return	redirect("homepage")
				messages.add_message(request,	
																									messages.INFO,	
																									'Bad	credentials')
				return	redirect("login")
Extract	code
Default	value
Polymorphism
Strategy	pattern
State	pattern
Benefits
Avoids	code	duplication
Lower	complexity
Readability
Rule	#3
Wrap	primitive	types	if	it
has	behaviour
Value	Object	in	DDD
class	Validator(object):
				def	check_date(self,	year,	month,	day):
								pass
#	10th	of	December	or	12th	of	October?
validator	=	Validator()
validator.check_date(2016,	10,	12)
class	Validator(object):
				def	check_date(year:	Year,	month:	Month,	day:	Day)	->	bool:
								pass
#	Function	call	leaves	no	doubt.
validator.check_date(Year(2016),	Month(10),	Day(12))
Benefits
Encapsulation
Type	hinting
Attracts	similar	behaviour
Rule	#4
Only	one	dot	per	line
OK:	Fluent	interface
class	Poem(object):
				def	__init__(self,	content):
								self.content	=	content
				def	indent(self,	spaces):
								self.content	=	"	"	*	spaces	+	self.content
								return	self
				def	suffix(self,	content):
								self.content	=	self.content	+	"	-	"	+	content
								return	self
Poem("Road	Not	Travelled").indent(4)
				.suffix("Robert	Frost").content
Not	OK:	getter	chain
class	CartService(object):
				def	get_token(self):
								token	=	self.get_service('auth')
												.auth_user('user',	'password')
												.get_result()
												.get_token()
								return	token
#	1.	What	if	None	is	returned	instead	of	object?
#	2.	How	about	exceptions	handling?
class	Location(object):
				def	__init__(self):
								self.current	=	Piece()
class	Piece(object):
				def	__init__(self):
								self.representation	=	"	"
class	Board(object):
				def	board_representation(self,	board):
								buf	=	''
								for	field	in	board:
												buf	+=	field.current.representation
								return	buf
class	Location(object):
				def	__init__(self):
								self.current	=	Piece()
								
				def	add_to(self,	buffer):
								return	self.current.add_to(buffer)
class	Piece(object):
				def	__init__(self):
								self.representation	=	"	"
								
				def	add_to(self,	buffer):
								return	buffer	+	self.representation
class	Board(object):
				def	board_representation(self,	board):
								buf	=	''
								for	field	in	board:
												buf	=	field.add_to(buf)
								return	buf
Benefits
Encapsulation
Demeter's	law
Open/Closed	Principle
Rule	#5
Do	not	abbreviate
Why	abbreviate?
Too	many	responsibilities
Name	too	long?
Split	&	extract
Duplicated	code?
Refactor!
Benefits
Clear	intentions
Indicate	underlying	problems
Rule	#6
Keep	your	classes	small
What	is	small	class?
15-20	lines	per	method
50	lines	per	class
10	classes	per	module
Benefits
Single	Responsibility
Smaller	modules
Rule	#7
No	more	than	2	instance
	variable	per	class
Class	should	handle	single
variable	state
In	some	cases	it	might	be
two	variables
class	CartService(object):
				def	__init__(self):
								self.logger	=	Logger()
								self.cart	=	CartCollection()
								self.translationService	=	TranslationService()
								self.authService	=	AuthService()
								self.userService	=	UserService()
Benefits
High	cohesion
Encapsulation
Fewer	dependencies
Rule	#8
First	class	collections
collections	module
Benefits
Single	Responsibility
Rule	#9
Do	not	use	setters/getters
Accessors	are	fine
Don't	make	decisions
outside	of	class
Let	class	do	it's	job
Tell,	don't	ask
class	Game(object):
				def	__init__(self):
								self.score	=	0
				def	set_score(self,	score):
								self.score	=	score
				def	get_score(self):
								return	self.score
#	Usage
ENEMY_DESTROYED_SCORE	=	10
game	=	Game()
game.set_score(game.get_score()	+	ENEMY_DESTROYED_SCORE)
class	Game(object):
				def	__init__(self):
								self.score	=	0
				
				def	add_score(self,	score):
								self.score	+=	score
#	Usage
ENEMY_DESTROYED_SCORE	=	10
game	=	Game()
game.add_score(ENEMY_DESTROYED_SCORE)
Benefits
Open/Closed	Principle
Catch	'em	all!
Catch	'em	all!	
1.	 Only	one	level	of	indentation	per	method,
2.	 Do	not	use	else	keyword,
3.	 Wrap	primitive	types	if	it	has	behavior,
4.	 Only	one	dot	per	line,
5.	 Don’t	abbreviate,
6.	 Keep	your	entities	small,
7.	 No	more	than	two	instance	variable	per	class,
8.	 First	Class	Collections,
9.	 Do	not	use	accessors
Catch	'em	all!	
1.	 Only	one	level	of	indentation	per	method,
2.	 Do	not	use	else	keyword,
3.	 Wrap	primitive	types	if	it	has	behavior,
4.	 Only	one	dot	per	line,
5.	 Don’t	abbreviate,
6.	 Keep	your	entities	small,
7.	 No	more	than	two	instance	variable	per	class,
8.	 First	Class	Collections,
9.	 Do	not	use	accessors
10.	 ???
11.	 PROFIT!
Homework
Create	new	project	up	to
1000	lines	long
Apply	presented	rules	as
strictly	as	possible
Draw	your	own	conculsions
Customize	these	rules
Final	thoughts
These	are	not	best	practices
These	are	just	guidelines
Use	with	caution!
Questions?
Thank	you!

More Related Content

What's hot

CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)
CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)
CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)
Lee Seungeun
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
Shinya Okano
 
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
WON JOON YOO
 
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
Yongho Ha
 
밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장
Sunggon Song
 
Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)
Hongjun Jang
 
プログラムの流れを図で表す 方法その1:フローチャート/アクティビティ図
プログラムの流れを図で表す方法その1:フローチャート/アクティビティ図プログラムの流れを図で表す方法その1:フローチャート/アクティビティ図
プログラムの流れを図で表す 方法その1:フローチャート/アクティビティ図
Katsuhiro Morishita
 
Python Programming: Data Structure
Python Programming: Data StructurePython Programming: Data Structure
Python Programming: Data Structure
Chan Shik Lim
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年version
Tetsutaro Watanabe
 
Rolling hash
Rolling hashRolling hash
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
 
MongoDB- Crud Operation
MongoDB- Crud OperationMongoDB- Crud Operation
MongoDB- Crud OperationEdureka!
 
SIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to RankSIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to Rank
sleepy_yoshi
 
First step of UX Monitoring 〜UXモニタリングこと始め〜
First step of UX Monitoring 〜UXモニタリングこと始め〜First step of UX Monitoring 〜UXモニタリングこと始め〜
First step of UX Monitoring 〜UXモニタリングこと始め〜
Taro Yoshioka
 
알파고 (바둑 인공지능)의 작동 원리
알파고 (바둑 인공지능)의 작동 원리알파고 (바둑 인공지능)의 작동 원리
알파고 (바둑 인공지능)의 작동 원리
Shane (Seungwhan) Moon
 
分析手法のご紹介
分析手法のご紹介分析手法のご紹介
分析手法のご紹介
Recruit Technologies
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템
NAVER D2
 
IT技術者が説明上手になるための七つの法則
IT技術者が説明上手になるための七つの法則IT技術者が説明上手になるための七つの法則
IT技術者が説明上手になるための七つの法則
Mizuhiro Kaimai
 
オープンソースの情報共有の仕組み「Knowledge」の使い方説明
オープンソースの情報共有の仕組み「Knowledge」の使い方説明オープンソースの情報共有の仕組み「Knowledge」の使い方説明
オープンソースの情報共有の仕組み「Knowledge」の使い方説明
koda3
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
Suhyun Park
 

What's hot (20)

CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)
CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)
CNN 초보자가 만드는 초보자 가이드 (VGG 약간 포함)
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
 
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
 
밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장밑바닥부터 시작하는딥러닝 8장
밑바닥부터 시작하는딥러닝 8장
 
Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)Aho-Corasick Algorithm(아호 코라식 알고리즘)
Aho-Corasick Algorithm(아호 코라식 알고리즘)
 
プログラムの流れを図で表す 方法その1:フローチャート/アクティビティ図
プログラムの流れを図で表す方法その1:フローチャート/アクティビティ図プログラムの流れを図で表す方法その1:フローチャート/アクティビティ図
プログラムの流れを図で表す 方法その1:フローチャート/アクティビティ図
 
Python Programming: Data Structure
Python Programming: Data StructurePython Programming: Data Structure
Python Programming: Data Structure
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年version
 
Rolling hash
Rolling hashRolling hash
Rolling hash
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
MongoDB- Crud Operation
MongoDB- Crud OperationMongoDB- Crud Operation
MongoDB- Crud Operation
 
SIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to RankSIGIR2011読み会 3. Learning to Rank
SIGIR2011読み会 3. Learning to Rank
 
First step of UX Monitoring 〜UXモニタリングこと始め〜
First step of UX Monitoring 〜UXモニタリングこと始め〜First step of UX Monitoring 〜UXモニタリングこと始め〜
First step of UX Monitoring 〜UXモニタリングこと始め〜
 
알파고 (바둑 인공지능)의 작동 원리
알파고 (바둑 인공지능)의 작동 원리알파고 (바둑 인공지능)의 작동 원리
알파고 (바둑 인공지능)의 작동 원리
 
分析手法のご紹介
分析手法のご紹介分析手法のご紹介
分析手法のご紹介
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템
 
IT技術者が説明上手になるための七つの法則
IT技術者が説明上手になるための七つの法則IT技術者が説明上手になるための七つの法則
IT技術者が説明上手になるための七つの法則
 
オープンソースの情報共有の仕組み「Knowledge」の使い方説明
オープンソースの情報共有の仕組み「Knowledge」の使い方説明オープンソースの情報共有の仕組み「Knowledge」の使い方説明
オープンソースの情報共有の仕組み「Knowledge」の使い方説明
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
 

Viewers also liked

Object calisthenics (PHPCon Poland 2016)
Object calisthenics (PHPCon Poland 2016)Object calisthenics (PHPCon Poland 2016)
Object calisthenics (PHPCon Poland 2016)
Paweł Lewtak
 
Intramural Sports & Recreation @ ACCREVISED
Intramural Sports & Recreation @ ACCREVISEDIntramural Sports & Recreation @ ACCREVISED
Intramural Sports & Recreation @ ACCREVISEDTracy Partin
 
Dissertation complete copy 250416
Dissertation complete copy 250416Dissertation complete copy 250416
Dissertation complete copy 250416Russell White
 
Teaching the Six Traits Holly Bembridge
Teaching the Six Traits Holly BembridgeTeaching the Six Traits Holly Bembridge
Teaching the Six Traits Holly BembridgeHolly Bembridge
 
Intro to unit. Level 2.
Intro to unit. Level 2. Intro to unit. Level 2.
Intro to unit. Level 2. garylintern
 
Sports Psychology in Action
Sports Psychology in ActionSports Psychology in Action
Sports Psychology in Action
Helping Psychology
 
Presentation on Furniture
Presentation on FurniturePresentation on Furniture
Presentation on Furniture
Saíful Íslam
 
kriza Sports PR Services
kriza Sports PR Services kriza Sports PR Services
kriza Sports PR Services
dandoni
 
PEShare.co.uk Shared Resource
PEShare.co.uk Shared ResourcePEShare.co.uk Shared Resource
PEShare.co.uk Shared Resourcepeshare.co.uk
 
Physical Education are based on the natural Physical education of the primit...
Physical Education  are based on the natural Physical education of the primit...Physical Education  are based on the natural Physical education of the primit...
Physical Education are based on the natural Physical education of the primit...Rose Manlapaz
 
Rhythmic Gymnastics School Activity
Rhythmic Gymnastics School ActivityRhythmic Gymnastics School Activity
Rhythmic Gymnastics School Activity
Ankita Dandekar
 
Age sex Pyramids Presentation
Age sex Pyramids PresentationAge sex Pyramids Presentation
Age sex Pyramids Presentation
Tafadzwa Bere
 
SGP - Sport Psychology
SGP - Sport PsychologySGP - Sport Psychology
SGP - Sport Psychology118620
 
Reading age sex pyramid - lesson 5
Reading age sex pyramid - lesson 5Reading age sex pyramid - lesson 5
Reading age sex pyramid - lesson 5Ms Geoflake
 
17 Traits Of A Teacher
17 Traits Of A Teacher17 Traits Of A Teacher
17 Traits Of A Teacher
Kidzrio
 
Why Sports Psychology?
Why Sports Psychology?Why Sports Psychology?
Why Sports Psychology?
Peak Performance Sports, LLC
 
2012 NCSP.Cultural Influences of Dance in Physical Education
2012 NCSP.Cultural Influences of Dance in Physical Education2012 NCSP.Cultural Influences of Dance in Physical Education
2012 NCSP.Cultural Influences of Dance in Physical Education
Up Danzprof
 

Viewers also liked (20)

Object calisthenics (PHPCon Poland 2016)
Object calisthenics (PHPCon Poland 2016)Object calisthenics (PHPCon Poland 2016)
Object calisthenics (PHPCon Poland 2016)
 
FURNITURE KAKANJ
FURNITURE KAKANJFURNITURE KAKANJ
FURNITURE KAKANJ
 
Intramural Sports & Recreation @ ACCREVISED
Intramural Sports & Recreation @ ACCREVISEDIntramural Sports & Recreation @ ACCREVISED
Intramural Sports & Recreation @ ACCREVISED
 
Dissertation complete copy 250416
Dissertation complete copy 250416Dissertation complete copy 250416
Dissertation complete copy 250416
 
Teaching the Six Traits Holly Bembridge
Teaching the Six Traits Holly BembridgeTeaching the Six Traits Holly Bembridge
Teaching the Six Traits Holly Bembridge
 
Intro to unit. Level 2.
Intro to unit. Level 2. Intro to unit. Level 2.
Intro to unit. Level 2.
 
Sports Psychology in Action
Sports Psychology in ActionSports Psychology in Action
Sports Psychology in Action
 
Object Calisthenics
Object CalisthenicsObject Calisthenics
Object Calisthenics
 
Presentation on Furniture
Presentation on FurniturePresentation on Furniture
Presentation on Furniture
 
kriza Sports PR Services
kriza Sports PR Services kriza Sports PR Services
kriza Sports PR Services
 
Strategy of Sport for all
Strategy of Sport for all Strategy of Sport for all
Strategy of Sport for all
 
PEShare.co.uk Shared Resource
PEShare.co.uk Shared ResourcePEShare.co.uk Shared Resource
PEShare.co.uk Shared Resource
 
Physical Education are based on the natural Physical education of the primit...
Physical Education  are based on the natural Physical education of the primit...Physical Education  are based on the natural Physical education of the primit...
Physical Education are based on the natural Physical education of the primit...
 
Rhythmic Gymnastics School Activity
Rhythmic Gymnastics School ActivityRhythmic Gymnastics School Activity
Rhythmic Gymnastics School Activity
 
Age sex Pyramids Presentation
Age sex Pyramids PresentationAge sex Pyramids Presentation
Age sex Pyramids Presentation
 
SGP - Sport Psychology
SGP - Sport PsychologySGP - Sport Psychology
SGP - Sport Psychology
 
Reading age sex pyramid - lesson 5
Reading age sex pyramid - lesson 5Reading age sex pyramid - lesson 5
Reading age sex pyramid - lesson 5
 
17 Traits Of A Teacher
17 Traits Of A Teacher17 Traits Of A Teacher
17 Traits Of A Teacher
 
Why Sports Psychology?
Why Sports Psychology?Why Sports Psychology?
Why Sports Psychology?
 
2012 NCSP.Cultural Influences of Dance in Physical Education
2012 NCSP.Cultural Influences of Dance in Physical Education2012 NCSP.Cultural Influences of Dance in Physical Education
2012 NCSP.Cultural Influences of Dance in Physical Education
 

Similar to Object calisthenics (PyCon Poland 2016)

Object Calisthenics (PyCon Slovakia 2017)
Object Calisthenics (PyCon Slovakia 2017)Object Calisthenics (PyCon Slovakia 2017)
Object Calisthenics (PyCon Slovakia 2017)
Paweł Lewtak
 
Object Calisthenics (Code Europe 2017)
Object Calisthenics (Code Europe 2017)Object Calisthenics (Code Europe 2017)
Object Calisthenics (Code Europe 2017)
Paweł Lewtak
 
Core java Basics
Core java BasicsCore java Basics
Core java Basics
RAMU KOLLI
 
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGNIntroducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Manish Pandit
 
Introduction to java 101
Introduction to java 101Introduction to java 101
Introduction to java 101
kankemwa Ishaku
 
Core java part1
Core java  part1Core java  part1
Core java part1
VenkataBolagani
 
Java 101
Java 101Java 101
Java 101
Manuela Grindei
 
Devry CIS 355A Full Course Latest
Devry CIS 355A Full Course LatestDevry CIS 355A Full Course Latest
Devry CIS 355A Full Course Latest
Atifkhilji
 
Introduction to the Android NDK
Introduction to the Android NDKIntroduction to the Android NDK
Introduction to the Android NDK
BeMyApp
 
IOS debugging
IOS debuggingIOS debugging
IOS debugging
Dawid Planeta
 
Presentation to java
Presentation  to  javaPresentation  to  java
Presentation to java
Ganesh Chittalwar
 
Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)
DroidConTLV
 
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural NetsPython for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
Roelof Pieters
 
Session 1 of programming
Session 1 of programmingSession 1 of programming
Session 1 of programming
Ramy F. Radwan
 
Mcs 024 assignment solution (2020-21)
Mcs 024 assignment solution (2020-21)Mcs 024 assignment solution (2020-21)
Mcs 024 assignment solution (2020-21)
smumbahelp
 
ppt_on_java.pptx
ppt_on_java.pptxppt_on_java.pptx
ppt_on_java.pptx
MAYANKKUMAR492040
 
Unit I Advanced Java Programming Course
Unit I   Advanced Java Programming CourseUnit I   Advanced Java Programming Course
Unit I Advanced Java Programming Course
parveen837153
 
Python basic
Python basicPython basic
Python basic
SOHIL SUNDARAM
 

Similar to Object calisthenics (PyCon Poland 2016) (20)

Object Calisthenics (PyCon Slovakia 2017)
Object Calisthenics (PyCon Slovakia 2017)Object Calisthenics (PyCon Slovakia 2017)
Object Calisthenics (PyCon Slovakia 2017)
 
Object Calisthenics (Code Europe 2017)
Object Calisthenics (Code Europe 2017)Object Calisthenics (Code Europe 2017)
Object Calisthenics (Code Europe 2017)
 
Sep 15
Sep 15Sep 15
Sep 15
 
Sep 15
Sep 15Sep 15
Sep 15
 
Core java Basics
Core java BasicsCore java Basics
Core java Basics
 
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGNIntroducing Scala to your Ruby/Java Shop : My experiences at IGN
Introducing Scala to your Ruby/Java Shop : My experiences at IGN
 
Introduction to java 101
Introduction to java 101Introduction to java 101
Introduction to java 101
 
Core java part1
Core java  part1Core java  part1
Core java part1
 
Java 101
Java 101Java 101
Java 101
 
Devry CIS 355A Full Course Latest
Devry CIS 355A Full Course LatestDevry CIS 355A Full Course Latest
Devry CIS 355A Full Course Latest
 
Introduction to the Android NDK
Introduction to the Android NDKIntroduction to the Android NDK
Introduction to the Android NDK
 
IOS debugging
IOS debuggingIOS debugging
IOS debugging
 
Presentation to java
Presentation  to  javaPresentation  to  java
Presentation to java
 
Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)Using the Android Native Development Kit (NDK)
Using the Android Native Development Kit (NDK)
 
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural NetsPython for Image Understanding: Deep Learning with Convolutional Neural Nets
Python for Image Understanding: Deep Learning with Convolutional Neural Nets
 
Session 1 of programming
Session 1 of programmingSession 1 of programming
Session 1 of programming
 
Mcs 024 assignment solution (2020-21)
Mcs 024 assignment solution (2020-21)Mcs 024 assignment solution (2020-21)
Mcs 024 assignment solution (2020-21)
 
ppt_on_java.pptx
ppt_on_java.pptxppt_on_java.pptx
ppt_on_java.pptx
 
Unit I Advanced Java Programming Course
Unit I   Advanced Java Programming CourseUnit I   Advanced Java Programming Course
Unit I Advanced Java Programming Course
 
Python basic
Python basicPython basic
Python basic
 

More from Paweł Lewtak

Jak rozwalić dowolny projekt w 10 prostych krokach
Jak rozwalić dowolny projekt w 10 prostych krokachJak rozwalić dowolny projekt w 10 prostych krokach
Jak rozwalić dowolny projekt w 10 prostych krokach
Paweł Lewtak
 
Good project from scratch - from developer's point of view
Good project from scratch - from developer's point of viewGood project from scratch - from developer's point of view
Good project from scratch - from developer's point of view
Paweł Lewtak
 
Long-term IT projects
Long-term IT projectsLong-term IT projects
Long-term IT projects
Paweł Lewtak
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
Paweł Lewtak
 
Improve your developer's toolset
Improve your developer's toolsetImprove your developer's toolset
Improve your developer's toolset
Paweł Lewtak
 
2nd hardest thing in computer science
2nd hardest thing in computer science2nd hardest thing in computer science
2nd hardest thing in computer science
Paweł Lewtak
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
Paweł Lewtak
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
Paweł Lewtak
 

More from Paweł Lewtak (8)

Jak rozwalić dowolny projekt w 10 prostych krokach
Jak rozwalić dowolny projekt w 10 prostych krokachJak rozwalić dowolny projekt w 10 prostych krokach
Jak rozwalić dowolny projekt w 10 prostych krokach
 
Good project from scratch - from developer's point of view
Good project from scratch - from developer's point of viewGood project from scratch - from developer's point of view
Good project from scratch - from developer's point of view
 
Long-term IT projects
Long-term IT projectsLong-term IT projects
Long-term IT projects
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
 
Improve your developer's toolset
Improve your developer's toolsetImprove your developer's toolset
Improve your developer's toolset
 
2nd hardest thing in computer science
2nd hardest thing in computer science2nd hardest thing in computer science
2nd hardest thing in computer science
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
 
2nd hardest problem in computer science
2nd hardest problem in computer science2nd hardest problem in computer science
2nd hardest problem in computer science
 

Recently uploaded

Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 

Recently uploaded (20)

Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 

Object calisthenics (PyCon Poland 2016)