MindMap Gallery The Clean Coder - Robert C. Martin
This is a mind map talking about The Clean Coder. You can create a mind map like this effortlessly.
Edited at 2020-09-28 13:30:17Halloween has many faces. The theme you envision should influence how you decorate the party space. Jack-o'-lanterns and friendly ghosts are more lighthearted Halloween characters. Zombies, witches, and vampires are much darker. If you want to celebrate all the fun sides of Halloween, then it’s okay to mesh the cute with the frightening. Here is a mind map which lists down the 39 Cutest Couples Halloween Costumes of 2021.
Halloween simply wouldn't be Halloween without the movies that go along with it. There's nothing like a movie night filled with all the greatest chainsaw-wielding, spell-binding, hair-raising flicks to get you in the spooky season spirit. So, break out the stash of extra candy, turn off all the lights, lock every last door, and settle in for the best of the best Halloween movies. Here are the 35 Halloween movies listed on the mind map based on the year of release.
This mind map contains lots of interesting Halloween trivia, great tips for costumes and parties (including food, music, and drinks) and much more. It talks about the perfect Halloween night. Each step has been broken down into smaller steps to understand and plan better. Anybody can understand this Halloween mind map just by looking at it. It gives us full story of what is planned and how it is executed.
Halloween has many faces. The theme you envision should influence how you decorate the party space. Jack-o'-lanterns and friendly ghosts are more lighthearted Halloween characters. Zombies, witches, and vampires are much darker. If you want to celebrate all the fun sides of Halloween, then it’s okay to mesh the cute with the frightening. Here is a mind map which lists down the 39 Cutest Couples Halloween Costumes of 2021.
Halloween simply wouldn't be Halloween without the movies that go along with it. There's nothing like a movie night filled with all the greatest chainsaw-wielding, spell-binding, hair-raising flicks to get you in the spooky season spirit. So, break out the stash of extra candy, turn off all the lights, lock every last door, and settle in for the best of the best Halloween movies. Here are the 35 Halloween movies listed on the mind map based on the year of release.
This mind map contains lots of interesting Halloween trivia, great tips for costumes and parties (including food, music, and drinks) and much more. It talks about the perfect Halloween night. Each step has been broken down into smaller steps to understand and plan better. Anybody can understand this Halloween mind map just by looking at it. It gives us full story of what is planned and how it is executed.
The Clean Coder Robert C. Martin
Management / Mentorship
Teams & Projects
Does it Blend?
No such thing as a half of person
Gelled Team
takes time for a team to form
Magical about a gelled team
anticipate each other, cover for each other,support each other, and deman the best fromeach other
Which came first, Team or the Project?
Team should not be formed around availability towork on a project
Team should be first class decesion
Teams are harder to build than projects
Mentoring
Manuals
Good books, manuals, api's are great mentorsthat can reach lots of people
Working with someone
learning how they work, their tricks, the bestthat they know of how to do things
Hard Knocks
learning everything on your own
most developers progress this way
very slow, very hard, not fun
Apprenticeship
Masters
10+ years of experience
lead of multiple projects
coordinate multiple teams
Maintain technical role by reading, studying,practicing, doing and teaching
Journeymen
Trained, competent and energetic
Learn how to work well in teams and becometeam leaders
Knowledgeable about current technology buttypically lack experience w/ many diversesystems
Teachers
teach apprentices design principles, designpatterns, disciplines, and rituals
Apprentices/Interns
Graduates start here
Closely supervised by journeymen
Need intense pair programing
Ought to last a year
Craftsmanship
definition
someone who works quickly, but withoutrushing, who provides reasonoableestimates and meets commitments
knows when to say no, but tries hard to say yes
a professional
Convincing People
can't convince people to be crafstmen
can't convince them to accept craftmanship
Acceptance is not so much rational as muchemotional
human thing
Make craftsmanship observable
act as a role model
Tooling
What Bob Martin Uses
Source Control
Open Source tools are usually your best option
Enterprise controls usually suck
use open source throughout work, then checkinto enterprise tool at the end of the iteration
2008 switched to GIT
IDE
VI
old and vanishing as a coding tool
EMACS
Great general purpose tool, still not premier forediting code
Eclipse/IntelliJ
Bob uses IntelliJ
Issue Tracking
Start small, grow as needed
Bob is using Pivotal Tracker
Continuous Builds
Jenkins
If the build fails, stop the presses and resolvethe issue
Unit Testing Tools
JUnit
RSPEC foro Ruby
NUnit for .Net
Midje for Clojure
CppUTest for C(++)
Component Testing Tools
FitNesse (written by Bob)
Others
RobotFX
Green Pepper
based on confluence?
Cucumber
JBehave
UML/MDA
Not worth it
Assumes the problem is code/design
wrong
problem is in the details
try to UML the details, and you might as wellcode the thing
No great diagramming language today thatsolves real problems
Behavioral Professionalism
Professionalism
Do no harm
Don't lookout for yourself, lookout for the projectand the customers
We must not create bugs
Impossible?
Human body is more complex and doctors takean oath to do no harm
QA Should Find Nothing!
All code should be covered with automated unittests
100% code coverage
Why write code and never test that it works
Professionally proves the system works
Delivering function at the expense of structure isa fool's errand
You must be able to make changes withoutexorbitant costs
Merciless refactoring
Make every class you touch slightly better
Always be improving
Difficulty to improve is bad design, fix it
Work Ethic
168 Hours per week
40 hours to solve your employers problems
20 hours on your career
3 hours per day
Lunch hour to read
Podcasts while traveling
56 hours for sleep
52 hours for everything else
Minimal list Software Professional should beconversant with
Design patterns
all 24 in the GOF book
Design principles
SOLID principles
Methods
XP, Scrum, Lean, Kanban, Waterfall, StructuredAnalysis and Structured Design
Disciplines
TDD, ObjectOriented design, StructuredProgramming, Continuous Integration and PairProgramming
Artificats
UML, DFDs, Structure Charts, Petri Nets, StateTransition Diagrams and Tables, flow charts anddecision tables
Continuous Learning
Practice
Kata
Mentoring
Know your domain
Read a couple books on the new topic
Spend some time with the experts and try tounderstand their principles and values
Identify with your employer
Saying No
Professionals speak truth to power, and havethe courage to say no to their managers
Being a Team Player
Telling the truth, committing to realisticestimates and not backing down is best foreveryone
Don't allow anyone to lie to try to make the teamsound better, its not beneficial to anyone, theproject, the company or the customer
Trying
Admitting you can try harder implies you havenot been trying hard
It applies you and your team to a newcommitment that no one really thinks isplausible
This will inevitably lead to failure and put theproject in a bad spot
Just say no
Don't accept you need to try to meet a date thatis not agreed upon by the team
A professional is already trying, there is nomagic pixie dust to make us work better ondemand
Say no to trying
Response: I could try to levitate, but I promiseyou I won't
I could try to change lead in to gold
I could try to swim across the Atlantic
Don't stop by washing your hands and saying no
If your boss is not taking 'no' seriously, make itclear his/her boss needs to be told the truth, oryou will tell them
This is for the good of the company, notyourself, not your boss, for everyone, this isyour professional responsibility and right
Saying Yes
Language of Commitment
Making a Commitment
Say you'll do it
Mean it
Actually do it
Most communicated commitments are never realcommitments
"Yeah, we really need to get some new routers"
Ask a team members to run tests >"Sure. I hopeto get to it by the end of the day"
But we know we will have to check with him thenext day
Management to the team >"We have to movefaster"
Which means the team needs to move fasterbut management will not do anything towardthat goal
Recognizing Lack of Commitment
Signs of non commitment
"Need/Should"
We need to get this done
I need to lose weight
Someone should make that happen
"Hope/Wish"
I hope to get this done by tomorrow
I hope we can meet again some day
I wish I had time for that
I wish this computer was faster
"Let's" (not followed by"I")
Let's meet sometime
Let's finish this thing
How to Commit
"I will... by..."
I will finish this by Tuesday
Bad Excuses
It wouldn't work because I rely on person X toget this done
You can still commit to different parts, and youshould make those apparent and clear
I can sit with Gary for an hour and understand thedependencies
I can create an interface that abstracts themodule's dependency
I can meet three times this week w/ the build guyto make sure your changes work well in thebuild system
I can create an integration test for the module
It wouldn't work because I don't really know if itcan be done
You can still commit to actions. Instead tocommitting to fixing all 25 remaining bugs for arelease:
I can go through all 25 bugs and try to recreatethem
I can sit down with the QA who found each bug tosee a repro of that bug
I can spend all the time I have this week trying tofix each bug
It wouldn't work because sometimes I just won'tmake it
Sometimes this is life, but you need to raise ared flag as soon as possible to whoever youcommitted to
Going to be late for a meeting, as soon as youknow, call your colleague and find a solution,maybe postpone or change locations
You can work to change the commitment in thebest way possible
A task/bug is more difficult than anticipated, tellthe team and come to a conclusion on how tomove forward. Maybe fix specific pieces thatyou have discovered.
Don't allow vagueness
Never say or accept you will try to meet a goal
Don't hope for a goal you don't think is acertainty. Promise what you honestly need for atask..
This will force an awkward conversation to makea change. Maybe you reduce features to meet adesired deadline. Maybe the deadline getsmoved back.
Potentially being responsibly creative to meet adeadline can be okay, just don't be the only onesacrificing
I will work 4 hours on Saturday and work withWilly Monday, but I will take Tuesday offbecause I know I will be useless without abreak.
Time Management
Meetings
Truths
Necessary
Huge Time Wasters
~$200/hr/attendee
Declining
need to use your time wisely
don't accept meetings unless it is a meeting forwhich your participation is immediately andsignificantly necessary to the job your doing now
You are the only one who can manager yourtime, your current project is highest priority, it isyour responsibility to weigh which is moreimportant
Your management should help keep you out ofunnecessary meetings
Leaving
When the meeting gets boring, leave
politely exit that meeting
remaining in a meeting that has become awaste of time for you and you can no longersignificantly contribute is unprofessional
Have an Agenda and a Goal
When invited, try to get the details of agendaand how much time is alloted for them
if you can't get this information politely decline
When meeting gets side tracked ask the newtopic be tabled and the agenda be followed
if this doesn't happen you should politely leavewhen possible
Arguments/Disagreements
Data is the best way to argue, not relentlessarguing
Run experiments or do some simulation ormodeling
Sometimes flipping a coin is best
If one path works out great, otherwise you can godown the other path
Pick a time frame in which to decide if path'sneed to change
Passive aggressive behavior is unprofessional
'This is how he wants it so this is how he willget it'
If an argument must truly be settled, ask each ofthe arguers to present their case to the team in5 minutes
have the team vote
whole meeting will take less than 15 min
FocusMana
Good nights sleep
Moderate caffeine
Recharging
long walk
conversation w/ friends
meditate
power nap
listen to podcast
Muscle focus
bike riding
carpentry
building models
gardening
Pomodoro Technique
25 minute timer
politely decline all interruptions to get back tothem within 25 min
Avoidance
Priority Inversion
Convincing yourself something else is moreimportant to avoid doing the real work
Unprofessional Don't do!
Blind Alleys
technical pathways that will lead no where
The Rule of Holes: When you are in one, stopdigging
Estimation
What Is an Estimate?
Business sees them as Commitment
Commitment
must achieve
no matter what it takes
Professionals don't commit unless they KNOWthey can achieve the goal
Developers sees them as Guesses
Estimate
A Guess
no commitment is implied
no promise is made
Professional needs to be careful not to makeany implied commitments with estimates
Missing an estimate is not dishonorable
An Estimate is a probability distribution
most likely will get done at our estimate forced
can get done sooner if things work out
can take much longer, twice, three times aslong if things go poorly
Program Evaluation and Review Technique
PERT
Trivariate analysis
O Optimistic Estimate
N Nominal Estimate
P Pessimistic Estimate
Expected duration
Mue= (O + 4N + P)/6
Standard deviation
(P O)/6
Example
O 1
N 3
P 12
Expected: 4.2 days
Standard Deviation: 1.8 days
Sequence Calculations
Sequence expected
Summation of each expected
Sequence deviation
sqrt(sum of squares of deviations)
Wideband Delphi
Team of people assemble, discuss a task,estimate the task, and iterate the discussionand estimation until they reach agreement
Flying Fingers
Fingers below table and show on 3, ifagreement or close move on
Planning Poker
see scrum planning poker
Affinity Estimation
Cards with the tasks written on them are silentlyordered by the team from smaller to larger left toright
Once most cards settle, discuss disagreements
Assign bucket points to the cards
Trivariate Estimates
Get three estimates, pessimistic, nominal andoptimistic
Can use any of the three approaches still
Law of large numbers
break up tasks into smaller tasks and estimatethem independently
Pressure
analogy
Don't want your surgeon to stop best practiceswhile under 'dead'lines
Avoid Pressures
Commitments
avoid committing to deadlines we can't meet
help the business meet goals set by others butdon't take ownership of the commitment
If we can't find a way to meet the promisesmade by the business, then the people whomade the promises must accept theresponsibility
Stay Clean
"quick and dirty" is an oxymoron
Dirty always means slow
Crisis Discipline
How you behave in crisis shows what you trulybelieve in
If you don't do TDD in crisis then you don't trulybelieve it's helpful
If you make messes during crunch time, then youdon't truly believe messes slow you down
Choose the methods you feel comfortablefollowing in a crisis, then follow them all thetime.
Handling Pressure
Don't Panic
Don't stay up all night, sit and frett, or rush,none of these things will help solve theproblems
Slow down and think the problem through
Communicate
Let your team and superiors know you are introuble
Discuss the best plans to get out of trouble, askfor their input
Avoid creating surprises for anyone
Rely on your disciplines
TDD more
Refactor harder
Get Help
Pair Program!
Development
Coding Professionalism
Your code must work
Never write 3am code: It's crap even if it works,and that crap will be copied and pastedeverywhere
Never write code when distracted with personalthoughts
Same analogy for driving, driving needs yourfocus, don't drive when distracted
Learn how to manage your time with thoseproblems. Spend some blocks of timethroughout the day working on both to easeyour mind and allow you to code
Avoid the 'zone'
True the zone will allow you to write more codehowever that's not an indicator your moreproductive
The zone causes tunnel vision and causes you tolose sight of the big picture
This will cause you to revisit this code a lot whichdefeats the purpose of the increase in code
Pair programming makes it near impossible toenter the zone
Avoid listening to music and headphones thisdoesn't usually help you code, it helps you stayin the zone which is undesired
The zone causes you to be rude to interruptions extremely unprofessional to be rude
Pairing helps avoid or deal with interruptions toallow the other to be productive and help youget back into context after the interruption
TDD helps you stay in context as well, having afailing test to gain context, this will help withinterruptions
Writers Block
Pair Program
Reduce debugging time to a minimum
Do this with TDD
Layers constantly retrying cases, surgeons reopening uppatients are unprofessional
constantly having to debug your code isunprofessional
No False Delivery
Worst unprofessionalism of all
Your code must solve the problem set for you bythe customer
Not the requirements given, it is up to you tonegotiate with the customer the true solution totheir problem
Your code needs to follow solid engineeringprinciples
Your code must be readable by otherprogrammers (clean code)
Help
Help Others
your responsibility to be available to help eachother
unprofessional to sequester yourself in acubicle and refuse the queries of others
Your work is not so important that youcannot lend some of your time to helpothers
If needed set office hours
Offer to help, don't wait to be asked
Accept Help
Mentor junior developers personally
Test Driven Development
It just works!
Surgeons don't have to defend handwashing
Developers don't have to defend TDD
3 Laws
You are not allowed to write any productioncode until you have first written a failing unittest
You are not allowed to write more of a unittest than is sufficient to fail and notcompiling is failing.
You are not allowed to write more productioncode that is sufficient to pass the currentlyfailing unit test
Benefits
Certainty
tens of unit tests written a day makes me certainthe code works when I wrote it and still workstoday
Defect Injection Rate
Proven to reduce the amount of bugsdramatically
Courage
Bad code is scary to fix without unit tests sooften it doesn't get fixed
TDD helps give us courage and the confidantability to refactor and fix code
When developers lose their fear of cleaning,they clean
Documentation
Each unit test defines how the system shouldbe used
Unit test displays:
how to create every object
every way that object can be created
how to call every function in the system
every way that those functions canmeaningfully be called
Anything you need to know how to do will be aunit test
Implicit, constantly updating, constantly addeddocumentation
Design
Following the laws forces you to be able to testyour code
This forces you to consider and implement gooddesign qualities
If tests are written after the code is written, it'swritten defensively and will force theimplementation to work
Tests written first are written offensively and willdesign the objects in the best way possible soit's easiest to use, forcing good design
TDD is NOT
Religion
Magic Formula
Does not guarantee the benefits and you canstill write bad code with it
You can even write bad tests
Always be practical or appropriate
professionals should never follow a disciplinewhen that discipline does more harm than good
Practicing
Kata
a precise set of choreographed movements thatstimulates one side of a combat
Attempt to practice so much to reach perfection
Practicing over and over how to solve aparticular problem
You already know the solution, but practicing theproblem solving motions of TDD is the goal
Drive common problem/solution pairs into yoursubconcious
Examples
The Bowling Game
Integer Square Root
Prime Factors
Word Wrap
AWESOME Post
Wasa
Twoman kata
Pingpong pair programming pattern
First person writes a failing test
Second person passes it
Second person writes a failing test
First person passes it
When you both really know the kata
Critique each other's keyboarding andmousing techniques.
Switch it up and add constraints in the tests
speed & memory
Make it competitive and fun
Randori
freeform combat
Wasa with more than 2 people
People rotate through while the code isprojected on the wall
Can go in order, people can skip, movearound, etc no specific rules just with morepeople
Broaden Your Experience
Open Source projects
Practice on your own time, its not youremployers responsibility to keep you sharp
Acceptance Testing
Premature Precesion
Business wants to know exactly what they aregoing to get, programmers want to knowexactly what they are supposed to deliver
Both want a precision that simply cannot beachieved
Uncertainty principle
requirements when implemented often aren'treally what is desired in the end
observer effect
Estimation anxiety
Late Ambiguity
Automated
Always
why?
Cost
Testing ALWAYS gets cut first
Rerunning manual tests are very expensive
Having a product that the customer doesn'twant is very expensive for everyone
Automated acceptance testing is cheap
Can maybe appear more expensive/work butit's the only way to prove it's working andcontinues to work
Who writes them?
Ideally stakeholders and QA
realistically business analysts and QA
analysts test happy paths
QA tests unhappy paths
If developers are forced to write them
Should not be the same developer whoimplemented it
When to write?
Should be written before the implementationbegins
Midsprint should have all the acceptancetests written and failing
Negotiate
It is your professional responsibility tonegotiate with whom has written the test andmake a better test when necessary
NEVER be passiveaggressive
Example:
X has to run in under 2 seconds
Negotiate on average 2 seconds
"not what requirements say"
realistically though it's the only way
run test 15 times and average is less than 2seconds
NOT unit tests
not redundant
test things very differently
Testing Strategies
QA
Should never find any bugs
But probably still will
Should be a part of the team
Test Automation Pyramid (coverage %)
5% Manual Exploratory
NOT automated, nor scripted
NOT written test plan of this kind of testing
Some teams will have a specialist do this,others will declare a day or two of 'bug hunting'to bang on the system
10% System tests
Ultimate integration tests across the entiresystem
NOT test business rules
written by system architects and technical leads
20% integration tests
choreography tests how well theassembly of components dancestogether
NOT test business rules
Written by system architects or lead designersof the system
typically not executed as part of CI
Usually apart of nightly/weekly builds
50% component tests
Acceptance tests of specific components
Written by QA and business with assistancefrom development
apart of continuous integration suite
100% unit tests
written by programmers for programmers
as close to 100%, generally in the 90s of truecoverage
Image
Collaboration
With Employers
First responsibility is to meet the needs of youremployer
understand business goals
collaborate with managers, business analysts,testers and other team members to understand
understand the business and keep it afloat
With Programmers
owned code
Programmers should never own a piece of code
Collective Ownership
Break down all walls of code ownership andhave the team own the code
Pairing
Many programmeres dislike the idea
odd because most pair in emergencies
clearly the most efficient way to solve theproblem
two heads are better than one
Professionals Pair
Best way to solve problems
Best way to share knowledge with eachother
Professionals don't create knowledge silos
Best way to review code
Cerebellums
Need to be close to team members
need to hear frustrated mutters, serendipitouscommunication
Need to communicate as a unit
Some may work better alone for just themselvesbut that doesn't mean the team works betterwhen you work alone
And its unlikely you work better when you workalone
Probably just work more comfortably