Friday, September 30, 2022

My Kung Fu Is the Best (2009)

February 4th, 2009

I don’t know if it is a phase I’m going through or if I’m just starting to show my age, but I’m growing tired of meta. I spend so much time learning new things about programming that the amount of code I’m actually generating has deteriorated down to just what I’m doing for work.

I didn’t come to programming from Computer Science. I was an Electrical Engineering major who switched over to Physics and then fell into programming as a hobby which turned into a career. When I first started programming I had a very low opinion of it. I see a lot of EE types with this attitude: software is easy, and what they do is the hard stuff. Even back then I could see that the field of programming was a huge mental quagmire and I swore that I would not get caught up in it. Software is just there to make the hardware do stuff. My attitude was that the “how” doesn’t matter so much as long as it works.

Naturally that’s not what happened. I got swept up in the industry trends. I became addicted to learning what was new and cool. I was an object zealot and fanboy. Then STL. Scripting languages. ORM. Patterns. TDD. Refactoring. The past few years it’s been functional and logic programming. And that’s all great. I’ve learned a lot and had a lot of fun. But sometimes I wonder if I had just kept my head down and coded more instead of trending more, where I would be. I’m not talking about ignorance here, just pragmatism. There is a balance between the two and I wonder how far off the mark I am, or if I’m off the mark at all.

What I’m growing increasingly intolerant of is zealotry and opinionism. Both of which are almost inseparable from computer programmers. The worst is when I feel it from within. When someone shit-talks the tools I use to do my job, I get a little tight in the chest. And why? Why the hell should I? If I’m getting my work done the best way I know how and the people who use my software are happy, then what is the problem? The truth is, there isn’t a problem.

Michelangelo is said to have seen sculpting not as chiseling out an image from stone, but as releasing the sculpture that was already in the stone. That is such a powerful idea because it means that there are an unlimited number of sculptures in that stone. No two sculptors would set the same sculpture free. Programming is like that. Software is so very abstract, and the limitations on what we do are relatively few compared to other disciplines. Anything that works and makes sense to the programmer is probably not wrong in a fundamental sense. Certainly issues of specific application, maintenance and communication can be discussed, but what I’m getting at is that my methodology or toolset is not dumb just because it isn’t the one you use.

“The Tao that can be told is not the eternal Tao.”

That’s a nice way of saying that you do not have all of the answers.



from Hacker News https://ift.tt/BA5z4rn

Everesting – Climb the Equivalent of Mt. Everest

You’ll have to push through every metre to gain the vert, and become a keeper of the cloud. An Everesting jersey is the most coveted of hill-climbing kits. You’re a keeper, you get the nod. Once earned, an Everesting jersey is for life.



from Hacker News https://everesting.cc/

Puzzles to convince you you don't understand dependence

9 Puzzles to Convince You You Don't Understand Dependence

Have you tried to remove a dependency from a project and been unsure if you have successfully done so?

To “invert a dependency?”

To keep the core of a codebase from depending on something specific?

Or to “depend on interfaces, not implementation?”

If you’re a programmer, you probably have. If you’ve been doing this for a while, there’s a good chance you’ve gotten into a disagreement about whether you’ve successfully done so. Dependence is one of those words where everyone thinks they know what it means (Clean Code uses the word over 100 times without defining it). But as easy as it is to speak broadly about limiting dependencies, uncertainty about what it means leads into uncertainty in actual jobs.

By the end of this post, you will learn an objective definition of dependence for software engineering. This definition encompasses all places where engineers talk about dependence, from package management to performance engineering and even usability, and it’s sufficiently rigorous to be mechanically checkable.

By “mechanical,” I do not mean automated, nor even easy. It’s relatively easy to write a function where deciding whether it can interact with another function requires solving a famous unsolved math problem. But with this new understanding in hand, and some amount of thinking, next time you have to ensure that customer privacy does not depend on a third-party library, you should be able to explain exactly what that means and what must be done.

Background


   A dependence question raised in "Oracle v. Google"


We programmers talk about dependence all the time. Like, “my package has Postgres as a dependency but it doesn't depend on it until it's used, except then it still never depends on it because I'm database-agnostic.” If you ponder that sentence, you may realize that every use of the word “depend” has a different meaning. We know that limiting dependence is a good thing, but without really understanding what it means, it's advice doomed to break down — citrus advice.

A few years ago, Daniel Jackson and I set out to figure out what “dependence” really means in software. I daresay we were extremely successful. We have a general definition that specializes to each of the varieties of dependence hinted at in the previous paragraph, and then some. With it, you can definitively (though not always feasibly) answer whether you've managed to remove a dependence. Trying to apply the definitions raises a lot of subtlety, but we found we can address them by stealing algorithms from a certain subfield of (wait for it) computational philosophy. We first published our findings in a paper at the Onward! 2020 conference, where it was greeted enthusiastically by peer reviewers, becoming the only paper that year accepted without revision.


   Image by DALL-E 2, “complex clock mechanism hidden in mist”

This blog post is loosely based on my previous effort to distill our findings, my Onward! 2020 talk. Loosely. The words here may occasionally match what is said in the video, and the numbers next to the slides illustrations below will usually go up. The Onward! conference is a funny place, full of people who fly around the world to learn about the latest in static analysis and type systems, but then ditch that go hear about pie-in-the-sky ideas that don't work. (Though it's also the home of some of my favorite software-engineering essays ever.) I will make no assumption in this blog post that you've ever had reason to care about “static and dynamic semantics.” On the other hand, you might follow the example better than the original audience if you've been exposed to an “analytics framework” by means other than through the window of an ivory tower.

Anyway, let's go learn about dependence. First: why it's hard?

Depending on Analytics

As a running example, I have an iPhone app. It uses an analytics framework, but it doesn't use it directly. I've interposed an analytics abstraction layer, putting some kind of delegator between them. Now my question is, does the app depend on the analytics framework?

I'm trying to argue that the world didn't previously understand dependence, so I'd like to find some contradictory statements about dependence in well-known books. Problem is, these books mention dependence all the time, but rarely say anything concrete enough to find a contradiction. Still, I found this:

Looking at the quotes in the slide, Martin Fowler seems to think that having this interposed delegator removes the dependence. I believe Robert Martin is saying that if something important depends on my choice of analytics framework, then it should be referred to directly in the program text. But my first reading suggests something in tension: one saying that the analytics abstraction layer removes the dependence and hinting that's a good thing, and the other stating that it's bad. This is a pretty interesting contradiction from Robert Martin Fowler, who are quite close as far as software engineering gurus go. Of course, I'm not sure what they're actually advocating, which is part of the problem with existing terminology.

Branching out a bit, I'll let you make your own judgment on the following quote.

In the old Web site with the background specified separately on each page, all of the Web pages were dependent on each other.
—John Ousterhout, A Philosophy of Software Design

