[–] rdtsc 11 hours ago
Discernment and seeing the forest for the trees is part of being an expert, too.
~~Just out of curiosity what did pyon really say? I couldn't find the comment any longer (assuming they'd be attached to https://nedbatchelder.com/text/slowsgrows). If we're gonna throw stones at anonymous cowards, as it were, let us evaluate what they said perhaps. Did Ned feel embarrassed and scrubbed the comment section?~~
EDIT: Ned fixed the comments. Thank you, Ned!
[–] nedbat 11 hours ago
[–] nedbat 10 hours ago
[–] rdtsc 10 hours ago
[–] eviks 13 hours ago
There are two points in a connection, and one way to sever it is to follow author's advice to "ignore them". Or you could try to learn and maybe even engage.
(also, the "non-coward" way would be to actually link to the comment so that we could try to understand how toxic / irrelevant expert peons are)
[–] nedbat 10 hours ago
[–] ConradKilroy 11 hours ago
I will now adopt 'Toxic Experts' in to my teaching mantras.
[–] ghusto 12 hours ago
Toxic experts are not interested in getting things done, or actually making any real world difference. In fact they'd _rather_ nothing happens at all. They were the kids who were bullied in the playground, and this is their little bit of power.
[–] 33a 13 hours ago
[–] yorwba 13 hours ago
[–] 33a 12 hours ago
I will still stand by my opinion though that this whole thing was remarkably light on technical substance.
[–] rpkla 13 hours ago
[–] kirth_gersen 13 hours ago
[–] tpoacher 13 hours ago
It reads like a character assassination piece superficially presented as nuanced philosophy, and we don't even have the actual exchange, only this person's account of it, which we are meant to trust in terms of both wording and demonstrated intent.
"If you have nothing kind to say" as the quote goes ...
[–] nedbat 10 hours ago
[–] austin-cheney 12 hours ago
A problem that is encountered frequently among people with exceptionally low social intelligence is the inability to separate agreeability from social intelligence. Those concepts are completely unrelated.
Agreeability is the need to please others and to a lesser extent seek reciprocity for kindness. Kindness lives here. This is completely and utterly unrelated to social intelligence and when signals are confused acts in opposition to social intelligence.
Social intelligence is a perceptual skill. It is the ability to both introspect and perceive the motivations of others. You can have exceptionally high social intelligence and still be a cold asshole.
For people with exceptionally low social intelligence they lack the perceptual skills required to both introspect and discern the emotional communication of others. So... they may confuse that with something else, like kindness, where they strive to fill an unfillable gap.
It is fun talking about this with my wife. I am a software developer and software is staffed with males with low social intelligence at a much higher rate than the population at large. My wife works in education and its the same thing there for females.
[–] thaumasiotes 10 hours ago
Female teachers are disproportionately unable to perceive the emotional communication of others?
[–] phyzome 10 hours ago
Pyon indeed seems like a complete asshat.
[–] IshKebab 11 hours ago
[–] antonvs 11 hours ago
[–] austin-cheney 10 hours ago
BTW, there is a common assumption about the correlation between autism and low social intelligence. While that may or may not be true more often than not it is not universally correlated.
[–] rglover 12 hours ago
When someone rags on me or my work in a way I interpret as aggressive or dismissive, I make a point to go look at what they're up to. More often than not: nothing, or, something that screams "oh, your problem with me is despite you knowing things I don't, I also know things that you don't."
I agree with the general sentiment here, but it helps to mentally filter the passive aggression and condescension from the point they're making. More often than not they're correct, you just have to cut through the weeds to get to it. I'd say that's an occupational hazard as a programmer.
Good? No. But a reality (on the personality level) you have to deal with in this business. It sucks, but it is what it is.
[–] aksjhg 12 hours ago
And implicitly supported people like Gregory P. Smith who proudly stated that any person who was banned deserved to have difficulties finding a job (because of course the Steering Council, which is unable to summarize a simple conversation and just lies, is always right).
[–] WesolyKubeczek 11 hours ago
That was some years before Tim Peters incident, and when it had happened, I was sad but not surprised at all.
[–] hexasquid 12 hours ago
[–] werla 13 hours ago
That is always what happens when you get rid of the experts. Ruthless mediocrity takes over!
[–] kazinator 9 hours ago
However, I have to agree with the substance of the comment; it is a pretty lousy explanation of amortized performance to simply equate it with a kind of average:
> If you read more about big-O, you may see the word “amortized” thrown around. That’s a fancy word for “average,” meaning that individual occurrences don’t all behave exactly the same, but over the long run, averaging over many operations, the behavior has a certain characteristic.
While the result of amortized analysis gives us a kind of average, averages show up in more than way in performance analysis not necessarily via amortization.
The author complains that "[Pyon] pointed out a detail of algorithmic analysis that I had not mentioned. It’s a detail that I had never encountered before."
But the author obviously encountered amortization before, and mentioned it in the article, and not in a very good way.
Amortized analysis isn't something obscure; it is the basis for understanding everyday algorithms such as chained hash tables and garbage collection. It's covered in like third year CS courses.
When an algorithm touts amortized performance, that's a red flag: it suggests that certain operations are infrequently hit with a pretty big cost. For example, a hash table insertion that has to resize the table doesn't just not act "exactly the same" as a previous insertion, or following one; it takes much longer. All the items inserted so far (or at least their hash table entries) have to be visited to redistribute them to a larger table. That could be hundreds of millions: the larger the table, the more expensive this is, yet less frequent. So yes, the amortized performance (like O(1) constant time for hash table insertions) is a kind of average, but the distribution may be heavily skewed, with implications particularly for real-time work. It's not a "nice" average with a tight bell curve distribution jittering around a mean.
A better way would be to say that "amortized" is a kind of average where operations are infrequently penalized with a substantial performance hit, which helps make most other operations faster: the "amortized analysis" which calculates this kind of average works by pretending to redistribute the large cost incurred by one operation among the others. And not all average performance figures are derived using amortized analysis. The word is only used when that particular reasoning was applied, and is mentioned as kind of warning label.
An example of average that is not amortized is, say, searching an unordered list of unique keys, where we expect on average successful search for a random key to process half the list. Readers do deserve to know that they should not use the word "amortized" for this kind of average!
[–] nedbat 8 hours ago
I think you are being very generous to call his comment "obvious humor". A number of the people in that comment stream missed the humor, and pyon gave no indication (such as a tone indicator) that it was humor.
[–] kazinator 8 hours ago
Operations can incur some kind of "debt" which a more expensive operation occurring later has to pay for. Or they can be regarded as enjoying something "prepaid" by an earlier expensive operation until the credit runs out and another prepayment has to be made. Possibly, either view can be used to arrive at the same result.
The level of contention on the part of Pyon is disconnected from the level of detail given to "amortized" in the article and based on the false premise that the word "average" implies some kind of order that is contrary to "amortized". (Expert, my foot).
It is factually correct that a an amortized performance is an average, but readers should be aware that it's a special kind of average (not every average is "amortized") and that it is a warning label: an algorithm with performance quoted as amortized possibly exhibits a big latency spike that occurs infrequently.
[–] fyltr 8 hours ago
[–] baddash 11 hours ago
[–] rvz 13 hours ago
Who cares? We have a clear term for this and it is called "point scoring".
Just give the rest of the group further reading material if they want to study it in their own time and to not talk over minute details.
So just dismiss them with a "Great point" remark and tell everyone else to read the reading list later.
Job done.
[–] llm_nerd 13 hours ago
Maybe someone was having a bad day. Maybe this is an argument they had with a peer and it triggered a peeve. Whatever.
Tangential, but if I had to rank toxicity, someone going overboard at being a pedant in the easily censored comments under a blog post ranks far below overreacting and clutching pearls to try to pillorize and rile a torch mob, hoping to put them on blast and make them pay for their transgression. The latter is significantly more toxic, and it is what absolutely destroys communities.
[–] _dain_ 13 hours ago
on the one hand it's a nasty thing to say he should be "ashamed" for not mentioning it. on the other, it is a little strange he hadn't come across the "amortized O(whatever)" concept before. esp if doing a talk about it..
neither of them come across well here.
[–] nedbat 10 hours ago
[–] thaumasiotes 6 hours ago
--- technical details ---
CLRS (3rd edition) defines three types of amortized cost analysis. The first type ("aggregate analysis") requires us to show that for all sequences of n operations, the total actual cost of performing those operations in that sequence is less than some function T(n). We can then say that the amortized cost of all such operations is T(n) / n. This makes it necessary that cheap operations precede expensive ones.
The second type ("the accounting method") is different: we assign potentially-inaccurate prices to all operations. These prices will be constant regardless of the actual cost of performing those operations. Conceptually, an operation is in "credit" if its actual cost is less than its assigned price, and it is in a state of owing if its actual cost is more than its assigned price.
We must then assign prices that make it possible to show that, for all sequences of operations, the total actual cost of all operations from the start of the sequence to point n within it is less than the total amortized price assigned by our price schedule. (Stated another way, while an individual operation is free to "owe", a sequence of operations may never be in an "owing" state.) If we can prove that, we are justified in making a claim about the amortized cost of the operations we considered. (Under this method, the amortized cost of an operation is equal to the price we assigned it.) This also makes it necessary that cheap operations precede expensive ones.
The third type ("the potential method") defines a potential function which evaluates the state of the data structures maintained by the algorithm. ("Potential" in the sense of potential energy, which can be stored and later released.) It then says that the amortized cost of an operation is equal to the actual cost, plus the difference in "potential state" caused by the operation. Conceptually, if potential is raised, the amortized cost was higher than the actual cost (and has built up a buffer that later operations may draw down), and if it is lowered, the amortized cost was lower than the actual cost.
As before, we must show that no sequence of operations can place the data structure into a state of negative potential. Cheap operations must precede expensive ones.
------
Now, why was pyon telling you you should be ashamed of your post? It's almost certainly these two paragraphs:
>> If you read more about big-O, you may see the word “amortized” thrown around. That’s a fancy word for “average,” meaning that individual occurrences don’t all behave exactly the same, but over the long run, averaging over many operations, the behavior has a certain characteristic.
>> The analysis we’ve been doing is for the average behavior. Lots of operations can behave much worse in unusual circumstances. Adding a key in a dict and looking up a key are O(1), which is true for typical data. But if you understand the internals of dicts, you can carefully craft a set of keys that will perform terribly, with O(N) behavior. Filling that dict would take O(N²) time.
Your post has confused average-case analysis with amortized analysis. (And it makes this problem worse by implying that the two terms refer to the same concept.) The point of amortized analysis is that you cannot see worse performance than the amortized cost.
An amortized analysis is deterministic and averages runtime costs over the different operations that are present in a sequence of operations beginning from a given initial state; an average-case analysis is stochastic and averages runtime costs of a single operation over many different performances of that operation against different initial states. These two terms are not synonymous and they don't belong to the same universe of terminology; if we're thinking about "average-case analysis", then an amortized analysis is a type of "worst-case analysis", not a type of average-case analysis.
The first paragraph I quoted tells us that you're talking about amortized analysis, but you aren't: the example you provide is of an average-case analysis. If the amortized cost of adding a key to a dictionary were O(1), it would be impossible for adding a sequence of N keys to that dictionary to take more than O(N) time. (As is in fact the case for the Python list.append example you mention beforehand.)
[–] nedbat 6 hours ago
The point of the post was that he did not do what you have done here. Instead of explaining in a way that let people learn, he belittled and insulted.
[–] lo_zamoyski 12 hours ago
I am reminded of the most common reading at wedding masses, 1 Cor 13 [0].
[–] antics 12 hours ago
The only reason I bring this up is because I think it is counterproductive to view these people as experts when they are likely not.
[–] rpkla 13 hours ago
[–] clivefx 12 hours ago
[–] 0x20cowboy 13 hours ago
[–] SomeHacker44 13 hours ago
[–] 0x20cowboy 12 hours ago
I am a trust fund baby, and I think trust fund baby’s are the hardest working most deserving class of people.
Get on the blocked list for not being part of the herd from those places then let me know how nice they are.
[–] ivansmf 13 hours ago
[–] NoidFonsense 11 hours ago
[–] watwut 11 hours ago
[–] WesolyKubeczek 10 hours ago
[–] ex-aws-dude 12 hours ago
I’ll still go in to see what’s happening but don’t forget where you are and don’t take it too seriously