SlideShare a Scribd company logo
1 of 48
Clean Code
 @mariosangiorgio
Why?
Goals

Readable, maintainable and
    extendable code
Meaningful names
A simple example
public List<int[]> getThem() {
  List<int[]> list1 = new ArrayList<int[]>();
  for (int[] x : theList)
    if (x[0] == 4)
      list1.add(x);
  return list1;
}
A simple example
public List<int[]> getThem() {
  List<int[]> list1 = new ArrayList<int[]>();
  for (int[] x : theList)
    if (x[0] == 4)
      list1.add(x);
  return list1;
}


    This code is quite simple but
          what does it do?
A simple example
public List<int[]> getThem() {
  List<int[]> list1 = new ArrayList<int[]>();
  for (int[] x : theList)
    if (x[0] == 4)
      list1.add(x);
  return list1;
}


    This code is quite simple but
          what does it do?
      Looking at it we can’t tell
       what it is actually doing!
A simple example
public List<int[]> getFlaggedCells() {
  List<int[]> flaggedCells = new ArrayList<int[]>();
  for (int[] cell : gameBoard)
    if (cell[STATUS_VALUE] == FLAGGED)
      flaggedCells.add(x);
  return flaggedCells;
}



       Is this code any better?
A simple example
public List<Cell> getFlaggedCells() {
  List<Cell> flaggedCells = new ArrayList<Cell>();
  for (Cell cell : gameBoard)
    if (cell.isFlagged())
      flaggedCells.add(x);
  return flaggedCells;
}



           What about this?
A simple example
   What we have done:
A simple example
          What we have done:
 used intention         flaggedCells
revealing names       rather than list1
A simple example
             What we have done:
    used intention          flaggedCells
   revealing names        rather than list1
replaced magic numbers   cell[STATUS_VALUE]
    with constants         rather than x[0]
A simple example
             What we have done:
    used intention          flaggedCells
   revealing names        rather than list1
replaced magic numbers   cell[STATUS_VALUE]
    with constants         rather than x[0]
created an appropriate    Cell cell rather
  abstract data type      than int[] cell
Another example
int d;
            What does it mean?
            Days? Diameter? ...
Another example
int d;
                       What does it mean?
                       Days? Diameter? ...

  int d; //elapsed time in days
         Is this any better?
Another example
int d;
                       What does it mean?
                       Days? Diameter? ...

  int d; //elapsed time in days
         Is this any better?

     int elapsedTimeInDays;
         What about this?
Functions
Do one thing
public
bool
isEdible()
{


if
(this.ExpirationDate
>
Date.Now
&&







this.ApprovedForConsumption
==
true
&&







this.InspectorId
!=
null)
{




return
true;


}
else
{




return
false;


}
}



          How many things is the function doing?
Do one thing
public
bool
isEdible()
{


if
(this.ExpirationDate
>
Date.Now
&&         1.check expiration







this.ApprovedForConsumption
==
true
&&







this.InspectorId
!=
null)
{
                                                2.check approval




return
true;                                3.check inspection


}
else
{




return
false;                               4.answer the request


}
}



          How many things is the function doing?
Do one thing
public
bool
isEdible()
{




return
isFresh()



&&
         

isApproved()
&&
                             Now the function is doing one thing!
         

isInspected();
}
Do one thing
public
bool
isEdible()
{




return
isFresh()



&&
         

isApproved()
&&
                             Now the function is doing one thing!
         

isInspected();
}




               A change in the specifications turns
                into a single change in the code!
Don’t mix levels of abstraction

public
void
doTheDomesticThings()
{




takeOutTheTrash();                   public
void
doTheDomesticThings()
{




walkTheDog();                        



takeOutTheTrash();




for
(Dish
dish
:
dirtyDishStack)
{   



walkTheDog();







sink.washDish(dish);              



doTheDishes();







teaTowel.dryDish(dish);           }




}
}




         Which one is easier to read and understand?
Separate commands and queries

Commands should                 Queries should
only do something                only answer
   (One thing)                    something
public
class
Car{




private
boolean
isOn





public
void
turnOn(){








isOn
=
true;




}                        AVOID SIDE EFFECTS!




public
boolean
isOn(){








return
isOn;




}
}
Use exceptions
public
int
foo(){



...
}

