Jake Worth

Blog of Jake Worth, software engineer in Maine.

Favorite Posts

Latest Posts

Button, Link, or Neither?

Published: December 03, 2022 4 min read
  • ux

Links, buttons, spans, and divs– what should we be presenting to a user to click? In this post, I’ll share some best practices for clickable…

TIL: Test Your Circle CI Configuration Locally

Published: November 14, 2022 2 min read
  • til

CircleCI is configured via a file called . I’ve found the combination of YAML, a proprietary DSL, and the remote nature of CI to be to be a…

6 Tips For Reviewing Your Own Code

Published: November 12, 2022 4 min read

This post was inspired by the following Tweet: You need a code review, but you don’t have another person. Maybe you’re building a startup…

Deliver a Great Standup Report as an Engineer

Published: November 09, 2022 2 min read
  • agile

I’ve been lucky to have worked with some great engineers, and one thing that they tend to do exceptionally well is reporting at standup…

Resume for Transitioning to Programming

Published: October 27, 2022 4 min read
  • career

How do you write a resume that helps you transition to programming? You have experience in another field. You want to be a programmer. You…

Resistor Color Trio in TypeScript

Published: October 26, 2022 2 min read
  • typescript

Today as a code kata I completed the ‘Resistor Color Trio’ TypeScript exercise on Exercism. Here’s my work. This exercise asks us to write a…

Vim Scratchpad Part 2

Published: October 26, 2022 3 min read
  • vim

Today, I’d like to dive deeper into a part of my practice: using a persisted text file for jotting things down. You can read the post I’m…

Buy the Best Hardware You Can

Published: October 25, 2022 2 min read

Some advice I offer people entering the programming profession is to buy the best hardware you can. You’re going to need it. Get the most…

Resistor Color Duo in TypeScript

Published: October 24, 2022 2 min read
  • typescript

Today as a code kata I completed the ‘Resistor Color Duo’ TypeScript exercise on Exercism. Here’s my work. This exercise asks us to write a…

Print Last Exit Code

Published: October 21, 2022 2 min read

The exit code of a command in a Unix-based system is an important and easy-to-miss piece of data. It isn’t printed to standard out; you have…

You Can't Change Nothing

Published: October 21, 2022 2 min read
  • debugging

Here’s a meme I saw this week: Here we have a person debugging code, and they’re saying “My code doesn’t work. Let’s change nothing and run…

Read the Docs

Published: October 19, 2022 2 min read

When learning a new language or framework, the first thing I do is read the official documentation cover-to-cover. Choose the latest version…

TIL: Append to a Write-Protected File

Published: October 19, 2022 2 min read
  • til

Suppose you want to append to a file that’s write-protected and can only be edited via . Is that possible? It is! A technique I discovered…

Why Use FactoryBot?

Published: October 17, 2022 3 min read
  • ruby

The FactoryBot gem by Thoughtbot is ubiquitous in Ruby testing. If you aren’t familiar with it, you might be wondering, what’s the point…

Default to Convention

Published: October 14, 2022 2 min read

It’s hard to enforce unconventional preferences on a team. Default to convention. Consider this contrived example. Imagine that you don’t…

TIL: RSpec Render Views

Published: September 29, 2022 2 min read
  • til
  • ruby

When testing a serialized Rails API with RSpec, a common mistake it to assert about the response body, only to find that it’s an empty…

Recommended Reading

Published: September 28, 2022 • Updated: October 14, 2022 2 min read

Here are some books that have helped me understand programming. This list is a living document that I plan to update as I read. Recommended…

How To Introduce New Ideas

Published: September 08, 2022 2 min read

How do you introduce new ideas and ways of working? We want to bring a new idea to our engineering teams, such as a new command-line…

Computers Can Be Understood

Published: September 06, 2022 • Updated: October 27, 2022 2 min read

A big mental leap I made early in my programming was starting to view computers as something that could be understood. A computer is a…

TIL: Ignore Whitespace in Code Review

Published: September 05, 2022 2 min read
  • til
  • github

Reviewing a GitHub PR on that contains a lot of whitespace changes? This can make it challenging to evaluate the substance of a PR. Ignore…

TIL: Filter Network Requests By Status Code

Published: August 30, 2022 2 min read
  • til

The Chrome DevTools Network Tab is incredibly useful for frontend web development, but it can be noisy. Perhaps you’d like to filter it down…