(Ousterhout did remove one misuse of “dependence” in the newer versions after I pointed it out. But I found more. Note that I still consider it a good book, even though I've criticized it a lot.)

To really draw out the confusion and mist around the idea of dependence, we prepared nine dependency puzzles.

The 9 Dependency Puzzles

  1. The Framework Puzzle: We usually think that, if A calls B, then A depends on B.

    But consider a round-robin scheduler: it invokes every task to be scheduled. Does it depend on each of the tasks?

  2. The Shared Format Puzzle: If A writes a file and B reads it, they are clearly coupled because of the shared format. But which depends on which?

    You also see this when a client sends messages to a server; if either end changes, the other will break. Do they both depend on each other?

  3. The Frame1 Puzzle: We like to think that, if A does not depend on B, then a change to B cannot affect A.

    But what if you change B in a way that introduces a new dependence, like modifying a global variable used by A?

  4. The Crash Puzzle: As a more extreme version of the previous: A change to any module can affect a change to any other module, namely by crashing the program. So, by the “A does not depend on B if a change to B cannot affect A” rule, everything depends on everything else.

  5. The Fallback Puzzle: A website loads a resource from a CDN but hits a server if unavailable; an app uses a cheap-but-flaky payment processor when it can but switches to a more established one when it's down; an analytics service tries to connect to multiple servers until it finds one that works; a media player that uses hardware video-decoding when available but software when not — these all have the structure “A uses B but falls back to C.”

    With fallback, the failure of B does not imply the failure of A. Does this mean that A does not depend on B?

  6. The Inversion Puzzle: Dependency inversion is touted for removing dependencies: instead of A statically invoking module B, the program passes A a reference to B at runtime. But A will still fail if B fails. So is there no change in the dependence structure?

  7. The Self-Cycle Puzzle: We usually think of dependence as transitive: A cannot function without B, B cannot function without C, therefore A cannot function without C.

    We also complain about dependency cycles: A depending on B and B depending on A is bad, but it can happen.

    Now, putting these together: What does it mean for A to depend on A?

  8. The Higher-Order Puzzle: Libraries should not depend on application code. But, from one perspective, they clearly do: a hash table implementation will give incorrect output if keys have inconsistent implementations of equals() and hashcode() methods (that is, if equal values have different hashcodes). Do hash tables and other library classes depend on their callers?

  9. The Majority Puzzle: There was a fad a few decades ago called “n-version-programming.” The idea of N-version programming: if 5 people write the same program, then there's no way they'll exhibit any of the same bugs, right? So you can have 5 people implement the same (very detailed) spec for a robot controller, and have the programs vote what to do at each timestep; so long as no 3 people have the same bug, it should always function according to spec, right?

    Of course, Nancy Leveson showed empirically that this doesn't work and the fad died, but it presents an interesting hypothetical: Suppose all 5 controllers implement the spec perfectly, and thence all 5 always vote for the same action. Then no change to any single implementation can alter the robot. Does this mean that the robot does not depend on any of the controllers?

We'll be answering all these puzzles at the end. But, coming up next: understanding why the sentence “Does A depend on B?” can actually stand for one of many, many different questions.


Types of Dependence

Let's revisit the analytics example and ask “does the app depend on the analytics framework?” There are several questions here.

Well, not quite. There's a tradition in the Jewish holiday of Passover that the youngest always chants a Hebrew verse titled “The Four Questions.” The joke is that it's actually one question (“Why is this night different from all other nights?”) with four answers. Likewise, “Does it depend” is just one question, but here's five answers, as seen in the image:

  1. No, I can build them separately.
  2. Yes, a crash in the framework will be a crash in the app.
  3. No, because I can just use a different framework that changed the code and I will still have working analytics.
  4. And no because I'll get the same resul-.....actually, no I won't. It's an open secret that no two analytics frameworks give the exact same numbers. Ideally they'll be close enough for all purposes other than choosing what to say when boasting about number of users. But maybe one will give more statistical accuracy, so, realistically, yes.
  5. Oh my god yes, because any security vulnerabilities in the framework will be security vulnerabilities of the app as well.

But yeah, these are definitely answering different questions.

Dimensions of Dependence

To make a question about dependence concrete, you must specify three parameters: the semantics or execution model in question, the property of interest, and the space of permitted changes.




Dimension 1: Semantics

Let's go back to that agonizing sentence from the intro. “My package has Postgres as a dependency but it doesn't depend on it until it's used, except then it still never depends on it because I'm database-agnostic.” Change a couple words, and it fits the analytics example as well. So I said before that this sentence uses “depend” in three different ways1. It's not just that they're answering different questions. These are actually different models of execution.

  1. When talking about importing a dependency, the “execution” engine of interest is the compiler or build system: is the program even well-formed, or is there a build error? This roughly maps onto the more theoretical term “static semantics” or “type system.”

  2. When saying that actually invoking a package is what gives a dependence, the execution engine in question is an interpreter, or the combination of the compiler + a CPU. The focus is now on whether the code actually runs and contributes to the overall program output. “Dynamic semantics” is a general theoretical term for what actually happens when running.

  3. When saying that a program would work even after switching to a different library, the “execution engine” in question is actually the reasoning used to convince yourself or someone else that it's correct / achieves its goal, based only on the guaranteed properties of the analytics abstraction layer. If you buy that that human reasoning is analogous to automated reasoning, then the theoretical term that captures this is the “program logic,” the proof system used to show the program achieves its intention.

This lists just 3 possible execution models, but there are infinitely many more, a few of which are discussed in the paper. For example, the property of whether text is readable could be phrased in Visual Logic.

We can already start to categorize the answers about the analytics framework accordingly. Inability to build separately refers to the well-formedness / static semantics. When a crash in one is a crash in the other, that's the interpreter / dynamic semantics. The ability to swap it out and still have “working analytics,” that's the correctness argument / program logic.

Of course, the last two answers, about accuracy and security, also sound like correctness arguments. So it's not enough.

Dimension 2: Properties

You might notice from the last answers about whether it's secure and whether it has working analytics: those are actually different properties.

You should never ask, does module A depend on the module B? But rather ask, does some property P of A depend on B?

We can now classify the answers better by looking at the property. It does depend in the well-formedness property, does depend on runtime behavior, does not depend on correctness, does depend on statistical performance, and does depend on security.

But there's a tension here. I'm saying that there's no dependence in whether it works, except that I can hack into some versions and not others and make them not work. So maybe correctness does depend? We'll address that soon.

In the meantime, we're on our way to resolving some of the dependency puzzles puzzles. Back to the Framework Puzzle: Does a round-robin scheduler depend on the individual tasks? It clearly does for many runtime properties. But for the correctness of the scheduler, it shouldn't....

...unless it's a non-preemptive scheduler and a task doesn't terminate and hogs all the scheduler time. So yeah, maybe.

We've now seen two examples where we want to say that there's no dependence on a component, except that component can “break out of the box” and mess up the rest of the system. That's where the third dimension comes in.

Dimension 3: Permitted Changes

A property of dependence we'd like to have: if A does not depend on B, then no change to B can affect A. Actually, this sounds like it would make a nice definition. When Dale Carnegie says “happiness doesn't depend upon who you are or what you have; it depends solely upon what you think,” he seems to be saying that merely changing whether one owns a Lamborghini would not alter whether they have the property of being happy; they must also change their belief about whether they own a Lamborghini. But we've seen this apparently violated in the Crash Puzzle described earlier, which can be instantiated to this scenario quite literally: owning a Lamborghini but believing otherwise might get you in a fatal crash, which is detrimental to happiness. More generally: how can we say “no change to B can affect A” when one can “change B” by replacing it with a program that destroys A.

So we're left with this tautological definition: if A does not depend on B, then no change to B can affect A, unless that change introduces a dependence. It's easy to say “we should just exclude these kinds of changes. Like, Signal should be able to say they don't specifically depend on Twilio to work, as opposed to anything else they could use for sending SMS. But they announced a Twilio-based security incident while I was writing this, so sometimes these kinds of changes really matter.

So, here's an idea: how about sometimes we exclude these kinds of changes, and sometimes we don't?

Or, in other words: every conversation about dependence implicitly carries a reference frame about which kinds of changes of reasonable to consider. When you're asking about whether your app's stability depends on an analytics framework, you should get a different answer based on whether you're interested in whether an API change can cause your code to raise an exception versus whether you're wondering whether someone can exploit a vulnerability to brick your customer's phone.

After the execution model and the property of interest, this “space of reasonable changes” is the third parameter determining a dependence question. Sometimes this is a spec: the mantra “depend on interfaces, not implementations” seems to mean that, if your program uses a function, then any change to that function's implementation within the space of “changes that don't alter the spec” should not change your function's correctness. So you could call the “space of reasonable changes” a spec. But that would be misleading, because if you want to ask “Could the library authors mess me up by removing this guarantee,” you are actually asking about possible changes to the library's already-existent spec. In that case, the space of permitted changes is actually a spec on the spec, and so the best name we came up for this is “super-spec.”

Now we can totally resolve the Framework Puzzle: Forbid tasks that don't terminate, and there's clearly no dependence. And the Crash Puzzle: Forbid changes that make the component crash, and there's no dependence.

But there's still the Fallback Puzzle. Based on what we've said so far, we really have no clue. Intuitively, I'd want to say that my payment succeeding depends on the payment processor that was actually used. But if the only thing that a change to that processor can do is bring it down, then no change to it can stop my payment from going through, because the system would just use the other processor. So now it sounds like, if your system has a fallback component for everything, then it has no dependencies!

More abstractly, we're asking questions like “I used it, but I had another one, so did I really need it?” If you're thinking that this sounds like something philosophers ask, then you're right.

Dependence is Causation

So I foreshadowed this one by suddenly talking about happiness and Lamborghinis: everything I've been talking about can also apply to everyday things in the physical world. In fact, all of the dependency puzzles are isomorphic to a physical causality question.

The Framework Puzzle with the round-robin scheduler and how long tasks take? That's a lot like stacking boxes; the contents of the box don't matter unless they're really heavy. The Crash Puzzle, where everything depends on every other component because they can crash? That's a lot like saying that your ability to read this right now depends on what every single one of your neighbors is doing, which is, apparently, not cutting your electricity. And the Fallback Puzzle? That's a lot like asking if the grass being wet right now is caused by it just having rained when the sprinkler was programmed to come on if it didn't.

More specifically, there are actually two categories of causality. There's “type causality" or “general causality,” which deals with general statements about categories such as “A stray spark causes fire." And then there's “actual causality" or “token causality,” which deals with statements about specific events, such as “A stray spark in Thomas Farriner's bakery on Pudding Lane caused the Great Fire of London on September 2nd, 1666." As dependence deals with questions about specific programs and specific scenarios, actual causation is the one relevant here.

There have been several proposed formal definitions of actual cause, and there is no standard for determining whether a definition is correct—only arguments that it is is useful and produces answers that match intuition. The basic one is the “naive but-for” definition: A causes B if, but for A having been true, B would not be true. This is the definition used by lawyers, and is the reason you can be charged with murder if a cop falls to their death while chasing you, because you “caused” their death. But when applied to the rain and sprinkler, it tells you that the rain cannot be a cause of the wet grass, which is counter to intuition.

But maybe that intuition is because rain and sprinklers are actually pretty different. There are isomorphic questions, such as “Is my apartment cool because I turned on the AC at 6:58 when it was scheduled to turn on at 7:00,” for which the intuitive answer is no. Similarly, my intuition says that my credit card succeeding did depend on which payment processor was actually used. But I can't be so moved to care which of many redundant servers my browser is connected to when writing this. So while much of the literature on actual causation examines the shortcomings of the “naive” but-for definition and focuses on examples like the sprinkler, we've decided that the but-for definition is actually pretty good, and the problems mostly come up when theorists play with models of rain and sprinklers that ignore their differences.

This means that I get to spare you the debate about the definitions of actual causation. If you really want it, you can have a look at our paper for a brief intro. For more, well, Joseph Halpern has an entire book on this subject.

Anyway, this leads to the finale, a general definition of dependence:

A property P definable in some execution model of a program depends on component A if and only if A is an actual cause of P, with respect to a space of permitted changes to A.

Using the but-for definition of causation, this becomes:

A property P definable in some execution model of a program depends on component A if and only if there is a permissible change to A which alters whether P holds.

Puzzling No More!

And now, final definition in hand, we can go back and definitively answer all of the dependency puzzles. And by aping the causality literature, we get some new concepts for free. For some questions, we get the answer “it's not a dependence, but is part of the dependence,” stealing the concept of “part of a cause.”

  • The Framework Puzzle: Asking about dependence of a specific property resolves the confusion. It is true that the runtime behavior of a round-robin scheduler, particularly timing, does depend on the tasks being scheduled. But its correctness does not.
  • The Shared Format Puzzle: There are actually two resolutions to this puzzle. For the first, we again look to a specific property.

    The serializer/deserializer should satisfy a round-trip property, that serializing a value and then deserializing it results in the original value. This round-trip property clearly depends on both. Through another lens, we can define correctness of each end separately, in terms of an abstract description of the format. Then the correctness of each depends on the shared format, but not on the other end.

    In both cases, the serializer and deserializer do not depend on each other, though they are coupled. 
  • The Frame Puzzle: Super-specs resolve this puzzle! If it is reasonable for B to modify a variable used by A, then A already depends on B, and a programmer would indeed need to read the source code of A to check that it does not interfere with B.

    But if one imposes a super-spec on B forbidding it from modifying such extraneous state — in mundane terms, if your tech lead would yell at you for changing it to do such mutation — then the dependence, and with it the need to read, disappears.
  • The Crash Puzzle: This one's just an extension of the previous. Super-specs again come to the rescue. If you consider crashing changes to any module, then indeed the runtime behavior of every module depends on every other module. But if crashing changes are out of consideration, then this is not so.
  • The Fallback Puzzle: These fallback scenarios are isomorphic to examples from physical causality, such as “If it doesn't rain, the sprinkler will turn on [ergo, the grass-watering procedure falls back to a sprinkler].” And so, concepts from causality dissolve the confusion. There are two resolutions.

    The first: a dependence doesn't have to be a single module! We can say that the only reasonable change to the CDN (i.e.: its superspec) is to knock it offline. Because of fallback, that can't prevent an image to loading, so the image loading indeed does not depend on the CDN. But simultaneously knocking the CDN and the fallback server offline can! So, the dependence is actually on the set {CDN, fallback server}, and the CDN itself is part of a dependence.

    But another resolution is to ask: is it really the same to use B vs. falling back to C? In the case of loading an image from a CDN, perhaps not, and it's intuitive to say that you loading a website just now did not depend on its CDN. But for receiving a payment through SketchyCheapProcessor vs. StodgyOldProcessor, it would be an expensive mistake to treat them as the same!
  • The Inversion Puzzle: Thinking about the lens of multiple tools resolves this one. To the interpreter, even after doing dependency inversion, there is a dependence (i.e.: runtime behavior does depend). But to a compiler or typechecker, the dependence has been removed (i.e.: well-formedness does not depend). 
  • The Self-Cycle Puzzle:

    Insights from the causal-inference literature resolve this one as well. Surprisingly to many, causality is not transitive, and hence dependence is not either. Simple, if facetious example: Seeing an advertisement for pizza causes me to press buttons on my phone. Me pressing buttons on my phone causes your phone to ring. Me seeing an advertisement for pizza does not cause your phone to ring (as it causes me to press the wrong buttons). Discussing exactly when and why causality is not transitive can get pretty technical, and is sensitive to exactly how one translates a statement into formal language. (Indeed, you may have already prepared a valid reason why my pizza example should not count.) If you're interested, I'll refer you to Halpern's “Sufficient Conditions for Causality to Be Transitive.”

    Of course, many kinds of dependence are transitive, such as build dependence. But this does mean that you don't need to bend your brain around self-dependences; just use the definition in this article.
  • The Higher-Order Puzzle: Actually stating the property of interest resolves this one. Every function's correctness is defined with a precondition: if the inputs are valid, then the outputs are as desired. In the case of a hash table, the input includes the keys' equals() and hashcode() functions, and these are only valid if their implementations are consistent. If you build a hash table on keys whose equality is determined by coin-flipping, then getting bad output is not the hash table's fault. So the hash table's correctness does not depend on any specific implementation of equals() and hashcode(), but its runtime behavior sure does.
  • The Majority Puzzle: This is another puzzle ripped straight out of the causality literature, taken from examples on (wait for it) majority vote! The idea of being “part of a dependence” returns to resolve this one. Indeed, the robot's behavior does not depend on any single one of the 5 controllers, but it does depend on each “winning coalition” of voting programs; that is, each subset of size 3.

And now we can go back and un-confuse the Fowler and Martin quotes from the beginning. Fowler is talking only about static/build dependence. Martin Fowler is talking about how inserting your abstract delegate factory removes the build dependence. Robert Martin seems to be saying that if the correctness property depends on which analytics framework you're using, then you shouldn't be using this abstract delegate factory. You should actually have direct reference textually to make the well-formedness depend. Now we can see this piece of advice are actually not in contradiction, that it can still be good to insert this analytics subtraction framework when the choice of analytics framework does not matter, when the correctness property is not affected by the choice. But when you are relying on a single choice, then: not such a good idea.

Coupling vs. dependence

I mentioned coupling briefly above. Where does coupling fit in? I think this story about the connection between causation and dependence also explains coupling: dependence is to causality as coupling is to correlation.

A common view in causality is that the connection between causality and correlation is given by Reichenbach's principle: that if A and B are correlated (i.e.: knowing one gives some information about the other), then either A causes B, B causes A, or there is some common cause C. As an addendum, correlations can also be observed if one limits observations to situations where some common effect of A and B occurs. For example, if you have a bookshelf, you'll likely find that the more useful books tend to be less interesting — not because of some intrinsic trait, but because you probably don't buy books which are neither interesting nor useful. This is Berkson's paradox.

I propose that there is a software analogue to Reichenbach's principle: that if A and B are coupled (which I take to mean: tend to change together), then either A depends on B, B depends on A, or they have some common dependency. And there is a software analogue of Berkson's paradox too: if one is trying to preserve some property that depends on both A and B, then a change to A will be accompanied by a change to B, as in the case of changing a serializer while trying to preserve the round-trip property.

Conclusion

Dependence is something everyone assumes they know, but that understanding breaks down quickly. It may be pretty cool to connect dependence and causality, but what does learning this mean for actual programming? I say there are three benefits, although they can be said to all be part of the same benefit.

The first benefit: it ends debates and clarifies confusing discussions. See our alteration to the Martin Fowler and Robert Martin quotes above.

The second: it paints a target. When I started the Thiel Fellowship in 2012, I had to write a letter from my future self in 2014 explaining my accomplishments. I stated that I would have a tool that could globally chase down every place in the code that depends on some assumption and remove that assumption. It's 2022 and I still don't have one, but at least the problem is defined now, so I know where to begin.

And, of course: knowing what dependencies are helps you remove them. For example, Parnas teaches us to not let general things depend on specific things. Just as there are ways to trick yourself into thinking you've removed an if-statement without really doing so [link to Strange Loop talk], there are ways to trick yourself into thinking you've removed a dependence — say you only removed a static dependence, but you actually wanted to remove the dependence of some correctness property.

And there's one dependency I especially want to remove: the dependency of the ability to produce quality code on indescribable experience and pattern-matching.

I'm thinking of a story from a recent student of my Advanced Software Design Course, whom I'll call Karl. Karl is the lead software engineer of a startup in Northern Europe. He noticed some design flaws in some code from one of his junior engineers, and started to refactor it, changing 1800 lines across 10 PRs. Hoping to make it a learning experience, Karl walked the engineer through it until Karl thought the engineer understood, so that he could finish it himself. Karl assigned the rest of it to the engineer, and then came back to find...

...the code had been un-refactored into the original form.

What happened is that Karl built understanding of what was wrong with the original code and good about the refactoring via a mechanism whose effectiveness depends on building an intuition from a lot of experience. Although it served Karl well as an engineer, it failed him as a lead; it was not transmittable. That motivated him to come to me.

When a concept teaches you how to identify the best design decision and explain it, it's obviously useful. But I think there's a subtler benefit that comes from understanding your actions, like going from following recipes to being a chef. I hope this understanding helps your subjective experience of programming move from climbing a mountain to enjoying the view at the top.

1 “Frame” is a term used in program analysis to mean “the set of values a code snippet may modify,” and more generally in AI and philosophy to mean “the set of beliefs that may have to be updated in response to an action.” See Wikipedia or Daniel Dennett’s delightful essay.

2 If you've read The Three Levels of Software: The dynamic semantics here correspond to both the runtime and code levels in that blog post, depending on whether you're considering one execution vs. all possible executions. The level of modular reasoning maps perfectly onto the “program logic” model here. The static semantics here was not discussed at all in that blog post, because there's no need for new terminology to discuss build errors.


Thanks to Nils Eriksson for comments on earlier drafts of this blog posts. Thanks to Daniel Jackson for being a great coauthor helping me create the original content, and to the anonymous reviewers at Onward! 2020 for their feedback helping us to refine it.



from Hacker News https://ift.tt/TWagM1C

Iollo (YC S22) is hiring a founding full-stack engineer

iollo is a subscription service that helps you extend your healthy lifespan. We measure 500+ metabolites in your blood to match you with personalized action plans such as dietary, behavioral, and therapeutic interventions.

We’re a group of PhDs and previous startup founders from Stanford and Cornell, with over 600 scientific publications between us, and multiple exits.



from Hacker News https://ift.tt/0MTbaPm

Introduction to the Theory of Programming Languages (1991)

itpl_coverShort version: the full text of my Introduction to the Theory of Programming Languages book (second printing, 1991) is now available. This page has more details including the table of chapters, and a link to the PDF (3.3MB, 448 + xvi pages).

The book is a survey of methods for language description, particularly semantics (operational, translational, denotational, axiomatic, complementary) and also serves as an introduction to formal methods. Obviously it would be written differently today but it may still have its use.

A few days ago I released the Axiomatic Semantics chapter of the book, and the chapter introducing mathematical notations. It looked at the time that I could not easily  release the rest in a clean form, because it is impossible or very hard to use the original text-processing tools (troff and such). I could do it for these two chapters because I had converted them years ago for my software verification classes at ETH.

By perusing old files, however,  I realized that around the same time (early 2000s) I actually been able to produce PDF versions of the other chapters as well, even integrating corrections to errata  reported after publication. (How I managed to do it then I have no idea, but the result looks identical, save the corrections, to the printed version.)

The figures were missing from that reconstructed version (I think they had been produced with Brian Kernighan’s PIC graphical description language , which is even more forgotten today than troff), but I scanned them from a printed copy and reinserted them into the PDFs.

Some elements were missing from my earlier resurrection: front matter, preface, bibliography, index. I was able to reconstruct them from the original troff source using plain MS Word. The downside is that they are not hyperlinked; the index has the page numbers (which may be off by 1 or 2 in some cases because of reformatting) but not hyperlinks to the corresponding occurrences as we would expect for a new book. Also, I was not able to reconstruct the table of contents; there is only a chapter-level table of contents which, however, is hyperlinked (in other words, chapter titles link to the actual chapters). In the meantime I obtained the permission of the original publisher (Prentice Hall, now Pearson Education Inc.).

Here again is the page with the book’s description and the link to the PDF:

bertrandmeyer.com/ITPL

 

 

VN:F [1.9.10_1130]

Rating: 10.0/10 (1 vote cast)

VN:F [1.9.10_1130]

Introduction to the Theory of Programming Languages: full book now freely available, 10.0 out of 10 based on 1 rating


from Hacker News https://ift.tt/asdc2H5

Go Micro: a standard library for distributed systems development

Go Micro License Go.Dev reference Travis CI Go Report Card

Go Micro is a standard library for distributed systems development.

Overview

Go Micro provides the core requirements for distributed systems development including RPC and Event driven communication.
The Micro philosophy is sane defaults with a pluggable architecture. We provide defaults to get you started quickly
but everything can be easily swapped out.

Features

Go Micro abstracts away the details of distributed systems. Here are the main features.

  • Authentication – Auth is built in as a first class citizen. Authentication and authorization enable secure
    zero trust networking by providing every service an identity and certificates. This additionally includes rule
    based access control.

  • Dynamic Config – Load and hot reload dynamic config from anywhere. The config interface provides a way to load application
    level config from any source such as env vars, file, etcd. You can merge the sources and even define fallbacks.

  • Data Storage – A simple data store interface to read, write and delete records. It includes support for memory, file and
    CockroachDB by default. State and persistence becomes a core requirement beyond prototyping and Micro looks to build that into the framework.

  • Service Discovery – Automatic service registration and name resolution. Service discovery is at the core of micro service
    development. When service A needs to speak to service B it needs the location of that service. The default discovery mechanism is
    multicast DNS (mdns), a zeroconf system.

  • Load Balancing – Client side load balancing built on service discovery. Once we have the addresses of any number of instances
    of a service we now need a way to decide which node to route to. We use random hashed load balancing to provide even distribution
    across the services and retry a different node if there’s a problem.

  • Message Encoding – Dynamic message encoding based on content-type. The client and server will use codecs along with content-type
    to seamlessly encode and decode Go types for you. Any variety of messages could be encoded and sent from different clients. The client
    and server handle this by default. This includes protobuf and json by default.

  • gRPC Transport – gRPC based request/response with support for bidirectional streaming. We provide an abstraction for synchronous communication. A request made to a service will be automatically resolved, load balanced, dialled and streamed.

  • Async Messaging – PubSub is built in as a first class citizen for asynchronous communication and event driven architectures.
    Event notifications are a core pattern in micro service development. The default messaging system is a HTTP event message broker.

  • Synchronization – Distributed systems are often built in an eventually consistent manner. Support for distributed locking and
    leadership are built in as a Sync interface. When using an eventually consistent database or scheduling use the Sync interface.

  • Pluggable Interfaces – Go Micro makes use of Go interfaces for each distributed system abstraction. Because of this these interfaces
    are pluggable and allows Go Micro to be runtime agnostic. You can plugin any underlying technology. Find plugins in
    github.com/micro/go-plugins.

Getting Started

See pkg.go.dev for usage.

License

Go Micro is Apache 2.0 licensed.

GitHub

View Github



from Hacker News https://ift.tt/ARKXcYh

Intel announces new FPGA families

Image source: Intel PSG

Intel has announced these new/future FPGA families:

Intel® Agilex™ D-Series

For midrange FPGA applications like studio cameras, 8K video transport, and wireless infrastructure.

This new family incorporates an upgraded hard processor system (HPS), Enhanced DSP with AI Tensor Block, MIPI I/O support, and a hardened time-sensitive network controller (TSN). Intel Agilex D-Series devices also keep features from previous families like the 2nd-generation Intel® Hyperflex™ FPGA Architecture and high-speed SerDes transceivers.

Future Intel® Agilex™ FPGAs (codenamed Sundance Mesa)

Under design, for a variety of applications, including workloads in industrial, broadcast, automotive, communications, consumer, test and measurement, and medical markets.

The new Intel Agilex device family inherits many of the most important architectural features of earlier Intel Agilex devices including the second-generation Intel® Hyperflex™ FPGA Architecture, which places Hyper-Registers throughout the FPGA.

These devices combine the Intel Agilex FPGA fabric with a broad set of intellectual property (IP) and connectivity options including high-speed transceivers that support data rates to 28.1 Gbps and the PCIe 4.0 interface protocol.

The new Intel Agilex device family also supports DDR4, LPDDR4, DDR5, and LPDDR5 SDRAM; general purpose I/O with output voltages ranging from 1.05 V to 3.3 V; in addition a hard processor system (HPS) based on a multi-core Arm Cortex CPU with two Arm Cortex-A76 processor cores that can run as fast as 1.8 GHz and two Arm Cortex-A55 processor cores that can run as fast as 1.5 GHz.

Intel® Agilex™ FPGAs with R-Tile

These devices include the Compute Express Link (CXL) intellectual property (IP) to the Intel Quartus Prime Software IP library. This CXL hard + soft IP builds upon the existing PCI Express (PCIe) 5.0 capabilities of the Intel® Agilex™ I-Series and M-Series FPGAs and SoCs that incorporate “R” transceiver tiles. The initial release of this IP supports CXL v1.1. A planned future IP release will provide a software-only upgrade path for these Intel Agilex FPGAs and SoCs by adding support for CXL v2.0.

CXL devices will be used in diverse areas such as high-performance computing (HPC), artificial intelligence (AI), machine learning (ML), data analytics, and other specialized tasks.

Direct RF FPGAs Intel® Direct RF FPGAs can perform direct analog RF signal conversion for multiple analog input and output channels in a variety of topologies supporting up to 16 channels and various configurations with channel rates as fast as 64 Gsps.

The new devices in this portfolio of Intel Direct RF FPGA devices now extend the I/O capabilities of Intel Agilex and Intel Stratix 10 FPGAs to the analog domain using ADC and DAC chiplets that have been co-developed with partners and then composed into packaged devices using Intel’s EMIB and AIB technologies.



from Hacker News https://ift.tt/jGgsSND

Thursday, September 29, 2022

The Schleitheim Confession (1527; translated 1977)

Schleitheim Confession (Anabaptist, 1527) Brotherly Union of a number of children of God concerning Seven Articles.

The Cover Letter (Introductory)

[NOTE: this translation was done by John H. Yoder, based on a version of the text prepared by Heinold Fast for Quellen zur Geschichte der Taufer in der Schweiz, and published by Herald Press in 1977].

May joy, peace, mercy from our Father, through the atonement[1] of the blood of Christ Jesus, together with the gift of the Spirit -- who is sent by the Father to all believers to [give] strength and consolation and constance in all tribulation until the end, Amen, be with all who love God and all children of light, who are scattered everywhere, wherever they might have been placed[2] by God our Father, wherever they might be gathered in unity of spirit in one God and Father of us all; grace and peace of heart be with you all. Amen.

Beloved brothers and sisters in the Lord; first and primordially we are always concerned for your consolation and the assurance of your conscience (which was sometime confused), so that you might not always be separated from us as aliens and by right almost completely excluded,[3] but that you might turn to the true implanted members of Christ, who have been armed through patience and the knowledge of self, and thus be again united with us in the power of a godly Christian spirit and zeal for God.

It is manifest with what manifold cunning the devil has turned us aside, so that he might destroy and cast down the work of God, which in us mercifully and graciously has been partially begun. But the true Shepherd of our souls, Christ, who has begun such in us, will direct and teach[4] the same unto the end, to His glory and our salvation, Amen.

Dear brothers and sisters, we who have been assembled in the Lord at Schleitheim on the Randen[5] make known, in points and articles, unto all that love God, that as far as we are concerned, we have been united[6] to stand fast in the Lord as obedient children of God, sons and daughters, who have been and shall be separated from the world in all that we do and leave undone, and (the praise and glory be to God alone) uncontradicted by all the brothers, completely at peace.[7] Herein we have sensed the unity of the Father and of our common Christ as present with us in their Spirit. For the Lord is a Lord of peace and not of quarreling, as Paul indicates.[8] So that you understand at what points this occurred, you should observe and understand [what follows]:

A very great offense has been introduced by some false brothers among us,[9] whereby several have turned away from the faith, thinking to practice and observe the freedom of the Spirit and of Christ. But such have fallen short of the truth and (to their own condemnation)[10] are given over to the lasciviousness and license of the flesh. They have esteemed that faith and love may do and permit everything and that nothing can harm nor condemn them, since they are "believers."

Note well, you members[11] of God in Christ Jesus, that faith in the heavenly Father through Jesus Christ is not thus formed; it produces and brings forth no such things as these false brothers and sisters practice and teach. Guard yourselves and be warned of such people, for they do not serve our Father, but their father, the devil.

But for you it is not so; for they who are Christ's have crucified their flesh with all its lusts and desires.[12] You understand me[13] well, and [know] the brothers whom we mean. Separate yourselves from them, for they are perverted. Pray the Lord that they may have knowledge unto repentance, and for us that we may have constance to persevere along the path we have entered upon, unto the glory of God and of Christ His Son. Amen.[14]

The Seven Articles

The articles we have dealt with, and in which we have been united,[15] are these: baptism, ban, the breaking of bread, separation from abomination, shepherds in the congregation, the sword, the oath.

Notice concerning baptism

I. Notice concerning baptism. Baptism shall be given to all those who have been taught repentance and the amendment of life and [who] believe truly that their sins are taken away through Christ, and to all those who desire to walk in the resurrection of Jesus Christ and be buried with Him in death, so that they might rise with Him; to all those who with such an understanding themselves desire and request it from us; hereby is excluded all infant baptism, the greatest and first abomination of the pope. For this you have the reasons and the testimony of the writings and the practice of the apostles.[16] We wish simply yet resolutely and with assurance to hold to the same.

We have been united as follows concerning the ban

II. We have been united as follows concerning the ban. The ban shall be employed with all those who have given themselves over to the Lord, to walk after [Him][17] in His commandments; those who have been baptized into the one body of Christ, and let themselves be called brothers or sisters, and still somehow slip and fall into error and sin, being inadvertently overtaken.[18] The same [shall] be warned twice privately and the third time be publicly admonished before the entire congregation[19] according to the command of Christ (Matthew 18).[20] But this shall be done according to the ordering of the Spirit of God before the breaking of bread.[21] so that we may all in one spirit and in one love break and eat from one bread and drink from one cup.

Concerning the breaking of bread

III. Concerning the breaking of bread, we have become one and agree[22] thus: all those who desire to break the one bread in remembrance of the broken body of Christ and all those who wish to drink of one drink in remembrance of the shed blood of Christ, they must beforehand be united[23] in the one body of Christ, that is the congregation of God, whose head is Christ, and that by baptism. For as Paul indicates,[24] we cannot be partakers at the same time of the table of the Lord and the table of devils. Nor can we at the same time partake and drink of the cup of the Lord and the cup of devils. That is: all those who have fellowship with the dead works of darkness have no part in the light. Thus all those who follow the devil and the world, have no part with those who have been called out of the world unto God. All those who lie in evil have no part in the good.

So it shall and must be, that whoever does not share the calling of the one God to one faith, to one baptism, to one spirit, to one body together with all the children of God, may not be made one loaf together with them, as must be true if one wishes truly to break bread according to the command of Christ[25].

We have been united concerning the separation

IV. We have been united concerning the separation that shall take place from the evil and the wickedness which the devil has planted in the world, simply in this; that we have no fellowship with them,[26] and do not run with them in the confusion of their abominations. So it is; since all who have not entered into the obedience of faith and have not united themselves with God so that they will to do His will, are a great abomination before God, therefore nothing else can or really will grow or spring forth from them than abominable things. Now there is nothing else in the world and all creation than good or evil, believing and unbelieving, darkness and light, the world and those who are [come] out of the world, God's temple and idols. Christ and Belial, and none will have part with the other.

To us, then, the commandment of the Lord is also obvious, whereby He orders us to be and to become separated from the evil one, and thus He will be our God and we shall be His sons and daughters.[27]

Further, He admonishes us therefore to go out from Babylon and from the earthly Egypt, that we may not be partakers in their torment and suffering, which the Lord will bring upon them.[28]

From all this we should learn that everything which has not been united[29] with our God in Christ is nothing but an abomination which we should shun.[30] By this are meant all popish and repopish[31] works and idolatry,[32] gatherings, church attendance[33], winehouses, guarantees and commitments of unbelief,[34] and other things of the kind, which the world regards highly, and yet which are carnal or flatly counter to the command of God, after the pattern of all the iniquity which is in the world. From all this we shall be separated and have no part with such, for they are nothing but abominations, which cause us to be hated before our Christ Jesus, who has freed us from the servitude of the flesh and fitted us for the service of God and the Spirit whom He has given us.

Thereby shall also[35] fall away from us the[36] diabolical weapons of violence--such as sword, armor, and the like, and all of their use to protect friends or against enemies--by virtue of the word of Christ: "you shall not resist evil."[37]

We have been united as follows concerning shepherds in the church of God

V. We have been united as follows concerning shepherds in the church of God. The shepherd in the church shall be a person according to the rule of Paul,[38] fully and completely, who has a good report of those who are outside the faith. The office of such a person shall be to read and exhort and teach. warn, admonish, or ban in the congregation, and properly to preside among the sisters and brothers in prayer, and in the breaking of bread,[39] and in all things to take care of the body of Christ, that it may be built up and developed, so that the name of God might be praised and honored through us, and the mouth of the mocker be stopped.

He shall be supported, wherein he has need, by the congregation which has chosen him, so that he who serves the gospel can also live therefrom, as the Lord has ordered.[40] But should a shepherd do something worthy of reprimand, nothing shall be done with him without the voice of two or three witnesses. If they sin they shall be publicly reprimanded, so that others might fear.[41]

But if the shepherd should be driven away or led to the Lord by the cross,[42] at the same hour another shall be ordained[43] to his place, so that the little folk and the little flock of God may not be destroyed, but be preserved by warning and be consoled.

We have been united as follows concerning the sword

VI. We have been united as follows concerning the sword. The sword is an ordering of God outside the perfection of Christ. It punishes and kills the wicked and guards and protects the good. In the law the sword is established[44] over the wicked for punishment and for death and the secular rulers are established to wield the same.

But within the perfection of Christ only the ban is used for the admonition and exclusion of the one who has sinned, without the death of the flesh,[45] simply the warning and the command to sin no more.

Now many, who do not understand Christ's will for us, will ask; whether a Christian may or should use the sword against the wicked for the protection and defense of the good, or for the sake of love.

The answer is unanimously revealed: Christ teaches and commands us to learn from Him, for He is meek and lowly of heart and thus we shall find rest for our souls.[46] Now Christ says to the woman who was taken in adultery,[47] not that she should be stoned according to the law of His Father (and yet He says, "What the Father commanded me, that I do")[48] but with mercy and forgiveness and the warning to sin no more, says: "Go, sin no more." Exactly thus should we also proceed, according to the rule of the ban.

Second, is asked concerning the sword: whether a Christian shall pass sentence in disputes and strife about worldly matters, such as the unbelievers have with one another. The answer: Christ did not wish to decide or pass judgment between brother and brother concerning inheritance, but refused to do so.[49] So should we also do.

Third, is asked concerning the sword: whether the Christian should be a magistrate if he is chosen thereto. This is answered thus: Christ was to be made king, but He fled and did not discern the ordinance of His Father.[50] Thus we should also do as He did and follow after Him, and we shall not walk in darkness. For He Himself says: "Whoever would come after me, let him deny himself and take up his cross and follow me."[51] He Himself further forbids the violence of the sword when He says: "The princes of this world lord it over them etc., but among you it shall not be so."[52] Further Paul says, "Whom God has foreknown, the same he has also predestined to be conformed to the image of his Son," etc.[53] Peter also says: "Christ has suffered (not ruled) and has left us an example, that you should follow after in his steps."[54]

Lastly, one can see in the following points that it does not befit a Christian to be a magistrate: the rule of the government is according to the flesh, that of the Christians according to the Spirit. Their houses and dwelling remain in this world, that of the Christians is in heaven. Their citizenship is in this world, that of the Christians is in heaven.[55] The weapons of their battle and warfare are carnal and only against the flesh, but the weapons of Christians are spiritual, against the fortification of the devil. The worldly are armed with steel and iron, but Christians are armed with the armor of God, with truth, righteousness, peace, faith, salvation, and with the Word of God. In sum: as Christ our Head is minded, so also must be minded the members of the body of Christ through Him, so that there be no division in the body, through which it would be destroyed.[56] Since then Christ is as is written of Him, so must His members also be the same, so that His body may remain whole and unified for its own advancement and upbuilding. For any kingdom which is divided within itself will be destroyed.[57]

We have been united as follows concerning the oath

VII. We have been united as follows concerning the oath. The oath is a confirmation among those who are quarreling or making promises. In the law it is commanded that it should be done only in the name of God, truthfully and not falsely. Christ, who teaches the perfection of the law, forbids His [followers] all swearing, whether true or false; neither by heaven nor by earth, neither by Jerusalem nor by our head; and that for the reason which He goes on to give: "For you cannot make one hair white or black." You see, thereby all swearing is forbidden. We cannot perform what is promised in the swearing, for we are not able to change the smallest part of ourselves.[58]

Now there are some who do not believe the simple commandment of God and who say, "But God swore by Himself to Abraham, because He was God (as He promised him that He would do good to him and would be his God if he kept His commandments). Why then should I not swear if I promise something to someone?" The answer: hear what the Scripture says: "God, since he wished to prove overabundantly to the heirs of His promise that His will did not change, inserted an oath so that by two immutable things we might have a stronger consolation (for it is impossible that God should lie").[59] Notice the meaning of the passage: God has the power to do what He forbids you, for everything is possible to Him. God swore an oath to Abraham, Scripture says, in order to prove that His counsel is immutable. That means: no one can withstand and thwart His will; thus He can keep His oath. But we cannot, as Christ said above, hold or perform our oath, therefore we should not swear.