public
void
bar(){



if(foo()
==
OK)






...



else






//
error
handling
}
Use exceptions
public
int
foo(){
                          Errors have to be encoded



...
}

public
void
bar(){



if(foo()
==
OK)






...



else






//
error
handling
}
Use exceptions
public
int
foo(){
                          Errors have to be encoded



...
}

public
void
bar(){
                          Checks (when performed)



if(foo()
==
OK)          require a lot of code






...



else






//
error
handling
}
Use exceptions
public
int
foo(){
                          Errors have to be encoded



...
}

public
void
bar(){
                          Checks (when performed)



if(foo()
==
OK)          require a lot of code






...



else






//
error
handling
}                         It’s harder to extend such
                                   programs
Use exceptions
public
void
foo()







throws
FooException{



...
}

public
void
bar(){



try{






foo();






...



}
catch(FooException){






//
error
handling



}
}
Use exceptions
public
void
foo()







throws
FooException{    No need to mix return



...
}
                             values and control values
public
void
bar(){



try{






foo();






...



}
catch(FooException){






//
error
handling



}
}
Use exceptions
public
void
foo()







throws
FooException{    No need to mix return



...
}
                             values and control values
public
void
bar(){



try{                           Cleaner syntax






foo();






...



}
catch(FooException){






//
error
handling



}
}
Use exceptions
public
void
foo()







throws
FooException{    No need to mix return



...
}
                             values and control values
public
void
bar(){



try{                           Cleaner syntax






foo();






...



}
catch(FooException){






//
error
handling          Easier to extend



}
}
Don’t Repeat Yourself
                     public
void
bar(){
                     

String
[]
elements
=
{“A”,
“B”,
“C”};
public
void
bar(){


foo(“A”);
                     

for(String
element
:
elements){


foo(“B”);
                     



foo(element);


foo(“C”);
                     

}
}
                     }




      DO NOT EVER COPY AND PASTE CODE
Don’t Repeat Yourself
                     public
void
bar(){
                     

String
[]
elements
=
{“A”,
“B”,
“C”};
public
void
bar(){


foo(“A”);
                     

for(String
element
:
elements){


foo(“B”);
                     



foo(element);


foo(“C”);
                     

}
}
                     }

                     Logic to handle the elements
                        it’s written once for all
      DO NOT EVER COPY AND PASTE CODE
Comments
Explain yourself in the code

                Which one is clearer?

// Check to see if the employee is eligible for full benefits
if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))



          if (employee.isEligibleForFullBenefits())
Comments
      GOOD                    BAD

API Documentation           Redundant
Explanation of intent        Obsolete
    Clarification        Code commented-out
Other code smells
What we don’t want to see in your code
The bloaters
     Something in your code grow too large


  Long methods             Single responsibility
 and large classes          principle violated

Primitive obsession
                          It is a symptom of bad
   and too much
                                    design
    parameters
Primitive obsession
public Class Car{
    private int red, green, blue;

     public void paint(int red, int green, int blue){
         this.red   = red;
         this.green = green;
         this.blue = blue;
     }
}

public Class Car{
    private Color color;

    public void paint(Color color){
        this.color = color;
    }
}
The OO abusers
     Object orientation is not fully exploited

 Switch statements on         It is better to use
        objects                 polymorphism

   Refused bequest
                            Poor class hierarchy
Alternative classes with          design
  different interfaces
Switch vs polymorphism
 public Money calculatePay(Employee e)
     throws InvalidEmployeeType{
         switch(e.type){
             case COMMISSIONED:
                 return calculateCommissionedPay(e);
             case HOURLY:
                 return calculateHourlyPay(e);
             case SALARIED:
                 return calculateSalariedPay(e);
             default:
                 throw new
 InvalidEmployeeType(e.type);
         }
     }



 public abstract class Employee{
     public abstract Money calculatePay();
 }
Refused bequest
Subclass doesn’t use superclass methods and attributes
         public abstract class Employee{
             private int quota;
             public int getQuota();
             ...
         }

         public class Salesman extends Employee{ ... }

         public class Engineer extends Employee{
             ...
             public int getQuota(){
                 throw new NotSupportedException();
             }
         }


      Engineer does not use quota. It should be
             pushed down to Salesman
