Without Software Technique, Nothing Works


You know what the code needs to do, in that ugly moment. You can see it in your mind… And it’s just… NOT… doing it. You wrote a loop, and it’s wrong, and you know it’s wrong. You can explain the right code. You just can’t write the right code.

That blinking cursor is mocking you.

What doesn’t fix that problem? Learning more algorithms. Or reading more blog posts. Or more books. Even if you learn all the math and computer science, there’s a specific technique to writing code, and all the study in the world doesn’t give it to you.

What does? Practice.

The right kind of practice. Conscious, mindful practice done well.

When everything works, you can just write out the loop. It’s straightforward. You pick up a simple problem and twenty minutes later, your solution is finished and it works.

How Do I Know if My Practice Is Good?

Without the right practice the computer does what you tell it to, not what you want it to.

What Is It Like to Be an Expert Senior Coder?

When you’re really good, you can just predictably write the code. You don’t wait for inspiration. You just do it.

When a problem comes up at work and a prototype would show the right answer? You can just write one. Need to verify a design choice or test out a data architecture? Boom, do it.

How do you get that good? The right kind of practice.

What’s the right kind of practice? That’s what this book is about.

But I Already Do Coding Exercises!

Yeah, you do. Me too. And they require somebody to have worked them out in advance. But they really only work once for each exercise, so you constantly need new ones. And you can’t tell in advance if the one you’ve found is any good. You hope you’re getting Sandi Metz’s “99 Bottles of OOP,” but usually you’re getting the “Coding Challenge of the Week” to do some little math problem. There’s a reason 99 Bottles costs money - I can’t name a second set of exercises that good. Can you?

You need practice that you can just do right now without hoping Google will be your tutor.

Exercises are fine. But the magic happens when you stop doing somebody else’s exercise and you do the things you care about, that give you the skills you want. That’s the whole purpose.

But I Practice At Work!

Yeah, you do. I do too. And your coworkers argue constantly about what project to do, and what language or tool to use for it.

That’s because the kind of work the business wants is different from the kind of work that makes you better, faster. And the kind of work you need is different from the kind of work that other developers need.

If your job was going to give you the right practice, you’d have to win those arguments. You would have to get good at politics, to win those arguments, to get the kind of practice you need… And you’ll always worry that you’re doing worse work for the business because you’re prioritising your learning over their money.

I don’t want to spend my time at work winning at politics. Do you?

There’s a way around that.

Heck, if you tell your employer you’re buying this book to get better at coding, they will probably be thrilled to pay for it. Do you know how much it costs them when you get stuck for a couple of days? I sell a lot of books that employers cheerfully pay for. Businesses like it when their employees get better at coding.

But How Does a Book Do That?

I’ve written blog posts and spoken at RubyConf on this topic. The short version is that there are some excellent exercises I’ve adapted from non-computer disciplines. They’re not common for software yet, but they really should be - I hope in a few years they’ll be common.

The book introduces a type of programming exercise that doesn’t require an expert to set it up for you. I call my version a “Coding Study.” It can be used with any computer language or library you like. It works great alone or pairing. There are simple steps to start a coding exercise on any topic. I also give guidelines, examples and advice so you can learn even more rapidly.

Then you have to practice a lot. But you’ll learn faster than you could without coding studies. The book can only tell you how to practice.

Don’t buy the book if you’re not planning to do the exercises.

What If It Doesn't Work?

If you do the exercises and you don’t improve rapidly, you should ask for a full refund. I sell through Gumroad, which makes refunds quite easy, and I’m happy to do it. If you don’t improve, I don’t want your money.

If you can write basic code in a language of your choice, the book isn’t too advanced for you. It’s not likely to be too simple for you — I use this technique with great success and I’ve been a professional programmer for around 30 years.

The code samples are in Ruby. If looking at Ruby makes you itch, the book may not be right for you. But the Ruby code is not particularly complicated.

