Editor: Michael Swaine

PragPub on Medium

Articles from the Archives

PragPub
10 min readAug 10, 2021

--

PragPub was a monthly magazine by and for software developers started in 2009 by Michael Swaine, former editor of Dr. Dobb’s Journal. The magazine began as a showcase for authors and their books and evolved into an independent publication about web and mobile development and the latest languages and tools for programmers. Check back frequently — we’ll be adding articles every week.

Articles by Issue

December 2019

The Knee-Jerk Else Clause: The Case Against Else

Automate the Boring Stuff: Antonio on Books

Small Change: The PragPub Puzzle

October 2019

It’s Just Artificial Intelligence: The Kobayashi Maru

Swarm Algorithms: Programming Your Way Out of a Paper Bag

September 2019

The Smartphone Revolution: Making Everything Accessible

It’s Just Artificial Intelligence: What’s Different Now?

Vaping Venture: The PragPub Puzzle

August 2019

It’s Just Artificial Intelligence: History and Modern Applications

Geographically Distributed Agile Teams, Part IV: Equal Access

June 2019

Geographically Distributed Agile Teams, Part III: Serendipitous Communications

May 2019

Geographically Distributed Agile Teams, Part II: Communications Technology

April 2019

Geographically Distributed Agile Teams, Part I: Distributed Team Workspaces Start With Hours of Overlap

Brie as Kree: The PragPub Puzzle

March 2019

Still Test-Driving After All These Years

Principles for Large Organizations: An Invitation to Brainstorm

I Bless the Rains Down in Cupertino: The PragPub Puzzle

February 2019

Does Machine Learning Really Involve Data? Refining Our Terms

The Post-PC Era — A Moment in the History of the Computer: Everywhere and Nowhere

January 2019

Windows, Icons, Menus, Pointer — A Moment in the History of the Computer: The Graphical User Interface

From The Pragmatic Bookshelf, Hot off the Presses: Systems Programming in the Twenty-First Century

December 2018

There’s Only One Everything … Or Is There? To Infinity — and Beyond!

The Big Boys Move In — A Moment in the History of the Computer: the Coming of the IBM PC

Dark Stories: The PragPub Puzzle

November 2018

Planning Your Tech Book: The Value of Brain Dumps and Outlines

October 2018

Watching Too Much: The PragPub Puzzle

September 2018

Genetic Algorithms: A Facet of Machine Learning

June 2018

The Soirée: A Moment in the History of the Computer, with Digressions

Auto Layout, Playgrounds, and Xcode: When to Leave the Playground

October 2017

Swaine’s World: Game of X

June 2017

TDD Guided by ZOMBIES: Zombies to the Rescue by James Grenning

July 2017

Chris Crawford vs. the Dragon: One Man’s Quest to Remake Gaming

December 2016

Concatenate Got Your Tongue?

April 2016

Analyzing Cultural Domains with Python

March 2016

When Co-Workers Are Fired or Laid Off

You Just Lost Your Job

September 2014

When TDD Doesn’t Matter: What Do You Value?

February 2014

Don’t Make Me Think (and Other Excellent Advice): Antonio on Books

June 2013

Programming Elixir: A Gentle Introduction

April 2013

Estimation: The Best We Can Do

Dependent Types: A New Paradigm?

March 2013

Being the Geek Who Fits: Don’t Forget That You’re Interviewing Them, Too

Finding the Geek Who Fits: Five Tips for Hiring as an Agile Team

February 2013

Estimation is Evil: Overcoming the Estimation Obsession

Deploying with JRuby in the Cloud: Adjusting the Settings on Your Java Machine

January 2013

Functional Programming Basics: What’s It All About?

Web Programming in Haskell: Part Two

December 2012

Web Programming in Haskell: Part One

Choice Bits: Hot Books and The Talk of the Tech

October 2012

Thinking Functionally with Haskell: Playing with Haskell

September 2012

Thinking Functionally with Haskell

August 2012

Functional Thinking for the Imperative Mind: Getting Your Feet Wet

Thinking Functionally with Haskell: A Deep Dive into the Functional Pool

June 2012

The Beauty of Concurrency in Go: Beyond “Hello World”

May 2012

Scala for the Intrigued: Recursions and Tail Call Optimization

March 2012

The NOR Machine: Build a CPU with Only One Instruction

April 2012

Technical Blogging: An Interview with Antonio Cangiano

January 2012

Unit Tests Are FIRST: Fast, Isolated, Repeatable, Self-Verifying, and Timely