The change preventers
Something is making hard to change the code

                     A class has to be changed
Divergent change
                          in several parts

                      A single change requires
 Shotgun surgery
                      changes in several classes
The dispensables
 The code contains something unnecessary


A class is not doing
                       Class not providing logic
      enough


   Unused or
                       It isn’t something useful
 redundant code
The couplers
        Some classes are too tightly coupled

    Feature Envy           Misplaced responsibility

                         Classes should know as little
Inappropriate Intimacy
                         as possible about each other

   Message Chains          Too complex data access
Feature Envy
public class Customer{
    private PhoneNumber mobilePhone;

    ...

    public String getMobilePhoneNumber(){
        return “(” +
                mobilePhone.getAreaCode() + “)” +
                mobilePhone.getPrefix() + “-” +
                mobilePhone.getNumber();
    }
}
Feature Envy
public class Customer{
    private PhoneNumber mobilePhone;

    ...

    public String getMobilePhoneNumber(){
        return “(” +
                mobilePhone.getAreaCode() + “)” +
                mobilePhone.getPrefix() + “-” +
                mobilePhone.getNumber();
    }
}


    public String getMobilePhoneNumber(){
        return mobilePhone.toFormattedString();
    }
Message chains
a.getB().getC().getD().getTheNeededData()




          a.getTheNeededData()




  Law of Demeter: Each unit should
       only talk with friends

More Related Content

What's hot

Clean Code I - Best Practices
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best PracticesTheo Jungeblut
 
Clean Code Principles
Clean Code PrinciplesClean Code Principles
Clean Code PrinciplesYeurDreamin'
 
Clean Code: Chapter 3 Function
Clean Code: Chapter 3 FunctionClean Code: Chapter 3 Function
Clean Code: Chapter 3 FunctionKent Huang
 
The Art of Clean code
The Art of Clean codeThe Art of Clean code
The Art of Clean codeVictor Rentea
 
Clean Code summary
Clean Code summaryClean Code summary
Clean Code summaryJan de Vries
 
Clean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a MonolithClean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a MonolithVictor Rentea
 
7 rules of simple and maintainable code
7 rules of simple and maintainable code7 rules of simple and maintainable code
7 rules of simple and maintainable codeGeshan Manandhar
 
Clean code - DSC DYPCOE
Clean code - DSC DYPCOEClean code - DSC DYPCOE
Clean code - DSC DYPCOEPatil Shreyas
 
Refactoring: Improve the design of existing code
Refactoring: Improve the design of existing codeRefactoring: Improve the design of existing code
Refactoring: Improve the design of existing codeValerio Maggio
 
Clean Code - The Next Chapter
Clean Code - The Next ChapterClean Code - The Next Chapter
Clean Code - The Next ChapterVictor Rentea
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code cleanmacrochen
 

What's hot (20)

Clean Code
Clean CodeClean Code
Clean Code
 
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
Clean codeClean code
Clean code
 
Clean Code Principles
Clean Code PrinciplesClean Code Principles
Clean Code Principles
 
Clean Code: Chapter 3 Function
Clean Code: Chapter 3 FunctionClean Code: Chapter 3 Function
Clean Code: Chapter 3 Function
 
The Art of Clean code
The Art of Clean codeThe Art of Clean code
The Art of Clean code
 
Clean Code summary
Clean Code summaryClean Code summary
Clean Code summary
 
Clean Code
Clean CodeClean Code
Clean Code
 
Clean Code
Clean CodeClean Code
Clean Code
 
Clean code
Clean code Clean code
Clean code
 
Writing clean code
Writing clean codeWriting clean code
Writing clean code
 
Clean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a MonolithClean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a Monolith
 
7 rules of simple and maintainable code
7 rules of simple and maintainable code7 rules of simple and maintainable code
7 rules of simple and maintainable code
 
Clean code - DSC DYPCOE
Clean code - DSC DYPCOEClean code - DSC DYPCOE
Clean code - DSC DYPCOE
 
Clean Code
Clean CodeClean Code
Clean Code
 
Refactoring: Improve the design of existing code
Refactoring: Improve the design of existing codeRefactoring: Improve the design of existing code
Refactoring: Improve the design of existing code
 