Others say that swearing cannot be forbidden by God in the New Testament when it was commanded in the Old, but that it is forbidden only to swear by heaven, earth, Jerusalem, and our head. Answer: hear the Scripture. He who swears by heaven, swears by God's throne and by Him who sits thereon.[60] Observe: swearing by heaven is forbidden, which is only God's throne; how much more is it forbidden to swear by God Himself. You blind fools, what is greater, the throne or He who sits upon it?

Others say, if it is then wrong to use God for truth, then the apostles Peter and Paul also swore.[61] Answer: Peter and Paul only testify to that which God promised Abraham, whom we long after have received. But when one testifies, one testifies concerning that which is present, whether it be good or evil. Thus Simeon spoke of Christ to Mary and testified: "Behold: this one is ordained for the falling and rising of many in Israel and to be a sign which will be spoken against."[62]

Christ taught us similarly when He says:[63] Your speech shall be yea, yea; and nay, nay; for what is more than that comes of evil. He says, your speech or your word shall be yes and no, so that no one might understand that He had permitted it. Christ is simply yea and nay, and all those who seek Him simply will understand His Word. Amen.[64]

The Cover Letter

Dear Brothers and Sisters in the Lord; these are the articles which some brothers previously had understood wrongly and in a way not conformed to the true meaning. Thereby many weak consciences were confused, whereby the name of God has been grossly slandered, for which reason it was needful that we should be brought to agreement[65] in the Lord, which has come to pass. To God be praise and glory!