Meet the Team: Development Editor Brian Hogan

October 2011

Up Front: It’s PragProWriMo Time!

But We Have These Distributed Folks: Can Distributed Teams Be Effective?

September 2011

The Only Agile Tools You’ll Ever Need: A Sanity Check on the Use of Tools

August 2011

How Virtuous Is Your Code?

July 2011

Growing a DSL with Clojure: Clojure Makes DSL Writing Straightforward

April 2011

Advanced Arduino Hacking: Bringing Serious Developer Tools and Techniques to Arduino, the Popular Single-Board Platform

Testing Arduino Code: An Everyday JRuby Adventure

February 2011

Abstraction: How to Tell a Cat from a Dog

To Agility… and Beyond!

I Went for the Skiing

January 2011

Code Coupling: Reducing Dependency in Your Code

Grokking Pattern Matching and List Comprehensions: Two Language Features that Rock

Everyday JRuby Part 2: Sharing Your Software

December 2010

Cohesive Software Design: Cohesion Makes Code Easier to Understand, Debug, and Test

Chad Fowler on Ruby: An Interview with a Ruby Pioneer

Everyday JRuby Part 1: Writing a Plugin

August 2010

Page Objects in Python: Automating Page Checking without Brittleness

April 2010

Tangled Up in Tools: What’s Wrong with Libraries, and What to Do About It

March 2010

JavaScript: It’s Not Just for Browsers Any More

December 2009

Choice Bits: Overheard on the Intertubes

September 2009

Responsive Design: Coming to Grips with the Chaos That Is Software Design

August 2009

iPhone, Meet Cucumber: Testing Your iPhone Apps with Cucumber

Articles by Author

Kent Beck

Responsive Design: Coming to Grips with the Chaos That Is Software Design

When TDD Doesn’t Matter: What Do You Value?

To Agility… and Beyond!

Michael Bevilacqua-Linn

Functional Thinking for the Imperative Mind: Getting Your Feet Wet

Frances Buontempo

Genetic Algorithms: A Facet of Machine Learning

Swarm Algorithms: Programming Your Way Out of a Paper Bag

Does Machine Learning Really Involve Data? Refining Our Terms

Paul Callaghan

Thinking Functionally with Haskell: Playing with Haskell

Thinking Functionally with Haskell: Types? Tests? We Need a New Word

Thinking Functionally with Haskell: A Deep Dive into the Functional Pool

Web Programming in Haskell: Part One

Web Programming in Haskell: Part Two

Dependent Types: A New Paradigm?

Antonio Cangiano

Automate the Boring Stuff: Antonio on Books

Don’t Make Me Think (and Other Excellent Advice): Antonio on Books

Erin Dees

There’s Only One Everything … Or Is There? To Infinity — and Beyond!

iPhone, Meet Cucumber: Testing Your iPhone Apps with Cucumber

Everyday JRuby Part 1: Writing a Plugin

Everyday JRuby Part 2: Sharing Your Software

Testing Arduino Code: An Everyday JRuby Adventure

Alexander Demin

The Beauty of Concurrency in Go: Beyond “Hello World”

The NOR Machine: Build a CPU with Only One Instruction

Tim Ottinger and Jeff Langr

Unit Tests Are FIRST: Fast, Isolated, Repeatable, Self-Verifying, and Timely

Cohesive Software Design: Cohesion Makes Code Easier to Understand, Debug, and Test

Abstraction: How to Tell a Cat from a Dog

How Virtuous Is Your Code?

Code Coupling: Reducing Dependency in Your Code

Pair Programming Benefits: Two Heads Are Better than One

The Only Agile Tools You’ll Ever Need: A Sanity Check on the Use of Tools

But We Have These Distributed Folks: Can Distributed Teams Be Effective?

Principles for Large Organizations: An Invitation to Brainstorm (Tim Ottinger)

Adam Goucher

Page Objects in Python: Automating Page Checking without Brittleness

James Grenning

TDD Guided by ZOMBIES: Zombies to the Rescue

Still Test-Driving After All These Years

I Went for the Skiing

Jason Huggins

JavaScript: It’s Not Just for Browsers Any More

Ron Jeffries

Estimation is Evil: Overcoming the Estimation Obsession

Estimation: The Best We Can Do

Joe Kutner

Deploying with JRuby in the Cloud: Adjusting the Settings on Your Java Machine

Andy Lester

