Blog of Jake Worth, software engineer in Maine.
When testing user input or data presentation, I prefer using realistic rather than random data. This might sound obvious, but it’s something…
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…
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…
My development environment depends on several processes running. Here’s how I’ve scripted this setup. Whenever I boot up, I need at least…
Perhaps you’re familiar with this scenario: you’re debugging and you’re stuck . You’ve Googled and read some blog posts, Stack Overflow…
Agile retrospectives should produce many action items. What Are Action Items? Action items are small, defined, actionable TODOs to follow up…
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…
Here’s my checklist for a great database migration. A great migration is: Correct Atomic Reversible Consistent with the style of the…
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 should someone learn Ruby in 2022? Ruby was my first programming language, and although I’ve drifted elsewhere, I write Ruby every day…
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…
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 and authorization are two distinct concepts. Yet, I’ve found they’re sometimes used interchangeably. In this post, I’d like…
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…
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…
Imagine you’re debugging, and you’re getting stuck . Everything you try leads to another unexpected result. You can’t predict what’s going…
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…
This is a response to Ben Kuhn’s ‘Think Real Hard.’ Ben starts by sharing a problem-solving checklist from scientist Richard Feynman…
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…
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…
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…
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…
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…
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…
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…
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…
“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…
In Things You Should Never Do, Part I , Joel Spolsky narrates Netscape’s ruinous decision to rewrite their browser from scratch. This…
When I’m helping someone debug and they share a screenshot of code, I know that helping them just got harder. A common antipattern on sites…
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…
I recently completed a winter survival course, where we had to a build a shelter with just the contents our packs, in ten minutes…
RC files, thought to stand for “run command” files, are read by a program during startup. The file that configures the PostgreSQL REPL psql…
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…
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’s block has two common syntaxes. Which should you use? Disclaimer: they both work. But I’m assuming since you’re here, you’re…
When building a demo, I believe you often can and should skip authentication. Picture this: a junior engineer or team demoing an MVP. Smart…
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…
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…
“There are only two hard things in Computer Science: cache invalidation and naming things.” — Phil Karlton Today I want to talk about re…
Have you ever tried to read the documentation for a Postgres command? Although many consider Postgres’ docs best-in-class, they include…
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…
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 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…
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…
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…
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…
Not ready for work: “Let’s add social login to our website”. Ready for work: “Logged-out customer sees Google login button,” with detailed…
We’ve all seen this: a frustrated coworker hunched over a computer after hours, flailing alone against some impossible bug. Go home…
I’ve been using, teaching, and stanning Vim since almost the beginning of my programming career. Yet, when asked to explain this preference…
I want to talk about a common technique: disabling problematic tests to allow a feature to ship. I challenge this practice because I believe…
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…
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…
Our goals in the terminal should be precision and speed. Speed matters because slow typing is friction between thought and action. Any…
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…
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…
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…
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…
“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…
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…
I enjoy answering questions on Stack Overflow . It helps me learn and practice reviewing code. In the beginning, it also unlocked site…
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…
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 a mark of a mature engineer is having (strong) opinions (weakly held) that you can really articulate. An idea I find useful as an…
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…
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…
Is there a way to organize JavaScript import statements that makes sense? Perhaps you have a large component with a ton of imports, and they…
Refactoring (noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without…
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…
This week in conversation I made this argument: Working at a quality software development consultancy like Hashrocket early in your…
As I explore JSON Web Tokens (JWT; pronounced ‘jot’ if you enjoy correcting people), I’m learning the rules and testing, much like a…
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…
“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…
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…
A self-teaching, learning programmer asked me the following question: Can you recommend any resources or sites that you go to with questions…
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…
Programming is a game of abstractions, and we programmers traffic in ideas. When I find an idea that resonates with me, I turn into an…
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…
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…
A few times over the years, I’ve had to print out code that I’ve written onto physical paper. I have actually heard that some teams do team…
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…
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…
Unused dependencies are bad: they increase the size of your project, slow down your processes, require upgrades, and send incorrect messages…
Today, I’d like to introduce my newest project, a free weekly newsletter for React learners called React Explained . 🎉 For as long as…
Today I published a post on the Hashrocket blog titled ‘South Dakota v. Wayfair, Technology, and Your Business’. It covers a unique…
Interested in WebAssembly? At Hashrocket’s Winter Miniconf 2020, I presented my personal one-month audit of this emerging technology. Please…
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…
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…
“Not all readers are leaders, but all leaders are readers.” –Harry S. Truman It’s been said that most programmers read less than one…
If one wanted to learn Test-Driven Development, AKA TDD, in 2019, where should they start? It’s worth mentioning first that there are…
Today, I published a post on the Hashrocket blog about interviewing. It’s called How to Prepare for a Technical Interview . Interviewing is…
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…
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…
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…
Today, I published a post on the Hashrocket blog presenting a recent interview I conducted. It’s titled Interview: Jeremy Huffman, Dialyxir…
Today, I published a post on the Hashrocket blog about rapidly assigning points in a story estimation workflow. It’s titled Planning Poker…
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…
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…
Today I released a post on the Hashrocket blog, Generate Images for Instagram . It documents a project I made to generate Hashrocket…
This fall, I participated in the formal mentorship program at the Code Platoon bootcamp here in Chicago, and I wrote about the experience…
Last week, I published a Hashrocket blog post for junior developers, addressing a question I’ve been asked a few times. It’s called…
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…
A few weeks ago, I built an app with React.js and create-react-app that I call ‘JavaScript Equality’. View deployment here . This…
My current favorite command line alias is , composed of four other aliases: Here’s what this does (starting from a feature branch…
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…
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…
Recently I tried to answer a question that is common when talking about software. I’ll paraphrase: Why can’t there be an “universal…
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…
When a stakeholder asks for a change to the software we’re developing, my standard response is, roughly: “Sure thing.” Then later: “I’m…
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…
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…
First, some background . Tilex, our Phoenix port of Today I Learned , is coming really well. After a personal hiatus for RailsConf prep, I…
This week I wrote a small algorithm in Ruby to convert binary numbers into decimal numbers. Here’s the problem description, from Exercism…
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…
We introduced some breaking database changes to our Phoenix port of Today I Learned on Friday; today I deployed them to staging…
We’ve been building a Phoenix application lately; here’s the backstory . Today I stared porting the Sprinkles of JavaScript ™ to our…
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…
Last week, I started a new project: porting Today I Learned from Ruby on Rails to Phoenix (Elixir). The first few commits were pair…
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…
Today I solved the Exercism Hamming Distance problem in Elixir. Problem Description From Exercism: Write a program that can calculate the…
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…
I’ve been working through the Elixir challenges on Exercism.io , to learn the language in the same way James Edward Gray recently attempted…
What is one skill I could learn to set myself apart from other apprentice candidates? Testing. The web frameworks of today all have mature…
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…
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…
Most pull requests go through a cycle like this: Programmer opens pull request Maintainer gives feedback Programmer makes changes Repeat #…
I’m learning Elixir, and today as an exercise, I was challenged to recreate using recursion. For those new to the language, iterates…
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…
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…
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…
After a recent talk I gave that included VimScript, an attendee asked a question about the differences between , , and following in a…
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…
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…
A while back I tackled the following programming challenge: From One End to the Other: Find the smallest possible (positive) integer that…
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…
A while ago, I solved the following programming challenge: Round Robin: Given 3 Teams (A, B, C), we want to organize a tournament schedule…
This month marks three years since I started programming; I’d like to take a minute and reflect on this milestone. Programming is Awesome…
Today I submitted my first pull request to The Silver Searcher project: https://github.com/ggreer/the silver searcher/pull/782 Silver…
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…
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…
Today I used a pretty awesome Rails callback, . executes after a database transaction completes, making it ideal for third-party…
I made a new gem today, called Remarkovable . The source code is here: https://github.com/jwworth/remarkovable This gem extracts the Markov…
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…
Last night I built a Markov-powered generated novel, called Ceramic Nation . It’s wrapped as a robot named Ellis Champlin, who is…
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…
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…
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…
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…
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…
The Vim adventures continue. Today I started reading through the ‘help’ section, which is vast and full of surprising ideas. Starting to…
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…
We recently moved some of our environments, including their PostgreSQL databases, to Heroku. Heroku differs from a basic Linux server in…
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…
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…
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…
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…
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…