Now that you have abundantly understood the will of God as revealed through us at this time, you must fulfill this will, now known, persistently and unswervingly. For you know well what is the reward of the servant who knowingly sins.

Everything which you have done unknowingly and now confess to have done wrongly, is forgiven you, through that believing prayer, which is offered among us in our meeting for all our shortcomings and guilt, through the gracious forgiveness of God and through the blood of Jesus Christ. Amen.

Watch out for all who do not walk in simplicity of divine truth, which has been stated by us in this letter in our meeting, so that everyone might be governed among us by the rule of the ban, and that henceforth the entry of false brothers and sisters among us might be prevented.

Put away from you that which is evil, and the Lord will be your God, and you will be His sons and daughters.[66]

Dear brothers, keep in mind what Paul admonished Titus.[67] He says: "The saving grace of God has appeared to all, and disciplines us, that we should deny ungodliness and worldly lusts, and live circumspect righteous and godly lives in this world; awaiting the same hope and the appearing of the glory of the great God and of our Savior Jesus Christ, who gave himself for us, to redeem us from all unrighteousness and to purify unto himself a people of his own, that would be zealous of good works." Think on this, and exercise yourselves therein, and the Lord of peace will be with you.

May the name of God be forever blessed and greatly praised, Amen. May the Lord give you His peace, Amen.

