Async patterns: Callbacks

So what is a callback function?

A callback function, also known as a higher-order function, is a function that is passed to another function (let’s call this other function “otherFunction”) as a parameter, and the callback function is called (or executed) inside the otherFunction. A callback function is essentially a pattern (an established solution to a common problem), and therefore, the use of a callback function is also known as a callback pattern. (Source)

Continue reading Async patterns: Callbacks

Data Structure: Trees and Depth-First Tree Traversals in JavaScript

What is a tree?

Trees are a commonly-used data structure in web development. You interact with a very common example of a tree every time you use your browser, likely without knowing it — the Document Object Model (DOM).

DOM tree
Source: w3schools

Continue reading Data Structure: Trees and Depth-First Tree Traversals in JavaScript

Resources: Getting started & beyond

When self-teaching, almost all of us start at the same point. Where do I start? How do I “pick a language”? What do I focus on? I know I did.

I recently started listening to the JavaScript Air podcast, and even more recently went back to listen to some of the earliest episodes. In episode 001, “Learning and Developing JavaScript”, Ashley G. Williams (@ag_dubs) makes a comment that caught my attention:

Continue reading Resources: Getting started & beyond


Quicksort is a sorting algorithm, used to place the elements of an array into an order. That order is based on comparison —  the things being sorted must have a “less than” / “greater than” relationship. (Source).

Continue reading Quicksort


Oh, recursion.

There are two types of people, those who understand recursion and those who understand that there are two types of people in the world… (r/ProgrammerHumor)

But really. There seem to be people who can very naturally digest the concept of recursion, and those whose brains absolutely reject it. I happened to be one of the latter. In this post, we’ll go over recursion generally, and then work through a diagrammed problem example.

Continue reading Recursion

The insecurity of a professional generalist

The best way I have ever heard to capture my insecurity at being a generalist:

When someone says they want “designers who can code”, what I hear them saying is that they want a Swiss Army knife. The screwdriver, scissors, knife, toothpick and saw. The problem is that a Swiss Army knife doesn’t do anything particularly well. You aren’t going to see a carpenter driving screws with that little nub of a screwdriver, or a seamstress using those tiny scissors to cut fabric. The Swiss Army knife has tools that work on the most basic level, but they would never be considered replacements for the real thing. Worse still, because it tries to do so much, it’s not even that great at being a knife.

Via @MediumWe Don’t Need More Designers Who Can Code by Jesse Weaver

The Perks (+ Downsides) of Being a Generalist

On the one hand, I take pride in my being a generalist. My interests are too many and too varied to possibly limit myself to only a few. When I was younger I was a state-qualified tennis player, got straight-As, dabbled in debate and theater tech, edited my high school paper, played volleyball and was on swim teams. In the past few years I have been interested in journalism, teaching, print design, web design, web development (of all sorts: wordpress + php, ruby/rails, javascript), branding, email marketing, Chinese, knitting, crochet, yoga, German, running, guitar, weightlifting… Having such a grand spectrum of interests means you’re never bored.

It also probably means you’re not really good at something.

I enjoy being a jack of all trades– having knowledge of and being good at many things. But it plagues me to not be great at something. But with so much out there, how do you ever choose? How do you specialize? I’m fascinated by people who are so drawn into one topic that they are a literal expert.

This year, for my “new year’s resolution,” I decided to try to start paring down, starting with all volunteer projects. This sounds counterintuitive, I know. But signing myself up for all sorts of things and spreading myself thin only made things worse. It got to the point where I was trying to do so much for so many different people, that I couldn’t deliver. And in my opinion, that’s not good enough. So I’m trying to take some time to just figure things out.

For work, I currently manage website projects. Some of the projects I’m working on are so complex, that I felt I had to learn everything about everything. I should know more ruby, put it on the list. I should know more about data science and R script, put it on the list. I should

I was falling into the same trap. So many things that I felt I should learn, that I became paralyzed. So worried at not being good enough that I could barely function on anything. I’d jump from thing to thing, not really getting a whole lot done. I am a champion at jumping from intro tutorial to intro tutorial.

So back to square one, how to pare down? Identify and foster the things I’m genuinely curious about and interested in, for the right reasons.

  1. Be more mindful about work. Continue to do the best job that I possibly can, while maintaining a little more emotional distance from it. Fretfulness and anxiety doesn’t breed effectiveness. Give it everything, constantly solicit constructive feedback, adapt… but forget the rest. Don’t let it take over. Maintain balance.
  2. WordPress. I don’t need to know every programming language in the world. I got into web through a design route. I enjoy being able to actually implement. I eventually want to be able to confidently freelance on a small scale. Right now, I’m only confident about making static sites. Of all content management systems, I have the most knowledge of and support around WordPress. Forget everything else, and just mess around with WordPress, with no expectations at first. Be curious. Enjoy it.
  3. Stick with language learning. Deep in my heart, I miss interacting with a second language. I invested so much time into learning Chinese, and I enjoy it so much. Why did I let it drop? Because I was scared to not be able to maintain it after college. It terrified me to lose it. So I didn’t even try. So, I’m going to try to have no expectations for how good my Chinese should be. Instead of being afraid to talk to people with my broken language and instead drill character writing for hours (something I’m very comfortable with)– forget the writing. Why bother? The point is to be able to talk to other people. Be fearless with spoken language. Fail more, and care less about being perfect.
  4. Listen to my body. In all ways, I roller coaster. Running from thing to thing, when I think I’ll never be good enough at something. I love yoga. Do yoga whenever. I hate running in the winter. So run in the summer and don’t feel bad about the winter. I love weightlifting but I hate bro culture. So go when the gym is emptiest. Strategize to avoid the factors that make me likely to give up, or fail.

No matter what, whether I remain wholly a generalist or end up specializing in something, I just want to be at peace. I want to feel like all of the effort I put forth is getting me somewhere, instead of just another rotation around the hamster wheel.