TIL: Suspend Vim

Published: August 29, 2022 2 min read
  • til
  • vim

Imagine you’re iterating on a script and you want to drop back to the terminal to experiment. Maybe you shell out in command mode. Maybe you…

Vim Scratchpad

Published: August 25, 2022 2 min read
  • vim

Today I’d like to share a small part of my practice: using a persisted scratchpad text file for jotting things down. When coding, often I’ll…

Level Up Your Dash

Published: August 21, 2022 2 min read

One of my favorite programming tools is Dash. In this post, I’ll share some tips for leveraging this fantastic program. What’s Dash? Dash…

Prefer Real Data

Published: August 18, 2022 2 min read

When testing user input or data presentation, I prefer using realistic rather than random data. This might sound obvious, but it’s something…

Luck Played a Role

Published: August 15, 2022 2 min read

I believe that luck is part of every professional journey. Here’s a sampling of the luck I’ve had. A passage I recently read caught my…

All My Best Debugging Tips

Published: August 05, 2022 • Updated: September 30, 2022 6 min read
  • debugging

This is a list of all the best debugging tips I’ve picked up over the years. It’s inspired by ‘All my best programming tips’ by Jason…

Tmux Application Startup Script

Published: July 28, 2022 2 min read
  • tmux

My development environment depends on several processes running. Here’s how I’ve scripted this setup. Whenever I boot up, I need at least…

Broken Mental Model

Published: July 25, 2022 2 min read
  • debugging

Perhaps you’re familiar with this scenario: you’re debugging and you’re stuck . You’ve Googled and read some blog posts, Stack Overflow…

Retros Need Action Items

Published: July 19, 2022 2 min read
  • agile

Agile retrospectives should produce many action items. What Are Action Items? Action items are small, defined, actionable TODOs to follow up…

Better Than 'foo'

Published: July 13, 2022 3 min read

There’s almost always a better variable name or value than ‘foo’. It’s useful as a placeholder, but it almost never belongs in production…

Database Migration Checklist

Published: July 11, 2022 • Updated: July 12, 2022 2 min read

Here’s my checklist for a great database migration. A great migration is: Correct Atomic Reversible Consistent with the style of the…

Logging an Object

Published: July 07, 2022 2 min read
  • javascript

When I log a JavaScript value in the console, I generally use an object literal. It’s a little thing with a big cumulative benefit. In this…

Why Ruby?

Published: June 30, 2022 2 min read
  • ruby

Why should someone learn Ruby in 2022? Ruby was my first programming language, and although I’ve drifted elsewhere, I write Ruby every day…

Objects as Props

Published: June 27, 2022 2 min read
  • javascript

A common frontend pattern is to pass an object as a prop. Consider an component that shows a user’s initials. What data should we pass to…

Naive Implementation

Published: June 23, 2022 2 min read

In this post, I’d like to document a technique I’ve used over the years: a naive implementation. A naive implementation takes imperfect…

Authentication vs. Authorization

Published: June 21, 2022 2 min read

Authentication and authorization are two distinct concepts. Yet, I’ve found they’re sometimes used interchangeably. In this post, I’d like…

Spell Check With Vim

Published: June 15, 2022 2 min read
  • vim

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…

How to Write a Perfect Bug Report

Published: June 13, 2022 4 min read
  • debugging

You’re a person who opens bug reports for software engineering teams. Perhaps your bug reports take a long time to resolve, and you’d like…

Make a Prediction

Published: June 08, 2022 2 min read
  • debugging

Imagine you’re debugging, and you’re getting stuck . Everything you try leads to another unexpected result. You can’t predict what’s going…

Desire Paths

Published: June 05, 2022 2 min read

Lately I’ve been thinking about desire paths. We’ve all seen a desire path . They are paths created by erosion from human and animal…

Think Hard

Published: June 01, 2022 • Updated: November 04, 2022 2 min read

This is a response to Ben Kuhn’s ‘Think Real Hard.’ Ben starts by sharing a problem-solving checklist from the scientist Richard Feynman…

PostgreSQL Polymorphism

Published: May 30, 2022 2 min read
  • postgresql

Scenario: you have a record that can belong to one record or another, but not both. But maybe you don’t like the polymorphism provided by…

Goodbye Shared Dotfiles

Published: May 25, 2022 2 min read

A lot of people start programming with shared dotfiles, copied from a team or online. I did. Maybe you’re ready to move on. Why would you do…