Done at Schleitheim, St. Matthew's Day,[68] Anno MDXXVII.

Congregational Order

[69]

Since the almighty eternal and merciful God has made His wonderful light break forth in this world and [in this] most dangerous time, we recognize the mystery of the divine will, that the Word is preached to us according to the proper ordering of the Lord,[70] whereby we have been called into His fellowship. Therefore, according to the command of the Lord and the teachings of His apostles, in Christian order, we should observe the new commandment,[71] in love one toward another, so that love and unity may be maintained, which all brothers and sisters of the entire congregation should agree to hold to as follows:

1. The brothers and sisters should meet at least three or four times a week, to exercise themselves,[72] in the teaching of Christ and His apostles and heartily to exhort one another to remain faithful to the Lord as they have pledged.

2. When the brothers and sisters are together, they shall take up something to read together.[73] The one to whom God has given the best understanding shall explain it,[74] the others should be still and listen, so that there are not two or three carrying on a private conversation, bothering the others. The Psalter shall be read daily at home.[75]

3. Let none be frivolous in the church of God, neither in words nor in actions. Good conduct shall be maintained by them all also before the heathen.[76]

4. When a brother sees his brother erring, he shall warn him according to the command of Christ,[77] and shall admonish him in a Christian and brotherly way, as everyone is bound and obliged to do out of love.

