SlideShare a Scribd company logo
1 of 12
Download to read offline
CODE CRAFTSMANSHIP CHECKLIST
      Ryan Polk
The List
   Intended as a checklist for   The items presented are intended to
                                  give a selection of ideas for
    further research.             consideration in any Code Quality
                                  training agenda.
   Not a comprehensive list.
                                  It is understood that one training
   If your not thinking about    would not be capable of covering
    these subjects your not       all subjects listed. The decision that
                                  needs to be made by any
    moving your development       organization is what topics are of
                                  most value to the teams.
    career forward.
   What Else / How can we
    do it better?
Code Craftsmanship Topics
3


       TDD / Automated Unit Tests         SOA (Service Oriented
       Continuous Delivery                 Architecture)
       Refactoring                        Paired Programming
       Design Patterns                    UML / Object Modeling
       Emergent Design
       SOLID Principles
       Misc. Code Craftsmanship
          Error Handling
          Code Smells and Heuristics
          Etc…
Continuous Delivery
4


       Principles and technical practices that enable rapid, incremental
        delivery of high quality, valuable new functionality to users.

       Taking the next step beyond Continuous Integration is essential in
        all development originations that produce highly integrated and
        complex systems.

       Through automation of the build, deployment, and testing process,
        and improved collaboration between developers, testers, and
        operations, delivery teams can get changes released in a matter
        of hours sometimes even minutes no matter what the size of a
        project or the complexity of its code base.
Refactoring
5

       Code refactoring is the process of changing a computer program's source code without
        modifying its external functional behavior 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.
       Techniques that allow for more abstraction
         -   Encapsulate Field – force code to access the field with getter and setter methods
         -   Generalize Type – create more general types to allow for more code sharing
         -   Replace type-checking code with State/Strategy
         -   Replace conditional with polymorphism
       Techniques for breaking code apart into more logical pieces
         - Extract Method, to turn part of a larger method into a new method. By breaking down code in smaller
           pieces, it is more easily understandable. This is also applicable to functions.
         - Extract Class moves part of the code from an existing class into a new class.
       Techniques for improving names and location of code
         -   Move Method or Move Field – move to a more appropriate Class or source file
         -   Rename Method or Rename Field – changing the name into a new one that better reveals its purpose
         -   Pull Up – in OOP, move to a superclass
         -   Push Down – in OOP, move to a subclass
Design Patterns
6

       In software engineering, a design pattern is a general reusable solution to a
        commonly occurring problem in software design.
       A design pattern is not a finished design that can be transformed directly into
        code. It is a description or template for how to solve a problem that can be
        used in many different situations.
       Object-oriented design patterns typically show relationships and interactions
        between classes or objects, without specifying the final application classes or
        objects that are involved.
       Design Patterns provide a common language and structure to the overall
        design and architecture of software systems. This common language gives us
        the ability to talk about the parts of a system as a simple conglomerate of
        patterns instead of a list of random parts.
       Patterns are a basic building block of code re-use and code extensibility.
Emergent Design
7

       Is a principle of software adaption over time, espousing the principle that
        software should grow better over time and not degrade as many systems do.


       This system combines many different methodologies including the other topics
        listed with other solid practices in software development to create a
        comprehensive system for the maintenance and support of software systems.

       Topics Covered:
         -   How to design software in a more natural, evolutionary, and professional way
         -   How to use the “open-closed” principle to mitigate risks and eliminate waste
         -   How and when to test your design throughout the development process
         -   How to translate design principles into practices that actually lead to better code
         -   How to determine how much design is enough
SOLID Principles
8

    S - Single Responsibility Principle (SRP) the notion that an objects should have only
         a single responsibility.

    O - Open / Closed Principle (OCP) the notion that “software entities … should be
        open for extension, but closed for modification”.

    L - Liskov Substitution Principle (LSP) the notion that “objects in a program should
         be replaceable with instances of their subtypes without altering the
         correctness of that program”. See also design by contract.

    I - Interface Segregation Principle (ISP) the notion that “many client specific
        interfaces are better than one general purpose interface.”

    D - Dependency Inversion Principle (DIP) the notion that one should “Depend upon
        Abstractions. Do not depend upon concretions.”
        Dependency injection is one method of following this principle.