Organizing React Components

Published: May 23, 2022 2 min read

You’re creating a React app, and want to organize your components. Or maybe you’re working in a legacy codebase, with many components in one…

On Starting Over

Published: May 18, 2022 2 min read

I used to have a bad habit when working alone: I’d start a feature, begin questioning my progress, and start over from scratch. Sometimes…

Find the Breaking Git Commit

Published: May 17, 2022 3 min read
  • git

Something is broken, you can’t figure out why, and you’re wondering: how and when did this break? Maybe there are a lot of changes to…

Be Fast

Published: May 06, 2022 2 min read

Great programmers can be great because they are fast. I’ve sunk a lot of time into being proficient at Vim. I’ve used it as my text editor…

Commit Part of a File in Git

Published: May 06, 2022 2 min read
  • git

You’ve been working on a big set of changes, and haven’t committed to Git yet. Now, you want to commit some, but not all, changes to a file…

One Way Out of a Function

Published: May 02, 2022 3 min read

A programming style that I like was described to me as: “one way out of a function.” The idea is that early returns cause confusion, and…

Am I Too Old to Become a Programmer?

Published: April 28, 2022 2 min read

“The best time to plant a tree was twenty years ago. The second best time is now.” — Chinese proverb I mentor adults who are learning to…

It's Harder to Read Code Than Write It

Published: April 25, 2022 3 min read

In Things You Should Never Do, Part I , Joel Spolsky narrates Netscape’s ruinous decision to rewrite their browser from scratch. This…

The Limitations of Code Screenshots

Published: April 19, 2022 2 min read

When I’m helping someone debug and they share a screenshot of code, I know that helping them just got harder. A common anti-pattern on sites…

Hash Fetch Instead of If/Else

Published: April 16, 2022 2 min read
  • ruby

Conditional logic has its place, but often there’s a better alternative. Today, we’ll look at a Ruby solution: a hash with . My thanks to…

Get It Working First

Published: April 13, 2022 • Updated: November 21, 2022 3 min read

I recently completed a winter survival course where we built shelters in just ten minutes with only the contents of our packs. The pack I…

My psql Config

Published: April 12, 2022 2 min read
  • postgresql

RC files, thought to stand for “run command” files, are read by a program during startup. The file that configures the PostgreSQL REPL psql…

Exit Vim "Ex" Mode

Published: April 06, 2022 2 min read
  • vim

How does one exit Vim “Ex” mode? But first, how did you get into “Ex” mode? Probably with : If you got into this mode by accident, as I…

How to Read a Stack Trace

Published: April 05, 2022 4 min read
  • debugging

A stumbling block for many people when debugging is reading the stack trace. Today I’d like to discuss this skill. What is a stack trace…

RSpec.describe vs. describe

Published: April 02, 2022 2 min read
  • ruby

RSpec’s block has two common syntaxes. Which should you use? Disclaimer: they both work. But I’m assuming since you’re here, you’re…

Your Demo Doesn't Need Auth

Published: April 01, 2022 2 min read

When building a demo, I believe you often can and should skip authentication. Picture this: a junior engineer or team demoing an MVP. Smart…

The Importance of a Bug

Published: March 30, 2022 3 min read

In today’s post, I want to talk about the importance of a bug. I remember the first bug that I shipped to production. I was upset that I’d…

Learn From It

Published: March 25, 2022 2 min read

You were stuck , and now you aren’t. Congratulations! Before you move on, I think that it’s vital to stop and learn from it. It’s the best…

How to Make Renames Easy

Published: March 22, 2022 3 min read

“There are only two hard things in Computer Science: cache invalidation and naming things.” — Phil Karlton Today I want to talk about re…

How to Read Postgres Docs

Published: March 21, 2022 2 min read
  • postgresql

Have you ever tried to read the documentation for a Postgres command? Although many consider Postgres’ docs best-in-class, they include…

Build

Published: March 16, 2022 2 min read

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…

Try Every OS

Published: March 14, 2022 2 min read

A perennial conversation in code boot camps where I’ve taught: which operating system is the best for web development? I think students see…

How to Make a New Directory and File in Vim

Published: March 11, 2022 2 min read
  • vim

How does one create a new directory and file, without leaving Vim? Assuming you’re running a shell, I would shell out for either of these…

Autoformat Your Code

Published: March 10, 2022 2 min read