5. Of all the brothers and sisters of this congregation none shall have anything of his own, but rather, as the Christians in the time of the apostles held all in common, and especially stored up a common fund, from which aid can be given to the poor, according as each will have need,[78] and as in the apostles' time permit no brother to be in need.

6. All gluttony shall be avoided among the brothers who are gathered in the congregation; serve a soup or a minimum of vegetable and meat, for eating and drinking are not the kingdom of heaven.[79]

7. The Lord's Supper shall be held, as often as the brothers are together,[80] thereby proclaiming the death of the Lord, and thereby warning each one to commemorate, how Christ gave His life for us, and shed His blood for us, that we might also be willing to give our body and life for Christ's sake, which means for the sake of all the brothers. Footnotes Footnotes to the Schleitheim Confession

Note: click on the footnote number in the text to bring the footnote into this window.

Bibliography

  • Augsburger, Myron S. Pilgrim Aflame. Scottdale, Pa.: Herald Press, 1973.

The story of Michael Sattler and the Schleitheim Meeting written in fictionalized form, but based on the historical data.

  • Bender, Harold S. The Anabaptist Vision. Scottdale, Pa.: Herald Press, 1944 (many reprints).

The classic interpretation of sixteenth-century Anabaptism by a great scholar.

  • "Brüderlich Vereinigung." Mennonite Encyclopedia. Scottdale, Pa.: Mennonite Publishing House, 1955-59, v. 1, 447-448.

An account of the Schleitheim Confession, its background and significance, written by J. C. Wenger.

  • Burkholder, John Richard, and Redekop, Calvin (eds.), Kingdom, Cross, and Community: Essays on Mennonite Themes in Honor of Guy F. Hershberger. Scottdale, Pa.: Herald Press, 1976.

An attempt to test the winds and discern the Mennonite vision and direction during the 1970s in those areas where disciple meets disciple, and church meets world. A companion volume to the distinguished classic, The Recovery of the Anabaptist Vision (see listing below under "Hershberger" ), both of which are consciously based upon a common faith and experience.

  • Friedmann, Robert, "The Schleitheim Confession (1527) and other doctrinal writings of the Swiss Brethren in a hitherto unknown edition," Mennonite Quarterly Review, 16 (April 1942), 82-98.

Friedmann was one of the first North American scholars to recognize the true value of the Schleitheim Confession. J. C. Wenger soon followed with an English translation of the Confession three years later (MQR, 19 [October 1945], 244-253).

  • Good, Merle. These People Mine. Scottdale, Pa.: Herald Press, 1973.

Within a handful of beautiful vignettes, the author sketches poetically and dramatically the whole spectrum of Anabaptist and Mennonite history. One vignette is an eloquent testimonial, "The Birth at Schleitheim."

  • Gospel Herald (February 22, 1977).

A special section on "Schleitheim" prepared in cooperation with the Mennonite Historical Committee.

  • Hershberger, Guy F. (ed.). The Recovery of the Anabaptist Vision. Scottdale, Pa.: Herald Press, 1957.

This volume contains a strong set of interpretive essays on the historical significance of Anabaptism and the meaning of this movement for the present time.

  • Martyrs Mirror, ed. Thieleman J. van Braght. Scottdale, Pa.: Herald Press, 1951

Contains the story of Michael Sattler (pp. 416-420). Van Braght's inclusion of the Sattler story in this Dutch work would suggest some influence of Sattler--and of the Schleitheim Confession--upon Low Country Mennonitism. (Indeed, the Schleitheim Confession was translated and published into the Dutch language in 1560, and again in 1565 another clue to the significance of the Schleitheim Confession for Dutch and North German Mennonitism. See above, "Brüderlich Vereinigung," for this documentation.)

  • "The Radicals." Worchester, Pa. : Gateway Files-Vision Videos, 1990?

Video based on Myron Augsburger's Pilgram Aflame. Produced by Sisters and Brothers, Inc., a small Mennonite film company. 99 minutes.

  • "Sattler, Michael." Mennonite Encyclopedia. Scottdale, Pa.: Mennonite Publishing House, 1955-59": v. 4, 427-434.

This lengthy account is a moving story of the life and significance of Sattler for the development of the Anabaptist-Mennonite movement.

  • "Schleitheim." Mennonite Encyclopedia, Scottdale, Pa.: Mennonite Publishing House, 1955-59: v. 4, 460-461.

This essay presents the background material to the meeting itself of those who created what later would become known as the Schleitheim Confession.

  • Snyder, C. Arnold. The Life and Thought of Michael Sattler. Scottdale, Pa.: Herald Press, 1984.

The standard biography on Michael Sattler. It includes analysis of the Schleitheim Confession.

  • Wenger, J.C. Conrad Grebel's Programmatic Letters of 1524. Scottdale, Pa.: Herald Press, 1974.

