Saturday, April 9, 2016
Thumbs Test
A Bare-Bones Litmus Test For Developer Knowledge
There’s a test I like to do with new co-op students to get context for how much they actually know. I call it the “thumbs” test, and I explain it like this:
Before we start, I just want to get some context for how much experience you have. This is not a quiz, I only want to get an idea for which aspects of development you’re comfortable with. I’m sorry in advance if any of this is patronizing, I only mean to get a feel for your skill set, please bear with me.
I’m going to start listing programming concepts, and for each one, I want you to give me a thumbs-up, a thumbs-down or anything in between.
A thumbs-up means “I know what this is, I am comfortable with it, I’ve used it and I can use it again”. A thumbs-to-the-side means “I’ve heard of this, maybe I’ve used it. I would have to look up some API documentation, call a friend, or check Stack Overflow to work with it.” A thumbs-down means: “I am not sure what that is, or I know what it is, but I’m not familiar with it and might even have a mild phobia of it.”
You can rotate your thumb to the exact level where you feel comfortable. Ready? I’ll start. How about if statements? Functions?
I then start listing concepts in order of increasing complexity, giving them 2-3 seconds on each one to give me a rating. It takes maybe a minute or two, and by the end I always feel like a good context has been established. The actual terms depend on their intended role, but here are some samples:
- HTML/CSS: SVG, media queries, flexbox, specificity, BEM, ARIA, Sass/LESS, layout/paint/composite cycle
- JavaScript: loops, functions, exceptions, regular expressions, promises,
this
, the DOM, ES6/ES2015, closures, constructors, event bubbling and capturing, hoisting, prototypal inheritance - HTTP: AJAX, caching and cache busting, CDNs, XSS, CORS, CSRF, websockets
- Angular:
$scope
, controllers, directives, services, dependency injection,$watch
, routing, the digest loop,$broadcast
, Karma,controllerAs
- “engineering”: code smells, DRY, encapsulation, abstraction, time complexity, mutability, separation of concerns, coupling and cohesion
- bash:
cp
,mv
,ssh
,chmod
,chown
- git:
commit
,status
,pull
/fetch
,merge
,reset
, aliasing, diffing,rebase
,bisect
,reflog
- workflow: dependency management,
npm
,bower
,gulp
, transpilation, linting, test runners - Chrome: Chrome Canary, Network Panel, Debugger, Timeline, Workspaces
P.S. It helps to play along for the first few!