SlideShare a Scribd company logo
1 of 115
The Art of Clean Code
= The Next Chapter =
victor.rentea@gmail.com ♦ ♦ @victorrentea ♦ VictorRentea.ro
This is a sequel. Check out the first episode:
“The Art of Clean Code” at Devoxx Poland 2017
When something is painful
but you can't avoid doing it…
postpone it
When something is painful
but you can't avoid doing it…
delegate it
When something is painful
but you can't avoid doing it…
Do It More Often!
"Bring The Pain Forward!"
Continuous Integration
Pair Programming
Continuous Refactoring
Test-First
"Bring The Pain Forward!"
eXtreme
Are you Agile ?
Software Craftsmanship
ProfessionalismTechnical Practices
Code of EthicsDeliberate Practice
Victor Rentea
Clean Code Evangelist
VictorRentea.ro/#playlist
best talks on:
Lead Architect
Internal Coach
Software Craftsman
Pair Programming, Refactoring, TDD
Java Champion
Founder
C#
VictorRentea.ro @victorrentea victor.rentea@gmail.com
Independent
Technical Trainer & Coach
HibernateSpring Java 8
Architecture, DDDDesign Patterns
Clean Code Unit Testing, TDD
Java Performance more…Scala
240+ days1500 devs6 years
VictorRentea.rovictor.rentea@gmail.com
30 companies
Posting daily on
+Live-Trainingon
30K 3K 2K
VictorRentea.ro
…does one thing well
…reads like well written prose
...was written by someone who cared
...when each method you read turns out to be
pretty much what you expected
Any fool can write code that a computer understands,
but few programmers know how to write
Introduction
Clean Code …
14
Bjarne Stroustrup
inventor of C++
Grady Booch
inventor of UML
Michael Feathers
Working Effectively with Legacy Code
Martin Fowler
author of Refactoring
Ward Cunningham
inventor of Wiki, eXtreme Programmingpretty much what you expected
code that a human can understand
MOV AX, BX
VictorRentea.ro15
pretty much what you expected
Unit of Measure
The code is
wtf/min
code quality meter
VictorRentea.ro
code rot
True cost of software = its maintenance
Why so much !?!
Cause we get slower, as the code degrades
Introduction
Why Clean Code ?
16
80% of the total
Code smel
VictorRentea.ro
We READ 10x more time than we WRITE
 Make it more readable
Boy scout rule
Always check in cleaner code than you found
17
Why Clean Code ?
VictorRentea.ro
Simplify* existing code
without changing its external behavior
Refactoring?
18
safe moves
tiny steps
tests
Copy > Make old=useless
Cut > Fix compilation
Built along the way
Use the IDE, Luke!
* simple ≠ easy -> watch “Simple made easy” talk by Rick Hickey
Write down your next
commit message
VictorRentea.ro
US-134
Unit Tests
US-134
Refactoring
US-134
Develop
19
THE Refactoring
Sprint
Unit TestingCoding
VictorRentea.ro
20
US-134
Unit Tests
US-134
Refactoring
US-134
Develop
⊂ ⊃
Never Separate Them
VictorRentea.ro
21
VictorRentea.ro22
VictorRentea.ro
What do you do
After the D-day?
VictorRentea.ro
After the D-day?
VictorRentea.ro
26
After the D-day?
Mob Refactoring
1h
VictorRentea.ro
Emotions Team
29
Clean Code
is about
Attitude
VictorRentea.ro
30
VictorRentea.ro
31
What Will You Choose?
My trigger was cleancoders.com
VictorRentea.ro
Introduction
Names The power that YOU have
Functions
Classes
Formatting & Comments
33
Agenda
VictorRentea.ro
Names
34
With Great Power
Comes Great Responsibility
- SpiderMan
 real author is Uncle Ben