Here is the first synthesis of Anabaptist thought, containing the kernel ideas of what later would be incorporated into the Schleitheim Confession.

  • Yoder, John H. The Legacy of Michael Sattler. Scottdale, Pa.: Herald Press, 1973.

Contains excellent background information to the Schleitheim Confession, which places this most important Confession in its historical and theological setting (see especially pp. 27-34 and 47-48 for an appraisal of how the Schleitheim Confession has been interpreted historically and theologically over the centuries). Also includes other writings of the significant Anabaptist thinker and martyr, Michael Sattler. The volume is central in understanding the idea and setting of the Mennonite faith.

  1. A most significant concept in the thought of Michael Sattler is that of Vereinigung, which, according to the context, must be translated in many different ways. In the title we render it "Union"; here in the salutation it can most naturally be translated "reconciliation" or "atonement"; later in the text, in the passive participle form, it will mean "to be brought to unity." Thus the same word can be used for the reconciling work of Jesus Christ, for the procedure whereby brothers come to a common mind, for the state of agreement in which they find themselves, and for the document which states the agreement to which they have come. Heinold Fast suggests that here, in connection with "the blood of Christ,' the meaning might be "fellowship"; cf: 1 Corinthians 10:16.
  2. Or, literally, "ordered"; the rendering of J. C. Wenger, "scattered everywhere as it has been ordained of God our Father," is a good paraphrase if "ordained" may be understood without sacramental or predestinarian connotations.
  3. This term "aliens" or "foreigners" was interpreted by Cramer BRN, 605, note 1, in the geographic or political sense, as referring to non-Swiss. Kiwiet, Pilgram Marpeck, Kassel, 1959, p. 44, takes for granted the same meaning and says more sharply that at Schleitheim the Swiss Anabaptists broke communion with the German ones. This understanding is impossible for several reasons: * There was no such strong sense of national identity, divided on clear geographic lines, in the 1520s; * Sattler and Reublin, leaders in the meeting, were not Swiss; * The libertines whom Schleitheim had in mind, although Denck (or Bucer) might have been included, were (if Anabaptist) surely mostly Swiss; namely, the enthusiasts of St. Gall (H. Fast "Die Sonderstellung der Täufer in St. Gallen and Appenzell," Zwingliana XI, 1960, pp. 223 ff.), and Ludwig Hätzer. This term has a quite different reference; it is an allusion to Ephesians 2:12 and 19, testifying to the reconciling effect of the gospel on men who previously had been alienated by unbelief.
  4. "Direct" and "teach" have as their object "the same," i.e., the "work of God partially begun in us." Wenger's paraphrase, "direct the same and teach [us]" is smoother but weakens the striking image of a "work of God" within man which can be "partially begun," "cast down," "directed," and "taught." There is, however, ground for Böhmer's conjecture that the original may have read keren (guide) rather than leren (teach).
  5. The "Langer Randen" and the "Hoher Randen" are hills overlooking Schleitheim and not, as a modern reader might think, a reference to the fact that Schleitheim is near the (contemporary, political) border. The original reads "Schlaten am Randen." A good half-dozen villages in southern Germany bear the names Schlat, Schlatt, or Schlatten. One, near Engen in Baden, also is identified as "am Randen," and until recently was held by some to have been the place of origin of the Seven Articles. The evidence, now generally accepted, for Schleitheim near Schaffhausen, is easily surveyed: * J. J. Rüger, a Schaffhausen chronicler, writing around 1594, identifies Schleitheim with the Seven Articles; * In the local dialect, the equivalent of ei in modern German is long a as in Schlaten, whereas the other villages Schlatten or Schlat have a short a; * Being subject to overlapping jurisdictions and therefore hard to police, the Klettgau, and Schleitheim on its edge, were relatively safe and accessible for Anabaptists and thus a most fitting meeting place linking the major centers in southwest Germany and northeast Switzerland. This was the first area where Sattler's colleague W. Reublin had been active after his expulsion from Zürich early in 1525. This juridical situation continued through the century; Anabaptism was still alive in the Kühtal above Schleitheim as late as Ruger's writing. * Professor F. Blanke reviews the question of place in Z, VI, pp. 104 f.; cf. also Werner Pletscher, "Wo Entstand das Bekenntnis von 1527?" MGB, V, 1940, pp. 20 f.
  6. According to Bohmer, one line of print was misplaced in imprint A. The text seems to say literally, "we were assembled in points and articles." The verb here is again "vereinigt." The "points and articles" may well have stood elsewhere in the sentence in the original text: "we have been united in points and articles" or "to stand fast in the Lord in these points and articles." Wenger's translation, "we are of one mind to abide in the Lord" is the best paraphrase but sacrifices the passive verbal construction which is important to the writer.
  7. Beginning with the parenthesis "(the praise and glory be to God alone)," the closing phrases of this paragraph refer not simply to a common determination to be faithful to the Lord, but much more specifically to the actual Schleitheim experience and the sense of unity (Vereinigung) which the members had come to in the course of the meeting. "Without contradiction of all the brothers" is the formal description and "completely at peace" is the subjective definition of this sense of Holy Spirit guidance. Zwingli considered the very report that "we have come together" to be the proof of the culpable, sectarian, conspiratorial character of Anabaptism (Elenchus, Z, VI, p. 56).
  8. 1 Corinthians 14:33.
  9. Ds. H. W. Meihuizen has recently asked with great thoroughness "Who were the `False Brethren' mentioned in the Schleitheim Articles?" (MQR, XLI (1967), pp. 200 ff.). Meihuizen s method is to survey the entire Reformation scene, Anabaptists of all shadings as well as Reformers, especially those at Strasbourg whom Sattler had recently left. Comparing the known theological positions of these men with the Schleitheim statements, Meihuizen concludes that Schleitheim must have been aimed against Denck, Hubmaier, Hut, Hätzer, Bucer, and Capito. One can agree with this description of the positions in question, without being convinced that the meeting was this clearly directed against a few particular men who were specifically not invited. If any one person was meant, if would most likely be Hätzer, whom Sattler had just been with in Strasbourg, and who was the only one of these who could be accused of libertinistic leanings. For present purposes, i.e., in order to understand the meaning of this document, it suffices to be clear from the internal evidence (in agreement with Meihuizen): * That some persons previously attached to some of the positions condemned were present at Schleitheim in order to be participants in the event of "being brought to unity"; the "false brothers" referred to by the cover letter were therefore not only state-church Reformers but at least some of them were within Anabaptism; * That the greatest emphasis in the Seven Articles themselves falls on those points of ultimate theological separateness from the Reformed: baptism, relation between ban and the supper, sword, oath. Here the list is so parallel to the document from Strasbourg that one surmises that Sattler may have been developing his outline already when he was at Strasbourg; * That in the juxtaposition of the cover letter and the Seven Articles, Sattler affirms an inner linkage between the positions of the marginal Anabaptists and Spiritualists who differed from the Zurich-Schleitheim stream, and those of the evangelical Reformers.
  10. H. W. Meihuizen reads the phrase "to their own condemnation" as meaning that the Schleitheim assembly took action to excommunicate the libertines whom the text here refers to. "The Concept of Restitution in the Anabaptism of Northwestern Europe," MQRXLIV (April 1970), p. 149. This is not possible. The verb ergeben refers to the libertines' abandoning themselves to lasciviousness, not to the Anabaptists' action. In order to enable this interpretation Meihuizen must omit the parentheses which are in the original.
  11. "Glieder" (members) has in German only the meaning related to the image of the body; the overtone of "membership" in a group, which makes the phrase "members of God" unusual in modern English, is not present in the original.
  12. Galatians 5:24.
  13. The use of the first person singular here is the demonstration that the introductory letter was written, probably after the meeting, by an individual.
  14. This is the conclusion of the introductory letter and of the epistolary style. The "cover letter" is not in the Bern manuscript, and the Seven Articles probably circulated most often without it.
  15. With one exception, every article begins with the same use of the word vereinigt as a passive participle, which we have rendered thus literally as a reminder of the meaning of Vereinigung for Sattler.
  16. Here the printed version identifies the following Scripture texts (giving chapter number only): Matthew 28:19; Mark 16:6; Acts 2:38; Acts 8:36; Acts 16:31-33; 19:4.
  17. Nachwandeln, to walk after, is the nearest approximation in the Schleitheim text to the concept of discipleship (Nachfolge) which was later to become especially current among Anabaptists.
  18. Two interpretations of this phrase are possible. "To be inadvertently overtaken" might be a description of falling into sin, parallel to the earlier phrase "somehow slip and fall." This would mean that sin is for the Christian disciple partly a matter of ignorance or inattention. Cramer, BRN, p. 607, note 2, and Jenny, p. 55, seek to explain that all sin is somehow inadvertent; i.e., that at the time of a sinful decision one is deceived and not fully aware of its gravity. Calvin (with some grounds in the phrasing of the French translation) misunderstood this text to mean that the Anabaptists would distinguish between forgivable and unforgivable sins, with only the inadvertent ones being within the scope of the congregation's reconciling concern. Or the reference may be to the way the guilty person was discovered.
  19. The printed version inserts" or banned."
  20. The printed version inserts" or banned."
  21. At this point Walter Köhler, the editor of the printed version, suggests the text Matthew 5:23. If "the ordering of the spirit" relates specifically to "before the breaking of bread" and means to point to a Scripture text, this could be a likely one; or 1 Corinthians 11 could also possibly be alluded to; but "ordering of the spirit" is not the usual way in which the Anabaptists refer to a Bible quotation. The phrase can also mean a call for a personal and flexible attitude, guided by the Holy Spirit, in the application of the concern for reconciliation.
  22. This is the one point at which the word vereinigt is not used at the beginning of an article, presumably because it occurs later in the same sentence.
  23. Vereinigt: here the word has none of the meanings detailed above, but points to still another; to the work of God in constituting the unity of the Christian church.
  24. 1 Corinthians 10:21. Some texts have here "Saint Paul."
  25. Most ecumenical debate about the validity of sacraments focuses upon either the sacramental status of the officiant or the doctrinal understanding of the meaning of the emblems. It should be pointed out that the Anabaptist understanding of close communion refers not to the sacrament but to the participants. It is invalidated not by an unauthorized officiant or an insufficient concept of sacrament, but by the absence of real community among those present.
  26. Note the shift from "world" to "they." "The world" is not discussed independently of the people constituting the unregenerate order.
  27. 2 Corinthians 6:17.
  28. Revelation 18:4 ff. Some texts read "which the Lord intends to bring upon them."
  29. Vereinigt.
  30. The printed version adds "and flee."
  31. The prefix wider can mean either "counter" or "re-" (modern wieder-). Both meanings of course apply to the Reformation churches of Strasbourg and the Swiss cities, which are meant here; they are both anti-popish (having broken with the Roman communion) and re-popish (having retained or reinstated certain characteristics of Catholicism). Earlier translations have chosen the rendering "papist and anti-papist," but the other reading carries a greater pointedness of meaning and is supported by Zwingli's translation. Thus the claim that the new Protestant churches are at some points copies of what was wrong with Catholicism is already taken for granted in early 1527.
  32. Götzendienst. The Bern manuscript and the early prints read Gottesdienst ("worship"); but Zwingli, who had other manuscripts as well, translated "idolatry." Since the next two words both deal with church attendance, "idolatry" is less redundant. "Idolatry" was a current designation in the whole Zwinglian movement for the place of statues and pictures in Catholic worship.
  33. Kirchgang, literally meaning church attendance, has no congregational dimension to it but refers to the conformity to established patterns of those who, while perhaps sympathizing with the Anabaptists, still avoided any public reproach by regularly being seen at the state church functions.
  34. The Bern manuscript reads Burgschaft, i.e., a guarantee or security supporting a promise, and belongs in the economic and social realm. If "unbelief" here refers to a lack of sincerity, then the "guarantees and commitments of unbelief" would mean such matters as signing notes and mortgages and affidavits in less than good faith. Martin Luther held strongly that such guarantees, even in good faith, were not only unwise but immoral since the guarantor puts himself in the place of God. ("On Trading and Usury, 1524," in Works of Martin Luther, Muhlenburg, Philadelphia, 1931, Vol. IV, pp. 9 ff). His argument is thus very parallel to that of the Anabaptists on the oath. A more likely view is that "unbelief" is synonymous with "worldly," and the reference is rather to guilds and social clubs. Zwingli translates with foedera, "covenants." Bullinger bears out this interpretation by reprimanding the Anabaptists at length (Von dem unverschampten Fräfel. . . , pp. cxxi to cxxviii) for their opposition to associations and societies (pündtnussen and gselschafften), concord and friendship (vertrag unnd früntschafft) with unbelievers, and seemly temporal joy (zymliche zytliche fröud). The later printed text changed Burgshaft to Bürgeschaft (citizenship), which is less in place in Art. IV. In April 1527 Zwingli was unsure what it meant but leaned toward "serving as a guarantor" (Z, IX, p. 112); by August when he wrote the Elenchus he interpreted it as "citizenship," perhaps as referring to the Anabaptists' refusal to perform the citizen's oath. But if Bürgerschaft should mean citizenship, the "commitments of unbelief" still must mean some kind of involvement, legal, economic, or social, with unbelievers (Z, VI, p. 121). Luke 16:15's reference to "abominations" may be alluded to.
  35. The printed version adds "doubtless."
  36. The printed version reads "unchristian and."
  37. Matthew 5:39.
  38. 1 Timothy 3:7. Interpreters are not clear where the focus of Art. V lies. Its first thrust is a call for the shepherd to be a morally worthy person, i.e., a critique of the practice of his being appointed on the grounds of his education or social connections without regard to moral stature. Zwingli's translation moves the accent by translating "the shepherd should be one from the congregation," i.e., not someone from elsewhere. As Zwingli knew, the Anabaptists also rejected the naming of a minister to a parish by a distant city council, and he let that knowledge influence his translation.
  39. The printed version adds, "to lead the brothers and sisters in prayer, to begin to break bread ...."
  40. 1 Corinthians 9:14.
  41. The change in number here from "a shepherd" to "if they sin" is explained by the fact that this sentence is a quotation from 1 Timothy 5:20.
  42. "Cross" is already by this time a very clear cliché or "technical term" designating martyrdom.
  43. Perhaps "installed" would be less open to the sacramental misunderstanding. Verordnet has no sacramental meaning.
  44. "Law" here is a specific reference to the Old Testament. Significantly the verb here is not verordnet but merely geordnet; conveying even less of a sense of 27 permanence or of specific divine institution. It should be noted that in this entire discussion "sword" refers to the judicial and police powers of the state; there is no reference to war in Art. VI; there had been a brief one in Art. IV.
  45. "Without the death of the flesh" is the clear reading of the earliest manuscript. Zwingli, however, understood it "toward the putting to death of the flesh," a possible allusion to 1 Corinthians 5; the difference in the original is only between a and o.
  46. Matthew 11:29.
  47. John 8:11.
  48. John 8:22.
  49. Luke 12:13.
  50. Two interpretations are possible for "did not discern the ordering of His Father." This may mean that Jesus did not respect, as being an obligation for Him, the service in the state in the office of king, even though the existence of the state is a divine ordinance. More likely would be the interpretation that Jesus did not evaluate the action of the people wanting to make Him king as having been brought about (ordered) by His Father.
  51. Matthew 16:24.
  52. Matthew 20:25.
  53. Romans 8:30.
  54. 1 Peter 2:21.
  55. Philippians 3:20.
  56. Here the printed version adds Matthew 12:25: "For every kingdom divided against itself will be destroyed."
  57. Matthew 12:25.
  58. Matthew 5:34-37.
  59. Hebrews 6:7 ff.
  60. Matthew 5:35.
  61. Zwingli's translation fills in the argument here: "if it is bad to swear, or even to use the Lord's name to confirm the truth, then the apostles Peter and Paul sinned: for they swore. "
  62. Luke 2:34.
  63. The difference in tense between "taught" and "says" is in the original; it results from the fact that Scripture references are always given in the present: "Christ says," "Paul says," "Peter says."
  64. This concludes the Seven Articles.
  65. Vereinigt.
  66. A second reference to 2 Corinthians 6:17.
  67. Titus 2:11-14.
  68. February 24.
  69. This document has no title; the title chosen here reflects the label given it in the (modern) table of contents of the volume of archival materials UP 80 in the State Archive of Bern. No earlier full translation into English has been published; the text has been digested by Delbert Gratz, Bernese Anabaptists, Scottdale, 1953, p. 25, and by Robert Friedmann, Mennonite Quarterly Review, 1955, p. 162. Jean Seguy published a translation and commentary in Christ Seul (journal of the French Mennonites) No. 1 (p. 13) and No. 2 (p. 5), 1967. The text seems to be in the same hand as the copy of the Seven Articles so that it may be assumed to have circulated together with them and been seized at the same time.
  70. May mean either: "in the providence of God the Word is preached to us," whereby "Ordnung" would refer to the workings of God in bringing about Reformation and gospel preaching; or "the Word of God is preached according to the divine pattern," with the emphasis on the rediscovery of the true divinely willed church order. The following "whereby" may accordingly refer either to the preaching or to the proper ordering.
  71. 1 John 2:8.
  72. Sich üben: perhaps includes an element of rote learning of gospel narrative and teaching, since literacy and the possession of Bibles was still rare.
  73. "Read" includes exposition. "Readings" had been one of the earliest names given to the study meetings held in Zürich and St. Gall prior to the foundation of Anabaptist congregations.
  74. "The one to whom God has given the best understanding shall explain it" may mean that, for every particular passage, whoever understands its meaning should speak up. Then we would have a picture of a meeting with no settled leadership, with no controlling role for the "shepherd" who was called for by Schleitheim Article V. Then one might infer, as does Jean Seguy, that this text testifies to a time before the Schleitheim decisions, when congregations functioned without a named leader. It is, however, also possible that "the one to whom God has given the best understanding" may be a circumlocution for a spontaneously recognized leader in the local group.
  75. This "reading" may well be rote recitation. This reference to the Psalter is one of the very rare early Anabaptist references to non-congregational devotional exercises. It may be a further trace of an inheritance from monasticism.
  76. 1 Timothy 2:8.
  77. Matthew 18:15, cf. above note 20.
  78. The common fund is seen here as a special purse for specific needs, not as a total communism of consumption such as was established not much later in Moravia. It is significant that the non-Hutterian Anabaptists also considered themselves to be following the economic example of the early Jerusalem Christians.
  79. Romans 14:17. The assumption that the congregation would frequently gather around a simple meal may be linked to their avoidance of social clubs and guilds (Art. IV.)
  80. The Lord's Supper, specifically identified as such, is evidently distinguished from the rest of the meal, even though both were practiced as often as the brothers met. (Cf. Art. 1).

Acknowledgments

Much of the information here was compiled by the Global Anabaptist Mennonite Encyclopedia Online.



from Hacker News https://ift.tt/GJLQgeE