programming in the
twenty-first century

It's not about technology for its own sake. It's about being able to implement your ideas.


Computer Science Courses that Don't Exist, But ShouldIf You Haven't Done It Before, All Bets Are OffWhy Doesn't Creativity Matter in Tech Recruiting?Reconsidering Functional ProgrammingThe Wrong Kind of ParanoiaAre You Sure?Life is More Than a Series of Cache MissesRetiring Python as a Teaching LanguageThe Software Developer's Sketchbook


Programming Modern Systems Like It Was 1984Extreme FormattingDesign is ExpensiveLost Lessons from 8-Bit BASICYou Can't Sit on the Sidelines and Become a PhilosopherUnexpectedly SimpleProgramming Without Being Obsessed With ProgrammingYou Don't Read Code, You Explore ItGet Good at Idea GenerationRange-Checks and RecklessnessPopular iOS Games That Could Have Been Designed for 8-Bit SystemsYou Don't Want to Think Like a ProgrammerA Worst Case for Functional Programming?Success Beyond the Barrier of Full Understanding


Optimization in the Twenty-First CenturySelf-Imposed ComplexityC is Lower Level Than You ThinkThree Years in an Alternate UniverseWhat Are You The World's Foremost Authority Of?Dynamic Everything ElseWhy Do Dedicated Game Consoles Exist?Purely Functional PhotoshopHow much memory does malloc(0) allocate?Getting Past the Cloning InstinctOrganizational Skills Beat Algorithmic WizardryTips for Writing Functional Programming TutorialsGetting Comfortable with the Softer Side of DevelopmentFlickr's Redesign is a Series of Evolutionary ChangesStumbling Into the Cold Expanse of Real ProgrammingA Short Quiz About Language DesignRemembering a Revolution That Never HappenedExploring the Lower Depths of TersenessExpertise, the Death of Fun, and What to Do About ItDon't Be Distracted by Superior TechnologySimplicity is Wonderful, But Not a RequirementThe Highest-Level Feature of CSympathy for Students in Beginning Programming ClassesTrapped by Exposure to Pre-Existing IdeasAn Irrational Fear of Files on the Desktop2012 Retrospective


Documenting the UndocumentableDangling by a Trivial FeatureThe UNIX Philosophy and a Fear of Pixels"Not Invented Here" Versus Developer SanityAn Outrageous PortOOP Isn't a Fundamental Particle of ComputingThe Background Noise Was Louder than I RealizedDo You Really Want to be Doing This When You're 50?Digging Out from Years of Homogeneous ComputingWhat's Your Hidden Agenda?Minimalism in an Age of Tremendous HardwareThe Goal is to be Like a Bad Hacker MovieHopefully More Controversial Programming OpinionsAll that Stand Between You and a Successful Project are 500 ExperimentsOne Small, Arbitrary Change and It's a Whole New WorldApp Store Failure and Personal ResponsibilityThings to Optimize Besides Speed and MemoryI Am Not a CorporationThe Silent Majority of ExpertsYour Coding Philosophies are IrrelevantAnother Programming Idiom You've Never Heard OfThe Pace of Technology is Slower than You ThinkWe Who Value Simplicity Have Built Incomprehensible MachinesYou, Too, Can Be on the Cutting Edge of Functional Programming ResearchThe Most Important Decisions are Non-TechnicalA Forgotten Principle of Compiler DesignCan You Be Your Own Producer?Use and Abuse of Garbage Collected Languages100,000 Lines of Assembly LanguageThis is Why You Spent All that Time Learning to ProgramTurning Your Code Inside OutSolving the Wrong ProblemA Complete Understanding is No Longer PossibleDon't Fall in Love With Your TechnologyA Peek Inside the Erlang CompilerFour Levels of Idea TheftPretend This Optimization Doesn't ExistVirtual Joysticks and Other Comfortably Poor Solutions Recovering From a Computer Science EducationFollow-up to "A Programming Idiom You've Never Heard Of"A Programming Idiom You've Never Heard Of


