
Coffee Is Hard - mrleiter
https://www.stilldrinking.org/coffee-is-hard
======
godot
As a geek and a fan of 80s-90s PC games (not just Sierra but also LucasArts
adventure games and so on), this was a super entertaining read on its own; but
I also enjoyed some of these insights about life in general from it:

> Living is mostly a series of repetitive and unrelated tasks. It makes sense
> that the most tedious things to code are the tedious things that just have
> to be done. There are no life lessons or gymnastic skills involved in doing
> dishes, there’s no underlying theory of housework that will reveal itself
> after a thousand vacuum cleanings. Making coffee is a boring sequence of
> steps people feel stupid for getting wrong, even though they’re
> statistically doomed to screw it up now and then. The hard parts of of life
> are driving to work, eating properly, flossing, ....

Perhaps I found it particular insightful because I just became a parent a year
ago. Prior to this, I thought I had optimized my life so well that most
tedious work were gone from my life; with the peak being having switched to
remote work and not having to even commute anymore.

Then I became a parent, and had to come to terms again with having to do a
long series of repetitive and routine work every day -- washing bottles,
dishes, changing diapers, etc. It was a bit of a cultural shock to my system
since over the past 10 years I had slowly gotten used to / gradually removed
or optimized aspects that are frictions / repetitiveness / tedious routines
from my life; and suddenly it's 10x of it all coming back. Over the past year,
I've come to realize this is what life is, which is exactly as the author
said.

~~~
monktastic1
At the risk of sounding hippie, "tedious" and "boring" are emotional reactions
_to_ the chores, and not attributable to the chores themselves. We don't
_have_ to do that.

"Everything in life is miraculous. It rests within the power of each of us to
awaken from a dragging nightmare of life made up of unimportant tasks and
tedious useless little habits to see life as it really is, and to rejoice in
its exquisite wonderfulness." ― James Branch Cabell, The Cream of the Jest

Not that I've remotely mastered it, but I think there's a lot of wisdom in
there.

~~~
Loughla
Not to sound too much like a hippie, either, but I learned (actually after
having a kid as well) that when people talked about enjoying the ride, that's
what they were talking about - the tedious stuff.

I always assumed it meant travel more and look for adventure, but I have come
to understand that 'enjoying the ride' in your life, not always just pursuing
some _next thing_ is about enjoying the tedium.

Some of my favorite memories of my young children is the time we spent washing
dishes together or watching them vacuum up the rugs and chase the cat with the
broom.

It's all about enjoying the ride, man.

~~~
throw0101a
Sisyphus may disagree. :)

