Ask HN: What is the most complex concept you understand?

61 points by ggeorgovassilis ↗ HN
Having an IT background, I thought I understand fairly complex topics (FFT, sorting algorithms, calculus), but in a moment of reflection I realised that I either don't (eg. I tried to explain them and failed) or they are fairly simple (eg. I tried to explain them and was done in 5 minutes). I asked a friend this question and he replied "women" (I call BS on that one :-). Which is the most complex concept you understand?

139 comments

[ 3.1 ms ] story [ 162 ms ] thread
I think it's a bit like the coastline paradox:

https://en.wikipedia.org/wiki/Coastline_paradox

Most maps fairly accurately measure the coastline of a place. Their granularity of topographical measurement is good enough.

In other words, it's not if you understand a concept but how deeply. Also, it's hard to sit down and list all the complexities of concepts. You could be understanding a lot more complexity than you realize.

Yeah...What one person considers deep understanding about something, might seem to another the most basic, superficial knowledge. It's all relative. It's like:

Beauty is as relative as light and dark. Thus, there exists no beautiful woman, none at all, because you are never certain that a still far more beautiful woman will not appear and completely shame the supposed beauty of the first. - Paul Klee, diary, 1910

(And yet, there is light, dark, and beautiful women..)

Sorry couldn't resist, from wikipedia:

> if one were to measure a coastline with infinite or near-infinite resolution, the length of the infinitely short kinks in the coastline would add up to infinity.

No they wouldn't. The sum would converge. What a bad article.

Not necessarily if the coast is fractal, no?
Well the argument does break down as you get to the atomic level, but the observation is morally correct; the idea (and the divergent sum) is easiest to see with the Koch snowflake (which has an infinite perimeter)

https://en.wikipedia.org/wiki/Koch_snowflake

There is some self-similarity going on (Mandelbrot discusses scales from 1000 km to 10 km) but rocks or coastal sections with the fractal dimension of Great Britain on a scale of 1m or 10m are a rare exception.

I'm not an expert, but I think it's because as the length scale gets smaller, coastal erosion dominates the coastline, as opposed to an older force producing larger features, like glacial erosion or even plate tectonics. No reason to drag quantum mechanics into this discussion, but the circumference of an atom can be defined, so that's not a problem.

An actual Koch snowflake you can buy will always have a measurable circumference.

E: Some of this misunderstanding is actually due to Mandelbrot himself, he wrote in the introduction to [How long is the Coast of Britain?, 1967]:

> Geographical curves are so involved in their detail that their lengths are often infinite or, rather, undefinable.

No, they're not any more infinite than a toothbrush.

In reality, yes. If you see the coast as a mathematical object - a fractal - i think it doesn't converge.

I only studied topology for one year, so i might be very wrong on that one.

Being able to explain it in 5 minutes doesn't necessarily mean it's not complex. It really depends on how elementary the explanation is. In other words, how complex are the terms themselves in which you explained it?

For instance, you might say that the Fourier Transform is just a decomposition of a function of time into complex exponentials representing frequencies. But how does a complex exponential represent frequencies? Can you explain Euler's formula?