2011 RetrospectiveUser Experience Intrusions in iOS 5Photography as a Non-Technical HobbyAdventures in Unfiltered Global PublishingThings That Turbo Pascal is Smaller ThanStarting in the MiddlePapers from the Lost Culture of Array LanguagesThe Revolution is PersonalOptimization on a Galactic ScaleGreetings from the Bottom of the BenchmarksBeyond Empty CodingBoldness and RestraintBuilding Beautiful Apps from Ugly CodeIt's Like That Because It Has Always Been Like That"Avoid Premature Optimization" Does Not Mean "Write Dumb Code"Collapsing Communities8-Bit Scheme: A Revisionist HistoryThe End is Near for Vertical TabThe Nostalgia TrapLiving in the Era of Infinite Computing PowerTough Love for IndiesConstantly CreateImpressed by Slow CodeFollow the VibrancyRevisiting "Tricky When You Least Expect It"Caught-Up with 20 Years of UI CriticismIf You're Not Gonna Use It, Why Are You Building It?Don't Distract New Programmers with OOPExploring Audio Files with ErlangAccidental Innovation, Part 3Accidental Innovation, Part 2Accidental Innovation, Part 1


A Three-Year RetrospectiveWrite Code Like You Just Learned How to ProgramInstant-OnLearning to Ignore Superficially Ugly CodeGood-Bye to the Sprawling Suburbs of Screen SpaceEasy to PleaseThis Isn't Another Quick Dismissal of Visual ProgrammingA Concurrent Language for Non-Concurrent SoftwareAdvice to Aimless, Excited ProgrammersErlang vs. Unintentionally Purely Functional PythonCommon Sense, Part 1Personal ProgrammingStop the Vertical Tab MadnessOne Small Step Toward Reducing Programming Language ComplexityFree Your Technical Aesthetic from the 1970sExplaining Functional Programming to Eight-Year-OldsWhat Do People Like?Tricky When You Least Expect ItA Ramble Through Erlang IO ListsHow to Think Like a PioneerHow Much Processing Power Does it Take to be Fast?Rethinking Programming Language TutorialsLiving Inside Your Own Black BoxA Short Story About VerbosityEleven Years of ErlangIt Made Sense in 1978Dehumidifiers, Gravy, and CodingOptimizing for Fan NoiseWhat to do About Erlang's Records?Nothing Like a Little Bit of MagicFlickr as a Business SimulatorNo CommentThe Recovering Programmer


Follow-up to "Functional Programming Doesn't Work"Functional Programming Doesn't Work (and what to do about it)How I Learned to Stop Worrying and Love Erlang's Process DictionarySlow Languages Battle Across TimeHow Did Things Ever Get This Good?Tales of a Former Disassembly AddictMicro-Build Systems and the Death of a Prominent DSLThe World's Most Mind-Bending Language Has the Best Development EnvironmentA Personal History of Compilation Speed, Part 2The Pure Tech Side is the Dark SideA Personal History of Compilation Speed, Part 1Want People to Use Your Language Under Windows? Do This.How to Crash ErlangDigging Deeper into Sufficiently SmartnessLet's Take a Trivial Problem and Make it HardOn Being Sufficiently SmartHow My Brain Kept Me from Co-Founding YouTubePuzzle LanguagesRevisiting "Purely Functional Retrogames"


Accidentally Introducing Side Effects into Purely Functional CodeTimidity Does Not ConvinceMacho ProgrammingUnderstanding What It's Like to Program in ForthKilobyte Constants, a Simple and Beautiful Idea that Hasn't Caught OnFunctional Programming Went Mainstream Years AgoWant to Write a Compiler? Just Read These Two Papers.A Spellchecker Used to Be a Major Feat of Software EngineeringCoding as PerformanceDon't Be Afraid of Special CasesPurely Functional Retrogames, Part 4Purely Functional Retrogames, Part 3Purely Functional Retrogames, Part 2Purely Functional Retrogames, Part 1My Road to ErlangSlumming with BASIC ProgrammersIn Praise of Non-Alphanumeric IdentifiersFive Memorable Books About ProgrammingBack to the Basics of Functional ProgrammingDon't Structure Data All The Way DownGarbage Collection in ErlangWhy Garbage Collection Paranoia is Still (sometimes) Justified


Functional Programming ArchaeologyWould You Bet $100,000,000 on Your Pet Programming Language?Timings and the PunchlineRevisiting "Programming as if Performance Mattered"Finally: Data Structure Constants in ErlangTwo Stories of SimplicityDeriving ForthTrapped! Inside a Recursive Data StructureSending Modern Languages Back to 1980s Game ProgrammersErlang as a Target for Imperative DSLsFollow-up to "Admitting that Functional Programming Can Be Awkward"Admitting that Functional Programming Can Be AwkwardOn the Perils of Benchmarking ErlangA Deeper Look at Tail Recursion in Erlang


twitter / mail

I'm James Hague, a recovering programmer who has been designing video games since the 1980s. Programming Without Being Obsessed With Programming and Organizational Skills Beat Algorithmic Wizardry are good starting points. For the older stuff, try the 2012 Retrospective.

Where are the comments?