I don’t really know what else there is to say about it. But I will try to illustrate.

Instead of

it’s

. A deliberate effort to make human readability less intuitive, I guess?

You have to start variable names with ??? Why.

? ? ? ? Really?

Also, using for concatenation just so you can’t use standard dot notation.

How was all this syntax actually intentionally designed this way?

I just

]]>

.

*Proof:*

]]>

.

That is, it’s the principle that if a proposition’s negation implies the proposition, then the proposition must be true.

Its use is similar in form to that *reductio ad absurdum*. To use *reductio ad absurdum*, one assumes that a proposition is false, sees that a contradiction follows, and from this concludes that the proposition must be true. To use *consequentia mirabilis*, by contrast, one assumes that a proposition is false, sees that the proposition itself follows, and from this concludes that the proposition must be true.

]]>

123e4567-e89b-12d3-a456-426655440000

or

00112233-4455-6677-8899-aabbccddeeff,

with 32 hexadecimal digits being broken into 5 groups by hyphens. The usefulness of UUIDs comes from the sheer improbability of the same UUID being generated 2 different times.

To give an idea of the improbability: the number of Version 4 UUIDs you would have to generate to have at least a 50% probability of a collision would be around 2.7 quintillion. If a computer generated 1 billion UUIDs every second, it would take 85 years just to compute that many, and even then the amount of physical storage required would be around 45 exabytes, much larger than the largest databases currently in existence.

This is to say that *for now*, UUIDs are a very good way of uniquely identifying things with almost impossible collisions.

]]>

- Separate the subject from the body (if it exists) with a blank line
- Keep the length at no more than 50 characters
- Capitalize the first letter, don’t end it with a period
- Use the imperative mood. For instance, “Update getting started information” instead of “Updated getting started information”, “Refactor X for readability” instead of “Making X more readable”.

Additionally, a commit message subject should convey information about not only *what* was done but also *why.*

]]>

The name comes from a program called Lint that performed this function for C code, but has since become a more general term.

Linting can be helpful for debugging interpreted languages like Python, since they don’t have a compilation phase where things like syntactic errors would be caught.

]]>

To show this, suppose we’ve arrived at a contradictory statement, . Let be any proposition we want to prove. By conjunction elimination, we have , and then by disjunction introduction we have

.

However, since we also have , it follows that is true.

This principle suggests an interesting alternative attitude towards contradiction in systems that exhibit this behavior: contradiction is not undesirable because of any ‘intuitive’ nonsensicalness, but simply because a set of assumptions leading to contradiction gives us *no information*.

]]>

The name is a reference to the saying, “If it walks like a duck and quacks like a duck, then it’s a duck”, which echoes this same principle.

]]>

If you look the shape of the nodes that the algorithm visits on a given example, the general case of the search time being makes intuitive sense.

]]>

To search for an element within the skip list one then starts with the sparsest linked list, getting as ‘close’ to the desired element as possible, then moves directly down to that same position in the next linked list and continues searching until the item is found (or not).

This animation depicts the insertion of the element 80 into a skip list of positive integers (insertion being equivalent to searching):

In the average case, the skip list uses space and takes just time for searching operations.

]]>