Learning resources
Thomas Ward July 29, 2020Last updated: 2020-07-30
Below is a list of resources I have found useful across a variety of topics. I try and keep this updated somewhat regularly.
Programming
Language specific resources
Clojure
- Go to reference book: The Joy of Clojure
- Need to practice? 4clojure offers free problems and checks them
- Need to write quick scripts that start-up quickly? babashka to the resuce
Python
- pylint
- since python is not compiled, this will catch a lot of bugs before running your program
- but it also suggests some nice code improvements and guilts me into writing docstrings for my functions
- black
- a code formatter to save cognitive load, especially given python's seemingly arbitrary things that are ok to continue on the next line
- yapf also popular
- toolz
- package bringing in more functional-esque functions in python
- a life-saver for making python more bearable to code in
- PugSQL
- a way to bring some sanity to working with SQL within python
- also, the same breed as my dog
R
My go-to language for statistics, data analysis, and visualization creation. I work almost entirely with the tidyverse packages which significantly (p < 0.05) improve base R.
- R4DS
- R for Data Science is the book to read to start using R to clean, analyze, and visualize data. Probably the book I've recommended the most. In the words of one of my co-residents "This book should be mandatory reading for all residents"
- Advanced R
- A in-depth look at the R programming language from Hadley Wickham as above.
- Nice reference when trying to program R beyond just data analysis
- Chapters 2-4 are particularly useful
- Using databases in R
- nice summary overview on how to integrate databases with R
- useful when your data is too large to fit into RAM
- don't worry about ODBC connection and just use database-specific packages (eg RPostgres, RSQLite)
- Making nice visualizations: R Graphics Cookbook
- Usually the info in R4DS suffices, but when you want to make a visualization a little more out-of-the-box use this
R Markdown
Nice extension on top of normal markdown, allowing for a single document to perform code analyses and produce reports to share (anywhere from pdfs to websites).
- Reference book: R Markdown: The Definitive Guide
Shell
Try to avoid for anything requiring more than simple if
statements.
Shell escaping and decades of gotchas will almost always lead to you
shooting yourself in the foot. Once you're over 10 lines, probably time
to switch to perl/python/ruby/babashka.
- If you must, always use shellcheck
Style guides
Useful, particularly when learning a language, to see how at least some major subset of programmers who use it day-in-and-day-out format and organize their code.
Examples
- Clojure
- Python
- R and tidyverse
Automate your formating
When in doubt, just defer to a code formatter, especially when learning, to make your code conform to the usual style. A few examples for different languages below:
Software
A list of software I use and references I used to become (or at least try to) proficient.
Git
A great introductory book is Pro Git which is available online free or to purchase for a hard copy. More specific tips:
- trunk based development
- the git development style that makes the most sense to me
- merging and rebasing
- nice tutorial on how merging and rebasing differ
- rebase tutorial
- nice in-depth tutorial on rebasing
Tmux
A "window-manager" for your terminal, with the perk that you can detach sessions (for example when ssh'd into another computer) and pick up right where you left off. Best documentation is the tmux(1) manual
Vim
After the standard text editor, vim is my go-to. I now prefer Neovim to Vim due to Vim being slow for a while to improve and things like this github issue.
- Ultimate reference: ":help" when in (n)vim