I assume you want to get better at the skill of coding. This isn’t guaranteed to get you a job, teach you algorithm design or help you with interviewing. Those are different skills. Being better at coding may help your career — or it may not. I get better at coding because I love it, and I advance in my career even though sometimes I hate it. They’re different.

What's In the Book?

Here’s a current (April 2020) table of contents. This will expand as the book does. The book currently weighs in at 84 pages, but you should expect it to expand to more like 125 by the time it’s content-complete. That should be around June/July of 2020. There may be some additional time before final polish is done (e.g. editing and visual improvement.)

  • Is This the Right Book?
    • Why This Book?
    • Am I Advanced Enough for This Book? Or Too Advanced?
    • Who Am I?
    • Why Ruby?
    • “Coding”
  • Easy Pieces and Fast Examples
    • Tool, Task, and Purpose
    • The First Example
    • What was the Point?
    • Code Inspired by Observing the Real World
    • A Simple Coding Study: A Field of Mushrooms
    • But What is a Coding Study?
  • Another Example
    • The Merry-Go-Round
  • Anatomy of a Coding Study
    • Tools
    • Tasks
    • Purposes
    • Guidelines for Coding Studies
    • Pick Your Tools, Your Task and Your Purpose
    • Pick a Time Limit
    • When You’re Done, Throw It Away
    • Study One Idea at Once
    • Start Simple, Build in Layers
    • Actually Examine a Real-World Thing
    • Break Rules
  • Choose a Task and Purpose
    • Choosing a Task: “Meh, I Should Practice”
    • Choosing a Task: “That One Was Pretty Good”
    • Choosing a Task: “I Want to Learn This Tool”
    • Choosing a Task: “I Want to Improve as Fast as Possible”
    • Choosing a Purpose: “Who Do I Want to Be Like?”
    • Choosing a Purpose: “What Am I Avoiding?”
    • Choosing a Purpose: “What Weird Thing Might Work?”
    • Choosing a Purpose: Playful Simulation
  • Coding Studies from Life: Another Example
    • Looking Around the World
  • Pairing and Coding Studies
    • Pair on Defining the Study, Not Just Coding
    • Start “Flat-Footed”
    • Brainstorm Together Before Typing
    • One Person on the Keyboard at Once
    • Do Something Small, Then Swap Roles or Restart
    • It’s What You Think It Is
  • Useful Failure: An Example
    • First, Simplicity
  • Questions and Worries
    • How Big Must a Study Be?
    • Must I Throw Away the Result?
    • Why Are My Studies Taking So Long?
    • If I Always Throw Code Away, Won’t I Learn Bad Habits?
    • Do I Always Need to Change Anything?
    • Won’t I Learn the Most By Changing Everything?
    • What About Performance?
    • Why Study the Real World?
    • A Different Direction
    • Do I Have to Start a Company?
  • A Course of Study
    • Susan the Mentor
    • GeePaw Hill
    • Repeated Timeboxes
  • Learning from Artists
    • What is an Artist’s Life Study?
    • Why Do We Care? Complexity…
    • Your Brain is a Complexity Summariser
    • On Software and Art Education
    • About Your Worst Enemy: Being “Serious”
  • Acknowledgements
  • Can I Get Better Without Doing All Those Exercises?

    If you’re not going to do the exercises, please don’t buy the book. It really doesn’t work without that step.

    If you do a few of the exercises, you get a little of the benefit. If you do none of the exercises, you get nearly none of the benefit.

    You'll Have My Support

    I've written a lot of great information for you and tested it with my beta audience of hundreds of dedicated readers and programmers. You'll also get my personal email address. I read every message you send. Email me before your purchase and after it. I love hearing from readers.

    I want more people to understand coding. I'll help you.

    Still, I know many people don't want to interrupt me at my personal email address. And some day, I may not have enough time to talk to everybody. And so there is now a Slack workspace for buyers of Rebuilding Rails and Mastering Software Technique. Your purchase of Mastering Software Technique entitles you to lifetime membership in that community (assuming you uphold reasonable standards of behaviour.)

    Can't I Get the Same Thing From You For Free?

    Most of it. The RubyConf talk is recorded. I've written many of the same thing in free blog posts. I always do that — you can get the complete code for my previous book on GitHub, even though the full book costs money. I give away a lot of free material, and it’s good. There are no deep secrets that I keep back only behind a paywall.

    If you just want the magical secret from the book, it’s not hard to find. You can get a lot of it just by reading this page.

    (If you just want the magical secret from the book, that means you’re not planning to do the exercises. If that’s true, don’t buy the book.)

    What you get by paying money is this:

    • A lot about why to do each thing - so you can mix and match, or fit it to your situation
    • Simple, step-by-step instructions and good examples
    • Everything in one place without having to click around and put it together for yourself
    • Save a bunch of time
    • Plans about how to build practice on practice into a coherent program
    • You paid, so you feel like you have to do the exercises - and the book doesn’t work unless you do them

    None of this is magic. None of it is rocket science. All of it is convenience or commitment, which you could get by just doing more work or having more discipline. Because you’re here, you don’t think that's enough. It isn’t enough for me personally - I pay for books and classes regularly so I can learn faster.

    If you believe that paying for the book is robbery when you could just spend hours combing through blog posts (mine and others,) taking notes and collecting examples… You may not be interested in buying this book. Or most other books.

    If you believe you should do all of that on work time, please keep in mind what your time costs your business. Four or five hours of your salary is usually far more than this book costs.

    Is Mastering Software Technique Good?

    I think that Software Technique is a really important concept, and I've been recommending Mastering Software Technique to my co-workers a lot. The only reason I haven't listed it as a "most important book ever" yet is that I've already had a pretty experimental approach to learning, so MST feels more of a refinement of how I've tended to approach learning, rather than a sea change as such."

    - Andrew Owen, demonstrating how natural MST's approach feels to an experienced engineer

    Satisfied Customers of Rebuilding Rails, the Author's First Book, Include:

    About the Author

    Noah Gibbs (that's me) has spoken at conferences like RubyConf, RailsConf, RubyKaigi and many more. Noah spent years as a principal engineer, tech lead, architect and Ruby Fellow. His work on Ruby performance appeared regularly for years in Ruby Weekly. He has extensive teaching and mentoring experience over his thirty-year software career.

    Interested but Not Sure Yet?

    I'd love to sign you up for the first few chapters of Mastering Software Technique and an email class about how to practice coding effectively, all for free. If you like the sample chapters then please consider buying the full version later on.

    Usually there would be a signup form here, but I'm switching email providers. Check back in a few days!

    Start Your Mastery for £25
    (about US $30)

    Buy on Gumroad

    Gumroad offers payment via credit cards and PayPal. If you aren't 100% satisfied then get a full refund with no questions asked within 60 days.

    Want to get Mastering Software Technique reimbursed by your employer? Great! Gumroad offers invoices.

    Contact me if you'd like a site license.


    Why You Should Expense Mastering Software Technique?

    You're a software developer. Your time is expensive. If you don't live in the USA, Mastering Software Technique still only costs several hours of your salary — in the United States, the plain ebook may cost around fifteen minutes of what the business actually pays to keep you.

    If MST makes you just two percent better at what you do in Rails and you stay with your current employer for just two more months, then the book has made a tidy profit for your employer. Each post-MST year you work there (say 50 weeks of work at 40 hours/week) with a two percent improvement saves 40 hours of debugging time to be used on more interesting work, or makes you 40 hours more effective writing new features. That's worth far more than the price of the book. By expensing Mastering Software Technique and reading it, you're doing your employer a huge favour.

    To do them even more of a favour, you could pick up a site license (multiple book licenses) and share with your coworkers! I also teach workshops, both in person and online.


    A chimpanzee types and wears headphones, while a teddy bear records him with a camcorder.
    Writing with love and care from my studio in Inverness, Scotland