Service Oriented Architecture (SOA)
9

       In computing, a service-oriented architecture (SOA) is a flexible set of design
        principles used during the phases of systems development and integration.


       A deployed SOA-based architecture will provide a loosely-integrated suite of
        services that can be used within multiple business domains.


       Providing Training on the Basic Principles of SOA will give all participants a
        better understanding of best practices needed to create loosely coupled
        systems with greater amounts of system re-use and higher flexibility.


       Currently we are proficient at implementing some of the practices of SOA but
        our understanding of the principles and the orchestration of systems needs
        guidance.
Paired Programming
10

 Pair programming is an agile software development technique in which two
 programmers work together at one work station. One types in code while the
 other reviews each line of code as it is typed in. The person typing is called the
 driver. The person reviewing the code is called the observer (or navigator). The
 two programmers switch roles frequently.
    Some studies have found that programmers working in pairs produce shorter programs,
     with better designs and fewer bugs, than programmers working alone.
    Studies have found reduction in defect rates of 15% to 50%, varying depending on
     programmer experience and task complexity.

 Topics to Discuss & Variants:
    Paired Programming Mechanics
    Remote pair programming
    Ping pong pair programming
    The fusing of pair and solo programming
UML / Object Modeling
11

    Unified Modeling Language (UML) is a standardized general-purpose
     modeling language in the field of software engineering.


    UML includes a set of graphical notation techniques to create visual models of
     software-intensive systems.


    Like Design Patters UML provides developers with a standard form of
     communication that allows everyone to understand architectural patterns and
     how systems work.


    By providing training on this subject we provide the structure for visual
     comprehension of systems.
Miscellaneous Code Craftsmanship
12

 A general section of miscellaneous code craftsmanship tutorials with distinct examples from
 code in our environment. This session would be run as a best practices code review
 teaching each attendee all of the following and more.
    Clean Code
    Meaningful Names
    Functions
    Comments
    Formatting
    Objects and Data Structures
    Error handling
    Boundaries
    Classes
    Systems
    Concurrency
    Code Smells and Heuristics
    About 10 others…

More Related Content

What's hot

[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLESIvano Malavolta
 
Applying Design Principles in Practice
Applying Design Principles in PracticeApplying Design Principles in Practice
Applying Design Principles in PracticeTushar Sharma
 
Sioux Hot-or-Not: Essential Unified Process (Ivar Jacobson)
Sioux Hot-or-Not: Essential Unified Process (Ivar  Jacobson)Sioux Hot-or-Not: Essential Unified Process (Ivar  Jacobson)
Sioux Hot-or-Not: Essential Unified Process (Ivar Jacobson)siouxhotornot
 
Refactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialRefactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialTushar Sharma
 
Reusability Vs Extensibility and Methodologies in OOAD
Reusability Vs Extensibility and Methodologies in OOADReusability Vs Extensibility and Methodologies in OOAD
Reusability Vs Extensibility and Methodologies in OOADSayyada Ayesha
 
Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)
Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)
Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)siouxhotornot
 
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)siouxhotornot
 
Epf composer overviewpart1
Epf composer overviewpart1Epf composer overviewpart1
Epf composer overviewpart1Abdelkader Larbi
 
Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020 Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020 MuhammadTalha436
 
Dependency Injection, Design Principles and Patterns
Dependency Injection, Design Principles and PatternsDependency Injection, Design Principles and Patterns
Dependency Injection, Design Principles and PatternsJuan Lopez
 
Six Principles of Software Design to Empower Scientists
Six Principles of Software Design to Empower ScientistsSix Principles of Software Design to Empower Scientists
Six Principles of Software Design to Empower ScientistsDavid De Roure
 
DSL, the absolute weapon for the development
DSL, the absolute weapon for the developmentDSL, the absolute weapon for the development
DSL, the absolute weapon for the developmentESUG
 
Epf composer overviewpart2
Epf composer overviewpart2Epf composer overviewpart2
Epf composer overviewpart2Abdelkader Larbi
 
Reducing Technical Debt
Reducing Technical DebtReducing Technical Debt
Reducing Technical DebtHayim Makabee
 

What's hot (18)

[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES
 
Applying Design Principles in Practice
Applying Design Principles in PracticeApplying Design Principles in Practice
Applying Design Principles in Practice
 
Sioux Hot-or-Not: Essential Unified Process (Ivar Jacobson)
Sioux Hot-or-Not: Essential Unified Process (Ivar  Jacobson)Sioux Hot-or-Not: Essential Unified Process (Ivar  Jacobson)
Sioux Hot-or-Not: Essential Unified Process (Ivar Jacobson)
 
Refactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialRefactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 Tutorial
 
Reusability Vs Extensibility and Methodologies in OOAD
Reusability Vs Extensibility and Methodologies in OOADReusability Vs Extensibility and Methodologies in OOAD
Reusability Vs Extensibility and Methodologies in OOAD
 
Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)
Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)
Sioux Hot-or-Not: Domain Driven Design (Edwin Van Dillen)
 
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
Sioux Hot-or-Not: Model Driven Software Development (Markus Voelter)
 