Being the Geek Who Fits: Don’t Forget That You’re Interviewing Them, Too

Brian MacDonald

Planning Your Tech Book: The Value of Brain Dumps and Outlines

Robert C. Martin (“Uncle Bob”)

Functional Programming Basics: What’s It All About?

Eric Redmond

It’s Just Artificial Intelligence: History and Modern Applications

It’s Just Artificial Intelligence: What’s Different Now?

It’s Just Artificial Intelligence: The Kobayashi Maru

Johanna Rothman and Mark Kilby

Geographically Distributed Agile Teams, Part I: Distributed Team Workspaces Start With Hours of Overlap

Geographically Distributed Agile Teams, Part I: Distributed Team Workspaces Start With Hours of Overlap

Geographically Distributed Agile Teams, Part II: Communications Technology

Geographically Distributed Agile Teams, Part III: Serendipitous Communications

Geographically Distributed Agile Teams, Part IV: Equal Access

Johanna Rothman

Finding the Geek Who Fits: Five Tips for Hiring as an Agile Team

Johanna Rothman and Andy Lester

When Co-Workers Are Fired or Laid Off

You Just Lost Your Job

Erica Sadun

Auto Layout, Playgrounds, and Xcode: When to Leave the Playground

The Knee-Jerk Else Clause: The Case Against Else

Concatenate Got Your Tongue?

Ambrose Bonnaire-Sergeant

Growing a DSL with Clojure: Clojure Makes DSL Writing Straightforward

Maik Schmidt

Advanced Arduino Hacking: Bringing Serious Developer Tools and Techniques to Arduino, the Popular Single-Board Platform

Venkat Subramaniam

Scala for the Intrigued: Recursions and Tail Call Optimization

Michael Swaine

Chris Crawford vs. the Dragon: One Man’s Quest to Remake Gaming

The Soirée: A Moment in the History of the Computer, with Digressions

The Big Boys Move In — A Moment in the History of the Computer: the Coming of the IBM PC

Up Front: It’s PragProWriMo Time!

Meet the Team: Development Editor Brian Hogan

Choice Bits: Overheard on the Intertubes

Swaine’s World: Game of X

Windows, Icons, Menus, Pointer — A Moment in the History of the Computer: The Graphical User Interface

From The Pragmatic Bookshelf, Hot off the Presses: Systems Programming in the Twenty-First Century

The Post-PC Era — A Moment in the History of the Computer: Everywhere and Nowhere

Technical Blogging: An Interview with Antonio Cangiano

Chad Fowler on Ruby: An Interview with a Ruby Pioneer

Watching Too Much: The PragPub Puzzle

Vaping Venture: The PragPub Puzzle

Dark Stories: The PragPub Puzzle

Small Change: The PragPub Puzzle

I Bless the Rains Down in Cupertino: The PragPub Puzzle

Brie as Kree: The PragPub Puzzle

Choice Bits: Hot Books and The Talk of the Tech

Bruce Tate

Grokking Pattern Matching and List Comprehensions: Two Language Features that Rock

Mike Taylor

Tangled Up in Tools: What’s Wrong with Libraries, and What to Do About It

Dave Thomas

Programming Elixir: A Gentle Introduction

Carmine Zaccagnino

The Smartphone Revolution: Making Everything Accessible

Dmitry Zinoviev

Analyzing Cultural Domains with Python

Articles by Topic

Agile, People, Project Management, Leadership, and Teams

The Only Agile Tools You’ll Ever Need: A Sanity Check on the Use of Tools

Pair Programming Benefits: Two Heads Are Better than One

But We Have These Distributed Folks: Can Distributed Teams Be Effective?

Principles for Large Organizations: An Invitation to Brainstorm

Geographically Distributed Agile Teams, Part I: Distributed Team Workspaces Start With Hours of Overlap

Geographically Distributed Agile Teams, Part II: Communications Technology

Geographically Distributed Agile Teams, Part III: Serendipitous Communications

Geographically Distributed Agile Teams, Part IV: Equal Access

To Agility… and Beyond!

I Went for the Skiing

Being the Geek Who Fits: Don’t Forget That You’re Interviewing Them, Too

Finding the Geek Who Fits: Five Tips for Hiring as an Agile Team

When Co-Workers Are Fired or Laid Off

You Just Lost Your Job

Computer History

Chris Crawford vs. the Dragon: One Man’s Quest to Remake Gaming

The Big Boys Move In — A Moment in the History of the Computer: the Coming of the IBM PC