VictorRentea.ro
36
Broca’s Area
VictorRentea.ro
Classes are nouns
Customer, OrderDetails, OrderFacade
Avoid meaningless names
OrderInfo, OrderData vs Order
Delete the interfaces
ICustomerService, OrderServiceImpl
37
Delete the Interfaces
OrderServiceImpl
OrderDetails OrderSummary
Seek 3-5 options
for any name
VictorRentea.ro
… with ONE implementation
in the same module
38
Delete the Interfaces
except:
Remoting/API
your-app-api.jar
Strategy® Pattern
Pick implementation dynamically at runtime
Dependency Inversion
Implemented in lower-level modules
or Decorator®
tomorrow
VictorRentea.ro
40
Have you ever blamed some code?
... then find out
YOU were the author?
VictorRentea.ro
41
VictorRentea.ro
42
You Forget
VictorRentea.ro
45
You try to understand some code
90% of your work life
(in average)
VictorRentea.ro
46
Then, you get it!
You change only one line
2 hours
1 minute
How do you feel?
You try to understand some code
VictorRentea.ro
47
VictorRentea.ro
You found a better name.
48
Make the name speak for itself
It takes seconds with an IDE
(and rarely fails: XMLs, reflection,…)
Rename it !
OMG! It’s impossible!
I CAN’T be smarter
than The Elders!!
VictorRentea.ro
Keep Code Close to Domain
51
the gap
VictorRentea.ro
52 Read it for free on: https://leanpub.com/ddd_first_15_years/c/dddeu
VictorRentea.ro
53
More Functions,
Less Names!
VictorRentea.ro
54
VictorRentea.ro
VictorRentea.ro
Discover Value Objects
privateMethod(α, β)
Util1.publicHelper(α, β)
VO vo = new VO(α, β);
vo.method();
General-purpose?
Never mocked?
VictorRentea.ro
Deepen
your Domain Language
VictorRentea.ro
Introduction
Names
Functions
Classes
Formatting & Comments
61
Agenda
𝑓(𝑥)
VictorRentea.ro
A function should do one thing,
it should do it well,
and it should do it ONLY
Functions
62
They should be
Uncle Bob
VictorRentea.ro
wtf/min
How small ?
Functions
Functions Should be Smal !!
63
5 lines*
(by any means, smaller than a page of your IDE !)
To be sure that they do just 1 THING
What CAN you do in 5 lines ??
So you CAN find a good name for it
SMALL
Why so small ?!!
* Actually, Uncle Bob now says 5 is too much => extract ‘till you drop
VictorRentea.ro
66
EXTRACT METHOD
https://www.dailymail.co.uk/home/moslive/article-1198326/TOM-PARKER-BOWLES-How-I-got-caught-Jamie-Olivers-new-cook-food-emporium.html
VictorRentea.ro
67
Performance vs Clean Code
Smaller methods run faster !
(get faster)
Google “Just-In-Time Compiler Optimizations”
Performance
VictorRentea.ro
Instead of one familiar landscape,
You’re juggling with dozens of small functions
You can’t even recall all their names
but,
The Team will thank you!
69
else
for if
Scared of small functions?
71
Richard Feynman
https://www.atomicheritage.org/history/security-and-secrecy
VictorRentea.ro
72
How to fully redesign
well factored code?
inline everything back
refractor/optimize/redesign
extract again
73
VictorRentea.ro
Overengineering?
a) does too many things ?
 Try to introduce a Parameter Object/DTO/VO