5 Quality
5 Quality5 Quality
5 Quality
 
Epf composer overviewpart1
Epf composer overviewpart1Epf composer overviewpart1
Epf composer overviewpart1
 
Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020 Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020
 
Dependency Injection, Design Principles and Patterns
Dependency Injection, Design Principles and PatternsDependency Injection, Design Principles and Patterns
Dependency Injection, Design Principles and Patterns
 
Six Principles of Software Design to Empower Scientists
Six Principles of Software Design to Empower ScientistsSix Principles of Software Design to Empower Scientists
Six Principles of Software Design to Empower Scientists
 
DSL, the absolute weapon for the development
DSL, the absolute weapon for the developmentDSL, the absolute weapon for the development
DSL, the absolute weapon for the development
 
Solid
SolidSolid
Solid
 
Lecture1422914635
Lecture1422914635Lecture1422914635
Lecture1422914635
 
Epf composer overviewpart2
Epf composer overviewpart2Epf composer overviewpart2
Epf composer overviewpart2
 
Design Principles
Design PrinciplesDesign Principles
Design Principles
 
Reducing Technical Debt
Reducing Technical DebtReducing Technical Debt
Reducing Technical Debt
 

Similar to Code Craftsmanship Checklist

Software development philosophies v1
Software development philosophies v1Software development philosophies v1
Software development philosophies v1Praveen Nair
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure rupeshchanchal
 
10 Programming Principles Every Software Developer Should Know.pdf
10 Programming Principles Every Software Developer Should Know.pdf10 Programming Principles Every Software Developer Should Know.pdf
10 Programming Principles Every Software Developer Should Know.pdfBMN Infotech
 
Object Oriented Approach for Software Development
Object Oriented Approach for Software DevelopmentObject Oriented Approach for Software Development
Object Oriented Approach for Software DevelopmentRishabh Soni
 
