SlideShare a Scribd company logo
Quick intro to Clean Coding
Aleksey Drobnych
Java Trainer
● What is bad code
● What is good code
● Code smells
● Tests
● Refactoring
What this all about?
I knew one sales guy who predicted that programming languages and
programmers will disappear some time because of power of next gen
smart business wizards.
What is programm? This is just set of business receipts written with
maximal level of precision and detalisation. It's impossible to do using
human language. It's too flexible. We need to invent specific DSL for the
system. And OOP is one of possible ways for this purpose.
Foreword
Bad code
if (this == null)
{
// Logic here
}
switch (number)
{
case 0: printf("0"); break;
case 1: printf("1"); break;
case 2: printf("2"); break;
case 3: printf("3"); break;
case 4: printf("4"); break;
case 5: printf("5"); break;
case 6: printf("6"); break;
case 7: printf("7"); break;
case 8: printf("8"); break;
case 9: printf("9"); break;
}
public int m_otCalc() {
return iThsWkd * iThsRte +
(int) Math.round(0.5 * iThsRte *
Math.max(0, iThsWkd - 400)
);
}
https://gist.github.com/adrobnych/5183752
Path one
● Code that just works (that's easy, man!)
● More Code that just works (huh, we'll survive!)
● Mmmooorrreee CCoodeee thaaat j juust wooork s
● MMMmmmmmmmmmmm mmmmmmmmm
● Great Technical Debt
Two ways of Code
Path two
● Code that just works
● Tests
● Refinement (finally we've done this spike)
● Test
● More Code just enough for Test
● Refactoring
● Test
● More Code just enough for Test
● Refactoring
● look mum no hands!
Two ways of Code
Good Code
● Code needs to work today just
once
Simplisity
● Code needs to be easy for
change forever
Ability to grow
● Big Upfront Design
● We have no time for tests
● Just do so as you did before
● Don't touch it until it works
Know your daemons
● Any code can be rewritten
● Tests are your safety belt
● Leave the campground cleaner
than you found it
Know your angels
Transparent: The consequence of change are visible and
predictable
Reasonable: The cost of adding a new feature is
proportional to its value
Usable: if you already wrote the code, you can reuse it
Exemplary: More code like this would be good for your
app
How to judge the goodness
of code
● Object Oriented Design Patterns
● Object Oriented Design Principles
● Knowledge of language and Libs
● Code Smells
● Tests
● Code Reviews
Clean Code Toolset
● Object Oriented Design Patterns
In software engineering, a design pattern is a general reusable solution to
a commonly occurring problem within a given context in software design. A
design pattern is not a finished design that can be transformed directly into
source or machine code. It is a description or template for how to solve a
problem that can be used in many different situations. Patterns are
formalized best practices that the programmer must implement themselves
in the application.Object-oriented design patterns typically show
relationships and interactions between classes or objects, without
specifying the final application classes or objects that are involved.
Clean Code Toolset
● Object Oriented Design Principles
In computer programming, SOLID (Single responsibility, Open-closed,
Liskov substitution, Interface segregation and Dependency inversion)
is a mnemonic acronym introduced by Michael Feathers for the "first five
principles" identified by Robert C. Martin in the early 2000s that stands for
five basic principles of object-oriented programming and design. The
principles when applied together intend to make it more likely that
aprogrammer will create a system that is easy to maintain and extend over
time.The principles of SOLID are guidelines that can be applied while
working on software to remove code smells by causing the programmer to
refactor the software's source code until it is both legible and extensible. It
is typically used with test-driven development, and is part of an overall
strategy of agile and adaptive programming.
Clean Code Toolset
● Knowledge of language and Libs
List of Efective Java units
Clean Code Toolset
● Code Smells
In computer programming, code smell is any symptom in the source code
of a program that possibly indicates a deeper problem. Code smells are
usually not bugs—they are not technically incorrect and don't currently
prevent the program from functioning. Instead, they indicate weaknesses in
design that may be slowing down development or increasing the risk of
bugs or failures in the future.
Clean Code Toolset
● Tests
Test-driven development (TDD) is a software development process that
relies on the repetition of a very short development cycle: first the
developer writes an (initially failing) automated test case that defines a
desired improvement or new function, then produces the minimum amount
of code to pass that test, and finally refactors the new code to acceptable
standards. Kent Beck, who is credited with having developed or
'rediscovered' the technique, stated in 2003 that TDD encourages simple
designs and inspires confidence.
Clean Code Toolset
● Code Reviews and refactorings
Code refactoring is a "disciplined technique for restructuring an existing
body of code, altering its internal structure without changing its external
behavior", undertaken in order to improve some of the nonfunctional
attributes of the software. Advantages include improved code readability
and reduced complexity to improve the maintainability of the source code,
as well as a more expressive internal architecture or object model to
improve extensibility.
Clean Code Toolset
Small refactorings way:
https://github.com/adrobnych/CleanCalc
Live refactoring session
Quick way: Patterns
Live refactoring session
Write tests.
If your Classes and Methods are just DSL of the
system, then tests is your first and most
important way to start talk with silent system.
Finally both your tests and the system will talk
Perfect Language.
Keep your tests as a grammar for your DSL.
From where I shall start?
Don't write comments.
85% of developer job is reading of existing code.
Keep your code readable, self-explanatory,
intentional. Comments are poor deodorant for
your code. If you will find yourself writing
comment then you can't express your intent in
code. This is smell. Refactor.
From where I shall start?
What's next?
Object Oriented Design
Effective Java
Clean Code, Code Smells, Refactorings
OOD Patterns
TDD
Crossroad
Quick Intro to Clean Coding

More Related Content

PPTX
Importance of the quality of code
PDF
Understanding, measuring and improving code quality in JavaScript
ODP
Documenting Code - Patterns and Anti-patterns - NLPW 2016
ODP
Beyond Unit Testing
PPTX
Agile code quality metrics
ODP
Documenting code yapceu2016
PDF
ScalaItaly 2015 - Your Microservice as a Function
PDF
Code metrics in PHP
Importance of the quality of code
Understanding, measuring and improving code quality in JavaScript
Documenting Code - Patterns and Anti-patterns - NLPW 2016
Beyond Unit Testing
Agile code quality metrics
Documenting code yapceu2016
ScalaItaly 2015 - Your Microservice as a Function
Code metrics in PHP

What's hot (20)

PDF
Measuring Code Quality in WTF/min.
PDF
Software Engineering Culture - Improve Code Quality
PPT
Agile development with Ruby
ODP
Tdd in php a brief example
PDF
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
PPTX
Code Quality Assurance
PDF
Unwritten Manual for Pair Programming
POT
Quality metrics and angular js applications
PPTX
Code quality
PDF
Codesmells for AspectJ
PDF
Design concerns for concrete syntax
ODP
More than Programming!
PDF
Clean Software Design - DevNot Summit Istanbul 2017
PDF
Algorithm pseudocode flowchart program notes
PDF
Six Steps to Conversation Driven Development
ODP
TDD in PHP - Memphis PHP 2011-08-25
PPTX
Test Driven Development
PDF
Code quality as a built-in process
PDF
10 Faulty Behaviors of Code Review - Developer Summit Istanbul 2018
PPT
Design Smells
Measuring Code Quality in WTF/min.
Software Engineering Culture - Improve Code Quality
Agile development with Ruby
Tdd in php a brief example
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
Code Quality Assurance
Unwritten Manual for Pair Programming
Quality metrics and angular js applications
Code quality
Codesmells for AspectJ
Design concerns for concrete syntax
More than Programming!
Clean Software Design - DevNot Summit Istanbul 2017
Algorithm pseudocode flowchart program notes
Six Steps to Conversation Driven Development
TDD in PHP - Memphis PHP 2011-08-25
Test Driven Development
Code quality as a built-in process
10 Faulty Behaviors of Code Review - Developer Summit Istanbul 2018
Design Smells
Ad

Viewers also liked (20)

PDF
Seo and Marketing Requirements in Web Architecture
PPT
Правила хорошего SEO тона в Frontend разработке
PPT
Гибкость и Структурированность Oбъектно Oриентированноя CSS
PDF
QA evolution, in pictures
PPTX
IGears: Template Architecture and Principles
PDF
PDF
PDF
Speed Up Your Website
PPT
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
PDF
QA evolution to the present day
PDF
Databases on Client Side
PPT
Эффективный JavaScript - IQLab Frontend Fusion 2012
PPT
Психология восприятия и UX дизайн
PPT
Доступность веб-сайтов: WWW для всех?
PDF
User Behavior: Interacting With Important Website Elements
PDF
Manifest of modern engineers
PDF
Management and Communications (IPAA)
PPT
Frontend Servers and NGINX: What, Where and How
PDF
Unexpected achievements 2013
Seo and Marketing Requirements in Web Architecture
Правила хорошего SEO тона в Frontend разработке
Гибкость и Структурированность Oбъектно Oриентированноя CSS
QA evolution, in pictures
IGears: Template Architecture and Principles
Speed Up Your Website
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
QA evolution to the present day
Databases on Client Side
Эффективный JavaScript - IQLab Frontend Fusion 2012
Психология восприятия и UX дизайн
Доступность веб-сайтов: WWW для всех?
User Behavior: Interacting With Important Website Elements
Manifest of modern engineers
Management and Communications (IPAA)
Frontend Servers and NGINX: What, Where and How
Unexpected achievements 2013
Ad

Similar to Quick Intro to Clean Coding (20)

PPTX
Clean code presentation
PPTX
Clean Code
PPTX
Clean code chpt_1
PDF
Keeping code clean
PPTX
Clean code
PDF
[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...
PPTX
Clean Code Part III - Craftsmanship at SoCal Code Camp
PDF
Solid OO & Clean Coding is essential to successful Agile development
PPTX
Growing Software and Growing Ourselves
PDF
Clean Code. An Agile Guide to Software Craft Kameron H.
PPTX
Principled And Clean Coding
PDF
Clean code-v2.2
PDF
SOLID Principles and Design Patterns
PDF
Clean code and code smells
PPTX
Is your code SOLID enough?
PPTX
Clean Code I - Best Practices
PDF
Code Craftsmanship Checklist
PDF
Basics of writing clean code
PDF
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
PPTX
Writing Clean Code (Recommendations by Robert Martin)
Clean code presentation
Clean Code
Clean code chpt_1
Keeping code clean
Clean code
[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...
Clean Code Part III - Craftsmanship at SoCal Code Camp
Solid OO & Clean Coding is essential to successful Agile development
Growing Software and Growing Ourselves
Clean Code. An Agile Guide to Software Craft Kameron H.
Principled And Clean Coding
Clean code-v2.2
SOLID Principles and Design Patterns
Clean code and code smells
Is your code SOLID enough?
Clean Code I - Best Practices
Code Craftsmanship Checklist
Basics of writing clean code
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Writing Clean Code (Recommendations by Robert Martin)

More from Ecommerce Solution Provider SysIQ (15)

PDF
Developing for e commerce is important
PDF
Getting to know magento
PDF
Developing for e commerce is important
PDF
PDF
Scalability and performance for e commerce
PDF
Lupan big enterprise ecommerce fusion 2013
PDF
non-blocking java script
PDF
Testing schools overview
PPT
Interactive web prototyping
PPT
Модульные сетки в реальном мире
PPT
External Widgets Performance
PPT
Understanding Annotations in Java
PPT
Mastering Java ByteCode
Developing for e commerce is important
Getting to know magento
Developing for e commerce is important
Scalability and performance for e commerce
Lupan big enterprise ecommerce fusion 2013
non-blocking java script
Testing schools overview
Interactive web prototyping
Модульные сетки в реальном мире
External Widgets Performance
Understanding Annotations in Java
Mastering Java ByteCode

Quick Intro to Clean Coding

  • 1. Quick intro to Clean Coding Aleksey Drobnych Java Trainer
  • 2. ● What is bad code ● What is good code ● Code smells ● Tests ● Refactoring What this all about?
  • 3. I knew one sales guy who predicted that programming languages and programmers will disappear some time because of power of next gen smart business wizards. What is programm? This is just set of business receipts written with maximal level of precision and detalisation. It's impossible to do using human language. It's too flexible. We need to invent specific DSL for the system. And OOP is one of possible ways for this purpose. Foreword
  • 5. if (this == null) { // Logic here }
  • 6. switch (number) { case 0: printf("0"); break; case 1: printf("1"); break; case 2: printf("2"); break; case 3: printf("3"); break; case 4: printf("4"); break; case 5: printf("5"); break; case 6: printf("6"); break; case 7: printf("7"); break; case 8: printf("8"); break; case 9: printf("9"); break; }
  • 7. public int m_otCalc() { return iThsWkd * iThsRte + (int) Math.round(0.5 * iThsRte * Math.max(0, iThsWkd - 400) ); }
  • 9. Path one ● Code that just works (that's easy, man!) ● More Code that just works (huh, we'll survive!) ● Mmmooorrreee CCoodeee thaaat j juust wooork s ● MMMmmmmmmmmmmm mmmmmmmmm ● Great Technical Debt Two ways of Code
  • 10. Path two ● Code that just works ● Tests ● Refinement (finally we've done this spike) ● Test ● More Code just enough for Test ● Refactoring ● Test ● More Code just enough for Test ● Refactoring ● look mum no hands! Two ways of Code
  • 12. ● Code needs to work today just once Simplisity
  • 13. ● Code needs to be easy for change forever Ability to grow
  • 14. ● Big Upfront Design ● We have no time for tests ● Just do so as you did before ● Don't touch it until it works Know your daemons
  • 15. ● Any code can be rewritten ● Tests are your safety belt ● Leave the campground cleaner than you found it Know your angels
  • 16. Transparent: The consequence of change are visible and predictable Reasonable: The cost of adding a new feature is proportional to its value Usable: if you already wrote the code, you can reuse it Exemplary: More code like this would be good for your app How to judge the goodness of code
  • 17. ● Object Oriented Design Patterns ● Object Oriented Design Principles ● Knowledge of language and Libs ● Code Smells ● Tests ● Code Reviews Clean Code Toolset
  • 18. ● Object Oriented Design Patterns In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. A design pattern is not a finished design that can be transformed directly into source or machine code. It is a description or template for how to solve a problem that can be used in many different situations. Patterns are formalized best practices that the programmer must implement themselves in the application.Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved. Clean Code Toolset
  • 19. ● Object Oriented Design Principles In computer programming, SOLID (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion) is a mnemonic acronym introduced by Michael Feathers for the "first five principles" identified by Robert C. Martin in the early 2000s that stands for five basic principles of object-oriented programming and design. The principles when applied together intend to make it more likely that aprogrammer will create a system that is easy to maintain and extend over time.The principles of SOLID are guidelines that can be applied while working on software to remove code smells by causing the programmer to refactor the software's source code until it is both legible and extensible. It is typically used with test-driven development, and is part of an overall strategy of agile and adaptive programming. Clean Code Toolset
  • 20. ● Knowledge of language and Libs List of Efective Java units Clean Code Toolset
  • 21. ● Code Smells In computer programming, code smell is any symptom in the source code of a program that possibly indicates a deeper problem. Code smells are usually not bugs—they are not technically incorrect and don't currently prevent the program from functioning. Instead, they indicate weaknesses in design that may be slowing down development or increasing the risk of bugs or failures in the future. Clean Code Toolset
  • 22. ● Tests Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: first the developer writes an (initially failing) automated test case that defines a desired improvement or new function, then produces the minimum amount of code to pass that test, and finally refactors the new code to acceptable standards. Kent Beck, who is credited with having developed or 'rediscovered' the technique, stated in 2003 that TDD encourages simple designs and inspires confidence. Clean Code Toolset
  • 23. ● Code Reviews and refactorings Code refactoring is a "disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior", undertaken in order to improve some of the nonfunctional attributes of the software. Advantages include improved code readability and reduced complexity to improve the maintainability of the source code, as well as a more expressive internal architecture or object model to improve extensibility. Clean Code Toolset
  • 25. Quick way: Patterns Live refactoring session
  • 26. Write tests. If your Classes and Methods are just DSL of the system, then tests is your first and most important way to start talk with silent system. Finally both your tests and the system will talk Perfect Language. Keep your tests as a grammar for your DSL. From where I shall start?
  • 27. Don't write comments. 85% of developer job is reading of existing code. Keep your code readable, self-explanatory, intentional. Comments are poor deodorant for your code. If you will find yourself writing comment then you can't express your intent in code. This is smell. Refactor. From where I shall start?
  • 28. What's next? Object Oriented Design Effective Java Clean Code, Code Smells, Refactorings OOD Patterns TDD Crossroad