Auto-formatting code is good, and you should be doing it all the time. Why? It helps you write better code in real time, it preempts trivial…

Don't Copy-Paste Dotfiles

Published: March 09, 2022 2 min read

A protip for dotfiles/configuration files: don’t add anything to them that you haven’t tried to understand and confirmed you want to have…

How I Review Code

Published: March 06, 2022 4 min read

Code reviews are important on many teams. Do them well, and your code ships quickly and safely. Do them poorly, and your code ships slowly…

How I Make Sure I Understand a Feature Before Building

Published: March 02, 2022 • Updated: July 07, 2022 2 min read

Here’s an idea that’s not ready for programming work: “Let’s add social login to our website.” Same idea, ready for work: “A logged-out…

Don't Stay Stuck

Published: March 01, 2022 2 min read

We’ve all seen this: a frustrated coworker hunched over a computer after hours, flailing alone against some impossible bug. Go home…

Why Vim

Published: February 23, 2022 2 min read
  • vim

I’ve been using, teaching, and stanning Vim since almost the beginning of my programming career. Yet, when asked to explain this preference…

On Disabling Tests

Published: February 22, 2022 • Updated: October 03, 2022 2 min read
  • testing

I want to talk about a common technique: disabling problematic tests to allow a feature to ship. I challenge this practice because I believe…

Count to Ten

Published: February 15, 2022 2 min read

A trick that that has helped me as a programmer: count to ten before killing a process. I learned this in IT. When a screen froze, the IT…

Avoid Similar Variable Names

Published: February 14, 2022 2 min read

A convention I see, particularly in Ruby tests, are variable names like this: Swap these out for and , or and , and you have a very…

Alias Terminal Commands

Published: February 10, 2022 2 min read

Our goals in the terminal should be precision and speed. Speed matters because slow typing is friction between thought and action. Any…

Frozen String Comment: YAGNI

Published: February 09, 2022 4 min read
  • ruby

Open a production Ruby file, and you’ll often see this magic comment at the top. Today I’d like to argue that most Ruby files do not need…

Why I Don't Point Bugs

Published: February 07, 2022 2 min read
  • debugging

I generally don’t add Agile story points to a bug ticket and in this post, I’d like to explain this preference. I’ll cover terminology…

Weekly Summary Technique

Published: February 04, 2022 3 min read

I’ve written a weekly summary for myself and my teams for years. In this post, I’ll explain why I do and how I use this tool. Why Write a…

Opt Into Beta

Published: February 02, 2022 2 min read

Here’s a technique I’ve used on launches: instead of a big scary waterfall, or, in tandem with a phased release, let customers opt into a…

Finding a Mentor

Published: January 31, 2022 3 min read

“How do I find a programming mentor?” Let’s refine the question. What kind of advice do you need? If it’s growing your skills and advancing…

Use a Dev Email

Published: January 29, 2022 2 min read

An engineering technique I recommend: when you sign up for any service, even on a side project that’s just getting off the ground, create an…

Answering Questions on Stack Overflow

Published: January 27, 2022 3 min read

I enjoy answering questions on Stack Overflow . It helps me learn and practice reviewing code. In the beginning, it also unlocked site…

Hard-Code Your Expectations

Published: January 25, 2022 2 min read

Here’s an assertion I see in tests: I push back against code like this because I think that hard-coded expectations are almost always…

Presence is Boolean

Published: January 24, 2022 2 min read

Here’s a problematic pattern I see a lot in frontend code: When you split and in two, it’s very easy to accidentally put the app into…

"I Think That..."

Published: January 19, 2022 2 min read

I think a mark of a mature engineer is having (strong) opinions (weakly held) that you can really articulate. An idea I find useful as an…

Bug Reports are Gold

Published: January 15, 2022 2 min read
  • debugging

Me : Hey, I’m experiencing an issue with your software. Here’s a detailed bug report. SaaS CTO : What you’re describing isn’t possible…

Get Good

Published: October 13, 2021 2 min read

What should you focus on at the beginning of your career? My answer is: being really good at programming. I wish I’d heard this advice…

How to Organize JavaScript Imports

Published: August 30, 2021 • Updated: November 26, 2022 2 min read
  • javascript

The statements at the top of a JavaScript component file can be a confusing, duplicative, churning mess. Is there a way to organize them…

When Should I Not Refactor?

Published: August 26, 2021 2 min read

