Computers Can Be Understood

A big mental leap I made early in my programming was starting to view computers as something that could be understood. What is a computer? It’s a piece of silicon. You can recreate a basic version of it with water or even Minecraft redstone. Each abstraction on top of that piece of silicon is a set of instructions that combine into something remarkable. Something that you, with enough time, can understand. ...

September 6, 2022

Spell Checking with Vim: Tutorial and Best Practices

I write each post for this blog in Vim. Writing in the terminal makes me feel like a programmer, even when I’m not specifically programming. In this post, I’ll share how I spellcheck in Vim. Enable Spelling Vim’s spelling help page is extensive, and can be viewed at: :help spell It suggests enabling spelling like this: :setlocal spell spelllang=en_us When you to this, you’ll see words that Vim considers misspelled in red. ...

June 15, 2022

Debugging Tip: Learning From Bugs

You were stuck, and now you aren’t. Congratulations! Before you move on, it’s vital to stop and learn from it. It’s the best way I know to get better and spare your mind for increasingly harder problems. “What Did I Miss?” Every time you get unstuck, ask yourself: when I was stuck, what did I miss? Was I misreading a message? Was I hypnotized by an irrelevant detail? 😵‍💫 Did I make a bad assumption and reject information that didn’t fit into my assumption? “What did I miss?” ...

March 25, 2022

Stop Studying, Start Building

If I could give one piece of advice to anyone learning to program: build. This advice might be most helpful to beginners. But it’s been valuable to me to revisit at different points in my career. In some ways, this post is for me. Steve Martin once said the secret to success is to “Be so good they can’t ignore you.” How do you get that good as a programmer? The most direct path I know is to build things. ...

March 16, 2022

The Tutorial Anti-Pattern

Here’s a scenario: you’re applying for your first tech job. You’ve found a bunch of hands-on tutorials and you’re speeding through them. When you finish, you upload the code to Github and add a new line to the ‘Projects’ section of your resume. Maybe you even deploy the code as a production website. My advice: stop. Tutorials are fun: you get to work through tough problems, like building an application with authentication, social posts, and tests, and learn to deploy to production. It feels like you’re accomplishing something. ...

August 24, 2021

Programming Resources for Beginners

There is a glut of programming information online. You can’t read it all, and you shouldn’t, because much of it is outdated, wrong, or irrelevant to you. So, what is the signal in this noise? I recommend aggregators, blogs, pair programming. And I offer a gentle recommendation against tutorials. Aggregators I’ve summarized this idea before in a Hashrocket blog post called ‘How to Prepare for a Technical Interview’: I advocate a passive approach: whatever watercooler you frequent (Twitter, Medium, RSS, Reddit, email mailing lists, etc.), find the aggregators. These are people who read everything– blog posts, release notes, conference announcements, Twitter fights– and distill it down into a human-sized product. I subscribe to weekly email newsletters for React, JavaScript, Ruby, and Postgres. Each week, I scan the headlines and one or two articles. You build up a picture of the scene pretty quickly. – ‘How to Prepare for a Technical Interview’ ...

December 5, 2020

My Development Roadmap

I’ve been working on a development roadmap for my projects, and wanted to share my process. Consider this my recipe to turn an idea into software. The purpose of codifying a workflow like this is to make working with me a predictable and thorough experience. Writing software is pretty hard; it’s much harder when you don’t have a plan. Every item here is à la carte– I wouldn’t typically do more, but I might do less on projects of modest scope. ...

October 20, 2020

Learn to Test

What is a skill one could learn to set themselves apart from other entry-level programmers? Testing. The web frameworks of today all have mature test libraries. Hashrocket’s default tool is Ruby on Rails, and testing is a fundamental part of that community. Everything we do is test-driven. New apprentices who come into any consultancy will have a lot to learn. At Hashrocket we use a pretty customized setup of Vim and Tmux, and have a ton of aliases and shorthands that can be hard to pick up. Our apprentices pair program with full-time developers, on real projects. It can be daunting at first. ...

July 15, 2016