Blog of Jake Worth, software engineer in Maine.
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…
An idea I find useful as an individual contributor is starting my consulting with this phrase: “I think that…“. The idea is to let your…
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…
JavaScript imports can be a confusing, churning mess. In this post, I’d like to share the way I handle this part of writing JavaScript. Why…
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…
Here’s my weekly review. Previous Action Items None; I haven’t done a review in a while. It’s good to be back. What Went Well 🎉 This week I…
This week I’ll be using a weekly standup format: what I did this week, what I plan to do next week, and issues I’m encountering. This Week…
Opening Thought “Don’t look for the next opportunity. The one you have in hand is the opportunity.” —Paul Arden Consistency Was I consistent…
I took last week off. Here’s my weekly review; I’m borrowing Ben Kuhn’s format. Check out his blog– it’s amazing. Opening Thought “Our…
Here’s my review for this week. Previous Action Items None. What Went Well My pair and I ended a client engagement we’d been on for almost a…
As I explore JSON Web Tokens (JWT; pronounced ‘jot’ if you enjoy correcting people), I’m learning the rules and testing, much like a…
Here’s my weekly review for this week. “Regardless of what we discover, we understand and truly believe that everyone (especially Jake…
I’ve decided to resume the ‘weekly review’ practice that was a part of this blog for some weeks back in 2015. My goal will be to talk about…
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…
Today I read some technical blog posts that caught my eye over the week. Here’s a summary of each. Beyond Console Log : a breakdown of some…
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…
Not long ago I created a new Ruby on Rails web application using the Rails 5.1.3 release. Our goal was a Rails API supporting a React.js…
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…
Today I am pleased to share my first post in the Semaphore community, available here . This is a republication of a post from the…
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…
Pausing to verbalize, examine, and reject faulty assumptions should be one of the first steps in any debugging process. One feature of an…
Last week, I started a new project: porting Today I Learned from Ruby on Rails to Phoenix (Elixir). The first few commits were pair…
I’ve been researching, thinking about, and preparing to write a Gold Master test recently. Here’s an overview of the technique from the…
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 a question about sorting in Rails, and I thought I’d share my answer here: I’m working on an app that displays…
Original post: https://www.quora.com/What-is-the-best-way-to-learn-rails/answer/Jake-Worth Assuming you are interested in learning on your…
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 while ago, I solved the following programming challenge: Round Robin: Given 3 Teams (A, B, C), we want to organize a tournament schedule…
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…
This week I hit 40 days of consecutive daily open source pushes to Github, besting my previous record of 18 days. It’s been an insightful…
This week I created a new project on Github, ‘Resources’, available here: https://github.com/jwworth/resources ‘Resources’ is a collection…
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…