Max 3 parameters
74
myBadMethod("John", "Michael", "Paris", "St. Albergue");
address.setStreetName("Paris");
…
myBadMethod(address);
b) just passes down the args ?
?!
… and see how much
code it simplifies
c) common params -> fields [OOP]
VictorRentea.ro
No boolean params
75
removeOrders(customer, false, true);
No nullable params
=> 4
(usually 3)
if (customer != null) {…} else {…}
= laziness/fear/rush = legacy
=> 2
What about
invalid data?
,nor Optional<>
VictorRentea.ro
Avoid returning null
Throw exception
Wrap it in an Optional<>
Functions
76
Queue
DB
Defensive Programming
Thoroughly check data
only at the boundaries
exception
(corrupt data)
Web
Service
File
null with biz meaning?
Optional<>
VictorRentea.ro
Entity getters
returning Optional<>
Game Won!
78
Customer.getMemberCard(): Optional<MemberCard>
Optional<>
VictorRentea.ro79 https://blog.overops.com/the-top-10-exceptions-types-in-production-java-applications-based-on-1b-events/
VictorRentea.ro
checkCustomer(customer, order);
Make them obvious
wtf/min
customer.setActive(true);
Side Effects are Evil
80
checkAndActivateCustomer(customer, order);
but necessary
Because they can
surprise the reader
VictorRentea.ro
do side-effects
return void sendEmail(Email):void
Command-Query Separation
81
setActive(true):void
return results
pure functions
getPrice():int
computePrice(movie):int
More of a guideline than a rule
in 1994, by Bertrand Meyer
VictorRentea.ro
No side effects
No INSERTs, JMS, file, fields, WS,…
Idempotent
Same result for same inputs
No random, time, WS, DB…
Pure Functions
82
𝑓 𝑥, 𝑦 = 𝑥2
+ 𝑦
VictorRentea.ro
83
So many guidelines!
VictorRentea.ro
When I write functions, they come out long and complicated.
They have lots of indenting and nested loops.
They have long argument lists.
The names are arbitrary, and there is duplicated code.
I then massage and refine that code, splitting out functions,
changing names, eliminating duplication.
I don’t write them clean from the start.
I don’t think anyone could.
84
~Uncle Bob, in Clean Code
VictorRentea.ro
The Hat Metaphor
86
Writing
Make it Work
Cleaning
Make it Readable
- Kent Beck
Unit Testing
Crack it
Copy Pasta What can I delete? How can I break it?
VictorRentea.ro
Introduction
Names
Functions
Classes
Formatting & Comments
92
Agenda
VictorRentea.ro93
struct(C language)
Do you ever miss
VictorRentea.ro
FP
=classes that expose all their state
Data structures
94
public class ImmutableStruct {
private final String firstName;
private final String lastName;
public ImmutableStruct(
String first, String last) {
this.firstName = first;
this.lastName = last;
// validation ...
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
We Immutable Objects:
- If created valid, remain so
- Easier to debug
- Thread safe
- Safe as keys in Tree*/Hash*
struct
≈ Value Object
Pure Function is what
you want to do,
Side Effects are what
you’re being paid to do.
~ “Functional Programming in 40
Minutes” by Russ Olsen at GOTO’18
VictorRentea.ro
=classes that expose all their state
Data structures
97
public class PhoneBookEntryDTO {
private String firstName;
private String lastName;
private String phoneNumber;
public String getFirstName() {
return firstName;
}
public void setFirstName(String first) {
this.firstName = first;
}
public String getLastName() { … }
public void setLastName(…) { … }
public String getPhoneNumber() { … }
public void setPhoneNumber(…) { … }
}
public class ImmutableStruct {
private final String firstName;
private final String lastName;
public ImmutableStruct(
String first, String last) {
this.firstName = first;
this.lastName = last;
// validation ...
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
public class PhoneBookEntryDTO {
public String firstName;
public String lastName;
public String phoneNumber;
}
≈
struct
"Object-Oriented
Assembly Language"
VictorRentea.ro98
OOP
VictorRentea.ro
Expose Behavior, not data
Data is an implementation detail
OOP
99
car.engineStarted=true
car.setEngineStarted(true)
car.startEngine()
Information Hiding
Even when asked
car.getGasolineInLiters()
car.getPercentageFuelLeft()
car.getEstimatedRemainingKm()
Implementation can evolve
without breaking your clients
VictorRentea.ro
100
Protect client code from future changes in implem of a
Library or (mini) Framework
mycorp-commons- .jar
Decompose complex logic into separate objects
Divide-et-impera on Complexity
API
CsvWriter
VictorRentea.ro
101
But at work
we don’t do much OOP, do we ?
In our Enterprise Apps,
we write procedural code
VictorRentea.ro102
Existing procedures.
(usually)
We automate existing business processes.
Procedural Code
VictorRentea.ro103
Lots
Procedural Code
and lots and lots and lots and lots of it…
How do we organize it, to
Keep It Short & Simple ?
VictorRentea.ro104
Procedural Code
We distribute logic in many classes:
Keep It Short & Simple
Classes as containers of logic
(in enterprise applications)
!!
VictorRentea.ro
105
Procedural
OOP FP
VictorRentea.ro
106
VictorRentea.ro107 Icon made by ‘freepik’ from www.flaticon.com
Procedural
FP
OOP
Encapsulate State
Decompose Side-Effects
Concise
Scalable
Debuggable
VictorRentea.ro
110
Introduction
Names
Functions
Classes
Formatting & Comments
Agenda
VictorRentea.ro
112
VictorRentea.ro
113
VictorRentea.ro
114
You're not Neo
It’s all about Team Work
WAKE UP!
VictorRentea.ro115
Don’t Code!
Communicate !
VictorRentea.ro
Respect your readers
Details matter: 10x more reading, remember ?
Write Literature
The simplest code that works.
Never obfuscate
Don’t Code! Communicate !
Simplicity is the ultimate sophistication
- Leonardo da Vinci
VictorRentea.ro
117
VictorRentea.ro
118
Master your IDE
Sharpen reflexes for real races
Learn those shortcuts !  Key Promoter X
(IDEA plugin)
VictorRentea.ro
120
When it's red, yellow, blue or gray,
Alt-Enter will save your day.
Ctrl-1
Ctrl-.
VictorRentea.ro
Comments
123
VictorRentea.ro
public List<int[]> getFlaggedCells(){
List<int[]> flaggedCells = new A…L…<…>();
for (int[] cell : gameBoard) {
boolean isFlagged= cell[STATUS]==FLAGGED;
if (isFlagged)
flaggedCells.add(cell);
}
return flaggedCells;
}
Readable Constants
- Instead of magic numbers
Explanatory Variables
- Name intermediary results
- if (multiline &&
(conditions ||
formulas))
Explanatory Methods
- "Encapsulate Conditionals"
Rename & Extract
- descriptive names
124
public List<int[]> getCells() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4) list1.add(x);
return list1;
}
public List<Cell> getFlaggedCells(){
List<Cell> flaggedCells = new A…L…<Cell>();
for (Cell cell : gameBoard) {
if (cell.isFlagged())
flaggedCells.add(cell);
}
return flaggedCells;
}
VictorRentea.ro
Opinions?
129
// Register user
// Loop over all entries and remove nulls
// Avoids memory leak
DUH!!extract
VictorRentea.ro142
Clean Code + Java8
Try some lib?
jOOL, vavr,…
For more, check-out the screen cast of my Clean Lambdas workshop
at Voxxed Bucharest 2017, on my website 
VictorRentea.ro
Pair Programming
143
Peer Review!
VictorRentea.ro144
Peer Review!
Pair Programming
VictorRentea.ro
147
Introduction
Names
Functions
Classes
Formatting & Comments
Java 8+
Agenda
VictorRentea.ro
Key Points
148
Introduction
Names
Functions
Classes
Formatting & Comments
Clean Lambdas
Agenda
Refine Expressive Names
Stop Refactor = Start Legacy
Short methods
Structs, Objects or Logic Containers ?
Comments are Failures. Expressive code.
Pair Programming is the way
VictorRentea.ro
149
What can I do
to make refactor happen
each day
in my team?
Shamelessly taken from the Effective Refactoring workshop of my friend Wlodek  http://refactoring.pl/
150
How to apply
all this in my
legacy code
??
Where
can I read
more ?
LET’S
PRACTICE
!!!
Pragmatic
+
Professional
©
VictorRentea.ro
152
VictorRentea.ro
153
Clean Code
Requires Discipline
VictorRentea.ro
154
Coding Kata
155
Coding Kata
No rush
Safe environment
Perfection
Reflect on HOW you work
VictorRentea.ro
156
Pair Programming
Refactoring
TDD
VictorRentea.ro
157
Topics
Refactoring
TDD
Legacy Code
Time
1-1.5 h
timeboxed
People
4-10
Coding Dojo
Synthetic
Exercises
NOT
prod code!!
VictorRentea.ro
159
Blamestorming
Retro
Some learning key points
VictorRentea.ro
Rename
&
Extract Method
VictorRentea.ro
When you cannot find a satisfying name for a variable or a method,
Choose a Welsh one.
You won't forget to change it later
- Mario Fusco
VictorRentea.ro
Extract Method
Selection
to Extract
variable
expression
Extract Variables
to generify/reuse
… then extract method
…then inline var back
Expand Selection
for less parameters
VictorRentea.ro
Feature Envy
method(α, …)
α.method(…)
“Move” refactor
“Keep Behavior next to State”[OOP]
VictorRentea.ro
3. Ctrl-
2. Revert
1. Reader
Most Powerful Forces in Universe
VictorRentea.ro
Do you love switches?
VictorRentea.ro
Switch Hygiene Rules:
is the only instruction in a method
default: throw new
One-line per case
: return func();
: func(); break;
Coming soon:
return switch …
JEP 325: Switch Expressions
Java 14… soon… 
JDD
VictorRentea.ro
I'm available
a statement of seniority
I use both hemispheres
Tough meetings?
Abused estimates?
Purpose of code:--Uncle Bob
1. Maintainable
2. Does its job!
Functional Party
Activist
Stay into
The Light
Trainings, talks, goodies
@VictorRentea
Follow me for quality posts:
Clean Code
needs strength
and determination
Thank You!
me take 1 sticker or shortcuts sheet
+
victorrentea.ro/comm
unity
Speaking Romanian? join me
https://github.com/victorrentea/clean-code-dive
Download and customize from victorrentea.ro#stickers
Hunt me for questions!
This talk was a sequel of the first episode:
“The Art of Clean Code” at Devoxx Poland 2017

More Related Content

What's hot

Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
Theo Jungeblut
 
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's GuideEvolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Victor Rentea
 
Vertical Slicing Architectures
Vertical Slicing ArchitecturesVertical Slicing Architectures
Vertical Slicing Architectures
Victor Rentea
 

What's hot (20)

Extreme Professionalism - Software Craftsmanship
Extreme Professionalism - Software CraftsmanshipExtreme Professionalism - Software Craftsmanship
Extreme Professionalism - Software Craftsmanship
 
Unit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of PurityUnit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of Purity
 
The Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable DesignThe Art of Unit Testing - Towards a Testable Design
The Art of Unit Testing - Towards a Testable Design
 
Clean code
Clean codeClean code
Clean code
 
Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
 
clean code book summary - uncle bob - English version
clean code book summary - uncle bob - English versionclean code book summary - uncle bob - English version
clean code book summary - uncle bob - English version
 
Clean code
Clean codeClean code
Clean code
 
Clean code slide
Clean code slideClean code slide
Clean code slide
 
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's GuideEvolving a Clean, Pragmatic Architecture - A Craftsman's Guide
Evolving a Clean, Pragmatic Architecture - A Craftsman's Guide
 
Clean code
Clean codeClean code
Clean code
 
The tests are trying to tell you something@VoxxedBucharest.pptx
The tests are trying to tell you something@VoxxedBucharest.pptxThe tests are trying to tell you something@VoxxedBucharest.pptx
The tests are trying to tell you something@VoxxedBucharest.pptx
 
Clean Code Principles
Clean Code PrinciplesClean Code Principles
Clean Code Principles
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
Software Craftsmanship @Code Camp Festival 2022.pdf
Software Craftsmanship @Code Camp Festival 2022.pdfSoftware Craftsmanship @Code Camp Festival 2022.pdf
Software Craftsmanship @Code Camp Festival 2022.pdf
 
Clean Code
Clean CodeClean Code
Clean Code
 
Vertical Slicing Architectures
Vertical Slicing ArchitecturesVertical Slicing Architectures
Vertical Slicing Architectures
 
Clean code
Clean codeClean code
Clean code
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Clean Code
Clean CodeClean Code
Clean Code
 
Clean Code
Clean CodeClean Code
Clean Code
 

Similar to Clean Code - The Next Chapter

How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....
Mike Harris
 
Stop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principlesStop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principles
Edorian
 

Similar to Clean Code - The Next Chapter (20)

Extreme Professionalism - Software Craftsmanship
Extreme Professionalism - Software CraftsmanshipExtreme Professionalism - Software Craftsmanship
Extreme Professionalism - Software Craftsmanship
 
Clean Code @Voxxed Days Cluj 2023 - opening Keynote
Clean Code @Voxxed Days Cluj 2023 - opening KeynoteClean Code @Voxxed Days Cluj 2023 - opening Keynote
Clean Code @Voxxed Days Cluj 2023 - opening Keynote
 
Day1 - TDD (Lecture SS 2015)
Day1 - TDD (Lecture SS 2015)Day1 - TDD (Lecture SS 2015)
Day1 - TDD (Lecture SS 2015)
 
Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)Refactoring 2TheMax (con ReSharper)
Refactoring 2TheMax (con ReSharper)
 
Refactoring, 2nd Edition
Refactoring, 2nd EditionRefactoring, 2nd Edition
Refactoring, 2nd Edition
 
Writing clean code in C# and .NET
Writing clean code in C# and .NETWriting clean code in C# and .NET
Writing clean code in C# and .NET
 
How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....How I Learned to Stop Worrying and Love Legacy Code.....
How I Learned to Stop Worrying and Love Legacy Code.....
 
Refactoring blockers and code smells @jNation 2021
Refactoring   blockers and code smells @jNation 2021Refactoring   blockers and code smells @jNation 2021
Refactoring blockers and code smells @jNation 2021
 
Refactoring - An Introduction
Refactoring - An IntroductionRefactoring - An Introduction
Refactoring - An Introduction
 
The Power Of Refactoring (PHPCon Italia)
The Power Of Refactoring (PHPCon Italia)The Power Of Refactoring (PHPCon Italia)
The Power Of Refactoring (PHPCon Italia)
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Code refactoring workshop (in Javascript)
Code refactoring workshop (in Javascript)Code refactoring workshop (in Javascript)
Code refactoring workshop (in Javascript)
 
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLEAN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
 
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE - CFObjective() 2017
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE - CFObjective() 2017AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE - CFObjective() 2017
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE - CFObjective() 2017
 
Tdd is not about testing
Tdd is not about testingTdd is not about testing
Tdd is not about testing
 
Stop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principlesStop wasting-time-by-applying-clean-code-principles
Stop wasting-time-by-applying-clean-code-principles
 
Testing, Learning and Professionalism — 20171214
Testing, Learning and Professionalism — 20171214Testing, Learning and Professionalism — 20171214
Testing, Learning and Professionalism — 20171214
 
Refactor your code: when, why and how?
Refactor your code: when, why and how?Refactor your code: when, why and how?
Refactor your code: when, why and how?
 
How to become a .net debugging jedi (Microsoft R&D Center, Nazareth, Israel)
How to become a .net debugging jedi (Microsoft R&D Center, Nazareth, Israel)How to become a .net debugging jedi (Microsoft R&D Center, Nazareth, Israel)
How to become a .net debugging jedi (Microsoft R&D Center, Nazareth, Israel)
 
Coding Standards
Coding StandardsCoding Standards
Coding Standards
 

More from Victor Rentea

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

More from Victor Rentea (20)

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Microservice Resilience Patterns @VoxxedCern'24
Microservice Resilience Patterns @VoxxedCern'24Microservice Resilience Patterns @VoxxedCern'24
Microservice Resilience Patterns @VoxxedCern'24
 
Distributed Consistency.pdf
Distributed Consistency.pdfDistributed Consistency.pdf
Distributed Consistency.pdf
 
Testing Microservices @DevoxxBE 23.pdf
Testing Microservices @DevoxxBE 23.pdfTesting Microservices @DevoxxBE 23.pdf
Testing Microservices @DevoxxBE 23.pdf
 
From Web to Flux @DevoxxBE 2023.pptx
From Web to Flux @DevoxxBE 2023.pptxFrom Web to Flux @DevoxxBE 2023.pptx
From Web to Flux @DevoxxBE 2023.pptx
 
Test-Driven Design Insights@DevoxxBE 2023.pptx
Test-Driven Design Insights@DevoxxBE 2023.pptxTest-Driven Design Insights@DevoxxBE 2023.pptx
Test-Driven Design Insights@DevoxxBE 2023.pptx
 
Profiling your Java Application
Profiling your Java ApplicationProfiling your Java Application
Profiling your Java Application
 
OAuth in the Wild
OAuth in the WildOAuth in the Wild
OAuth in the Wild
 
Unit testing - 9 design hints
Unit testing - 9 design hintsUnit testing - 9 design hints
Unit testing - 9 design hints
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the Domain
 
Hibernate and Spring - Unleash the Magic
Hibernate and Spring - Unleash the MagicHibernate and Spring - Unleash the Magic
Hibernate and Spring - Unleash the Magic
 
Integration testing with spring @JAX Mainz
Integration testing with spring @JAX MainzIntegration testing with spring @JAX Mainz
Integration testing with spring @JAX Mainz
 
The Proxy Fairy and the Magic of Spring @JAX Mainz 2021
The Proxy Fairy and the Magic of Spring @JAX Mainz 2021The Proxy Fairy and the Magic of Spring @JAX Mainz 2021
The Proxy Fairy and the Magic of Spring @JAX Mainz 2021
 
Pure functions and immutable objects @dev nexus 2021
Pure functions and immutable objects @dev nexus 2021Pure functions and immutable objects @dev nexus 2021
Pure functions and immutable objects @dev nexus 2021
 
TDD Mantra
TDD MantraTDD Mantra
TDD Mantra
 
Definitive Guide to Working With Exceptions in Java - takj at Java Champions ...
Definitive Guide to Working With Exceptions in Java - takj at Java Champions ...Definitive Guide to Working With Exceptions in Java - takj at Java Champions ...
Definitive Guide to Working With Exceptions in Java - takj at Java Champions ...
 
Pure Functions and Immutable Objects
Pure Functions and Immutable ObjectsPure Functions and Immutable Objects
Pure Functions and Immutable Objects
 
Definitive Guide to Working With Exceptions in Java
Definitive Guide to Working With Exceptions in JavaDefinitive Guide to Working With Exceptions in Java
Definitive Guide to Working With Exceptions in Java
 
Engaging Isolation - What I've Learned Delivering 250 Webinar Hours during CO...
Engaging Isolation - What I've Learned Delivering 250 Webinar Hours during CO...Engaging Isolation - What I've Learned Delivering 250 Webinar Hours during CO...
Engaging Isolation - What I've Learned Delivering 250 Webinar Hours during CO...
 

Recently uploaded

%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Recently uploaded (20)

%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 

Clean Code - The Next Chapter

Editor's Notes