Clean Code - The Next Chapter
Clean Code - The Next ChapterClean Code - The Next Chapter
Clean Code - The Next Chapter
 
Code smell overview
Code smell overviewCode smell overview
Code smell overview
 
Keep your code clean
Keep your code cleanKeep your code clean
Keep your code clean
 

Similar to Clean code and Code Smells

MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system Tarin Gamberini
 
Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Ismar Silveira
 
Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy codeShriKant Vashishtha
 
From clever code to better code
From clever code to better codeFrom clever code to better code
From clever code to better codeDror Helper
 
Navigating the xDD Alphabet Soup
Navigating the xDD Alphabet SoupNavigating the xDD Alphabet Soup
Navigating the xDD Alphabet SoupDror Helper
 
Practices For Becoming A Better Programmer
Practices For Becoming A Better ProgrammerPractices For Becoming A Better Programmer
Practices For Becoming A Better ProgrammerSrikanth Shreenivas
 
Do I need tests when I have the compiler - Andrzej Jóźwiak - TomTom Dev Day 2020
Do I need tests when I have the compiler - Andrzej Jóźwiak - TomTom Dev Day 2020Do I need tests when I have the compiler - Andrzej Jóźwiak - TomTom Dev Day 2020
Do I need tests when I have the compiler - Andrzej Jóźwiak - TomTom Dev Day 2020Andrzej Jóźwiak
 
Who killed object oriented design?
Who killed object oriented design?Who killed object oriented design?
Who killed object oriented design?Amir Barylko
 
Software design principles SOLID
Software design principles SOLIDSoftware design principles SOLID
Software design principles SOLIDFoyzul Karim
 
C# 6.0 - April 2014 preview
C# 6.0 - April 2014 previewC# 6.0 - April 2014 preview
C# 6.0 - April 2014 previewPaulo Morgado
 
Refactoring - improving the smell of your code
Refactoring - improving the smell of your codeRefactoring - improving the smell of your code
Refactoring - improving the smell of your codevmandrychenko
 
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsJDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsPROIDEA
 
Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mark Needham
 

Similar to Clean code and Code Smells (20)

Clean Code
Clean CodeClean Code
Clean Code
 
Java 2
Java   2Java   2
Java 2
 
Java Class Design
Java Class DesignJava Class Design
Java Class Design
 
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
 
Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4Paradigmas de Linguagens de Programacao - Aula #4
Paradigmas de Linguagens de Programacao - Aula #4
 
Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy code
 
From clever code to better code
From clever code to better codeFrom clever code to better code
From clever code to better code
 
Functional Programming with C#
Functional Programming with C#Functional Programming with C#
Functional Programming with C#
 
Navigating the xDD Alphabet Soup
Navigating the xDD Alphabet SoupNavigating the xDD Alphabet Soup
Navigating the xDD Alphabet Soup
 
Android code convention
Android code conventionAndroid code convention
Android code convention
 
Practices For Becoming A Better Programmer
Practices For Becoming A Better ProgrammerPractices For Becoming A Better Programmer
Practices For Becoming A Better Programmer
 
Do I need tests when I have the compiler - Andrzej Jóźwiak - TomTom Dev Day 2020
Do I need tests when I have the compiler - Andrzej Jóźwiak - TomTom Dev Day 2020Do I need tests when I have the compiler - Andrzej Jóźwiak - TomTom Dev Day 2020
Do I need tests when I have the compiler - Andrzej Jóźwiak - TomTom Dev Day 2020
 
Google guava
Google guavaGoogle guava
Google guava
 
Who killed object oriented design?
Who killed object oriented design?Who killed object oriented design?
Who killed object oriented design?
 
Software design principles SOLID
Software design principles SOLIDSoftware design principles SOLID
Software design principles SOLID
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
C# 6.0 - April 2014 preview
C# 6.0 - April 2014 previewC# 6.0 - April 2014 preview
C# 6.0 - April 2014 preview
 
Refactoring - improving the smell of your code
Refactoring - improving the smell of your codeRefactoring - improving the smell of your code
Refactoring - improving the smell of your code
 
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit TestsJDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
JDD 2016 - Sebastian Malaca - You Dont Need Unit Tests
 
Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#
 

Recently uploaded

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 

Recently uploaded (20)

ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

Clean code and Code Smells

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n