I usually pick someone I know well and consider what it would take to make them understand, given what I expect them to know already. I find this really helpful in testing my own understanding, but it's a good way of testing how complex an idea really is, relative to the average person's knowledge. (Incidentally I'd rank Fourier stuffs as pretty complicated, all things considered).

>Being able to explain it in 5 minutes doesn't necessarily mean it's not complex.

I second this. Evolutionary biology is a complex topic. But all it took for me to understand the basics of it was the Carl Sagan video about the japanese crabs.

Building on the giants.. Fourier could more easily be explained once you understand linear transformation as a multiplication with basis vectors. Seems simple enough right? But that is assuming you the prerequisites.
I can explain how atomic clocks work, to a layman, in 5 minutes. It's a matter of understanding the subject, and remembering what it is like NOT to understand it, and connecting the two in creative ways.
Probably Lie Theory, or at least the small subset of it that is relevant for robotics.

It has taken me a long time and a lot of work to understand it to the level I have, and I still have a lot more to learn. But it is a fascinating subject and a very elegant way to represent some very complex optimization problems.

How is Lie theory relevant to robotics and optimisation? I looked into Weyl groups a bit during my undergrad, but didn't really go into Lie theory in much depth.
Lie theory is, among other things, a very elegant way to parameterize an energy function involving rotations in 3D space. For example the translation and rotation of multiple camera frames that observe the same set of 3D points. This is the basis of how Visual Odometry, SLAM or 3D reconstruction problems are solved.

There are other cool things like representing a probability distribution over a 3D rotation with an multivariate gaussian vector interpreted as a so3 or se3 vector. Using this you can for implement a very elegant extended kalman filter estimating a 3D rotation. Which usually can be a tricky thing to do.

In robotics we pretty much only use the SO3, SE3 and SIM3 groups so my knowledge is limited to those groups.

What about quaternions?
The problem with quaternions for optimizations is that they are over-constrained. Meaning the norm of the 4 values must sum to 1 for it to be a valid 3D rotation. So you need to ether penalize a rotation with a norm different from 1 or constantly remap the quaternion back to a valid one in each iteration of the optimization. Neither solutions is very elegant.

A 3 valued so3 lie algebra vector is however always a valid 3D rotation, no matter what the values are. That makes it an ideal parameterization of the optimization problem.

The mapping from so3 lie algebra to SO3 lie group (which could be represented as a rotation matrix or quaternion) is a smooth differentiable function, which allows us to compute the jacobian we need for the gradient in the optimization.

That every time I "understand" something there is 10X more that I have yet to understand.
Every topic is infinitely complex if you go into enough details. It's like the epistemological version of I, Pencil: there's far more to knowing a simple topic than we initially consider.
This person is asking, "What is your deepest topic?" They're not asking, "How deep does [topic] go?"

Yes, every topic goes infinitely deep, but I personally have much deeper knowledge about the HTTP client implementations than I do about elephant reproduction.

That is a possible interpretation that I did not immediately see.
Academics: Knowing more and more about less and less until you know everything about nothing.
Object oriented programming.

tl;dr - literally all of you are doing it wrong.

I’m not sure I could explain it well myself, but many years ago, back when I was still rather new to programming I just never understood it until one day I was working on something and it clicked.
(comment deleted)
Could you explain more on why we’re doing it wrong?
I think the question in 2021 is more "why would anyone use OOP at all, compared to other techniques, outside of a few niche use cases?" (though I agree OOP can be very useful in niche use cases where having lots of scattered state makes sense, such as when writing a UI component library)
You can achieve immutability with OOP. Other paradigms just emphasize it more.

I agree, though, that mutability is detrimental, and that traditional OOP can easily lead us to believe that state is not a concern.

I do not believe that this is a problem inherent to OOP, rather it's a problem of paradigmatic implementation.

I would actually love to hear/read about this more, especially the part where you compare others' misconceptions with what you think differently. I've been interested in how people get the "wrong" idea for a very long time and I like getting feedback from others on this matter.
Language is fuzzy. Every word you say is a theory that carries with it everything you know about a word.

"Red" may bring to mind the color. It may bring to mind anger. It may bring to mind a bull and a matador.

All of those things happen in your subconscious, and they affect your understanding in uniquely-local ways.

So the transfer of information through speech from my mind to yours may sound very direct, but your interpretation of what I am saying is different than my interpretation of what I'm saying in very subtle ways.

Because of this, there's a very good chance that I am either completely wrong because I have misinterpreted things, that I am wrong because you have different context than I do, or that I have done a poor job of explaining things because context exists locally (in my head) that you don't have.

About this topic in particular, it was hyperbole to say "you are all doing it wrong". What is more accurate to say is that "my understanding of OOP is different in implementation than what I'm used to seeing, and I believe that my understanding is more correct/beneficial than those implementations"

Ok, I'll take the bait. If "literally all of you are doing it wrong", then why even try to define the "right" way to do OOP? Is OOP even a good thing? Or has it failed to live up to its promises?

(Insert FP fanboy platitude about how objects are a poor man's closures, or something along those lines)

Good questions!

One of the biggest issues with OOP I think is the lack of a unified understanding. I think there's value in trying to define a "right" way, if only so that when we are talking about OOP, we are talking about the same thing.

I think that definition would require a volume of text, so I'm not prepared to fully elaborate, but ultimately I think that the core issues lie in our approach. We tend to think like computers when programming, which leads to OOP being a morass of procedural code masquerading as objects. Effectively, we tend toward functional decomposition. Code is boxed up into related data and behavior, and we call these "objects". What we really should be doing is approaching object design as a function of behavioral affordances.

Object design then becomes a necessary, often overlooked, step.

Object design is the first hurdle. The second is in the actual implementation, wherein we traditionally treat our objects as "data" and "behavior upon that data". I can't tell you how many times I've cringed at seeing "Thing" and "ThingManager" in code.

OOP might not be a good thing. It definitely isn't a good thing when it is done poorly. Exposing an object's data, for instance, makes the entire paradigm worthless. The widespread acceptance of `public` data members completely ruins the usefulness of OOP.

That brings up implementation languages. Programming languages really want you to use them, and they make it easy to eschew good OOP principles in favor of ease of use. Accessibility features and syntactic sugar lead not only lead us away from the paradigm, but also confuse about what it actually is.

OOP's biggest strength, and one that most of the literature doesn't go into, is it's ability to lighten cognitive load. When an object works independently of its environment, it is easy to both learn and understand that object. But we sacrifice a huge chunk of this strength in the name of "getting the work done".

I believe that good OOP resembles FP in implementation. Not completely, but much more closely than the procedural landmines we're used to would have us believe. OOP just provides a lower barrier to entry in that it lends itself well to the usage of basic programming constructs and it more closely resembles how humans think, though that could also be argued.

OO is simple, and elegant if done right... case in point the Visual Component Library of Borland Delphi.

It is a nightmare if you ever use the word "factory"

Totally.

This also applies to really anything with the "-er" suffix, which lead us to treat objects as "data" and "things that act upon that data".

This often shows up in code as "Thing" and "ThingManager", or something similar.

There is no agreed definition of OO so what you are claiming is obviously wrong. But who cares? What we are doing with programming is solving problems. I don’t care if you are doing it “right” or not according to some arbitrary definition. But, having said all that, IMHO Erlang programmers are doing OO better than anybody else. And I am not an Erlang programmer.
Understanding would be an overstatement, but there's a mental model in my head about the interaction between personal liberty, privacy, automation, encryption, state power, human psychology, and the feedback loops that connect them that I sometimes get larger glimpses of. Then again, that feeling of occasional clarity is probably how a crank feels.

But in terms of stuff I struggle to get my mind around, that is the most complicated thing by far I have ever tried to understand. That and the grammar of numbers in Slavic languages.

> that feeling of occasional clarity is probably how a crank feels

I felt like that when I learned about magamps last year... they were hiding in plain sight for my entire life

https://en.wikipedia.org/wiki/Magnetic_amplifier

Dude, I am probably as hardcore as electrical engineers come (define your metric, I will (probably) beat it :-) )... I learnt about magamps from your post today. Thanks
I repaired a lot of Westinghouse Industrial Control Modules that were built in 1964 with early transistor technology as a rule,

The most interesting was a magnetic amplifier module, it had 4 windings as inputs, each thus DC isolated from all of the others, AND it worked all the way down to DC... which I didn't expect. The drive frequency was about 10 Khz.

---

In the 1950s, transistors weren't yet reliable enough for computing, so they invented a solid state computer in the 1950s that ran at 1Mhz, had few transistors, and a few big tubes driving the clocking, it used magnetic amplifiers for logic gates.

https://en.wikipedia.org/wiki/UNIVAC_Solid_State

That's probably some issue with the OP's choice of words, not on his meaning, but one can never really understand anything that is complex. This is implicit on the meaning of that word.

But everybody has some understanding of some systems that involves humans. Most even have the capacity of predicting a lot of group behaviors. It's just that the understanding is not complete.

> This is implicit on the meaning of that word.

I was still in pre-school, watching a documentary about uranium. I asked my mother what uranium was, she replied "a silver metal used for electricity generation". That answer felt deeply unsatisfying, but that's the best answer a todler could get from a village housewife in the year the internet was invented. But I learned that "understanding" doesn't have an objective benchmark; we understand a concept when we subjectively feel confident about our knowledge regarding that concept, no matter how ill deserved the confidence.

> the interaction between personal liberty, privacy, automation, encryption, state power, human psychology, and the feedback loops that connect them

Is that all? Let us know when you figure it out. I'm joking, but I really like your take on digital privacy and related matters.

In my masters thesis I used following quote:

> On mathematical perception: “either you have no inkling of an idea or, once you have understood it, this very idea appears so embarrassingly obvious that you feel reluctant to say it aloud; moreover, once your mind switches from the state of darkness to the light, all memory of the dark state is erased and it becomes impossible to conceive the existence of another mind for which the idea appears nonobvious.”

There are some concepts I have the opposite experience of: I find it fascinating, I start pulling threads, I come to all sorts of wildly interesting insights, I construct it together into something I can easily talk about and explain, I explain it to others, and they nod and respond "of course" as if it were already obvious to them. Sort of feels like Principia Mathematica and 2+2 (although that's a very extreme case).
(comment deleted)
Seems like an important phenomenon to note. Maybe somewhat tempered by the one described in:

Weierstrass' “When I wrote this, only God and I understood what I was doing. Now, God only knows.”

this applies to half of my notes from 6+ months ago. why am I so cryptic with note taking?
When I take notes and program, I try to remember that I'll look back at this and know nothing. Will I be able to rederive the entire context in my mind at this moment?

I don't know if this is perfect, but I've caught myself many times adding more context.

My friend once called this the "curse of knowledge," but I misheard him and thought he was talking about "cursive knowledge." I still kinda like that name.
A mistake I often make when explaining things is to leave out a lot of the "obvious" stuff, for fear of talking down to the person. I've learned that it's often the obvious things that most need to be said.
The Curse of Knowledge is shorthand way of putting this.
I understand everything in the world to the deepest depth.

Let me explain, because this is a bit of sarcasm. I realized after years of being a specialist, that deep knowledge can be hired for at a price much less than the cost of achieving it in most cases. Thus, in most cases, specialized knowledge isn't needed - but in the case it is, find and talk to the person who can get you most of the way there.

However, in the spirit of the question, some CS related algo's or quantum mechanics (due to PBS Spacetime). I've learned to be a flexible generalist.

I have rarely if ever seen examples of specialized knowledge being outsourced. If someone (who understood the details) has already build a "product" out of that knowledge that lets you understand what it does for you without knowing how it works, you can use the product. But if you want to make a new product (in the sense I mean here), you actually have to understand. This is a pretty classic mistake I see being made, where managers assume they can outsource understanding something, and are left with an end result that is dummed down to meet their misunderstanding.
(comment deleted)
You’re asking about knowing every detail of a concept, I don’t know much philosophy of concepts but that sounds like an oxymoron.
I bet the von Neumann architecture is up there for many of us here, although it seems so simple once you have grasped it.
(comment deleted)
When I started learning C as a teen, I somehow got really stuck trying to understand pointers. That's one of the few things I now I feel I understand, but I can also still to a degree recall how it felt not to understand it.
Funny, i had a really hard time understanding something even more basic: functions. I mean, i understood i could call them with arguments and they would do what i wanted them to do, but i didn't _understood_ them.

When my main was "too big", i created another function to trim it. I did not get recursive backtracking until i really had to, and then everything lit up for me. I then became a big fan of functionnal programming after that revelation.

What found interesting is I learned assembly first. Understanding C pointers and function was pretty easy from there. But C's notation for dealing pointers is non-obvious.

Random old school thought. BASIC has an unappreciated feature in that every line of code stands mostly on its own. It's either valid or it's not. In the case of C/C++ that isn't true. A line of codes validity depends on the lines before it.

Reason is something God creates. You eat because if you didn't you will die. The designer created that reason through the design. So it is not logical to ask about the reason that made God create the world.

So the meaning of life depends on why God takes actions, and we will never understand that.

I don't think it is very complex concept.

- I believe in a designer obviously. I totally understand if you didn't.

It's funny you put it this way. I have the same philosophy and am agnostic. Here's how I'd express it.

Causality is a concept that exists within a universe, because it's bound to time, which also a concept that exists within a universe. The physical law of causality (which can be expressed as both "events of the present are fully defined by system states at previous times" and the time-reversed equivalent, that the past states are fully defined by the future) are only coherent concepts within the framework of specific physical laws that govern this universe. Not every set of possible physical laws gives rise to causality, or even time.

In Conway's Game of Life, the future state of the board is also fully determined by the past, although there is no time reversal symmetry.

Judea Pearl's causality is similarly bound to applying within the context of a timeline and universal law.

Again in Conway's Game of Life, you can implement Turing machines and run simulations of any scenario. Hypothetically you could have artificial life in such a simulation, which might conduct experiments to learn the physical laws of the cellular automaton that governs their world.

But those laws, their perception of cause and effect, only exist within the context of that simulation, and within their simulated timeline. Their "time" is a state variable of the simulation.

No experiment conducted by creatures within the Game of Life could determine why their simulation is running in the first place, or why its initial conditions were chosen the way they were. The computer running their simulation is outside the laws of their universe. To ask "what was the value of Conway.simTimeIndex before the Game was started?" doesn't make sense. The laws that govern the commencement of Games cannot be perceived from inside the Game.

On our own level, the notion of cause and effect is a concept that is coherent within our universe and its concept of time. To ask whether our universe had a cause, or was preceded by something, doesn't make sense. It might or it might not have; that depends on the laws that govern the commencement of Universes, which we cannot measure from observations inside of our universe. If there is any law of meta-causality or time, on the level of reality at which universes are created, we will not identify it via measurements conducted within this universe.

This was actually a very insightful comment, and I say this as a muslim. What books would you recommend to go deeper into these theme?
Thank you very much for saying so!

It's a philosophy I've assembled myself from many sources, so there's no one book about it, but definitely a lot of sources of inspiration.

My understanding of the nature of time comes mainly from Julian Barbour's book "the End of Time", which itself is not an easy read and took me a long time to digest. Although, the philosophy is compatible with more conventional theories of time, as long as it postulates time as a structure that is somehow internal to a universe.

There's endless literature about Conway's Game of Life and cellular automata, although since it's used just as a metaphor here, it's enough to just play with the game itself for a while. Greg Egan's "Permutation City", while fiction, is an interesting exploration of the concept of the boundary between a simulated universe and the reality that contains it.

For more about how causality in our universe arises as a consequence of specific properties of nature, I'm not sure exactly what to recommend but maybe Feynman's lectures on physics are a good place to start.

For other perspectives on causality, Judea Pearl's "Causality" is a classic. But heavy.

I am not a native English speaker, I don't really understand your comment. Sorry.

But I am curious about something, do you believe that this life is deterministic?

No problem!

I'll try to make it simpler...

We believe things must have causes because, inside our universe, all things are caused by other things at earlier times. That's because our laws of nature are causal, and our universe has a timeline.

But the laws of nature inside our universe might not be the same laws of nature that govern the creation of universes.

Just like the laws of physics inside a video game aren't the same as our laws, and won't say anything about why the video game started in the first place.

I do believe that this life is deterministic, but also that the future is not knowable.

If this could be a possibility, how could we think about it?
Unfortunately, it's probably outside the reach of science, just like we can't expect artificial life in a simulation to learn what happens outside their computer by conducting experiments inside the computer.

So all that we're left with is philosophy, religion, and Ockham's razor to figure out what we'll believe. My advice would be to maintain an open mind and a sense of uncertainty.

I don't have certainty at all. And thanks for explanation <3
Maybe not the most complex, but the most useful for me are the concepts of Envelope (like flight envelope) and range of operation. You start to understand how hard reality is and how engineered systems are all bound to it.

You can't have, for example, a mic capable of recording both a whisper and a rocket launch. You need to optimize for some function.

I think the nature of trade-offs is interesting. I had a glimpse of understanding of the Heisenberg uncertainty principle when analysing a "beep" sound with Audacity. When switching to spectral view, I was expecting a single, clear frequency, but it was a band. The Fourier analysis settings include a "window size": the larger the window, the more precise the frequency becomes, but that temporal bounds (start and stop) become blurred.
Why not have two mikes that can record either and switch intelligently?
How are you measuring complexity?

Number of nested connections? That would probably be life its self. So, understanding it from its various mathematical basis through physics and chemistry on up to genetics, game theory, and evolution.

Connections to seemingly unrelated topics? Like human politics? That involves brain chemistry, psychology, history, philosophy, (again) game theory, and ethics.

Complexity resulting in application of said concept? That's just fractals. Nothing more complex.

Then again, depending on your bent you might consider cosmology the ultimate complexity as it literally involves everything.

IMHO it's possible that your friend truly does understand women. It's a testable claim. Make him put his money where his mouth is.

Writing good fiction is seemingly orthogonal to your intention, but I'd put it up there on the list of complex concepts one could know.

Additionally making a movie, the most complex human artistic work, is pretty complex.

Personally I couldn't say I understand any of these as an expert would. But I dabble.

> How are you measuring complexity?

I think measurements are useful when comparing things in an absolute space (eg. rate all cars by engine power). But complexity is relative; something complex to me is simple to you. A topic might be simple to me because I axiomatically accept a premise which you consider a topic of analysis.

Hmm, I think that's comparing the complexity of our understanding of the topic and not the complexity of the topic its self which I think is regularly laid out by experts and researchers of said topic. So, you might have a savant belting out absurdly complex fugues on a piano with little to no effort, while a young music student spends two hundred hours understanding the content of that music. The music itself, however, has the same complexity regardless of who's appreciating it.

No?

Maybe there is an objective, absolute complexity, but I can't find good examples. Building on your example (music), a chord seems complex when you think of it as a sequence of individual notes, but is simple if you think of it as an object in a multi-dimensional space (of which a single note is a trivial instance). The complexity arises from how one looks at the thing and what the conceptual tools available for understanding are.
Then systems theory and complexity science are things to check out, they're really cool. I won't insult you by linking to a wikipedia article.

IMHO complexity boils down to the number of connections in an objects internal parts. But, like most complex things there's lots of discussion.

Those two different models you proposed to understand music are two different objects hence two different conceptualizations of the same phenomenon, two different perspectives.

So, the old "If all you have is a hammer, every problem looks like a nail." and "There's more than one way to skin a cat." kinda things.

Depends on what you mean by complex. In a technical sense probably some of the stuff I did in uni. I worked on something called Legendrian Submanifolds which is a topic within contact geometry, so that's probably the most arcane academic thing I know anything about.

In a practical sense managing an organisation with a sizable amount of people in it due to the sheer amount of diverse issues you have to deal with, and the way in which you can't really reduce it to any kind of formula and where you find new problems every day. Everything that involves organising people is very complex. I was originally thinking about writing "organising WoW classic raids" as a joke but it might actually be true as well.

Human nature. Vastly more complex.
When I understand things they seem simpler.

To try though : recursion, induction & generalization, entailment, parse trees.

One thing I don't understand is relativity, but someone once told me that you could summarize it by saying "force acts at a distance over time".

How to do numerical backpropagation (differentiation) on the result of an integration of a stochastic differential equation.

And I am sure I only have scratched the surface of this niche already.

Numerical algorithms can be both amazingly intricate and omnipresent at the same time. Optimization is a beautiful field because of it.