Refactoring (noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without…

The Tutorial Anti-Pattern

Published: August 24, 2021 3 min read

Here’s a scenario: you’re applying for your first tech job. You’ve found a bunch of tutorials like Rails Tutorial and you’re speeding…

Consultancy Cycles

Published: August 04, 2021 2 min read

This week in conversation I made this argument: Working at a quality software development consultancy like Hashrocket early in your…

Exploring the JWT Sub

Published: April 02, 2021 2 min read

As I explore JSON Web Tokens (JWT; pronounced ‘jot’ if you enjoy correcting people), I’m learning the rules and testing, much like a…

Proxy Pattern

Published: February 26, 2021 2 min read

I had the opportunity recently to implement a simple version of a proxy class. In this post, I’d like to talk about what a proxy class is…

Do the Hard Things First

Published: January 25, 2021 2 min read

“First thing in the morning, eat a live frog, and you can go through the rest of your day knowing the worst is behind you.” — Mark Twain An…

Exercism Raindrops in Python

Published: December 06, 2020 2 min read
  • python

I’ve been learning a bit of Python this Fall to facilitate conversations with a mentee. In this post, I’m going to share the first Python…

Programming Resources for Beginners

Published: December 05, 2020 3 min read

A self-teaching, learning programmer asked me the following question: Can you recommend any resources or sites that you go to with questions…

My Annotated Vimrc

Published: November 26, 2020 4 min read
  • vim

I am obsessed with Vim. Folks who’ve programmed with me, or attended the Vim Chicago Meetup when I was an active organizer, can attest. Vim…

Essays on Programming I Think About a Lot

Published: October 29, 2020 • Updated: November 30, 2022 10 min read

Programming is a game of abstractions, and we programmers traffic in ideas. When I find an idea that resonates with me, I tend to think…

My Development Roadmap

Published: October 20, 2020 4 min read

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…

You Have New Mail

Published: October 16, 2020 2 min read

Here’s a familiar scenario: you open a new terminal, and before the prompt appears, you see the following. You have new mail. What’s going…

Printing Code on a Mac

Published: October 13, 2020 2 min read
  • til

A few times over the years, I’ve had to print out code that I’ve written onto physical paper. I have heard that some teams do team code…

Restore a Heroku Database Locally

Published: October 11, 2020 2 min read
  • postgresql

Sometimes a post is just for me, and this is likely one of those posts. Several of my open source projects run on Heroku, and I often want…

Duplicate your Development Branch for QA

Published: October 09, 2020 2 min read
  • git

I’m working on a team where we keep a clone of the branch (the main place where work is done), used to deploy to a QA environment. The…

How I Clean Up JavaScript Dependencies

Published: August 03, 2020 2 min read
  • javascript

Unused dependencies are bad: they increase the size of your project, slow down your processes, require upgrades, and send incorrect messages…

Introducing React Explained

Published: June 12, 2020 2 min read

Today, I’d like to introduce my newest project, a free weekly newsletter for React learners called React Explained . 🎉 For as long as…

South Dakota v. Wayfair, Technology, and Your Business

Published: May 07, 2020 2 min read

Today I published a post on the Hashrocket blog titled ‘South Dakota v. Wayfair, Technology, and Your Business’. It covers a unique…

WebAssembly: The Next Language of the Web

Published: January 30, 2020 2 min read

Interested in WebAssembly? At Hashrocket’s Winter Miniconf 2020, I presented my personal one-month audit of this emerging technology. Please…

Searching with Ripgrep

Published: December 30, 2019 2 min read

I’ve been using Ripgrep on my work machine, and for pure performance, it’s tough to beat. Here are two mappings I’ve set up to replace…

A Different Language

Published: October 12, 2019 2 min read

When people who don’t code listen to programmers talk about code, something they say is that it sounds we’re “speaking a different language…

Technologist Reading List

Published: September 28, 2019 3 min read

“Not all readers are leaders, but all leaders are readers.” –Harry S. Truman It’s been said that most programmers read less than one…

Intro to TDD

Published: September 11, 2019 2 min read

If one wanted to learn Test-Driven Development, AKA TDD, in 2019, where should they start? It’s worth mentioning first that there are…

How to Prepare for a Technical Interview

Published: August 06, 2019 2 min read

Today, I published a post on the Hashrocket blog about interviewing. It’s called How to Prepare for a Technical Interview . Interviewing is…

Pangram in TypeScript

Published: July 29, 2019 2 min read
  • typescript

I’ve been doing Exercism’s TypeScript exercises, and wanted to share some of my early solutions. A pangram is a sentence that contains each…

Clone All of an Organization's Git Repos

Published: June 11, 2019 2 min read
  • git

Today, using parts of this Gist I found a command to clone all the repos in a Github organization. Here it is, tested on Ruby 2.3: Change…

Neural Networking for Complete Sentences

Published: May 19, 2019 2 min read

This week I wrote a bit of neural networking code for the first time. It utilizes Brain.js to try and recognize if a sentence is…

Interview: Jeremy Huffman, Dialyxir

Published: April 11, 2019 2 min read
  • elixir

Today, I published a post on the Hashrocket blog presenting a recent interview I conducted. It’s titled Interview: Jeremy Huffman, Dialyxir…

Planning Poker: Speed Mode

Published: April 09, 2019 2 min read

Today, I published a post on the Hashrocket blog about rapidly assigning points in a story estimation workflow. It’s titled Planning Poker…

Pick a Good Name

Published: March 08, 2019 2 min read

Last week, I published a post on the Hashrocket blog about choosing good names for things in software. It’s called Pick a Good Name…

Use Yarn Like a Pro

Published: February 23, 2019 2 min read
  • javascript

Last week, I published a post on the Hashrocket blog about my favorite JavaScript package manager, Yarn. It’s called Use Yarn Like a Pro…

Generate Images for Instagram

Published: February 05, 2019 2 min read

Today I released a post on the Hashrocket blog, Generate Images for Instagram . It documents a project I made to generate Hashrocket…

Adventures in Mentorship

Published: January 03, 2019 2 min read

This fall, I participated in the formal mentorship program at the Code Platoon bootcamp here in Chicago, and I wrote about the experience…

Avoiding Code Catastrophes

Published: December 04, 2018 2 min read

Last week, I published a Hashrocket blog post for junior developers, addressing a question I’ve been asked a few times. It’s called…

Reflecting on 50 Days of Code

Published: October 31, 2018 2 min read

Recently, I hit Day 50 of the ‘100 Days of Code’ challenge. I’ve been focused on language design, and I’d like to pause and reflect on that…

JavaScript Equality

Published: July 17, 2018 2 min read
  • javascript

A few weeks ago, I built an app with React.js and create-react-app that I call ‘JavaScript Equality’. View deployment here . This…

mgrim: Everything Updated All The Time

Published: July 11, 2018 2 min read
  • git

My current favorite command line alias is , composed of four other aliases: Here’s what this does (starting from a feature branch…

Comprehensive Instructions

Published: July 09, 2018 2 min read

A user opened an issue in Tilex last week that I spent a significant amount of time thinking about and talking about (thanks JB) before…

Autoformat Elixir on Buffer Write

Published: February 17, 2018 2 min read
  • elixir
  • vim

I’ve been working with the Elixir 1.6 autoformatter a lot this year. Part of that journey was adding the following to my local Vim…

The Universal Programming Language

Published: September 17, 2017 2 min read

Recently I tried to answer a question that is common when talking about software. I’ll paraphrase: Why can’t there be an “universal…

How I Talk: My Guide to Tech Public Speaking

Published: August 10, 2017 10 min read

I’ve been giving technical talks for a few years; I keep a list of each one here . Speaking makes me nervous, and it’s a major time…

It's Done

Published: July 19, 2017 2 min read

When a stakeholder asks for a change to the software we’re developing, my standard response is, roughly: “Sure thing.” Then later: “I’m…

Don't Build Every Feature

Published: June 20, 2017 2 min read

Mold clay to form a bowl; it is the empty space which makes the bowl useful. –Tao Te Ching There’s a detail about Today I Learned some…

Work Small

Published: June 11, 2017 2 min read

Write programs that do one thing and do it well. –The Unix Philosophy I believe in working small. I love small Git commits and pull requests…

Tilex Progress

Published: June 06, 2017 2 min read
  • elixir

First, some background . Tilex, our Phoenix port of Today I Learned , is coming really well. After a personal hiatus for RailsConf prep, I…

Binary to Decimal Conversion in Ruby

Published: May 04, 2017 2 min read
  • ruby

This week I wrote a small algorithm in Ruby to convert binary numbers into decimal numbers. Here’s the problem description, from Exercism…

You Should Blog

Published: February 11, 2017 3 min read

I created this blog to reflect on my code and development as a programmer. In that spirit, I’d like to make a pitch to anybody reading: you…

Reset an Ecto Heroku Postgres Database

Published: January 08, 2017 2 min read
  • elixir
  • postgresql

We introduced some breaking database changes to our Phoenix port of Today I Learned on Friday; today I deployed them to staging…

Adding jQuery to Phoenix

Published: January 06, 2017 2 min read
  • elixir
  • javascript

We’ve been building a Phoenix application lately; here’s the backstory . Today I stared porting the Sprinkles of JavaScript ™ to our…

Vim Nonrecursive Mappings

Published: December 17, 2016 2 min read
  • vim

My first PR to a new Vim plugin was merged this week, check it out . For context, vim-termbux is a plugin by my friend Dillon Hafer that…

Porting TIL from Rails to Phoenix: Initial Commits

Published: November 29, 2016 2 min read
  • elixir
  • ruby

Last week, I started a new project: porting Today I Learned from Ruby on Rails to Phoenix (Elixir). The first few commits were pair…

Gold Master Testing: An Introduction

Published: October 26, 2016 2 min read

What is a Gold Master test? The idea is that you write a unit test that takes a known set of data (for instance, a production dump), feeds…

Hamming Distance in Elixir

Published: September 12, 2016 2 min read
  • elixir

Today I solved the Exercism Hamming Distance problem in Elixir. Problem Description From Exercism: Write a program that can calculate the…

Sum of Multiples in Elixir

Published: August 27, 2016 2 min read
  • elixir

Today I solved Exercism’s Sum of Multiples problem. Here’s the description of the task: Write a program that, given a number, can find the…

Run Length Encoding in Elixir

Published: July 31, 2016 4 min read
  • elixir

I’ve been working through the Elixir challenges on Exercism.io , to learn the language in the same way James Edward Gray recently attempted…

Learn to Test

Published: July 15, 2016 2 min read

What is one skill I could learn to set myself apart from other apprentice candidates? Testing. The web frameworks of today all have mature…

Why Elixir?

Published: July 06, 2016 2 min read
  • elixir

I’ve been learning and using Elixir lately, and loving it. More than once, I’ve been asked some version of the question: why are you…

Writing Elixir Sigils

Published: July 04, 2016 2 min read
  • elixir

Sigils are a mechanism for working with textual representations in Elixir. If you’ve ever made an array of Strings in Ruby with , the API…

How and Why to Squash Your Pull Request

Published: July 03, 2016 5 min read
  • git

Most pull requests go through a cycle like this: Programmer opens pull request Maintainer gives feedback Programmer makes changes Repeat #…

Recreating Elixir's Enum.sum

Published: June 30, 2016 2 min read
  • elixir

I’m learning Elixir, and today as an exercise, I was challenged to recreate using recursion. For those new to the language, iterates…

Server Side Sorting in Ruby

Published: June 28, 2016 2 min read
  • ruby

Recently a friend asked me this question about server-side sorting in Rails: I’m working on an app that displays movies. The index page…

Are Web Development Jobs Stable?

Published: June 10, 2016 2 min read

Original post: https://www.quora.com/Are-web-development-jobs-stable/answer/Jake-Worth Yes, as stable as any other job. If you look at…

Reflecting on 60 Days 60 Contributions

Published: May 18, 2016 2 min read

For the next 58 days, I’m conducting a personal challenge to get more involved in the open source software community. It’s called ‘60 Days…

Keyword, Match, and Region in VimScript

Published: April 21, 2016 2 min read
  • vim

After a recent talk I gave that included VimScript, an attendee asked a question about the differences between , , and following in a…

Career Interview Questions

Published: April 16, 2016 4 min read

I was interviewed for a high school career day recently, and thought it would be fun to share my answers here: Please describe your current…

Vim Buffer Problem

Published: March 07, 2016 2 min read
  • vim

A few weeks back I tackled the following programming challenge: Vim Buffer: I open up a new Vim buffer and type all the numbers 1 to 10,00…

From One End to the Other in Ruby

Published: March 06, 2016 2 min read
  • ruby

A while back I tackled the following programming challenge: From One End to the Other: Find the smallest possible (positive) integer that…

LED Clock in Ruby

Published: March 06, 2016 2 min read
  • ruby

A few weeks ago I attempted to solve a programming challenge that was described as such: LED Clock: You are (voluntarily) in a room that is…

Round Robin Problem in Lua

Published: March 06, 2016 2 min read

A while ago, I solved the following programming challenge: Round Robin: Given 3 Teams (A, B, C), we want to organize a tournament schedule…

Three Years Programming

Published: November 04, 2015 2 min read

This month marks three years since I started programming; I’d like to take a minute and reflect on this milestone. Programming is Awesome…

Silver Searcher RDoc Support

Published: October 31, 2015 2 min read
  • ruby

Today I submitted my first pull request to The Silver Searcher project: https://github.com/ggreer/the silver searcher/pull/782 Silver…

Tmux List Sessions

Published: October 13, 2015 2 min read
  • tmux

Today while hacking on Rails I stumbled upon the Tmux ‘list sessions’ command. (where is your Tmux leader) opens a list of all your Tmux…

Rails Action Name Method

Published: October 07, 2015 2 min read
  • ruby

Today I was trying to control what rendered on a page based on which controller action called it, and discovered the method. It’s located…

ActiveRecord After Commit Callback

Published: October 05, 2015 2 min read
  • ruby

Today I used a pretty awesome Rails callback, . executes after a database transaction completes, making it ideal for third-party…

Remarkovable

Published: October 04, 2015 2 min read

I made a new gem today, called Remarkovable . The source code is here: https://github.com/jwworth/remarkovable This gem extracts the Markov…

FileUtils For All

Published: October 01, 2015 2 min read
  • ruby

A step in the Ruby deploy scripts for one of my projects shells out as such: . This prevents all design artifacts from going out with the…

Ceramic Nation

Published: September 11, 2015 2 min read

Last night I built a Markov-powered generated novel, called Ceramic Nation . It’s wrapped as a robot named Ellis Champlin, who is…

The N + 1 Problem

Published: February 22, 2015 2 min read

Recently, I was thinking about the N + 1 problem. N + 1 is a performance issue in a web application, where a method call unleashes a torrent…

Learning to Program as a Career Change

Published: January 22, 2015 6 min read

A few years ago, I wrote my first computer program. It was a line of JavaScript that printed my name on the screen, using the website…

Ruby Symbol#to_proc

Published: October 31, 2014 2 min read
  • ruby

Explore a Rails app, and you might see something like this: What is that , you might be wondering? It’s shorthand for this: Often in Ruby…

Reflecting on 30 Days of Vim

Published: September 23, 2014 2 min read
  • vim

It’s been a month since I started using Vim full-time; it’s time to reflect. To summarize, Vim is awesome, because it is fast, endlessly…

Code Club: Rack and Rails Server

Published: August 27, 2014 2 min read
  • ruby

This week in Code Club we explored Rack, the middleware of the Rails stack. Rack is newsworthy of late due to a change in ownership…

Vim Cheat Sheet

Published: August 22, 2014 2 min read
  • vim

The Vim adventures continue. Today I started reading through the ‘help’ section, which is vast and full of surprising ideas. Starting to…

Vim or Bust

Published: August 20, 2014 2 min read
  • vim

Starting with this blog post, I will be using Vim as my primary text editor. When I started programming, I was on a Windows machine. I used…

Heroku PGBackups Testing

Published: August 06, 2014 5 min read
  • postgresql

We recently moved some of our environments, including their PostgreSQL databases, to Heroku. Heroku differs from a basic Linux server in…

Mass-Opening Like Files in a Directory

Published: May 08, 2014 2 min read

The Unix command line is powerful. Before doing anything in a GUI, I usually first try to see if it can be done in the command line. Often…

RailsConf 2014 Wrap-Up

Published: April 30, 2014 2 min read
  • ruby

I just returned from Rails Conf 2014 here in Chicago. This was my first conference as a developer, and my first time being immersed in the…

Save a Command's Output to a File

Published: April 09, 2014 2 min read

One tool that I love allows you to take the output of a terminal command and save it in a file. That command is: An example: This runs the…

One Monitor

Published: March 31, 2014 2 min read

I have one computer monitor on my desk. Not long ago ago, this was the norm for everybody, but today, I am the only person in my office who…

Hello World!

Published: February 09, 2014 2 min read

I’ve been writing code for a few years now, and am proud to be launching my own developer’s blog. The developer’s blog is a time-honored…

© 2022 Jake Worth.