  1. Salut! Eu sunt Victor si am 14 ani… de lucru cu Java, desi in ultimii ani am fost impins sa invat si PHP, Scala si C#. Lucrez la IBM ca Lead Archirect, in Bucuresti. Stiati voi ca aveti un IBM chiar aici in Cluj, intr-un sediu nou-nout. In…. De fapt, cu ajorul IBM sunt astazi aici cu voi. Stiu deja ce ganditi… aa.. E architect. Sta undeva langa un ficus si deseneaza pe pereti diagrame UML.. -NU . Eu bag la cod. Lucrez pe cele mai dificile proiecte pe care le avem. La sfarsh:Sala mare -
  2. nu ne pierdem in detalii: ramanem focusati pe design
  3. nu ne pierdem in detalii: ramanem focusati pe design
  4. Mai mult de 3 parametrii – de unde stii ordinea ?
  5. Mai mult de 3 parametrii – de unde stii ordinea ?
  6. Mai mult de 3 parametrii – de unde stii ordinea ?
  7. Mai mult de 3 parametrii – de unde stii ordinea ?
  8. Mai mult de 3 parametrii – de unde stii ordinea ?
  9. Mai mult de 3 parametrii – de unde stii ordinea ?
  10. Acest curs nu a fost gandit ca un ghid comprehensiv in Design Patterns. Pentru referinte, nuante, clarificari --…
  11. Acest curs nu a fost gandit ca un ghid comprehensiv in Design Patterns. Pentru referinte, nuante, clarificari --…