RSSAmplifier

Blog

John A De Goes

ramblings of a geek

degoes.netRSS feed ↗20 posts

Latest posts

Everyone Is Religious—Even You

Your spouse cheats on you. You discover it on a Tuesday afternoon—a text message left open, unmistakable. Now what? Your thirteen-year-old screams “I hate you.” You see a problem, but your spouse sees legitimate emotional expression. You cannot both be right. The child is watching. You step into a voting booth. The ballot asks whether to abolish capital punishment. You have sixty seconds. In each…

The Problem with the Problem of Evil

In my own conversion from atheism to Christianity, I had to wrestle with a lot of intellectual objections to both theism, in general, and to Christianity, in particular. Strangely, however, one obstacle I did not have to overcome was the so-called problem of evil , widely touted as a major challenge for Christianity. In this post, I want to explain the problem of evil, show why it’s not a problem…

Leaving Atheism for Good

I was born into a non-religious family. One afternoon shortly after the birth of my first brother, this all changed dramatically. A door-to-door evangelist paid a visit to my mother. She inherited her beliefs and her stubbornness from her father, an ornery cowboy from Wyoming who hated religion. But this afternoon, she welcomed the evangelist into our home and embraced his message of repentance…

A Splendid Scala Journey

I have been a Scala developer for 15 long years, which makes me one of the oldest Scala programmers around. My journey began when, as VP of Engineering at a San Francisco startup, I needed to choose a programming language for our new ad-tech platform. Without hesitation, I chose Scala, because I had a delightful experience dabbling with functional programming in Java, where I had spent the…

New Scala Build Tool

I previously made a case that Scala needs coordinated and radical changes in order to remain relevant to industry. On the tooling front, the two areas where Scala needs the most help are IDEs and build tools. In this post, I’d like to outline what I believe are the three separate paths to a best-in-class build tool, and share my thoughts on each strategy. Path 1: Ditch & Run The first path to…

Scala Resurrection

As a long-time user and one of the earliest evangelists of the Scala programming language, and as CEO of a tech company that has heavily invested in Scala open source, I’ve been acutely interested in growing Scala adoption within industry. Scala 3 has the most powerful static type system and metaprogramming facilities in any major programming language. The language’s strength in designing robust…

Native Config Lands in ZIO 2.0

In a first for functional effect systems, ZIO 2.0 brought integrated metrics and logging front-ends directly into the core, which enables application developers to easily track and log what’s going on inside their applications for enhanced observability. Now, some months downstream of this seminal release, we’ve witnessed rapid adoption of these features by ZIO ecosystem projects, as well as by…

ZIO 2.0 Released

On August 3rd, 2020, the ZIO community released ZIO 1 —itself the product of 3 years of intensive research & development and continuous refinement based on commercial adoption and early production feedback. The initial release of ZIO exceeded expectations, introducing dozens and dozens of name-brand companies to the power of functional Scala. As ZIO had done since it was called the “Scalaz 8 IO…

Supporting Martin Odersky & Other Scala OSS Developers

I’m a technologist and a maker. I love to build. I am not interested in corporate politics or virtue signaling. More than that, I believe most drama in tech is rooted in professional jealousy and personal insecurity . I have no desire to participate in such drama. I’d rather focus on creating beautiful and amazing technology that changes the world for the better, and empowering others to do the…

Improving the Scala Community Through Personal Action

“We but mirror the world. All the tendencies present in the outer world are to be found in the world of our body. If we could change ourselves, the tendencies in the world would also change. As a man changes his own nature, so does the attitude of the world change towards him. This is the divine mystery supreme. A wonderful thing it is and the source of our happiness. We need not wait to see what…

Improvements to the ZIO Organization

In the past few months, the TypeLevel organization has become increasingly hostile toward the ZIO community (whose software directly competes with TypeLevel): Rob Norris removing an existing Quill integration from Doobie because Quill decided to move to the ZIO organization Rob Norris opting to not help a user specifically because they were using Skunk with ZIO Ross Baker and Christopher Davenport…

An Introduction to Functional Design

Functional programming doesn’t need to be complex, confusing, or theoretical. Instead, functional programming can be simple, natural, and practical, helping you solve problems with more power and more joy than ever before. A key to unlocking this potential is understanding functional design , a framework for applying functional programming to real world problems that I have been teaching at…

ZIO 1.0 Released

On June 5th, 2017, I opened an issue in the Scalaz repository on Github. I argued Scalaz 8 needed a powerful and fast data type for async programming, and encouraged to contribute to Scalaz by my friend Vincent Marquez, I volunteered to build one. This was not my first foray into async and concurrent programming. Previously, I had designed and built the first version of Aff , and assisted the…

Effect Tracking Is Commercially Worthless

Effect tracking is not a valid reason to use functional effect systems, because effect tracking is commercially worthless. More precisely, companies that pay their software developers to “track effects” will not obtain a return on this investment, but rather, will lose money. In this post, I’ll explain why. Side Effects The whole notion of “effects” doesn’t make a lot of sense outside functional…

A Brief History of ZIO

When I started what would eventually become ZIO , my goal was to give Scala a better asynchronous effect system, one that had some of the high-end features of Haskell’s IO monad, including cancellation of running effects and easy concurrency. While developing this effect system, I was teaching a lot of Scala developers functional programming professionally, covering topics like higher-kinded type…

A Developer's Guide to Surviving the Coronapocalypse

The world has changed unimaginably in the past few weeks. Watching a show on Netflix last night, I was struck by how everyday events now seem so completely alien: traveling between countries, eating out at restaurants, using subways without face masks. That was the world of a few weeks ago. A world that, with each passing day, becomes an ever-receding memory. Without question, the COVID-19…

A Glossary of Functional Programming

I’ve taught functional programming for years now, each time experimenting with different ways of teaching core concepts. Over time, I’ve collected and converged on simple (but reasonably precise) pedagogical definitions for a range of functional concepts. In this post, I’ll share those definitions with you, in my first ever, Glossary of Functional Programming . Enjoy! Glossary Abstraction . An…

The False Hope of Managing Effects with Tagless-Final in Scala

Tagless-final is a technique originally used to embed domain-specific languages into a host language, without the use of Generalized Algebraic Data Types. In the Haskell community, tagless-final still refers to a way of creating polymorphic programs in a custom DSL that are interpreted by instantiating them to a concrete data type. In the Scala community, however, tagless-final is used almost…

Why I'm Stepping Back from Scalaz

Many of my readers know I have promoted and contributed to Scalaz for a little over two years now. After many wonderful collaborations with some of the most talented Scala developers I know, I have decided to step back from Scalaz, and pull ZIO , my most significant work, into a separate organization—one that is not associated with Scalaz in any way. I hope this post make it clear why I am doing…

Type Classes: When To Use Them, When To Avoid Them

Type classes are a powerful tool for abstraction in functional programming. But they are poorly understood, and often abused. In this post, I want to explain what a type class is—in a way that will be quite foreign to most readers—and offer my own personal recommendations on when you should use type classes to solve a problem, and when you should avoid them. Note: This post assumes you already…