The Smartphone Revolution: Making Everything Accessible

The Soirée: A Moment in the History of the Computer, with Digressions

Windows, Icons, Menus, Pointer — A Moment in the History of the Computer: The Graphical User Interface

From The Pragmatic Bookshelf, Hot off the Presses: Systems Programming in the Twenty-First Century

Choice Bits: Overheard on the Intertubes

Swaine’s World: Game of X

The Post-PC Era — A Moment in the History of the Computer: Everywhere and Nowhere

Chad Fowler on Ruby: An Interview with a Ruby Pioneer

Choice Bits: Hot Books and The Talk of the Tech

Data Science and Artificial Intelligence

Analyzing Cultural Domains with Python

Genetic Algorithms: A Facet of Machine Learning

It’s Just Artificial Intelligence: History and Modern Applications

It’s Just Artificial Intelligence: What’s Different Now?

It’s Just Artificial Intelligence: The Kobayashi Maru

Swarm Algorithms: Programming Your Way Out of a Paper Bag

Does Machine Learning Really Involve Data? Refining Our Terms

Fun and Puzzles

Watching Too Much: The PragPub Puzzle

Vaping Venture: The PragPub Puzzle

Dark Stories: The PragPub Puzzle

Small Change: The PragPub Puzzle

I Bless the Rains Down in Cupertino: The PragPub Puzzle

Brie as Kree: The PragPub Puzzle

Mathematics

There’s Only One Everything … Or Is There? To Infinity — and Beyond!

Concatenate Got Your Tongue?

Programming

Auto Layout, Playgrounds, and Xcode: When to Leave the Playground

The Knee-Jerk Else Clause: The Case Against Else

Growing a DSL with Clojure: Clojure Makes DSL Writing Straightforward

The Beauty of Concurrency in Go: Beyond “Hello World”

Thinking Functionally with Haskell: Types? Tests? We Need a New Word

Thinking Functionally with Haskell: Playing with Haskell

Thinking Functionally with Haskell: A Deep Dive into the Functional Pool

Web Programming in Haskell: Part One

Web Programming in Haskell: Part Two

Functional Thinking for the Imperative Mind: Getting Your Feet Wet

Functional Programming Basics: What’s It All About?

The NOR Machine: Build a CPU with Only One Instruction

Page Objects in Python: Automating Page Checking without Brittleness

Grokking Pattern Matching and List Comprehensions: Two Language Features that Rock

Programming Elixir: A Gentle Introduction

Deploying with JRuby in the Cloud: Adjusting the Settings on Your Java Machine

Advanced Arduino Hacking: Bringing Serious Developer Tools and Techniques to Arduino, the Popular Single-Board Platform

Dependent Types: A New Paradigm?

JavaScript: It’s Not Just for Browsers Any More

Software Architecture and Design

Estimation is Evil: Overcoming the Estimation Obsession

Estimation: The Best We Can Do

Responsive Design: Coming to Grips with the Chaos That Is Software Design

Abstraction: How to Tell a Cat from a Dog

How Virtuous Is Your Code?

Code Coupling: Reducing Dependency in Your Code

Scala for the Intrigued: Recursions and Tail Call Optimization

Tangled Up in Tools: What’s Wrong with Libraries, and What to Do About It

Technical Writing and Books

Planning Your Tech Book: The Value of Brain Dumps and Outlines

Up Front: It’s PragProWriMo Time!

Meet the Team: Development Editor Brian Hogan

Automate the Boring Stuff: Antonio on Books

Don’t Make Me Think (and Other Excellent Advice): Antonio on Books

Technical Blogging: An Interview with Antonio Cangiano

Testing

TDD Guided by ZOMBIES: Zombies to the Rescue by James Grenning

Unit Tests Are FIRST: Fast, Isolated, Repeatable, Self-Verifying, and Timely

Cohesive Software Design: Cohesion Makes Code Easier to Understand, Debug, and Test

Still Test-Driving After All These Years

iPhone, Meet Cucumber: Testing Your iPhone Apps with Cucumber

Everyday JRuby Part 1: Writing a Plugin

Everyday JRuby Part 2: Sharing Your Software

Testing Arduino Code: An Everyday JRuby Adventure

When TDD Doesn’t Matter: What Do You Value?

--

--

PragPub

The Pragmatic Programmers bring you archives from PragPub, a magazine on web and mobile development (by editor Michael Swaine, of Dr. Dobb’s Journal fame).