69
From cruft to CRAFT @nickdenardis #psuweb

What is quality code? From cruft to craft

Embed Size (px)

Citation preview

Page 1: What is quality code? From cruft to craft

From cruft to CRAFT@nickdenardis #psuweb

Page 2: What is quality code? From cruft to craft

@nickdenardis #psuweb

Nick DeNardisMinimalist. UX crafter. Speaker. Realist. Computer scientist. Library scientist.

Wayne State UniversityDirector of Digital Communications

TEDxDetroit, HighEdWeb MI, Laravel Detroit & Refresh DetroitOrganizer

Amateur hardwood floor refinisher

Page 3: What is quality code? From cruft to craft

@nickdenardis #psuweb

Housekeeping

Slides onlinespeakerdeck.com/nickdenardis

Music online8tracks.com/nickdenardis/psuweb-woodwork

Extra resources are available on the slides

This is being streamed/recorded

Show of hands…

Page 4: What is quality code? From cruft to craft

@nickdenardis #psuweb

How did we produce all this cruft in the first place?

Page 5: What is quality code? From cruft to craft

@nickdenardis #psuweb

Simple☐ Creating software is hard ☐ Lots of unknowns ☐ Client changes over time ☐ Changing technology ☐ Growing expectations ☐ Time constraints ☐ Money constraints ☐ Turnover/student workers ☐ Team moral ☐ Development environment ☐ Training

Page 6: What is quality code? From cruft to craft

Developer A developer executes. Their talents often focused to a single area. Without need for the “big picture”.

Engineer An engineer designs and plans. Always aware of the “big picture”. With talents in many areas. An engineer can assume the developer role. But an engineer’s core focus lies with architecture.

Page 7: What is quality code? From cruft to craft

@nickdenardis #psuweb

Project managementcontributed to this cruft…

Page 8: What is quality code? From cruft to craft
Page 9: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources

• https://www.getharvest.com/

Page 10: What is quality code? From cruft to craft

@nickdenardis #psuweb

Turnoverproduced all this cruft…

Page 11: What is quality code? From cruft to craft

@nickdenardis #psuweb

Documentation

Page 12: What is quality code? From cruft to craft
Page 13: What is quality code? From cruft to craft

@nickdenardis #psuweb

Team knowledgecreated all this cruft..

Page 14: What is quality code? From cruft to craft
Page 15: What is quality code? From cruft to craft

@nickdenardis #psuweb

Reading codelevels up everyone on the team

Page 16: What is quality code? From cruft to craft

@nickdenardis #psuweb

Code reading 101Pick a function/library/file < 50 lines of code. Set aside 2-3 minutes per line

Try to build and run it.

Don't focus on the details early.

Make sure you understand all the constructs.

Now that you've got a good idea about most of the constructs, it is time to do a couple of random deep-dives.

There were undoubtedly things in the previous step you were confused about, so this is the perfect time to go and read some tests.

No tests you say, sounds like the perfect time to write some.

Page 17: What is quality code? From cruft to craft

@nickdenardis #psuweb

Our turn

Page 18: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources• http://devchat.tv/ruby-rogues/031-rr-code-reading

• http://www.codenewbie.org/podcast/ep-2-coding-like-a-boss-w-brian-douglas

• Reading code talk - https://www.youtube.com/watch?v=mW_xKGUKLpk

• http://bloggytoons.com/code-club

• http://www.slideshare.net/saronyitbarek/reading-code-good

• http://www.codewars.com/

• http://www.skorks.com/2010/05/why-i-love-reading-other-peoples-code-and-you-should-too/

• http://www.readingcodegood.com/

Page 19: What is quality code? From cruft to craft

@nickdenardis #psuweb

Code reviewsfacilitate discussion around solutions

Page 20: What is quality code? From cruft to craft

@nickdenardis #psuweb

Code Review

1. Knowledge transfer

2. Increased team awareness

3. Finding alternative solutions to problems

Page 21: What is quality code? From cruft to craft

