Eric Normand's Newsletter
Each week, enjoy a thoughtful essay in your inbox, focused on the following topics:
- software design
- functional programming
- software engineering practices
I believe our industry needs more rigor when talking about how to write better software. At the same time, we also need more speech from the heart. I hope you enjoy the combination of the empirical and personal.
Do any of these describe you?
Do any of these describe you?
- You're a thoughtful programmer.
- You enjoy reading reviews of Alan Kay's lectures.
- You want to look beyond today's trends to improve your craft.
- You want to understand the history of your field.
- You like staring intensely into a problem.
If so, then this newsletter is for you.
The older archives of the newsletter are below. The new posts will appear on Substack. You may wish to use the Substack interface to manage your subscription.
Join thousands of happy subscribers
Here are just a few happy comments:
Even if you’re not interested in Clojure at all, this newsletter is an excellent read every week.
Oliver Caldwell
A free, weekly email to inspire Clojure programmers :D
Daniel Higginbotham
If you’re a Clojure programmer, you should subscribe to the (free) newsletter by Eric Normand.
Steve Miner
Your friendly reminder that if you aren’t reading Eric's newsletter, you are missing out… NOTE: It's not Clojure specific!
Sean Allen
BTW, if you read RubyWeekly, you’ll love Eric Normand's newsletter.
Norbert Wójtowicz
Eric's newsletter is so simply great. Love it!
Mathieu Gagnon
Read it and weep (with joy)
Alan Shaw
Lots of great content in the latest newsletter! Really glad I subscribed. Thanks, Eric, for your work.
Nicolas Hery
Past issues
📬 Recent Issues Substack Archive
New posts will appear on Substack.
Eric Normand Newsletter 479: OOP, FP, and the Future
OOP, FP, and the Future
Eric Normand Newsletter 478: Self-publishing Domain Modeling 📖
Self-publishing Domain Modeling 📖
Eric Normand Newsletter 477: Encapsulating collections
Encapsulating collections
Eric Normand Newsletter 476: The start of a book
The start of a book
Eric Normand Newsletter 475: Transcending OOP and FP
Transcending OOP and FP
Eric Normand Newsletter 474: Data-Oriented Programming
Data-Oriented Programming
Eric Normand Newsletter 473: On the meanings of software design
On the meanings of software design
Eric Normand Newsletter 472: Working on Domain Modeling book
Working on Domain Modeling book
Eric Normand Newsletter 471: I’m back!
I’m back!
Eric Normand Newsletter 470: Worked Example: Days of the week
Worked Example: Days of the week
Eric Normand Newsletter 469: Everything is a center
Everything is a center
Eric Normand Newsletter 468: Choice of abstraction matters
Choice of abstraction matters
Eric Normand Newsletter 467: Koppel's abstractions
Koppel's abstractions
Eric Normand Newsletter 466: You need two abstractions to model
You need two abstractions to model
Eric Normand Newsletter 465: Abstraction is the essence of programming
Abstraction is the essence of programming
Eric Normand Newsletter 464: 10 years!
10 years!
PurelyFunctional.tv Newsletter 463: What is beautiful code?
PurelyFunctional.tv Newsletter 462: PurelyFunctional.tv Migration
PurelyFunctional.tv Newsletter 461: Rules of thumb don't scale
PurelyFunctional.tv Newsletter 460: Interface polymorphism
PurelyFunctional.tv Newsletter 459: Revisiting the open/closed principle
PurelyFunctional.tv Newsletter 458: Three doorways of domain modeling
PurelyFunctional.tv Newsletter 457: Take a stance
PurelyFunctional.tv Newsletter 456: A sense of mystery
PurelyFunctional.tv Newsletter 455: How and when to apply domain modeling
PurelyFunctional.tv Newsletter 454: Not a prescriptive process
PurelyFunctional.tv Newsletter 453: Model as Toy
PurelyFunctional.tv Newsletter 452: Domain Invariants
PurelyFunctional.tv Newsletter 451: Signature-Driven Development
PurelyFunctional.tv Newsletter 450: Runnable specifications
PurelyFunctional.tv Newsletter 449: Domain model correctness and simplicity
PurelyFunctional.tv Newsletter 448: Domain model convenience
PurelyFunctional.tv Newsletter 447: Domain model fit
PurelyFunctional.tv Newsletter 446: The Art of Domain Modeling
PurelyFunctional.tv Newsletter 445: 2 Kinds of genericity?
PurelyFunctional.tv Newsletter 444: Humane models of errors
PurelyFunctional.tv Newsletter 443: Simulating and visualizing time
PurelyFunctional.tv Newsletter 442: Human interfaces should be rich and composed
PurelyFunctional.tv Newsletter 441: Hurricane update
PurelyFunctional.tv Newsletter 440: Pub/sub done really well
PurelyFunctional.tv Newsletter 439: How to invent the future
PurelyFunctional.tv Newsletter 438: The unbearable lightness of programming
PurelyFunctional.tv Newsletter 437: To build or not to build, that is the question
PurelyFunctional.tv Newsletter 436: Software as Soulcraft
PurelyFunctional.tv Newsletter 435: The software crisis
PurelyFunctional.tv Newsletter 434: Re-combination of parts
PurelyFunctional.tv Newsletter 433: The "Clojure Effect"
PurelyFunctional.tv Newsletter 432: Specific vs. general
PurelyFunctional.tv Newsletter 431: Clojure directness
PurelyFunctional.tv Newsletter 430: Use :: keyword notation for unique values
PurelyFunctional.tv Newsletter 429: CRUD Authorization
PurelyFunctional.tv Newsletter 428: CRUD Paging
PurelyFunctional.tv Newsletter 427: CRUD Handlers
PurelyFunctional.tv Newsletter 426: Ring for CRUD
PurelyFunctional.tv Newsletter 425: Specify a data abstraction
PurelyFunctional.tv Newsletter 424: Leverage in a thriving ecosystem
PurelyFunctional.tv Newsletter 423: Grokking Simplicity is in print!
PurelyFunctional.tv Newsletter 422: Don't write your own language
PurelyFunctional.tv Newsletter 421: Programming monism
PurelyFunctional.tv Newsletter 420: Say what you mean
PurelyFunctional.tv Newsletter 419: Why not write your own language?
PurelyFunctional.tv Newsletter 418: Clojure's buzz
PurelyFunctional.tv Newsletter 417: Clojure at heart 🥰
PurelyFunctional.tv Newsletter 416: Why do we program in hard mode?
PurelyFunctional.tv Newsletter 415: What is worth sacrificing clarity?
PurelyFunctional.tv Newsletter 414: Constrain your design with composition first
PurelyFunctional.tv Newsletter 413: Affordances in software
PurelyFunctional.tv Newsletter 412: use and abuse of the decorator pattern
PurelyFunctional.tv Newsletter 412: module depth is bogus
PurelyFunctional.tv Newsletter 411: is it easier after Clojure?
PurelyFunctional.tv Newsletter 410: don't encode your policy
PurelyFunctional.tv Newsletter 409: the 3-stakeholders model
PurelyFunctional.tv Newsletter 408: 3 stakeholders of programming
PurelyFunctional.tv Newsletter 407: two layers of design
PurelyFunctional.tv Newsletter 406: design, false nominalization?
PurelyFunctional.tv Newsletter 405: giving thanks
PurelyFunctional.tv Newsletter 404: where to find timeless truths
PurelyFunctional.tv Newsletter 403: the timeless in an unstable domain
PurelyFunctional.tv Newsletter 402: up-front vs incremental design
PurelyFunctional.tv Newsletter 401: design is not about ease of change
PurelyFunctional.tv Newsletter 400: is software design worthless?
PurelyFunctional.tv Newsletter 399: is more layers better?
PurelyFunctional.tv Newsletter 398: semantics over syntax
PurelyFunctional.tv Newsletter 397: unknown keys in maps
PurelyFunctional.tv Newsletter 396: how types help you reason
PurelyFunctional.tv Newsletter 395: types depend on context
PurelyFunctional.tv Newsletter 394: on the feedback of types
PurelyFunctional.tv Newsletter 393: always start with a repl
PurelyFunctional.tv Newsletter 392: command your repl
PurelyFunctional.tv Newsletter 391: the immediacy interval
PurelyFunctional.tv Newsletter 390: the elements of flow in a REPL environment
PurelyFunctional.tv Newsletter 389: repl withdrawal
PurelyFunctional.tv Newsletter 388: further down (or is it up?) the stack
PurelyFunctional.tv Newsletter 387: to stack or not to stack
PurelyFunctional.tv Newsletter 386: factoring equations in code
PurelyFunctional.tv Newsletter 385: two map patterns: entity vs index
PurelyFunctional.tv Newsletter 384: name your callbacks
PurelyFunctional.tv Newsletter 383: replace body with callback
PurelyFunctional.tv Newsletter 382: express implicit argument
PurelyFunctional.tv Newsletter 381: #BlackLivesMatter
PurelyFunctional.tv Newsletter 380: what can you iterate through?
PurelyFunctional.tv Newsletter 379: get produces unexpected behavior, as expected
PurelyFunctional.tv Newsletter 378: Clojure nudges us to constant-time operations
PurelyFunctional.tv Newsletter 377: Three states of key-value pairs
PurelyFunctional.tv Newsletter 376: Learn from core
PurelyFunctional.tv Newsletter 375: JS vs CLJ
PurelyFunctional.tv Newsletter 374: Seek truth, not convenience
PurelyFunctional.tv Newsletter 373: Don't sweat the stack
PurelyFunctional.tv Newsletter 372: Model change over time with state machines
PurelyFunctional.tv Newsletter 371: Chain map, filter, and reduce
PurelyFunctional.tv Newsletter 370: Refactoring: replace get, modify, set with update
PurelyFunctional.tv Newsletter 369: Refactoring: replace body with callback
PurelyFunctional.tv Newsletter 368: Refactoring: extract calculation from action
PurelyFunctional.tv Newsletter 367: What about errors?
PurelyFunctional.tv Newsletter 366: Is the Clojure philosophy bad for beginners?
PurelyFunctional.tv Newsletter 365: why not more convenience routines for CSV parsing?
PurelyFunctional.tv Newsletter 364: Tip: seek the model and enshrine it in code
PurelyFunctional.tv Newsletter 363: Learn to build and deploy a single-page application
PurelyFunctional.tv Newsletter 362: Tip: double recursion
PurelyFunctional.tv Newsletter 361: Tip: trampoline your tail recursion
PurelyFunctional.tv Newsletter 360: Tip: fold left vs fold right
PurelyFunctional.tv Newsletter 359: Tip: reduce as universal recursion over a list
PurelyFunctional.tv Newsletter 358: Tip: recursion rollercoaster
PurelyFunctional.tv Newsletter 357: Tip: recursion vs iteration
PurelyFunctional.tv Newsletter 356: Tip: convert recursion to iteration
PurelyFunctional.tv Newsletter 355: Tip: memoize to trade space for time
PurelyFunctional.tv Newsletter 354: Tip: beware how many threads you start
PurelyFunctional.tv Newsletter 353: Tip: String literals are interned
PurelyFunctional.tv Newsletter 352: Tip: use the right kind of comment for the job
PurelyFunctional.tv Newsletter 351: Clojure tool: babashka
PurelyFunctional.tv Newsletter 350: Monoid pattern submissions
PurelyFunctional.tv Newsletter 349: Tip: monoid pattern
PurelyFunctional.tv Newsletter 348: Tip: cleanup in finally
PurelyFunctional.tv Newsletter 347: Tip: catch and catch again
PurelyFunctional.tv Newsletter 346: Tip: just throw ex-info
PurelyFunctional.tv Newsletter 345: Tip: know your exception hierarchy
PurelyFunctional.tv Newsletter 344: Tip: thank a Clojure OSS dev today
PurelyFunctional.tv Newsletter 343: Tip: read the exception message
PurelyFunctional.tv Newsletter 342: Tip: learn to read Javadocs
PurelyFunctional.tv Newsletter 341: Tip: tidy up your ns form
PurelyFunctional.tv Newsletter 340: Fewer side-effects is better than more
PurelyFunctional.tv Newsletter 339: Design is about pulling things apart
PurelyFunctional.tv Newsletter 338: Tip: Re-implement multiple times
PurelyFunctional.tv Newsletter 337: Functional programming is deep
PurelyFunctional.tv Newsletter 336: My book: next week?
PurelyFunctional.tv Newsletter 335: Idea: when can you use property-based testing?
PurelyFunctional.tv Newsletter 334: Tip: can you fill in the blanks?
PurelyFunctional.tv Newsletter 333: Tool: rebel readline
PurelyFunctional.tv Newsletter 332: Tool: jEnv
PurelyFunctional.tv Newsletter 331: Tool: shadow-cljs
PurelyFunctional.tv Newsletter 330: Tool: Figwheel
PurelyFunctional.tv Newsletter 329: Tool: cljdoc
PurelyFunctional.tv Newsletter 328: Tip: don't use def inside a defn
PurelyFunctional.tv Newsletter 327: Tip: always be decomplecting
PurelyFunctional.tv Newsletter 326: Tip: consult the repl
PurelyFunctional.tv Newsletter 325: Tip: don't use a protocol to make testing easier
PurelyFunctional.tv Newsletter 324: Tip: Use tuples for local data, entities for global data
PurelyFunctional.tv Newsletter 323: Tip: Keep your workflow simple
PurelyFunctional.tv Newsletter 322: Tip: Avoid flatten when possible
PurelyFunctional.tv Newsletter 321: Tip: Do not count sequences from strangers
PurelyFunctional.tv Newsletter 320: Tip: Know Clojure's execution semantics for better Repl-Driven Development
PurelyFunctional.tv Newsletter 319: Tip: Shebang scripting with the Clojure CLI
PurelyFunctional.tv Newsletter 318: Tip: Beware the order of keys in hashmaps
PurelyFunctional.tv Newsletter 317: When you see a job, apply
PurelyFunctional.tv Newsletter 316: Avoid licensing and support issues with the right JDK for you
PurelyFunctional.tv Newsletter 315: Use the correct data structure for the job
PurelyFunctional.tv Newsletter 314: Collection functions vs. sequence functions
PurelyFunctional.tv Newsletter 313: Always use the 3-argument version of reduce
PurelyFunctional.tv Newsletter 312: Maybe, Arcadia, Improvements
PurelyFunctional.tv Newsletter 311: Stewardship, Trees, Databases
PurelyFunctional.tv Newsletter 310: Quines, REPLs, HTML forms
PurelyFunctional.tv Newsletter 309: Hiring, cljdoc, Probability
PurelyFunctional.tv Newsletter 308: Conferences, Unison, NULL
PurelyFunctional.tv Newsletter 307: Performance, Architecture, Semantics
PurelyFunctional.tv Newsletter 306: Error Messages, Milky Way, Microservices
PurelyFunctional.tv Newsletter 305: Legacy, Tables, Pioneers
PurelyFunctional.tv Newsletter 304: Back to the factory
PurelyFunctional.tv Newsletter 303: The Clojure Process Debate
PurelyFunctional.tv Newsletter 302: The Agile Software Factory
PurelyFunctional.tv Newsletter 301: GraphQL, Hiccup, Symbolic Execution
PurelyFunctional.tv Newsletter 300: Rust, React,
PurelyFunctional.tv Newsletter 299: Fullstack, ClojureScript, Class hierarchies
PurelyFunctional.tv Newsletter 298: UX, Deliverables, Dependent Types
PurelyFunctional.tv Newsletter 297: Beginner Experience Edition
PurelyFunctional.tv Newsletter 296: Design, Success, and Conj Speakers
PurelyFunctional.tv Newsletter 295: Deps, Categories, Dystopia
PurelyFunctional.tv Newsletter 294: Ions, Elm, Reason
PurelyFunctional.tv Newsletter 293: Design, deps.edn, Type Inference
PurelyFunctional.tv Newsletter 292: Composition, Modeling, Scope
PurelyFunctional.tv Newsletter 291: Metaphor, Puzzles, Ions
PurelyFunctional.tv Newsletter 290: Generative, Non-events, Hammocks
PurelyFunctional.tv Newsletter 289: More Spec, Fewer Classes, Threading Macros
PurelyFunctional.tv Newsletter 288: Clojure Spec Tools
PurelyFunctional.tv Newsletter 287: DataScript, GraphQL, CRDTs
PurelyFunctional.tv Newsletter 286: Broken APIs, CIDER, Immutability
PurelyFunctional.tv Newsletter 285: Scraping, Laziness, Design Patterns
PurelyFunctional.tv Newsletter 284: Threading, React, OTP
PurelyFunctional.tv Newsletter 283: Spec, Error messages!, Games
PurelyFunctional.tv Newsletter 282: Careers, Errors, P2P
PurelyFunctional.tv Newsletter 281: Intelligence Augmentation, Complexity, Game Engines
PurelyFunctional.tv Newsletter 280: Datomic Ions, Costly Code, Monad drama
PurelyFunctional.tv Newsletter 279: Clojure web frameworks
PurelyFunctional.tv Newsletter 278: Parinfer, Naming, GraphQL
PurelyFunctional.tv Newsletter 277: Clojure Career Workshop
PurelyFunctional.tv Newsletter 276: Turing, Bottom-up Design, go blocks
PurelyFunctional.tv Newsletter 275: Data, Spec, Types
PurelyFunctional.tv Newsletter 274: Datomic, Strange Loop, Clojurists Together
PurelyFunctional.tv Newsletter 273: Robots, Categories, Aikido
PurelyFunctional.tv Newsletter 272: Did you see the redesign?
PurelyFunctional.tv Newsletter 271: Falsehoods, Deliverability, cljs.main
PurelyFunctional.tv Newsletter 270: Lisp and the metacircular interpreter
PurelyFunctional.tv Newsletter 269: Elements, Domains, Revenge!
PurelyFunctional.tv Newsletter 268: Apropos, Datomic, Serverless
PurelyFunctional.tv Newsletter 267: Debugging, REPLs, Theory
PurelyFunctional.tv Newsletter 266: Beginner Experience
PurelyFunctional.tv Newsletter 265: The one after the first Clojure SYNC
PurelyFunctional.tv Newsletter 264: Happy Lundi Gras
PurelyFunctional.tv Newsletter 263: The Power of Definitions
PurelyFunctional.tv Newsletter 262: Launching, Jargon, Fearless
PurelyFunctional.tv Newsletter 261: Cool, Calm, Coast
PurelyFunctional.tv Newsletter 260: Orchestra, Logic, Lambda
PurelyFunctional.tv Newsletter 259: Smalltalk, Slowness, Learning
PurelyFunctional.tv Newsletter 258: Reality, Hiccup, Relational
PurelyFunctional.tv Newsletter 257: Dynamic, Benchmarks, Design Patterns
PurelyFunctional.tv Newsletter 256: Jobs, SYNC, Patterns
PurelyFunctional.tv Newsletter 255: Scene, CLI, Neural Net
PurelyFunctional.tv Newsletter 254: Calm, Microservices, Complexity
PurelyFunctional.tv Newsletter 253: Poe, Cookies, Flash
PurelyFunctional.tv Newsletter 252: Brand, Distributed, Feelings
PurelyFunctional.tv Newsletter 251: Machine Learning, ClojureScript, The Future
PurelyFunctional.tv Newsletter 250: Lean, Creole Cuisine, Types
PurelyFunctional.tv Newsletter 249: The unbearable lightness of static type erasure...
PurelyFunctional.tv Newsletter 248: Weapons, GraphQL, and the return of an old acquaintance
PurelyFunctional.tv Newsletter 247: Clojure SYNC, Guy Steele, Zach Tellman
PurelyFunctional.tv Newsletter 246: 2 CFPs, Clojurecademy, Data Science
PurelyFunctional.tv Newsletter 245: V2, Scale, Perl
PurelyFunctional.tv Newsletter 244: Comics, Infinity, Scaling
PurelyFunctional.tv Newsletter 243: Specialization, McLuhan, Lumo
PurelyFunctional.tv Newsletter 242: Flexibility, Measurement, Metaphors
PurelyFunctional.tv Newsletter 241: Paradigms, Data Science, Style
PurelyFunctional.tv Newsletter 240: The revolution will not be computerized.
PurelyFunctional.tv Newsletter 239: Clojure SYNC tickets on sale
PurelyFunctional.tv Newsletter 238: History, Abstraction, Play
PurelyFunctional.tv Newsletter 237: Unicycles, Evolution, Chasm
PurelyFunctional.tv Newsletter 236: Contrarians, Software, Side Projects
PurelyFunctional.tv Newsletter 235: 10x Programmers, Types and Design, Deep Learning
PurelyFunctional.tv Newsletter 234: 50% off, Teams, War
PurelyFunctional.tv Newsletter 233: Parasites, Carpenters, Re-frame
PurelyFunctional.tv Newsletter 232: AI, Jobs, Batman
PurelyFunctional.tv Newsletter 231: Luna, Beautiful, Abstraction
PurelyFunctional.tv Newsletter 230: Brutalism, Delays, Characters
PurelyFunctional.tv Newsletter 229: Concurrency, Declarative, Addiction
PurelyFunctional.tv Newsletter 228: Klipse, Cortex, Performance
PurelyFunctional.tv Newsletter 227: Drama Edition
PurelyFunctional.tv Newsletter 226: Hacking+Ruby+Clojure
PurelyFunctional.tv Newsletter 225: Spec, Deep Learning, New Orleans
PurelyFunctional.tv Newsletter 224: Dune, Leiningen, CIDER
PurelyFunctional.tv Newsletter 223: The Clojure Density of the Universe
PurelyFunctional.tv Newsletter 222: Laziness, core.async, and Re-frame
PurelyFunctional.tv Newsletter 221: Trampolines, Typing, and Feeling Good
PurelyFunctional.tv Newsletter 220: Re-frame Components
PurelyFunctional.tv Newsletter 219: Clojure/West
PurelyFunctional.tv Newsletter 218: Lisp and Flow
PurelyFunctional.tv Newsletter 217: Re-frame
PurelyFunctional.tv Newsletter 216: ClojureScript vs JavaScript
PurelyFunctional.tv Newsletter 215: Clojure and Generative Testing
PurelyFunctional.tv Newsletter 214: JVM Fundamentals for Clojure Sale Begins
PurelyFunctional.tv Newsletter 213: Clojure and the JVM
PurelyFunctional.tv Newsletter 212: Clojure's simple bravery
PurelyFunctional.tv Newsletter 211: Collaborative Clojuring, SICP, Union Types
PurelyFunctional.tv Newsletter 210: CLJS: Externs inference, Why CLJS?, Live editor
PurelyFunctional.tv Newsletter 209: Peter Landin and Christopher Alexander
PurelyFunctional.tv Newsletter 208: Alan Kay
PurelyFunctional.tv Newsletter 207: Guy Steele, Jr.
PurelyFunctional.tv Newsletter 205: Parallelism, Reducers, Datomic
PurelyFunctional.tv Newsletter 204: Artificial, Mutants, Causal Laws
PurelyFunctional.tv Newsletter 203: Video Deluge, Salaries, JVM, Clojure Remote
PurelyFunctional.tv Newsletter 202: The Clojure/conj edition
PurelyFunctional.tv Newsletter 201: Consulting, Wizards, Looking Glass
PurelyFunctional.tv Newsletter 200: Patterns, Bell Labs, Aliens
Clojure Gazette 199: Clockwork, Personal Computing, Fun
Clojure Gazette 198: Alan Kay, The Matrix, John Hughes
Clojure Gazette 197: core.match, DSLs, and functional salaries
Clojure Gazette 196: We've got links again!
Clojure Gazette 195: The next conference frontier
Clojure Gazette 194: OOP: Why the bashing?
Clojure Gazette 193: Where are the good FP books?
Clojure Gazette 192: Composition is about Decomposing
Clojure Gazette 191: Where does Clojure shine?
Clojure Gazette 190: Reusability and Composition
Clojure Gazette 189: Expertise sounds mystical
Clojure Gazette 188: Separation of concerns
Clojure Gazette 187: Who won the language wars?
Clojure Gazette 186: How Small Abstractions Help Beginners
Clojure Gazette 185: What is Functional Programming?
Clojure Gazette 184: The Onslaught of States
Clojure Gazette 183: The Magic of Abstraction
Clojure Gazette 182: The Joy of Programming to Learn
Clojure Gazette 181: Leaps of Abstraction
Clojure Gazette 180: "How do you structure your apps?"
Clojure Gazette 179: Trade user stories for hammock time
Clojure Gazette 178: The Biggest Waste in Our Industry
Clojure Gazette 177: The Hidden Costs of Abstraction
Clojure Gazette 176: The Ultimate Abstraction
Clojure Gazette 175: Can larger abstractions help more than they hurt?
Clojure Gazette 174: Deepening the tree
Clojure Gazette 173: Dealers of Abstraction
Clojure Gazette 172: Comparing designs from different contexts
Clojure Gazette 171: The Structure of Structure
Clojure Gazette 170: Continuous Evolution
Clojure Gazette 169: Web, Art, Nomads
Clojure Gazette 168: Podcasts and Statistics
Clojure Gazette 167: Cider, Jepsen, Naid
Clojure Gazette 166: Dead code, Bias, Books
Clojure Gazette 165: Newbie, Open Source, Tufte
Clojure Gazette 164: Simplicity, Lists, Jobs
Clojure Gazette 163: Conference, REPL, Tuples
Clojure Gazette 162: Grace Hopper, Fork, Lisp
Clojure Gazette 161: Design Patterns, ClojureScript, Learning
Clojure Gazette 160: Om Next, Fairy Tales, Lambda
Clojure Gazette 159: Overtone, Boot, Specter
Clojure Gazette 158: Survey, Mystics, Embodiment
Clojure Gazette 157: Om Next, Opportunity Grants, Refinement Types
Clojure Gazette 156: Martin Luther King, Microservices, Naming
Clojure Gazette 155: Labor, Internet, Datomic
PurelyFunctional.tv Newsletter 206: Fractals, Reagent, McCarthy
Clojure Gazette 154: Parentheses, Interactivity, Speaking
Clojure Gazette 153: Survey, CIDER, Om Next
Clojure Gazette 152: Static, Dynamic, Business
Clojure Gazette 151: Top Down, Emacs, CQRS
Clojure Gazette 150: Creativity, Runtime, Documentation
Clojure Gazette 149: London, Om/Next, CIDER
Clojure Gazette 148: Performance, Learning, Eventual Consistency
Clojure Gazette 147: Evidence, Denotation, Alan Kay
Clojure Gazette 146: Refactoring, Structural Typing, Clojure Remote
Clojure Gazette 145: Subversive thoughts inside.
Clojure Gazette 144: Can manipulating deep data structures be faster than update-in?
Clojure Gazette 143: Strange Loop, Activism, Typed Clojure
Clojure Gazette 142: Hoplon, React Native, Lisp-Flavored Erlang
Clojure Gazette 141: Spam, Transit, Modules
Clojure Gazette 140: Devcards, Smalltalk, React Native
Clojure Gazette 139: core.async, Haskell, Pairing
Clojure Gazette 138: Tenure, Adventure, Zines!
Clojure Gazette 136: Typed Clojure Core Annotations
Clojure Gazette 135: Transients with Core Typed
Clojure Gazette 134: Custom documentation for Clojure
Clojure Gazette 133: TDD in Clojure on Android
Clojure Gazette 132: Integrating ClojureScript with the Javascript ecosystem
Clojure Gazette 137: Knuth, Om, Objects
Clojure Gazette 131: YAGNI, LaTeX, React
Clojure Gazette 130: iOS, Types, Web
Clojure Gazette 129
Clojure Gazette 128
Clojure Gazette 127
Clojure Gazette 126
Clojure Gazette 125
Clojure Gazette 124
Clojure Gazette 123
Clojure Gazette 122
Clojure Gazette 121
Clojure Gazette 120
Clojure Gazette 119: Continuous Integration Special
Clojure Gazette 118
Clojure Gazette 117
Clojure Gazette 116
Clojure Gazette 115
Clojure Gazette 114
Clojure Gazette 113
Clojure Gazette 112
Clojure Gazette 111
Clojure Gazette 110
Clojure Gazette 109
Clojure Gazette 108
Clojure Gazette 107
Clojure Gazette 106
Clojure Gazette 105
Clojure Gazette 104
Clojure Gazette 103
Clojure Gazette 102
Clojure Gazette 101
Clojure Gazette 100
Clojure Gazette 1.99
Clojure Gazette 1.98
Clojure Gazette 1.97
Clojure Gazette 1.96
Clojure Gazette 1.95
Clojure Gazette 1.94
Clojure Gazette 1.93
Clojure Gazette 1.92
Clojure Gazette 1.91
Clojure Gazette 1.90
Clojure Gazette 1.89
Clojure Gazette 1.88
Clojure Gazette 1.87
Clojure Gazette 1.86
Clojure Gazette 1.85
Clojure Gazette 1.84
Clojure Gazette 1.83
Clojure Gazette 1.82
Clojure Gazette 1.81
Clojure Gazette 1.80
Clojure Gazette 1.79
Clojure Gazette 1.78
Clojure Gazette 1.77
Clojure Gazette 1.76
Clojure Gazette 1.75
Clojure Gazette 1.74
Clojure Gazette 1.73
Clojure Gazette 1.72
Clojure Gazette 1.71
Clojure Gazette 1.70
Clojure Gazette 1.69
Clojure Gazette 1.68
Clojure Gazette 1.67
Clojure Gazette 1.66
Clojure Gazette 1.63
Clojure Gazette 1.62
Clojure Gazette 1.61
Clojure Gazette 1.60
Clojure Gazette 1.59
Clojure Gazette 1.58
Clojure Gazette 1.57
Clojure Gazette 1.56
Clojure Gazette 1.55
Clojure Gazette 1.54
Clojure Gazette 1.53
Clojure Gazette 1.52
Clojure Gazette 1.50
Clojure Gazette 1.51
Clojure Gazette 1.49
Clojure Gazette 1.48 (correction)
Clojure Gazette 1.48
Clojure Gazette 1.47
Clojure Gazette 1.46
Clojure Gazette 1.45
Clojure Gazette 1.44
Clojure Gazette 1.43
Clojure Gazette 1.42
Clojure Gazette 1.41
Clojure Gazette 1.40
Clojure Gazette 1.39
Clojure Gazette 1.38
Clojure Gazette 1.37
Clojure Gazette 1.36
Clojure Gazette 1.35
Clojure Gazette 1.34
Clojure Gazette 1.33
Clojure Gazette 1.32
Clojure Gazette 1.31
Clojure Gazette 1.30
Clojure Gazette 1.29
Clojure Gazette 1.65
Clojure Gazette 1.28
Clojure Gazette 1.64
Clojure Gazette 1.27
Clojure Gazette 1.26
Clojure Gazette 1.25
Clojure Gazette 1.24
Clojure Gazette 1.23
Clojure Gazette 1.22
Clojure Gazette 1.21
Clojure Gazette 1.20
Clojure Gazette 1.19
Clojure Gazette 1.18
Clojure Gazette 1.17
Clojure Gazette 1.16
Clojure Gazette 1.15
Clojure Gazette 1.14
Clojure Gazette 1.13
Clojure Gazette 1.12
Clojure Gazette 1.11
Clojure Gazette 1.10
Clojure Gazette 1.9
Clojure Gazette 1.8
Clojure Gazette 1.7
Clojure Gazette 1.6
Clojure Gazette 1.5
Clojure Gazette 1.4
Clojure Gazette 1.3
Clojure Gazette 1.2
Clojure Gazette 1.1