Upload
nick-denardis
View
195
Download
1
Tags:
Embed Size (px)
Citation preview
From cruft to CRAFT@nickdenardis #psuweb
@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
@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…
@nickdenardis #psuweb
How did we produce all this cruft in the first place?
@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
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.
@nickdenardis #psuweb
Project managementcontributed to this cruft…
@nickdenardis #psuweb
Turnoverproduced all this cruft…
@nickdenardis #psuweb
Documentation
@nickdenardis #psuweb
Team knowledgecreated all this cruft..
@nickdenardis #psuweb
Reading codelevels up everyone on the team
@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.
@nickdenardis #psuweb
Our turn
@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/
@nickdenardis #psuweb
Code reviewsfacilitate discussion around solutions
@nickdenardis #psuweb
Code Review
1. Knowledge transfer
2. Increased team awareness
3. Finding alternative solutions to problems
@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
@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
@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
@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
@nickdenardis #psuweb
Refactoring
@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.
@nickdenardis #psuweb
One pass at a time
@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.
@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
@nickdenardis #psuweb
Style guidesbecause you don’t have to think about a default
@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.
@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/
@nickdenardis #psuweb
Your processcreated all this cruft…
@nickdenardis #psuweb
Resources
• http://danielkummer.github.io/git-flow-cheatsheet/
• https://github.com/blog/2019-how-to-undo-almost-anything-with-git
@nickdenardis #psuweb
Retrospectivesallow you to improve each week
@nickdenardis #psuweb
Weekly maintenanceis everyone’s job
@nickdenardis #psuweb
Automationbecause ain’t no body got time to do it by hand
@nickdenardis #psuweb
Generators
@nickdenardis #psuweb
Resources
• http://vagrantup.com
• http://yeoman.io
• http://gulpjs.com
@nickdenardis #psuweb
Code formatting
@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
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
@nickdenardis #psuweb
Resources
• https://houndci.com/
• http://editorconfig.org/
• https://codeclimate.com/
• https://github.com/FriendsOfPHP/PHP-CS-Fixer
@nickdenardis #psuweb
GIT hooks
# 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
# ~/.bash_aliases alias gc='git commit' alias gcv='git commit --no-verify'
How to skip the hook
@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
@nickdenardis #psuweb
Measuring resultsin the real world
@nickdenardis #psuweb
Before…
@nickdenardis #psuweb
Growing pains.
@nickdenardis #psuweb
Now that’s about right
@nickdenardis #psuweb
Tiny habitswill bring your 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
@nickdenardis #psuweb
Resources
• http://www.kaizen.com/about-us/definition-of-kaizen.html
@nickdenardis #psuweb
Thank you@nickdenardis