Curated Resources for Mentees
contents
a.k.a., my very own soap box (TM)… odds & ends I’ve found useful, interesting, and/or wish I had seen earlier on.
I found that I was repeatedly re-googling links to share with new mentees, so I decided to shove it all in one place.
markers denote highlights.
🔗 Version Control
-
GitHub Is Microsoft’s $7.5 Billion Undo Button
- big-picture practical (& philosophical ?!?) implications of git/GitHub
- How to Write a Git Commit Message
- The Elements of Style makes for terse commit messages, especially
- An emoji guide for your commit messages
- use
git add -p
to spot-check your changes while preparing a commit - Version control concepts and best practices
- Git commit fixup and autosquash
- pull with rebase
🔗 Comments & Documentation
- C++ projects documentation best practices
- C++ Doxygen Notes
- 5 Best Practices for Commenting Your Code
- Putting comments in code: the good, the bad, and the ugly.
- How to Write Good Documentation (And Its Essential Elements)
🔗 Good Code: Philosophy
- C++Now 2019: David Sankel “C++: Engineers Wanted, Programmers not so Much”
-
Applying the Linus Torvalds “Good Taste” Coding Requirement
- don’t bother with the original TED talk, it’s mostly hero-worshiping B.S.
- The Zen of Python
- CppCon 2019: Kate Gregory “Naming is Hard: Let’s Do Better”
- CppCon 2018: Kate Gregory “Simplicity: Not Just For Beginners”
- The Commandments of Good Code according to Zach™
🔗 Good Code: Nuts & Bolts
- CppCon 2019: Jason Turner “C++ Code Smells”
- CppCon 2018: Jonathan Boccara “105 STL Algorithms in Less Than an Hour”
- CppCon 2017: Kate Gregory “10 Core Guidelines You Need to Start Using Now”
-
GoingNative 2013 C++ Seasoning
- no raw loops!
- no raw synchronization primitives!
- no raw pointers!
- CppCon 2019: Jon Kalb “Back to Basics: Object-Oriented Programming”
- Better Code: Runtime Polymorphism - Sean Parent
🔗 Testing, Debugging, Benchmarking, & Profiling
- Unit Tests, How to Write Testable Code and Why it Matters
- 10 Debugging Tips for Beginners: How to Troubleshoot and Fix Your Code Without Pulling Your Hair Out
- How to Debug Any Problem
- also, use a proper debugging tool
- or, consider giving up and trying a different approach
- perf zine by Julia Evans
- flame graphs
- gperftools how to
- tools: Compiler Explorer, Quick Bench, and C++ Insights
- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
🔗 Horrible, C++-Specific Gotchas
-
static initialization order fiasco
- “A subtle way to crash your program.”
-
type aliasing
- basically, never cast pointers to pointer types besides
char *
orvoid *
- basically, never cast pointers to pointer types besides
-
macro operator precedence
- macro
X
:1 + 1
- macro
Y
:X * X
- aaand…
Y == 3
(not 4)
- macro
-
The Most Vexing Parse
A a();
- you’re just tryna make an
A
calleda
- but compiler bae thinks you’re tryna declare a function
a
that returns anA
-
std::numeric_limits<T>::min()
- returns smallest finite positive value for floating-point types (not the most extreme finite negative value)
- template and typename keywords
- CppCon 2017: Louis Brandy “Curiously Recurring C++ Bugs at Facebook”
- start reading from the TOP of horribly long compiler error messages:
unbuffer make 2&>1 | less -r
🔗 Text Editor & Shell
prevent whitespace errors:
getting around faster:
- go to last edit
- multi cursor
- jump ten lines
- dynamic hotkeys
- history-based shell suggestions via Oh My Zsh
🔗 History
- John Füegi and Jo Francis. 2015. “Lovelace & Babbage and the creation of the 1843 ‘notes’”. ACM Inroads 6, 3 (August 2015), 78-86. http://dx.doi.org/10.1145/2810201
- Donald Knuth and Luis Trabb Pardo. 1976. “The Early Development of Programming Languages.” Computer Science Department, Stanford University
- Edsger W. Dijkstra. 1972. “The Humble Programmer.” Commun. ACM 15, 10 (October 1972), 859-866. DOI=10.1145/355604.361591
- AT&T Archives: The UNIX Operating System
- There Aren’t Enough Women in Tech. Here’s Why.
- Home/Front: Silicon Valley Rebels Vs. The U.S. Air Force : Rough Translation : NPR
🔗 Ethics
- KILLED BY A MACHINE: THE THERAC-25
- How Technology Led a Hospital To Give a Patient 38 Times His Dosage
-
“Uncle” Bob Martin - “The Future of Programming”
- starts out as a history romp but ends with discussion of programming as a discipline and profession
-
Why Are There Razor Blades In My Walls?
- a fun parable of technical debt
🔗 Personal Narratives & Anecdotes
- Stitch Fix’s CEO says there should be more seats at the table, not in investors’ hot tubs
- Q&A With The Black Twitter Engineer Who Left Over Diversity Problems
- Twitter Thread on MIT Media Lab by Dr. Sarah Traber
- Why I’m Firing Michigan State: Sexual Harassment, Online Harassment, and Utter Institutional Failure
- Reflecting On One Very, Very Strange Year At Uber
- Life as a Black Academic
- My Body is a Book of Rules
- SimCopter Easter Egg
- Advice from an Old Programmer
🔗 Miscellaneous Clever Tools I Like
… some of which I made
-
your very own static url shortener
- including password-protected links
- store & extract metadata in filenames
- Journal Like a Hacker
- Blog Like a Hacker
- write web apps in C++
- compute-cluster friendly containerization
-
open science framework
- and their awesome command-line uploader
🔗 Fun
- Fast Inverse Square Root — A Quake III Algorithm
- Grace Hopper on Letterman
- Grace Hopper’s Bug
- Wat, A lightning talk by Gary Bernhardt from CodeMash 2012
- The Story of Mel
- A Story About ‘Magic’
- The case of the 500-mile email
- The Origins of the <Blink> Tag
- A Collection of O’rly book Covers
-
New Yorker Radio Hour: Unearthing Entombed
- digital archaeologist is a job you can have now (?!)
- twist ending about intellectual property
🔗 Let’s Chat!
What resources have you found most useful on your journey as a programmer? What else should I add to this list?
I started a twitter thread (right below) so we can chat
nothing to see here, just a placeholder tweet 🐦
— Matthew A Moreno (@MorenoMatthewA) October 21, 2018