Back to Blog

The Programming Language That Finally Made It Click

DHH's Journey from Failed Attempts to Revelation

8 min readLessons from DHH
++

Full disclosure: This post was written by a human (me), polished by an AI (it fixed my grammar and made me sound smarter), then reviewed by me again (to make sure the AI didn't make me sound too smart). Any remaining errors are 100% organic, artisanal, human-made mistakes.

Before DHH created Rails and changed web development forever, he was a teenager in Denmark repeatedly failing to learn programming. His story isn't one of natural talent—it's one of finding the right door after banging on many wrong ones.

The Failed Attempts

DHH shared his programming origin story with Lex Fridman, and it's refreshingly honest about early failures:

Amstrad 464

His first computer came with BASIC, but the connection between typing commands and creating something meaningful never clicked. The feedback loop was too abstract.

EasyAMOS

A game-creation language for the Amiga. Sounded perfect for a teenager who loved games. But it was still too disconnected from immediate results.

Assembly Language

The demo scene was big in Europe, and creating impressive visual effects required assembly. DHH tried to learn it but bounced off hard. Too low-level, too unforgiving, too disconnected from what he actually wanted to create.

Key insight: DHH—who would go on to create one of the most influential web frameworks ever—repeatedly failed to learn programming as a teenager. The problem wasn't talent. It was finding the right entry point.

Then HTML Changed Everything

"The moment I realized 'I can make text blink!'—that was it. That was the moment programming clicked. I could do something, see the result immediately, and iterate."

— DHH on Lex Fridman Podcast

HTML in the mid-90s was primitive. The <blink> tag is now a joke. But for a teenage DHH, it was a revelation. Write some text, save, refresh the browser, see the change. Immediate. Tangible. Real.

From HTML, he moved to PHP—another language often mocked by "serious" programmers. But PHP's superpower was the same: immediate feedback. Write code, hit refresh, see the result. No compilation. No configuration. No waiting.

<!-- The magic of immediate feedback -->
<html>
<body>
  <h1>Hello World!</h1>
  <blink>I made this!</blink>

  <?php
    // Add some PHP, refresh, see results
    echo "The date is: " . date("Y-m-d");
  ?>
</body>
</html>

<!-- Save, refresh, immediate gratification -->

The Power of Immediate Feedback

DHH's story reveals something crucial about learning: immediate feedback is everything. When there's a short loop between action and result, learning accelerates. When there's a long delay, motivation dies.

Long Feedback Loop

  • • Write code
  • • Configure build system
  • • Wait for compilation
  • • Debug cryptic errors
  • • Run executable
  • • See result (maybe)
  • → Minutes to hours

Short Feedback Loop

  • • Write code
  • • Save file
  • • Refresh browser
  • • See result immediately
  • → Seconds

This is why web development has always been a great entry point for programmers. It's why tools like CodePen, Replit, and JavaScript consoles are so effective for learning. The faster the feedback, the faster the learning.

The 14-Year-Old BBS Operator

Once programming clicked, DHH went all in. At 14, he was running a bulletin board system from his bedroom in Copenhagen with three telephone lines. He built gaming review websites. He created communities.

The key wasn't that he suddenly became brilliant—it's that he found a domain where his efforts produced visible, shareable results. He could build something, show it to people, and see their reactions. That external validation loop reinforced the internal feedback loop.

The compounding effect: Immediate feedback → visible results → external validation → increased motivation → more practice → faster improvement → bigger projects → more validation...

Lessons for Learning (and Teaching) Programming

For Learners

  • Don't blame yourself for bouncing off languages — DHH failed multiple times before finding his path. The problem might be the entry point, not you.
  • Seek immediate feedback — Start with web development, interactive environments, or REPLs. Avoid complex build systems initially.
  • Build things you care about — DHH cared about games and communities. Find your domain and program toward it.
  • Share your work — The external feedback loop accelerates learning.

For Teachers

  • Minimize time to first result — Get students seeing output in minutes, not hours.
  • Start with visual feedback — Web pages, games, graphics. Things students can see and share.
  • Don't gatekeep with "real" programming — HTML, CSS, and JavaScript aren't lesser—they're accessible entry points.
  • Celebrate the blink tag moments — That first working thing matters more than its sophistication.

Find Your Blink Tag

DHH's story reframes how we think about programming aptitude. It's not about raw intelligence or mathematical ability. It's about finding the right entry point—the moment where effort translates into visible results.

For DHH, it was HTML and the blink tag. For you, it might be a React component, a Python script that processes your photos, or a JavaScript animation. The specific technology doesn't matter. What matters is the feeling: "I made this, and I can see it."

If you're struggling to learn programming, you haven't found your blink tag yet.

Keep trying different approaches. Lower the barrier to seeing results. Find the feedback loop that keeps you coming back. The creator of Rails bounced off programming three times before it clicked. Your breakthrough might be one experiment away.