@nickdenardis #psuweb

What to review in a PR?

• Everyone brings something to the table

• Single responsibility principle

• Naming

• Tests should cover QA, it’s not a reviewer’s responsibility

• “Leave a place better than you found it” ~ Girl Scouts

Page 22: What is quality code? From cruft to craft

@nickdenardis #psuweb

Authoring a pull request

• Small atomic changes

• Should take at least 10 minutes

• Provide two paragraphs of context

• Only link to `Fixes #1337` as a command

Page 23: What is quality code? From cruft to craft
Page 24: What is quality code? From cruft to craft
Page 25: What is quality code? From cruft to craft

@nickdenardis #psuweb

Reviewing a pull request

• Ask, don’t tell

• Negativity bias in written communication

• Foster a technical discussion

• Never use the word “just”

• Be positive

Page 26: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources• http://research.microsoft.com/pubs/180283/ICSE

%202013-codereview.pdf

• http://blog.codeclimate.com/blog/2013/10/09/unexpected-outcomes-of-code-reviews/

• Does it need a +1? http://harvesthq.github.io/fias/

• Harvest code reviewshttps://techtime.getharvest.com/blog/code-reviews-at-harvest

Page 27: What is quality code? From cruft to craft

@nickdenardis #psuweb

Refactoring

Page 28: What is quality code? From cruft to craft

@nickdenardis #psuweb

SOLID PrinciplesSingle Responsibilitya class should have only a single responsibility

Open/closed principleshould be open for extension, but closed for modification

Liskov substitution principleobjects in a program should be replaceable with instances of their subtypes

Interface segregation principle many client-specific interfaces are better than one general-purpose interface.

Dependency inversion principle Depend upon Abstractions. Do not depend upon concretions.

Page 29: What is quality code? From cruft to craft

@nickdenardis #psuweb

One pass at a time

Page 30: What is quality code? From cruft to craft
Page 31: What is quality code? From cruft to craft
Page 32: What is quality code? From cruft to craft

@nickdenardis #psuweb

Sandi Metz

• Your class can be no longer than 100 lines of code.

• Your methods can be no longer than five lines of code.

• You can pass no more than four parameters and you can’t just make it one big hash.

• When a call comes into your (Rails) controller, you can only instantiate one object to do whatever it is that needs to be done. And your view can only know about one instance variable.

Page 33: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources• Sandi Metz - Refactoring

https://www.youtube.com/watch?v=8bZh5LMaSmE

• Eye tracking originalhttps://www.youtube.com/watch?v=VtuO9un2Vyg

• Eye tracking refactorhttps://www.youtube.com/watch?v=Jc8M9-LoEuo

• How big should a function be?http://cleancoders.com/episode/clean-code-episode-3/show

• Rules for good software development - http://gist.io/4567190

Page 34: What is quality code? From cruft to craft

@nickdenardis #psuweb

Style guidesbecause you don’t have to think about a default

Page 35: What is quality code? From cruft to craft
Page 36: What is quality code? From cruft to craft
Page 37: What is quality code? From cruft to craft
Page 38: What is quality code? From cruft to craft

@nickdenardis #psuweb

PSR-2 Standards Highlights• Code MUST use 4 spaces for indenting, not tabs.

• Opening braces for classes MUST go on the next line, and closing braces MUST go on the next line after the body.

• Opening braces for methods MUST go on the next line, and closing braces MUST go on the next line after the body.

• Opening parentheses for control structures MUST NOT have a space after them, and closing parentheses for control structures MUST NOT have a space before.

Page 39: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources• http://www.php-fig.org/psr/psr-2/

• https://en.wiktionary.org/wiki/bikeshedding

• http://www.nngroup.com/articles/the-power-of-defaults/

• http://blog.codinghorror.com/the-power-of-defaults/

• https://github.com/waynestate/web-guides

• https://github.com/bbatsov/ruby-style-guide

• https://www.drupal.org/coding-standards

