Live data from Hacker News

The Let It Crash Philosophy Outside Erlang

stratus3d.com

21–30 of 35 posts

Re: The Let It Crash Philosophy Outside Erlang

#21
post #4

While 'Let It Crash' is a philosophy, it is greatly aided in Erlang by extremely lightweight threads that communicate with each other via mailboxes.

And the supervisory tree that each process sits within.

And, the fact that an Erlang server is explicitly intended for handling zillions of tiny, independent requests. A request fails? Meh. They'll call again if it's important. What matters now is the next tiny, independent request.

Re: The Let It Crash Philosophy Outside Erlang

#22

Earlier quoted context omitted.

Yes, you tell those people the software is "self healing".

It reminds me of how people love , for marketing purposes, to have technology, say in vehicles, that is "adaptive". In software in general, but particularly in cars, there is nothing I hate more. Because "adaptive" makes people think of a partner that anticipates your needs, but it can't do that, not being intelligent so adaptive ends up being the opposite of responsive .

"unexpected acceleration" in cars comes to mind.

Re: The Let It Crash Philosophy Outside Erlang

#23

Earlier quoted context omitted.

It's helpful in other domains, too. For example, in ETL pipelines, I would greatly prefer to have an entire DAG go down quickly and noisily than to risk having it generate incorrect data. It's the difference between a crappy morning, and a crappy day or even a crappy week.

> a crappy day or even a crappy week Or a crappy discovery at the end of the quarter...

Or crappy decisions.

Re: The Let It Crash Philosophy Outside Erlang

#24

Earlier quoted context omitted.

It's helpful in other domains, too. For example, in ETL pipelines, I would greatly prefer to have an entire DAG go down quickly and noisily than to risk having it generate incorrect data. It's the difference between a crappy morning, and a crappy day or even a crappy week.

Just curious since a lot of my work is on an ETL - what are your favorite DAG libraries/approaches? Some of my ETL workflows can run in parallel with each other because there aren't data dependencies between them, and others should definitely crash loudly

Or ETL approach is all based on elixir (erlang) and it has some drawbacks, but ease of debugging is not one of them. No libraries, just code.

Re: The Let It Crash Philosophy Outside Erlang

#25

This is my biggest criticism of JavaScript: it fails silently quite often. `{}.foo` returning `undefined` is the most common culprit, but there are many other possible causes. Django templates also do this, which causes all sorts of debugging problems.

It's possible to configure Django to display some placeholder ("FIXME", for example) or raise an exception when non-existent variable is accessed in template. It can be enabled in the TEMPLATES configuration. And it's better to enable it early during development because it's extremely hard to enable this in any moderately big project: too many pages begin to fail.

Re: The Let It Crash Philosophy Outside Erlang

#26

Earlier quoted context omitted.

The worst part about javascript failing is a lot of time it doesn't do it at the thing that is the problem. I've run into a lot of cases in node where I passed something not quite right to a crypt library but didn't find out until like 2 pages later. Usually for things that in python would throw an exception immediately.

That's not really a Javascript problem. That's a dynamically typed language problem. Unless you add some kind of assertion/test at the entry point to a library, the failure will always be postponed to the point of use (or silent if it's never used, until the day someone turns a feature on). If the same sort of issue works differently in Python, the Python library has asserts or other tests, or is using the value at a…

It's a weakly typed language problem, static vs dynamic typing has nothing to do with it.

Re: The Let It Crash Philosophy Outside Erlang

#28

Earlier quoted context omitted.

The worst part about javascript failing is a lot of time it doesn't do it at the thing that is the problem. I've run into a lot of cases in node where I passed something not quite right to a crypt library but didn't find out until like 2 pages later. Usually for things that in python would throw an exception immediately.

That's not really a Javascript problem. That's a dynamically typed language problem. Unless you add some kind of assertion/test at the entry point to a library, the failure will always be postponed to the point of use (or silent if it's never used, until the day someone turns a feature on). If the same sort of issue works differently in Python, the Python library has asserts or other tests, or is using the value at a…

No, it's definitely a JavaScript problem. Dynamic languages like Python are perfectly capable of throwing exceptions when you reference a property that doesn't exist.

Failing silently makes sense in a language like C, where performance is a high priority and you can avoid adding assertions for performance. But JavaScript has to add an assertion to return an undefined value anyway, so you're not even getting a performance benefit from it. It's purely bad design with no benefit.

Re: The Let It Crash Philosophy Outside Erlang

#29

Earlier quoted context omitted.

The worst part about javascript failing is a lot of time it doesn't do it at the thing that is the problem. I've run into a lot of cases in node where I passed something not quite right to a crypt library but didn't find out until like 2 pages later. Usually for things that in python would throw an exception immediately.

That's not really a Javascript problem. That's a dynamically typed language problem. Unless you add some kind of assertion/test at the entry point to a library, the failure will always be postponed to the point of use (or silent if it's never used, until the day someone turns a feature on). If the same sort of issue works differently in Python, the Python library has asserts or other tests, or is using the value at a…

Coming from python, my other least favorite javascript-ism is that you can call functions with the wrong number of parameters and it'll just set the missing ones as undefined and assume that's what you meant to do.

Maybe people who are used to js take advantage of this and do it on purpose, but from my perspective all it's done is take mistakes and move the errors farther downstream so that you can't trivially find where the problem started.

If I wanted a function to accept a variable number of parameters or have default values for a parameter that can be omitted, I would much rather have to have to define that behavior per function.

Re: The Let It Crash Philosophy Outside Erlang

#30

Earlier quoted context omitted.

It's helpful in other domains, too. For example, in ETL pipelines, I would greatly prefer to have an entire DAG go down quickly and noisily than to risk having it generate incorrect data. It's the difference between a crappy morning, and a crappy day or even a crappy week.

Just curious since a lot of my work is on an ETL - what are your favorite DAG libraries/approaches? Some of my ETL workflows can run in parallel with each other because there aren't data dependencies between them, and others should definitely crash loudly

We use a home-grown solution, and try to keep it pretty minimal. For example, we can run all our pipeline steps serially and still get all the work done plenty fast, so, for now, we're keeping that parallelism can of worms firmly shut.
Post reply on HN