• Stars
    star
    224
  • Rank 171,423 (Top 4 %)
  • Language
    R
  • Created almost 6 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Talk on code smells and feels and how to change that via refactoring

Code Smells and Feels

Talk initially prepared for useR!2018 Brisbane. Also delivered elsewhere, such as the First Mexican Statistical Association School in Data Science
by Jenny Bryan
jennybryan.org
Twitter: @jennyBryan
GitHub: @jennybc

"Code smell" is an evocative term for that vague feeling of unease we get when reading certain bits of code. It's not necessarily wrong, but neither is it obviously correct. We may be reluctant to work on such code, because past experience suggests it's going to be fiddly and bug-prone. In contrast, there's another type of code that just feels good to read and work on. What's the difference? If we can be more precise about code smells and feels, we can be intentional about writing code that is easier and more pleasant to work on. I've been fortunate to spend the last couple years embedded in a group of developers working on the tidyverse and r-lib packages. Based on this experience, I'll talk about specific code smells and deodorizing strategies for R.

Link to this repo

rstd.io/code-smells is a shortlink to HERE

Slides

Slides on SpeakerDeck

Slides as PDF file here in this repo

Video

Video is available on YouTube:
https://www.youtube.com/watch?v=7oyiPBjLAWY

Credits and resources

Annotated and hyperlink-y list of resources mentioned in the slides, in roughly the same order.


Do useRs have less formal training in CS/programming than others writing code?

2018 Stack Overflow Annual Developer Survey: https://insights.stackoverflow.com/survey

Adapted from original code by Julia Silge, data scientist at Stack Overflow.

Code here in this repo: stackoverflow-survey


Talks about programming style, workflow, and policies

Some that inspired me:

Good Programming Practice, UseR! 2004 Keynote, Martin Mächler
http://www.ci.tuwien.ac.at/Conferences/useR-2004/

What I find important when R Programming and Recent Cool Features in R
2018 eRum Keynote by Martin Mächler and R Core Team
http://stat.ethz.ch/~maechler/U/R/eRum_2018_ProgR-ALTREP.html

My own efforts in this genre:

Zen And The aRt Of Workflow Maintenance, IASC/NZSA 2017, Jenny Bryan

Workflow: You should have one, EARL London 2017, Jenny Bryan


Cakes that look like hedgehogs ... sort of?


What Every Successful Person Knows, But Never Says
James Clear blog post that discusses an Ira Glass interview. Indicative quote:

All of us who do creative work, we get into it because we have good taste. But it's like there is this gap. For the first couple years that you're making stuff, what you're making isn't so good. It’s not that great. It’s trying to be good, it has ambition to be good, but it’s not that good.

But your taste, the thing that got you into the game, is still killer. And your taste is good enough that you can tell that what you're making is kind of a disappointment to you.


The teams that bring you


Refactoring
Improving the Design of Existing Code
by Martin Fowler
(with Kent Beck, John Brant, William Opdyke, and Don Roberts)
https://martinfowler.com/books/refactoring.html

Dumpster photo by NeONBRAND
https://unsplash.com/photos/8Yk4T-tDSYY


Code Smells – a Short List
blog post by Arne Mertz
https://arne-mertz.de/2017/08/code-smells-short-list/


bizarro: all code snippets are given here in R/

Beach + glass orb photo by Perchek Industrie
https://unsplash.com/photos/y-rmmZZfD1I


Good enough practices in scientific computing
Wilson G, Bryan J, Cranston K, Kitzes J, Nederbragt L, et al. (2017) Good enough practices in scientific computing. PLOS Computational Biology 13(6): e1005510. https://doi.org/10.1371/journal.pcbi.1005510

Do not comment and uncomment sections of code to control a program's behavior.


if() else() described in breathless AI style:
you mean a one layer neural network with identity activation and no hidden layers

Tweet by Federico Vaggi


Return early and clearly
Blog post by Arne Mertz
https://arne-mertz.de/2016/12/early-return/
"Handling preconditions" section is the basis of my early return before/after example get_some_data().

More posts and conversations about early returns and avoiding if entirely:

Yoda photo by Kory Westerhold on flickr
https://www.flickr.com/photos/korymatthew/14211839966


Baby with diaper photo by rawpixel
https://unsplash.com/photos/6RjllGKO88U


In addition to the Refactoring book referenced above, these are other good reads for improving your code:

The Art of Readable Code
Simple and Practical Techniques for Writing Better Code
Dustin Boswell, Trevor Foucher
http://shop.oreilly.com/product/9780596802301.do

The Pragmatic Programmer
From Journeyman to Master
by Andrew Hunt and David Thomas
https://pragprog.com/book/tpp/the-pragmatic-programmer


Upgrade your cargo cult for the win
https://meaningness.com/metablog/upgrade-your-cargo-cult

Toddler on run bike photo by Jordan Sanchez
https://unsplash.com/photos/Vbzx-yy5FoA

More Repositories

1

googlesheets

Google Spreadsheets R API
R
786
star
2

happy-git-with-r

Using Git and GitHub with R, Rstudio, and R Markdown
TeX
550
star
3

row-oriented-workflows

Row-oriented workflows in R with the tidyverse
R
399
star
4

here_here

I love the here package. Here's why.
289
star
5

gapminder

Excerpt from the Gapminder data, as an R data package and in plain text delimited form
R
273
star
6

ggplot2-tutorial

Teaching materials for the R package ggplot2
R
236
star
7

send-email-with-r

How to send a bunch of email from R
R
205
star
8

r-graph-catalog

All graphs in “Creating More Effective Graphs”, made with R package ggplot2.
R
186
star
9

repurrrsive

Recursive lists to use in teaching and examples, because there is no mtcars for lists.
R
133
star
10

access-r-source

How to get at R source. I am sick of Googling this. I am writing it down this time.
120
star
11

free-photos

Places to find CC0 photos and the like
116
star
12

purrr-tutorial

Materials for getting to the know the R package purrr
HTML
111
star
13

debugging

Talk about general debugging strategies. How to be less confused and frustrated.
R
110
star
14

pkg-dev-tutorial

Package Development tutorial for useR! 2019 Toulouse
R
88
star
15

docker-why

Notes about why an R user would use Docker
57
star
16

scary-excel-stories

Sobering things about Excel
55
star
17

jadd

RStudio addins
R
52
star
18

sanesheets

A rant about spreadsheets.
47
star
19

githug

Interface to local and remote Git operations
R
47
star
20

bingo

Generate Bingo cards with R.
R
44
star
21

manipulate-xml-with-purrr-dplyr-tidyr

Example of taming XML with nested data frames and purrr
HTML
40
star
22

lego-rstats

Photos that depict R data structures and operations via Lego
R
39
star
23

how-to-name-files

R
38
star
24

analyze-github-stuff-with-r

Marshal data from the GitHub API with R
R
38
star
25

2015-06-28_r-summit-talk

Talk at R Summit and Workshop about using R Markdown and GitHub in your workflow
38
star
26

operation-chromebook

Setup notes for the Bryan family Chromebooks
35
star
27

zen-art-workflow

Links and credits for a talk: Zen And The aRt Of Workflow Maintenance
R
35
star
28

2015-02-23_bryan-fields-talk

Talk at Workshop on Visualization for Big Data: Strategies and Principles, Fields Institute http://www.fields.utoronto.ca/programs/scientific/14-15/bigdata/visualization/
33
star
29

2016-06_spreadsheets

Talks given in May and June 2016.
32
star
30

2019-07_useR-toulouse-usethis

Talk about the usethis R package at useR! 2019 Toulouse
R
29
star
31

foofactors

Make Factors Less Aggravating
R
28
star
32

excelgesis

Critical explanation or interpretation of ... Excel spreadsheets
R
26
star
33

lotr

R
26
star
34

lotr-tidy

Tidy data lesson using Lord of the Rings data.
23
star
35

STAT545A_2013

UBC grad course in data analysis with R
HTML
21
star
36

earl-london-2017-bryan

Jenny Bryan talk at EARL London, 2017 September 12/13/14
21
star
37