Coupling based structural metrics for measuring the quality of a software (sy...
Coupling based structural metrics for measuring the quality of a software (sy...Coupling based structural metrics for measuring the quality of a software (sy...
Coupling based structural metrics for measuring the quality of a software (sy...Mumbai Academisc
 
7a Good Programming Practice.pptx
7a Good Programming Practice.pptx7a Good Programming Practice.pptx
7a Good Programming Practice.pptxDylanTilbury1
 
Function Oriented and Object Oriented Design,Modularization techniques
Function Oriented and Object Oriented Design,Modularization techniquesFunction Oriented and Object Oriented Design,Modularization techniques
Function Oriented and Object Oriented Design,Modularization techniquesnimmik4u
 
Agile Values, Principles and Practices
Agile Values, Principles and PracticesAgile Values, Principles and Practices
Agile Values, Principles and Practicesjackcrews
 
DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answersHopeTutors1
 
Tailoring your SDLC for DevOps, Agile and more
Tailoring your SDLC for DevOps, Agile and moreTailoring your SDLC for DevOps, Agile and more
Tailoring your SDLC for DevOps, Agile and moreJeff Schneider
 
Software design.edited (1)
Software design.edited (1)Software design.edited (1)
Software design.edited (1)FarjanaAhmed3
 
Introduction to DevOps in Cloud Computing.pptx
Introduction to DevOps in Cloud Computing.pptxIntroduction to DevOps in Cloud Computing.pptx
Introduction to DevOps in Cloud Computing.pptxLAKSHMIS553566
 
Software engineering introduction
Software engineering introductionSoftware engineering introduction
Software engineering introductionVishal Singh
 
agile refactoring and integration techniques.pdf
agile refactoring and integration techniques.pdfagile refactoring and integration techniques.pdf
agile refactoring and integration techniques.pdfshreyassoni7
 
SWE-401 - 9. Software Implementation
SWE-401 - 9. Software ImplementationSWE-401 - 9. Software Implementation
SWE-401 - 9. Software Implementationghayour abbas
 
9. Software Implementation
9. Software Implementation9. Software Implementation
9. Software Implementationghayour abbas
 
DevOps for dummies study sharing - part II
DevOps for dummies study sharing - part IIDevOps for dummies study sharing - part II
DevOps for dummies study sharing - part IIChen-Tien Tsai
 
Diving into OOPs_ Key Concepts and Principles (1).pdf
Diving into OOPs_ Key Concepts and Principles (1).pdfDiving into OOPs_ Key Concepts and Principles (1).pdf
Diving into OOPs_ Key Concepts and Principles (1).pdfkaushiklalit117
 

Similar to Code Craftsmanship Checklist (20)

Software development philosophies v1
Software development philosophies v1Software development philosophies v1
Software development philosophies v1
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure
 
10 Programming Principles Every Software Developer Should Know.pdf
10 Programming Principles Every Software Developer Should Know.pdf10 Programming Principles Every Software Developer Should Know.pdf
10 Programming Principles Every Software Developer Should Know.pdf
 
Object Oriented Approach for Software Development
Object Oriented Approach for Software DevelopmentObject Oriented Approach for Software Development
Object Oriented Approach for Software Development
 
Coupling based structural metrics for measuring the quality of a software (sy...
Coupling based structural metrics for measuring the quality of a software (sy...Coupling based structural metrics for measuring the quality of a software (sy...
Coupling based structural metrics for measuring the quality of a software (sy...
 
7a Good Programming Practice.pptx
7a Good Programming Practice.pptx7a Good Programming Practice.pptx
7a Good Programming Practice.pptx
 
Design final
Design finalDesign final
Design final
 
Function Oriented and Object Oriented Design,Modularization techniques
Function Oriented and Object Oriented Design,Modularization techniquesFunction Oriented and Object Oriented Design,Modularization techniques
Function Oriented and Object Oriented Design,Modularization techniques
 
Agile Values, Principles and Practices
Agile Values, Principles and PracticesAgile Values, Principles and Practices
Agile Values, Principles and Practices
 
DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answers
 
Tailoring your SDLC for DevOps, Agile and more
Tailoring your SDLC for DevOps, Agile and moreTailoring your SDLC for DevOps, Agile and more
Tailoring your SDLC for DevOps, Agile and more
 
Software design.edited (1)
Software design.edited (1)Software design.edited (1)
Software design.edited (1)
 
Introduction to DevOps in Cloud Computing.pptx
Introduction to DevOps in Cloud Computing.pptxIntroduction to DevOps in Cloud Computing.pptx
Introduction to DevOps in Cloud Computing.pptx
 
Quick Intro to Clean Coding
Quick Intro to Clean CodingQuick Intro to Clean Coding
Quick Intro to Clean Coding
 
Software engineering introduction
Software engineering introductionSoftware engineering introduction
Software engineering introduction
 
agile refactoring and integration techniques.pdf
agile refactoring and integration techniques.pdfagile refactoring and integration techniques.pdf
agile refactoring and integration techniques.pdf
 
SWE-401 - 9. Software Implementation
SWE-401 - 9. Software ImplementationSWE-401 - 9. Software Implementation
SWE-401 - 9. Software Implementation
 
9. Software Implementation
9. Software Implementation9. Software Implementation
9. Software Implementation
 
DevOps for dummies study sharing - part II
DevOps for dummies study sharing - part IIDevOps for dummies study sharing - part II
DevOps for dummies study sharing - part II
 
Diving into OOPs_ Key Concepts and Principles (1).pdf
Diving into OOPs_ Key Concepts and Principles (1).pdfDiving into OOPs_ Key Concepts and Principles (1).pdf
Diving into OOPs_ Key Concepts and Principles (1).pdf
 

Recently uploaded

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
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
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
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
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
 

Recently uploaded (20)

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
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
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
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
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
 

Code Craftsmanship Checklist

  • 2. The List  Intended as a checklist for The items presented are intended to give a selection of ideas for further research. consideration in any Code Quality training agenda.  Not a comprehensive list. It is understood that one training  If your not thinking about would not be capable of covering these subjects your not all subjects listed. The decision that needs to be made by any moving your development organization is what topics are of most value to the teams. career forward.  What Else / How can we do it better?
  • 3. Code Craftsmanship Topics 3  TDD / Automated Unit Tests  SOA (Service Oriented  Continuous Delivery Architecture)  Refactoring  Paired Programming  Design Patterns  UML / Object Modeling  Emergent Design  SOLID Principles  Misc. Code Craftsmanship  Error Handling  Code Smells and Heuristics  Etc…
  • 4. Continuous Delivery 4  Principles and technical practices that enable rapid, incremental delivery of high quality, valuable new functionality to users.  Taking the next step beyond Continuous Integration is essential in all development originations that produce highly integrated and complex systems.  Through automation of the build, deployment, and testing process, and improved collaboration between developers, testers, and operations, delivery teams can get changes released in a matter of hours sometimes even minutes no matter what the size of a project or the complexity of its code base.
  • 5. Refactoring 5  Code refactoring is the process of changing a computer program's source code without modifying its external functional behavior 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.  Techniques that allow for more abstraction - Encapsulate Field – force code to access the field with getter and setter methods - Generalize Type – create more general types to allow for more code sharing - Replace type-checking code with State/Strategy - Replace conditional with polymorphism  Techniques for breaking code apart into more logical pieces - Extract Method, to turn part of a larger method into a new method. By breaking down code in smaller pieces, it is more easily understandable. This is also applicable to functions. - Extract Class moves part of the code from an existing class into a new class.  Techniques for improving names and location of code - Move Method or Move Field – move to a more appropriate Class or source file - Rename Method or Rename Field – changing the name into a new one that better reveals its purpose - Pull Up – in OOP, move to a superclass - Push Down – in OOP, move to a subclass
  • 6. Design Patterns 6  In software engineering, a design pattern is a general reusable solution to a commonly occurring problem in software design.  A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations.  Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.  Design Patterns provide a common language and structure to the overall design and architecture of software systems. This common language gives us the ability to talk about the parts of a system as a simple conglomerate of patterns instead of a list of random parts.  Patterns are a basic building block of code re-use and code extensibility.
  • 7. Emergent Design 7  Is a principle of software adaption over time, espousing the principle that software should grow better over time and not degrade as many systems do.  This system combines many different methodologies including the other topics listed with other solid practices in software development to create a comprehensive system for the maintenance and support of software systems.  Topics Covered: - How to design software in a more natural, evolutionary, and professional way - How to use the “open-closed” principle to mitigate risks and eliminate waste - How and when to test your design throughout the development process - How to translate design principles into practices that actually lead to better code - How to determine how much design is enough
  • 8. SOLID Principles 8 S - Single Responsibility Principle (SRP) the notion that an objects should have only a single responsibility. O - Open / Closed Principle (OCP) the notion that “software entities … should be open for extension, but closed for modification”. L - Liskov Substitution Principle (LSP) the notion that “objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program”. See also design by contract. I - Interface Segregation Principle (ISP) the notion that “many client specific interfaces are better than one general purpose interface.” D - Dependency Inversion Principle (DIP) the notion that one should “Depend upon Abstractions. Do not depend upon concretions.” Dependency injection is one method of following this principle.
  • 9. Service Oriented Architecture (SOA) 9  In computing, a service-oriented architecture (SOA) is a flexible set of design principles used during the phases of systems development and integration.  A deployed SOA-based architecture will provide a loosely-integrated suite of services that can be used within multiple business domains.  Providing Training on the Basic Principles of SOA will give all participants a better understanding of best practices needed to create loosely coupled systems with greater amounts of system re-use and higher flexibility.  Currently we are proficient at implementing some of the practices of SOA but our understanding of the principles and the orchestration of systems needs guidance.
  • 10. Paired Programming 10 Pair programming is an agile software development technique in which two programmers work together at one work station. One types in code while the other reviews each line of code as it is typed in. The person typing is called the driver. The person reviewing the code is called the observer (or navigator). The two programmers switch roles frequently.  Some studies have found that programmers working in pairs produce shorter programs, with better designs and fewer bugs, than programmers working alone.  Studies have found reduction in defect rates of 15% to 50%, varying depending on programmer experience and task complexity. Topics to Discuss & Variants:  Paired Programming Mechanics  Remote pair programming  Ping pong pair programming  The fusing of pair and solo programming
  • 11. UML / Object Modeling 11  Unified Modeling Language (UML) is a standardized general-purpose modeling language in the field of software engineering.  UML includes a set of graphical notation techniques to create visual models of software-intensive systems.  Like Design Patters UML provides developers with a standard form of communication that allows everyone to understand architectural patterns and how systems work.  By providing training on this subject we provide the structure for visual comprehension of systems.
  • 12. Miscellaneous Code Craftsmanship 12 A general section of miscellaneous code craftsmanship tutorials with distinct examples from code in our environment. This session would be run as a best practices code review teaching each attendee all of the following and more.  Clean Code  Meaningful Names  Functions  Comments  Formatting  Objects and Data Structures  Error handling  Boundaries  Classes  Systems  Concurrency  Code Smells and Heuristics  About 10 others…