• http://isobar-idev.github.io/code-standards/

Page 40: What is quality code? From cruft to craft

@nickdenardis #psuweb

Your processcreated all this cruft…

Page 41: What is quality code? From cruft to craft
Page 42: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources

• http://danielkummer.github.io/git-flow-cheatsheet/

• https://github.com/blog/2019-how-to-undo-almost-anything-with-git

Page 43: What is quality code? From cruft to craft

@nickdenardis #psuweb

Retrospectivesallow you to improve each week

Page 44: What is quality code? From cruft to craft
Page 45: What is quality code? From cruft to craft
Page 46: What is quality code? From cruft to craft
Page 47: What is quality code? From cruft to craft

@nickdenardis #psuweb

Weekly maintenanceis everyone’s job

Page 48: What is quality code? From cruft to craft
Page 49: What is quality code? From cruft to craft

@nickdenardis #psuweb

Automationbecause ain’t no body got time to do it by hand

Page 50: What is quality code? From cruft to craft
Page 51: What is quality code? From cruft to craft

@nickdenardis #psuweb

Generators

Page 52: What is quality code? From cruft to craft
Page 53: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources

• http://vagrantup.com

• http://yeoman.io

• http://gulpjs.com

Page 54: What is quality code? From cruft to craft

@nickdenardis #psuweb

Code formatting

Page 55: What is quality code? From cruft to craft

@nickdenardis #psuweb

Editorconfig# http://editorconfig.org root = true

[*] indent_style = space indent_size = 4 end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true

[*.md] trim_trailing_whitespace = false

[makefile] indent_style = tab

Page 56: What is quality code? From cruft to craft

composer global require fabpot/php-cs-fixer @stable

php-cs-fixer fix src/ --level="psr2" --dry-run -v --diff

PHP CS Fixer

Run it against your code

Page 57: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources

• https://houndci.com/

• http://editorconfig.org/

• https://codeclimate.com/

• https://github.com/FriendsOfPHP/PHP-CS-Fixer

Page 58: What is quality code? From cruft to craft

@nickdenardis #psuweb

GIT hooks

Page 59: What is quality code? From cruft to craft

# pre-commit.sh git stash -q --keep-index ./run_tests.sh RESULT=$? git stash pop -q [ $RESULT -ne 0 ] && exit 1 exit 0

ln -s ../../pre-commit.sh .git/hooks/pre-commit

Symlink in your hooks

Stash before running

Page 60: What is quality code? From cruft to craft

# ~/.bash_aliases alias gc='git commit' alias gcv='git commit --no-verify'

How to skip the hook

Page 61: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources

• https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

• http://githooks.com/

• https://www.digitalocean.com/community/tutorials/how-to-use-git-hooks-to-automate-development-and-deployment-tasks

• http://codeinthehole.com/writing/tips-for-using-a-git-pre-commit-hook/

• https://github.com/codegram/pelusa

Page 62: What is quality code? From cruft to craft

@nickdenardis #psuweb

Measuring resultsin the real world

Page 63: What is quality code? From cruft to craft

@nickdenardis #psuweb

Before…

Page 64: What is quality code? From cruft to craft

@nickdenardis #psuweb

Growing pains.

Page 65: What is quality code? From cruft to craft

@nickdenardis #psuweb

Now that’s about right

Page 66: What is quality code? From cruft to craft

@nickdenardis #psuweb

Tiny habitswill bring your cruft to craft

Page 67: What is quality code? From cruft to craft

@nickdenardis #psuweb

Kaizen• Good processes bring good results

• Go see for yourself to grasp the current situation

• Speak with data, manage by facts

• Take action to contain and correct root causes of problems

• Work as a team

• Kaizen is everybody’s business

Page 68: What is quality code? From cruft to craft

@nickdenardis #psuweb

Resources

• http://www.kaizen.com/about-us/definition-of-kaizen.html

Page 69: What is quality code? From cruft to craft

@nickdenardis #psuweb

Thank you@nickdenardis