2018-09_purrr-latinr

R
19
star
38

scream

Get replies and quotes of a tweet
19
star
39

2023_raukr-purrr-pkg-dev

Jenny Bryan's instruction at RaukR: Advanced R for Bioinformatics Summer School
R
18
star
40

regexcite

PACKAGE EXISTS FOR DEMONSTRATION PURPOSES ONLY! Make Regular Expressions More Exciting
R
18
star
41

jeremy-howard-posit-conf-2023

Notebook seen in Jeremy Howard's keynote at posit::conf(2023)
Jupyter Notebook
18
star
42

2015-08_bryan-jsm-stat-data-sci-talk

Bryan talk at JSM 2015 re: are statisticians data scientists
R
17
star
43

tidy-eval-context

16
star
44

stat540_2014

STAT540 Statistical Methods for High Dimensional Biology, January - April 2014
R
15
star
45

happy-git-and-github-for-the-user

Talk: Happy Git and GitHub for the useR
14
star
46

frogs

Data from the Calaveras Jumping Frog Jubilee
R
11
star
47

organization-and-naming

Draft of mini-lectures about file organization and naming.
9
star
48

2018_advent-of-code

R
8
star
49

candy

candy survey data
R
8
star
50

2014-05-12-ubc

Python
8
star
51

making-messages

6
star
52

yelpr

Call the Yelp API from R ... at this point, just helping a student!
R
6
star
53

bioinformatics.ca-swc-r

Software Carpentry Bootcamp for bioinformatics.ca 2014-05-12
R
6
star
54

appveyorWTF

WTF AppVeyor, WTF?
R
5
star
55

2017_advent-of-code

R
5
star
56

STAT545

UBC grad course in data analysis with R
5
star
57

user2016-git-tutorial

Tutorial for useR! 2016 @ Stanford
4
star
58

swcR_duke

R content from Duke Software Carpentry Workshop May 2013.
R
4
star
59

test-drive-a-package

try an experimental version of an R package without messing with your main R library
3
star
60

babystats

Bit of data on the Bryan babies
R
3
star
61

jennybryan.org

Personal website of Jenny Bryan
HTML
3
star
62

furry-sniffle

A practice GitHub repo
2
star
63

nfl

R
2
star
64

explore-libraries-seattle-practice

Just practicing!
R
2
star
65

arms-length-render

Usage of rmarkdown::render() when intermediates and outputs don't live with source
R
2
star
66

miami-intermediate-r

Instructor repository for intermediate R room, U of Miami, Software Carpentry Boot Camp, January 2014
R
2
star
67

vanNH

In-house statistics for the Vancouver Nighthawks of Major League Ultimate
HTML
2
star
68

angrybunny

Split a single string
R
1
star
69

stat545a-2013-hw06_baik-jon

Last homework for STAT545A
CSS
1
star
70

cran-data-pkg-licenses

A look at the licenses used by data packages on CRAN
1
star
71

symlink-test

R
1
star
72

2013-11_sfu

Supporting documents for talk and workshop for SFU Statistics and Actuarial Science
1
star
73

README-as-visual-index

Autogenerate README to give visual index of a figure directory
R
1
star
74

refactor

Make Factors Less Annoying
R
1
star
75

teengecko

What the Package Does (One Line, Title Case)
1
star
76

vigilant-tribble

There's only one way to figure out how this works.
1
star
77

xyztest

1
star
78

foofactors2

Happier Life With Factors
R
1
star
79

apple

Experimenting using GHA to render bookdown into gh-pages branch
TeX
1
star
80

happy

I am happy
1
star
81

bellybutton

Data from "A Jungle in There" re: bacterial diversity in the adult human belly button
1
star
82

foofactors3

What the Package Does (One Line, Title Case)
R
1
star
83

2014-01-27-miami

Software Carpentry Bootcamp at the University of Miami
Python
1
star
84

2021-06_raukr-iteration

R
1
star
85

STAT545Assignment6

R
1
star
86

excuse-me-iris

Toy example used in the article "Excuse me, do you have a moment to talk about version control?"
R
1
star