* [https://en.wikipedia.org/wiki/Sisyphus](https://en.wikipedia.org/wiki/Sisyphus)

~~~
jschwartzi
The horrifying aspect of Sisyphus is that he is doomed to do it for all
eternity. Whereas we have only a limited time to cherish or despise every
carpet vacuumed until we die. I believe that we transcend the mundane every
time we embrace it and truly live it instead of wishing desperately to be
doing something else.

~~~
basq
I leave Sisyphus at the foot of the mountain. One always finds one's burden
again. But Sisyphus teaches the higher fidelity that negates the gods and
raises rocks. He too concludes that all is well. This universe henceforth
without a master seems to him neither sterile nor futile. Each atom of that
stone, each mineral flake of that night-filled mountain, in itself, forms a
world. The struggle itself toward the heights is enough to fill a man's heart.
One must imagine Sisyphus happy.

Albert Camus

~~~
tripzilch
Hah. I only ever encountered the last sentence of that quote and I thought it
was an imperative.

------
AdmiralAsshat
This reminds me of Scribblenauts. There was an interview with one of the devs
at the E3 before it was released and he discussed how much time went into the
game simply to pad the internal "dictionary" and conjure up not just things,
but also make sure that those things could interact with other things (e.g.
"bread" should be able to interact with "toaster" to make "toast").

I don't remember if it was the dev talking about _his own team_ , or if he was
talking about players interacting with the demo, but he mentioned that some
people were attempting to summon a list of ingredients (flour, eggs, sugar,
milk, etc.) and throw them into a bowl and then into a heat source to see if
they could make cookies within the game.

~~~
throwaway66920
I always thought that game must have an incredible ontology underneath it that
would be amazingly useful to other ventures...

I also recall playing it and, at a certain point, realizing that I was
stubbornly uncreative in using the variety of options available to me.

In retrospect maybe that wasn’t true, and the game managed the massive
potential for variance by condensing things into smaller buckets. Either way
those were some brave developers agreeing to that project scope.

~~~
AdmiralAsshat
Take a look for yourself:

[https://gamasutra.com/view/news/300313/Scribblenauts_dev_sha...](https://gamasutra.com/view/news/300313/Scribblenauts_dev_shares_lessons_learned_in_making_its_huge_object_library.php)

~~~
scrollaway
The twitter thread has been deleted :( This is the only reference to it I can
find:

[https://www.reddit.com/r/TheMakingOfGames/comments/6ibtrf/sc...](https://www.reddit.com/r/TheMakingOfGames/comments/6ibtrf/scribblenauts_hand_authored_vs_systems_text/)

------
gameguy43
Amped to see Still Drinking on HN again.

If you enjoy devouring this guys writing, buy his book, “And Then I Thought I
Was A Fish” (I think it’s the “novel” he references the game being based on?).
I really really liked it. Link at the bottom of the original post.

The other book is just a collection of blog posts. It’s /okay/. But I really
really liked ATITIWAF. The kind of book that makes you want to try your hand
at writing.

—a random internet fan.

~~~
meroes
I would also recommend his story about acid to anyone

[https://www.stilldrinking.org/the-episode-
part-1](https://www.stilldrinking.org/the-episode-part-1)

~~~
mos_basik
Wow, that was a ride. I could think of worse things to do in a Friday night
than read that for the past three hours. Thanks for linking. I'm now much more
interested in reading the book and the rest of his blog.

------
caseymarquis
Having enjoyed the article, it also reminded me why I never once finished
making a game.

Instead of seeing the example code and thinking 'Ah, yes, that code gets
something done in a straight-forward way.', I instead think, 'I'm pretty sure
I could build a scripting engine and turn most of that code into ajax calls to
json files. Of course, I'd then have to build an in-game editor which allowed
you to modify the contents of the json files while playing the game with hot-
swapping content. Huh, art? Plot? Fun? Oh, yeah, I guess I'll probably need
those... eventually...'

Fortunately, trying (and failing) to make games led me to realize that I
really love programming and building maintainable systems.

~~~
acbart
This speaks to me. I used to spend my childhood tweaking and retweaking my
game engines. Never really got my games past the cool demo phase. I guess I
also now stay with maintainable systems too.

------
jasonkester
The Coffee part of this article resonates with me.

I have a stovetop espresso machine, and I'm constantly amazed at the new and
ingenuous ways I come up with to mess it up. Making coffee before you've had
your morning coffee is the great connundrum of our generation. Here's a short
list of failure modes I've run up against:

    
    
      - Machine on stove, no water
      - Machine on stove, no coffee grounds
      - Machine on stove, completely empty
      - Coffee and water in machine, machine in refrigerator
      - Coffee grounds in water reservoir
      - Coffee grounds in brewed coffee reservoir
      - Brewing correctly, brewed coffee reservoir still filled with water from washing
      - Brewing correctly, head off to work
      - Brewing correctly, coffee grounds returned to microwave
    

That's just a subset, and amazingly I still come up with a new one every few
weeks.

~~~
jmiskovic
The coffee part also resonated stongly with me, for a completely different
reason :)

I spent last year thinking on how to implement a text-only simulation that
could cope with just about any situation. Most of my models were mentally
evaluated on this "simple" task of making coffee. The design I came up with
(still to be implemented) is not code driven, but data driven. Instead of
executing bunch of nested if-elses, I'd have a big list of tuples that contain
<action, preconditions, reaction>. When action is performed upon object, this
list is traversed. For each element, it's preconditions are compared to
current world state. Based on this criteria the most suitable element is
selected, and it's reaction is applied to modify world's state.

Your list could be used as preconditions for action of brewing coffee; each
would produce different results ranging from nice coffee to yucky mud or
broken machine. I'd like to include a nice built-in editor that could be
utilized to quickly modify or add reactions, objects, or world state
variables. I have most of it figured out but it's a lot of work to put
together all the pieces.

~~~
Doxin
Sounds like it could make for a fun variation on the text adventure, where
having stuff go wrong is at least as amusing as actually solving puzzles.

------
alchemism
There is a famous Zen saying (which) describes nothing-yet-everything about
this:

“Before Enlightenment, chop wood and carry water.

After Enlightenment, chop wood and carry water.”

~~~
bravura
One day the Master [Joshu] announced that a young monk had reached an advanced
state of enlightment. The news caused some stir. Some of the monks went to see
the young monk [Kyogen]. "We heard you are enlightened. Is that true?" they
asked.

"It is," he replied.

"And how do you feel?"

"As miserable as ever," said the monk.

------
TurkishPoptart
I really like this guy's writing and am grateful that he shared some of the
coding challenges. I'd really like to be able to program games like this, and
while I'm not a programmer, I'd like to learn how. In TFA he shares some of
the code to check the coffee "state":

>'LOOK AT COFFEE MAKER': () => { if( State.scene.state.coffeedrunk ) { return
"The coffee maker has done its job and mercifully drained the last life out of
the old and savaged grounds." } else if( State.scene.state.brewed ) { return
"The coffee maker has a fresh pot of what is likely coffee in it." } else if(
State.scene.state.brewing ) { return "The coffee maker is brewing." } else if(
State.scene.state.waterinmaker ) { return "The coffee maker has fresh water in
it, and is ready to brew a terrible cup of coffee." } else { return "Makes
coffee. Whodathunk? There's no water in it, and you don't have any fresh
coffee, but the grounds already in there have only been used twice and can't
be THAT moldy." } }

This is JavaScript right? Is that how these sorts of games are coded? Would
learning this be the best way to go about creating games? Thanks.

~~~
nebulous1
If you want to create a game you could go with GameMaker or Construct 2 or
Adventure Game Studio (if you want an adventure game like SQ1 that he's
describing). These are applications that provide you with an interface you can
interact with, along with an associated programming language in order to make
things happen. So you can draw levels and place objects with your mouse, and
then make them move with a script.

GameMaker has a non-programming method but I don't know how capable it really
is. I wouldn't worry too much about what language you learn, at your stage
it's more about the general knowledge of how to get things moving.
Transitioning to another language at a later point won't be difficult.

~~~
johnmaguire2013
Nuclear Throne is the best example of a solid game made in Game Maker that
comes to my mind.

Looks like Spelunky, Undertale, and Hyper Light Drifter were as well.

~~~
akx
Also Baba Is You.

------
aidenn0
As an example of one of the more notorious puzzles in the Sierra games of
yesteryear, in Space Quest, you have a sand skimmer (think Luke's sand
speeder).

When you get to where you are going, you need to sell it for money. If you get
out without removing your keys, it is stolen. Then someone offers you enough
money to continue on in the game. If you say yes, then much later in the game
you die because you don't have a jetpack. If you say no, they offer to throw
in their old jetpack. There are literally no hints that a jetpack would be
related to selling your skimmer. You just have to reload old saves and try
random things until you get one. And hope you have enough saves that you
didn't overwrite one from before you sold the skimmer, or you need to start
the whole game over.

~~~
SamBam
Having played most of the Sierra and LucasArts games when I was much younger,
I feel, though cannot confirm, that there was a shift in these kinds of games
such that you couldn't actually progress too far beyond a fail state.

That is, by about Space Quest II or III, you could still take an action that
would lead to your death within a minute or so, but you could no longer take
actions that would lead you to dying/being unable to finish many, many scenes
later.

Can anyone confirm this?

And I feel like the later LucasArts games (Day of the Tentacle, etc) you could
never actually be in a fail state.

~~~
aidenn0
LucasArts had a very strong bent towards not putting you in a fail state.

My understanding is that Sierra was intending to be more fair as time went on,
but they had a bias against playtesting so there were still some big goofs
that got through.

I think all of the first 5 KQ games had ways to lose items that would later be
needed to win.

KQ VI had a branching path and if you picked the "easy" branch you were
unlikely to end up in a very unwinnable state, but there was no indication at
the time of the branch that you were doing so (IIRC you were about to be
burned alive and you could either use some maid's clothes to put out the fire,
destroying the clothes, or cast a spell that required boiling some water,
using up some component). With a hint-book it took me several attempts to make
it through the "hard" path.

~~~
cogman10
I never got full points on that game. I think I wasted months on it before
giving up.

Maybe my favorite KQ memory was KQ 3. Just getting out of the house took my
family weeks. Every single misstep turned you into dust. And once you figured
it all out, just walking down that stupid path you were 1 pixel away from
death in some places.

Those were some fun games.

~~~
aidenn0
The @#$#@@$ key on top of the closet man...

~~~
coded
Heh- same with the handle/lever in the hole in the tree...

------
password1
It was so well written that he made me want to play his purposefully
frustrating game and I'm still disappointed he didn't provide a link to
download it.

~~~
whatshisface
The first puzzle is the search for the game itself.

~~~
bap
If you download it from the wrong mirror..

------
nateburke
“You are the master of your universe, and yet you are dripping with rat blood
and feces. Your enormous mind literally vegetating by your own hand. I have no
doubt that you would be bored senseless by therapy, the same way I’m bored
when I brush my teeth and wipe my ass. Because the thing about repairing,
maintaining, and cleaning is it’s not an adventure. There’s no way to do it so
wrong you might die. It’s just work. And the bottom line is, some people are
okay going to work, and some people … well, some people would rather die. Each
of us gets to choose.”

—the psychologist from ‘Pickle Rick’

------
SamBam
Always pining for more adventure games that remind me of the Sierra/LucasArts
games of my youth. Can we start a thread here of great modern examples?

I recently played Machinarium, and enjoyed it a lot. My wife and I played it
for many evenings on the couch, and computer games are not her thing at all.

I'm finishing up Infamous Machine on my Android phone. It's a fairly silly,
small game, but a direct homage to LucasArts games like Day of the Tentacle.

~~~
manifestsilence
Neverhood and Samorost are also fun. The latter is by the Machinarium
creators.

------
ergothus
> Most treasured memories are agonies that won’t get out of the mind and have
> to get turned into a character-building story to maintain sanity,

My world is changed by how obvious yet insightful this is.

------
deckar01
Waiting for a Haskell programmer to explain why this is an artifact of
procedural languages and that making coffee should be abstracted as the death
of coffee caused by hot water.

~~~
phlakaton
Coffee is just a fixpoint of the coffee-maker state transition monad; what's
the problem?

------
deng
I really recommend the author's book "And then I thought I was a fish". Not
only is it incredibly funny, in my opinion this is one of the best
descriptions of a drug-induced psychosis out there. It is really pretty rare
that someone can remember that much from such an episode and also has the
ability to put it to paper.

------
timClicks
I still regret that I was never able to finish any of those games. Leisure
Suit Larry, Police Quest, Space Quest and others. I poured hours into them and
never got to the end. The worst was Kings Quest V. I really wanted to get that
one, but I'm still left with not much more than regret, guilt and anger.

~~~
40four
We played through Kings Quest (V? I can't remember) as a class when I was in
grade school. My math/ science teacher had a copy and would let us play for a
few minutes at the end of the day after assignments were done.

We did eventually beat it after much trial and error, but only with the help
of a cheat sheet she had printed off :) I do remember it being brutally hard.

------
acomjean
Adventure game frustration was solved, and used to make some classics.

[https://grumpygamer.com/puzzle_dependency_charts](https://grumpygamer.com/puzzle_dependency_charts)

some adventure game puzzles became way too obtuse to be fun.

[https://www.oldmanmurray.com/features/77.html](https://www.oldmanmurray.com/features/77.html)

~~~
wool_gather
Oh, the dependency graph article is very interesting. Reminds me of this logic
programming tutorial, writing a (tiny) adventure game (with Prolog
specifically):
[http://www.amzi.com/AdventureInProlog/a1start.php](http://www.amzi.com/AdventureInProlog/a1start.php)

------
shurcooL
This seems like a high quality article and has many upvotes, but I found it
hard to read, and unfortunately ads made it even harder, so I couldn't get
through it. I wonder if I'm in the minority because I don't use an ad blocker?

~~~
pavel_lishin
Oh my god, it's so bad with the adblocker disabled. Does the author know?

------
rsync
"There are no life lessons or gymnastic skills involved in doing dishes,
there’s no underlying theory of housework that will reveal itself after a
thousand vacuum cleanings."

This is false.

Doing dishes can involve gymnastic skills _at any moment_ and the deepest
truths of life, the universe - and everything - can be found in the simplest
of chores.

------
ctdonath
I'd be happy to articulate the hard way to make a really good cup of coffee,
starting with ordering green coffee beans and proceeding thru barista tools
few are familiar with. (Might take a while to write.) Plenty of ways for the
process to go wrong, including lethally.

------
bluejay2387
Take a look at rules engines and Expert Systems technology. Its a more
declarative way to handle complex logic that allows you to state facts and let
a inference engine handle the nested nature of dependent logical conditions.
It will decrease the amount of work needed to code this part of your game.
With your current approach you end up in the logic programming version of
Node's call back hell before we had tools like async await. As an aside, I run
into developers taking the same approach with business logic in enterprise
apps all the time -- with the same consequences.

~~~
erikpukinskis
Callback hell is easily avoided by naming callbacks.

Async/await has its own footguns, except they’re so difficult to debug that
you need static analysis tools (Typescript or ESLint) to use them safely.

It’s one of that most special class of APIs that let you add a bug in one part
of the system (e.g. forgetting an await) that causes a totally different part
of the system to fail inscrutably. (Although really it’s Promises that unlock
this ability, but potato/potahto.)

Callbacks are easily debugged with just a normal JavaScript interpreter.

------
czinck
Probably worth noting that he also wrote the very well done "Programming
Sucks" article, [https://www.stilldrinking.org/programming-
sucks](https://www.stilldrinking.org/programming-sucks) and the original HN
discussion
[https://news.ycombinator.com/item?id=7667825](https://news.ycombinator.com/item?id=7667825).
If you hadn't read that post, definitely worth it.

~~~
comicjk
I like the core description of programming, but the framing - that programming
is tougher than manual labor - is childish. Life is not a competition for
whose job is hardest, and if it were, no one on Hacker News would win it.

~~~
Doxin
> Life is not a competition for whose job is hardest

I think the author agrees, and wrote the article mostly as a response to
people who think it _is_.

------
aasasd
I'm having flashbacks to late 90s–early 2000s, when oldschool adventures were
on their last legs and I still thought that I could make one just by putting
together a hundred random puzzles.

------
dottrap
For those who love Space Quest, check out Snail Trek. It's like a modern made
love letter to Space Quest.

[http://snailtrek.com](http://snailtrek.com)

------
esotericsean
Is there a download somewhere? Or is this still in development?

------
simpsond
If coding coffee is hard, coding espresso is really hard. More steps, more
precision required... just like making espresso in reality. I like the theme
of the article.

------
cagenut
Thinking about stuff like this is fascinating in the context of just how much
massively more of a big deal its going to become very very soon.

Specifically, if you draw the trend line on the size and price of
kuka/fanuc/abb robot arms, and you put UR's models in there for today, we are
really only 3 - 5 years away from you having a robot arm sitting on your
kitchen counter that you can script to make your coffee for you.

So all of these bugs will become real :)

~~~
RugnirViking
While UR robots are techincally collaborative robots (rated safe for operation
without a cage around them), I am sure that putting them into people's homes
is asking for trouble.

~~~
cagenut
trouble's coming!

------
pugworthy
It's a really fun read, but it's far more satire and humorous interpretation
of game design and development than it is a real treatise on those topics.

------
Torwald
If you like doing your own adventure game, this may be interesting:

[http://www.skotos.net](http://www.skotos.net)

------
Rediscover
I frequently find the essays on stilldrinking.org entertaining. My favorite is
still the one on why eCigarettes suck.
[https://www.stilldrinking.org/seriously-make-a-better-
ecigar...](https://www.stilldrinking.org/seriously-make-a-better-ecigarette)

------
misrab
Love this!

> Avoiding premature death is a process of not occupying the same space as
> fast-moving metal or motivated microbes. Living is mostly a series of
> repetitive and unrelated tasks.

------
pololee
> I like Git commit messages. Used well, I think they’re one of the most
> powerful tools available to document a codebase over its lifetime.

1000000% agree!

~~~
sulZ
I think that you may have replied to the wrong thread[0]

[0]
[https://news.ycombinator.com/item?id=21289827](https://news.ycombinator.com/item?id=21289827)

~~~
pugworthy
I'm curious why people would have voted this person's comment down, simply for
a mistake. Seems sort of harsh to do that to someone's reputation simply for a
mistake.

~~~
jodrellblank
Because almost everyone who comes to this thread has a better experience if
that comment is buried down at the bottom in "don't bother reading territory".

------
hinkley
His thesis at the end explains all of the memes about Link being a monster
with a grudge against anyone who own pottery.

------
polynomial
> There are no life lessons (...) involved in doing dishes

Couldn't be more wrong.

------
yters
Everyone is unhappy these days. It is not cool to be happy and satisfied.

------
anonu
tldr; They even offered some decent life strategies: look at everything, pick
up anything you can, avoid wizards, and always haggle for jetpacks.

Loved reading this...

