Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto...
Transcript of Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto...
![Page 1: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/1.jpg)
Software Craftsmanship for New Developers
Tech Foundations LouisvilleJanuary 22, 2019
![Page 2: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/2.jpg)
Data & Solutions Architect at ProgressiveHealth
Community InvolvementCode PaLOUsa Conference ChairLouisville .NET Meetup OrganizerLouisville Tech Leaders Meetup OrganizerLouisville Tech Ladies Co-Organizer
Contact [email protected]@ChadGreenChadwickEGreen
Who is Chad Green?
![Page 3: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/3.jpg)
What is Software CraftsmanshipSoftware Craftsmanship for New Developers
![Page 4: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/4.jpg)
Software Craftsmanship for Non Developers
What Software Craftsmanship is not
page04
• Beautiful code
• Test-Driven Development
• Self-selected group of people
• Specific technologies or methodologies
• Certifications
• Religion
![Page 5: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/5.jpg)
Software Craftsmanship for Non Developers
What is Software Craftsmanship
page05
• Software developers have had hard time defining themselves:
• Historically practitioners of well-defined statistical analysis and mathematical rigor of a scientific approach with computational theory
• Changed to an engineering approach with connotations of precision, predictability, measurement, risk mitigation, and professionalism
![Page 6: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/6.jpg)
Software Craftsmanship for Non Developers
Craft, Trade, Engineering, Science, or Art
page06
• Craft/Trade – Profession that requires particular skills and knowledge of skilled work
• Engineering – Creative application of science, mathematical methods, and empirical evidence to the innovation, design, construction, operation, and maintenance of structures, machines, materials, devices, systems, processes, and organizations
• Science – Systematic enterprise that builds and organizes knowledge in the form of testable explanations and predictions about the universe
• Art – Diverse range of human activities in creating visual, auditory, or performing artifacts, expressing the author’s imaginative, conceptual idea, or technical skill, intended to be appreciated for their beauty or emotional power
![Page 7: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/7.jpg)
Software Craftsmanship for Non Developers
What is Software Craftsmanship
page07
Agile Manifesto question some these assumptions
Individuals and interactions over processes and tools
![Page 8: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/8.jpg)
Software Craftsmanship is about professionalism in software development.
![Page 9: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/9.jpg)
Software Craftsmanship for Non Developers
Software Craftsmanship History
page09
• 1992 – Jack W. Reeves publishes “What Is Software Design?” essay• 1997 – Andrew Hunt and David Thomas publish The Pragmatic Programmer• 2001 – Pete McBreen publishes Software Craftsmanship• 2002 – Software Apprenticeship Summit• 2006 – 8th Light Founded• 2008 – Bob Martin proposes fifth value for the Agile Manifesto:
Craftsmanship over Crap• 2008 – Bob Martin publishes Clean Code: A Handbook of Agile Software
Craftsmanship• 2008 – Software Craftsmanship Summit• 2009 – Manifesto for Software Craftsmanship• 2011 – Bob Martin publishes The Clean Coder: A Code of Conduct for
Professional Programmers
![Page 10: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/10.jpg)
Software Craftsmanship for Non Developers
Manifesto for Software Craftsmanship
page010
Not only working software,but also well-crafted software
Not only responding to change,but also steadily adding value
Not only individuals and interactions,but also a community of professionals
Not only customer collaboration,but also productive partnerships
![Page 11: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/11.jpg)
Software Craftsmanship for Non Developers
Manifesto for Software Craftsmanship
page011
Not only working software,but also well-crafted software
![Page 12: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/12.jpg)
Software Craftsmanship for Non Developers
Manifesto for Software Craftsmanship
page012
Not only responding to change,but also steadily adding value
![Page 13: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/13.jpg)
Try and leave this world a little better than you found it, and when you turn comes to die you can die happy in feeling that at any rate you have not wasted your time but have done your best.
Robert Stephenson Smyth Bader-Powell, founder of The Scout Association
![Page 14: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/14.jpg)
Software Craftsmanship for Non Developers
Manifesto for Software Craftsmanship
page014
Not only individuals and interactions,but also a community of professionals
![Page 15: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/15.jpg)
Software Craftsmanship for Non Developers
Manifesto for Software Craftsmanship
page015
Not only customer collaboration,but also productive partnerships
![Page 16: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/16.jpg)
Technical DebtSoftware Craftsmanship for Non-Developers
![Page 17: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/17.jpg)
Software Craftsmanship for Non Developers
What is Technical Debt
page017
• Reflects the implied cost of additional rework caused by choosing an easy solution now instead of using a better approach that would take longer
• Technical debt can be compared to monetary debt – If not repaid, it can accumulate interest, making it hard to implement changes later on
![Page 18: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/18.jpg)
Software Craftsmanship for Non Developers
Example of Technical Debt
page018
• Start writing an application and there is no need for user roles –everyone can do everything
• Requirement comes in for a permission for a specific requirement
• Some time later another things requires the differentiation of users, and then another and another
• The company has the opportunity to add five customers in a week –but really need another permission change in a couple of days
![Page 19: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/19.jpg)
Software Craftsmanship for Non Developers
Common Causes of Technical Debt
page019
• Insufficient up-front definition
• Business pressures
• Lack of process or understanding
• Tightly-coupled components
• Lack of a test suite
• Lack of documentation
• Lack of collaboration
• Parallel development
• Delayed refactoring
• Lack of alignment to standards
• Lack of knowledge
• Lack of ownership
• Poor technological leadership• Last minute specification
changes
![Page 20: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/20.jpg)
SOLID PrinciplesSoftware Craftsmanship for Non-Developers
![Page 21: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/21.jpg)
Software Craftsmanship for Non Developers
S.O.L.I.D.
page021
• First five object-oriented design principles• S – Single-responsibility principle• O – Open-closed principle• L – Liskov substitution principle • I – Interface segregation principle• D – Dependency Inversion Principle
![Page 22: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/22.jpg)
Software Craftsmanship for Non Developers
Single Responsibility Principle (SRP)
page022
• A module should have one, and only one, reason to change• A module should be responsible to one, and only one, actor
![Page 23: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/23.jpg)
Software Craftsmanship for Non Developers
Single Responsibility Principle (SRP)
page023
• A module should be responsible to one, and only one, actor
CFO
COO
CTO
Employee
+ Caculate Pay+ ReportHours+ Save
Class violates the SRB because the three methods are responsible to different actors
• The CalculatePay method is specified by the accounting department, which reports to the CFO
• The ReportHours method is specified and used by the human resources department, which reports to the COO
• The Save method is specified b the database administrators, who report to the CTO
![Page 24: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/24.jpg)
Software Craftsmanship for Non Developers
Open-Closed Principle (OCP)
page024
• A software artifact should be open for extension but closed for modification
![Page 25: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/25.jpg)
Software Craftsmanship for Non Developers
Liskov Substitution Principle (LSP)
page025
• Let q(x) be a property provable about objects of x of type T. Then q(y) should be provable for objects y of type y where S is a subtype of T
• Every subclass/derived class should be substitutable for their base/parent class
Billing License
+ CalculateFee()
Personal License
+ CalculateFee()
Business License
+ CalculateFee()
![Page 26: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/26.jpg)
Software Craftsmanship for Non Developers
Interface Segregation Principle (ISP)
page026
• A client should never be forced to implement an interface that it does not use or clients should not be forced to depend on methods they do not use
![Page 27: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/27.jpg)
Software Craftsmanship for Non Developers
Dependency Inversion Principle (DIP)
page027
• Entities must depend on abstractions not on concretions. It states that the high level module must not depend on the low level module, but they should depend on abstractions.
![Page 28: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/28.jpg)
Other Key PrinciplesSoftware Craftsmanship for Non-Developers
![Page 29: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/29.jpg)
Software Craftsmanship for Non Developers
DRY – Don’t Repeat Yourself
page029
• Every piece of knowledge must have a single, unambiguous, authoritative representation within a system
• Alternative is to have the same thing expressed in two or more place. If you change one, you have to remember to change the others.
• It isn’t a question of whether you will remember: it’s a question of when you will forget
![Page 30: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/30.jpg)
If you write it once, think about encapsulating it. If you write it twice, you have to encapsulate it. If you write it three times, programming isn’t for you.
Phil Japikse, Microsoft MVP, ASPInsider, MCSD, MCDBA, PSM II, PSD, CSM, Consultant, Coach, Author, Trainer
![Page 31: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/31.jpg)
Software Craftsmanship for Non Developers
KISS – Keep it Simple Stupid
page031
• The simplest explanation tends to be the right one
![Page 32: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/32.jpg)
Software Craftsmanship for Non Developers
YAGNI – You Aren’t Going to Need It
page032
• Always implement things when you actually need them, never when you just foresee that you need them
• Principle behind XP practice of “do the simplest thing that could possibly work”
![Page 33: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/33.jpg)
Key PracticesSoftware Craftsmanship for Non-Developers
![Page 34: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/34.jpg)
Software Craftsmanship for Non Developers
TDD – Test Driven Development
page034
• Software development process that relies on the repetition of very short development cycle: requirements are turned into very specific test cases, then the software is improved to pass the new tests, only
• Three Laws of TDD1. You are not allowed to write any production code until you
have first written a failing unit test.2. You are not allowed to write more of a unit test than is
sufficient to fail – and not compiling is failing3. You are not allowed to write more production code that is
sufficient to pass the currently failing unit test
![Page 35: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/35.jpg)
Software Craftsmanship for Non Developers
Pair Programming
page035
• Technique in which two programmers work together at one workstation• The driver writes code while the observer reviews each line of
code as it is typed
![Page 36: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/36.jpg)
Software Craftsmanship for Non Developers
Practicing – Coding Katas
page036
• Practice, Practice, Practice• Practice on how to solve the problem• Katas – simple coding exercises
• codingdojo.org/kata• codekata.com• codewars.com
![Page 37: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/37.jpg)
Code SmellsSoftware Craftsmanship for Non-Developers
![Page 38: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/38.jpg)
Software Craftsmanship for Non Developers
Code Smells - Comments
page038
• Inappropriate Information
![Page 39: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/39.jpg)
Software Craftsmanship for Non Developers
Code Smells - Comments
page039
• Inappropriate Information• Obsolete Comment
![Page 40: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/40.jpg)
Software Craftsmanship for Non Developers
Code Smells - Comments
page040
• Inappropriate Information• Obsolete Comment• Redundant Comment
i++ // increment i
![Page 41: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/41.jpg)
Software Craftsmanship for Non Developers
Code Smells - Comments
page041
• Inappropriate Information• Obsolete Comment• Redundant Comment• Poorly Written Comment
![Page 42: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/42.jpg)
Software Craftsmanship for Non Developers
Code Smells - Comments
page042
• Inappropriate Information• Obsolete Comment• Redundant Comment• Poorly Written Comment• Commented-Out-Code
![Page 43: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/43.jpg)
Software Craftsmanship for Non Developers
Code Smells - Environment
page043
• Build Requires More Than One Step
![Page 44: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/44.jpg)
Software Craftsmanship for Non Developers
Code Smells - Environment
page044
• Build Requires More Than One Step• Tests Require More Than One Step
![Page 45: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/45.jpg)
Software Craftsmanship for Non Developers
Code Smells - Functions
page045
• Dead Function
![Page 46: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/46.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page046
• Obvious Behavior is Unimplemented
![Page 47: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/47.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page047
• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries
![Page 48: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/48.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page048
• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties
![Page 49: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/49.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page049
• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication (DRY – Don’t Repeat Yourself)
![Page 50: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/50.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page050
• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Dead Code
![Page 51: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/51.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page051
• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Dead Code• Inconsistency
![Page 52: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/52.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page052
• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Dead Code• Inconsistency• Clutter
![Page 53: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/53.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page053
• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility
![Page 54: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/54.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page054
• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do
DateTime newDate = date.add(5)DateTime newDate = date.AddDays(5)
![Page 55: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/55.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page055
• Obvious Behavior is Unimplemented• Incorrect Behavior at the Boundaries• Overridden Safeties• Duplication• Base Classes Depending on their Derivatives• Dead Code• Inconsistency• Clutter• Misplaced Responsibility• Function Names Should Say What They Do• Follow Standard Conventions
![Page 56: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/56.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page056
• Replace Magic Numbers with Named Constants3.1415926535897933.1415927535897933.141592753589793
![Page 57: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/57.jpg)
Software Craftsmanship for Non Developers
Code Smells - General
page057
• Replace Magic Numbers with Named Constants• Functions Should Do One Thing
![Page 58: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/58.jpg)
Software Craftsmanship for Non Developers
Code Smells - Names
page058
• Chose Descriptive Names
![Page 59: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/59.jpg)
Software Craftsmanship for Non Developers
Code Smells – Names: Choose Descriptive Names
page059
CREATE PROCEDURE dbo.HII_Mobile_Cond_Workout_Activities_Log_View
@ID INT = 0,
@cond_workout_ID INT = 0
AS
BEGIN
SELECT al.ID,
al.cond_workout_ID,
al.activity,
al.mins,
al.cal_burn,
a.Category,
ai.ID AS intensity_id,
ai.Intensity
FROM HII_Mobile_Cond_Workout_Activities_Log al
INNER JOIN HII_Cond_Activities a ON a.ID = al.activity
LEFT JOIN HII_Cond_Activities_Intensity ai ON ai.Activity_ID = a.ID AND ai.ID=al.intensity
WHERE al.active=1
AND (cond_workout_ID = @cond_workout_ID OR al.Id = @ID)
ORDER BY al.created_date
END
CREATE PROCEDURE dbo.HII_Mobile_Cond_Workout_Activities_Log_View
@ID INT = 0,
@cond_workout_ID INT = 0
AS
BEGIN
SELECT al.ID,
al.cond_workout_ID,
al.activity,
al.mins,
al.cal_burn,
a.Category,
ai.ID AS intensity_id,
ai.Intensity
FROM HII_Mobile_Cond_Workout_Activities_Log al
INNER JOIN HII_Cond_Activities a ON a.ID = al.activity
LEFT JOIN HII_Cond_Activities_Intensity ai ON ai.Activity_ID = a.ID AND ai.ID=al.intensity
WHERE al.active=1
AND (cond_workout_ID = @cond_workout_ID OR al.Id = @ID)
ORDER BY al.created_date
END
CREATE PROCEDURE dbo.GetWorkActivitiesLog
@Id INT = 0,
@WorkoutId INT = 0
AS
BEGIN
SELECT ActivityLog.ID,
ActivityLog.cond_workout_ID,
ActivityLog.activity,
ActivityLog.mins,
ActivityLog.cal_burn,
Activities.Category,
Intensity.ID AS intensity_id,
Intensity.Intensity
FROM HII_Mobile_Cond_Workout_Activities_Log AS ActivityLog
INNER JOIN HII_Cond_Activities AS Activities ON a.ID = ActivityLog.activity
LEFT JOIN HII_Cond_Activities_Intensity Intensity ON Intensity.Activity_ID = a.ID AND ai.ID=ActivityLog.intensity
WHERE ActivityLog.active=1
AND (ActivityLog.cond_workout_ID = @WorkoutId OR ActivtyLog.Id = @ID)
ORDER BY ActivityLog.created_date
END
![Page 60: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/60.jpg)
Software Craftsmanship for Non Developers
Code Smells - Names
page060
• Chose Descriptive Names• Avoid Encodings
intRepeat repeatCount
![Page 61: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/61.jpg)
Software Craftsmanship for Non Developers
Code Smells - Names
page061
• Chose Descriptive Names• Avoid Encodings• Names Should Describe Side-Effects
public void GetFoo() { }
public void CreateAndGetFoo() { }
![Page 62: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/62.jpg)
Software Craftsmanship for Non Developers
Code Smells - Tests
page062
• Insufficient Tests
![Page 63: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/63.jpg)
Software Craftsmanship for Non Developers
Code Smells - Tests
page063
• Insufficient Tests• Use a Test Coverage Tool
![Page 64: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/64.jpg)
Software Craftsmanship for Non Developers
Code Smells - Tests
page064
• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests
![Page 65: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/65.jpg)
Software Craftsmanship for Non Developers
Code Smells - Tests
page065
• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests• Test Boundary Conditions
![Page 66: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/66.jpg)
Software Craftsmanship for Non Developers
Code Smells - Tests
page066
• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests• Test Boundary Conditions• Exhaustively Test Near Bugs
![Page 67: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/67.jpg)
Software Craftsmanship for Non Developers
Code Smells - Tests
page067
• Insufficient Tests• Use a Test Coverage Tool• Don’t Skip Trivial Tests• Test Boundary Conditions• Exhaustively Test Near Bugs• Tests Should Be Fast
![Page 68: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/68.jpg)
Getting MoreSoftware Craftsmanship for Non-Developers
![Page 69: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/69.jpg)
Software Craftsmanship for Non Developers
Getting More – Books
page069
![Page 70: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/70.jpg)
Software Craftsmanship for Non Developers
Getting More – Podcasts
page070
![Page 71: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/71.jpg)
Software Craftsmanship for Non Developers
Getting More – Meetups
page071
Tech Foundations LouisvilleLouisville Tech LadiesDeep Learning and AI For LouisvilleDerby DevOps
Louisville Business Intelligence & Big Data Analytics MeetupLouisville Jenkins Area MeetupLouisville Microsoft Azure User GroupLouisville Ruby BrigadeLouisville Open Source
Programming Meetup Group
![Page 72: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/72.jpg)
Software Craftsmanship for Non Developers
Getting More – Conferences
page072
![Page 73: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/73.jpg)
Software Craftsmanship is about professionalism in software development.
![Page 74: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/74.jpg)
[email protected]@ChadGreenChadwickEGreen
![Page 75: Software Craftsmanship for New Developers · Software Craftsmanship for Non Developers Manifesto for Software Craftsmanship page 010 Not only working software, but also well-crafted](https://reader034.fdocuments.us/reader034/viewer/2022051809/601062f003f47c5d727b7759/html5/thumbnails/75.jpg)
thank you.