Reality has a surprising amount of detail (2017)
johnsalvatier.org
johnsalvatier.org
Disclaimer: I am biased. I am biased toward book learning! In school I made A's and loved book learning.
Clarification: I think book learning is useful. It's just that the order is wrong. Nothing I read in a book sticks until I have tried my hand at it for a few weeks. But an experienced programmer (or plumber for that matter) would probably get even better after reading a few good books.
On the other hand, I've met coders who somehow have managed to completely miss very basic CS concepts because they learned the entire thing ad hoc as they needed it and they never realized that they needed Big O, or that they needed to learn how modulo works.
For me, I flunked out of math my entire life until I learned coding and was able to find the answers to "what is this used for?" so I could put it into context. Book learning is good, but it's easier (at least for me) if you have a scaffolding of experience to know where to put each new thing you're learning.
Never neglect either!
When all I used math for was wetlab biology work I found it tedious and annoying. Teaching myself how to code (for data analysis) made me go from disliking maths to loving it. It is easy to see how powerful and beautiful math is now.
I would: I don't think studying for 3 years upfront makes sense for most people. It would be better to spread learning out more.
We are doing this “from scratch” (obviously buying pumps, sensors, tanks etc of the shelf). At the same time I am learning aquaculture (growing fish) in a formal two semester course, as well as reading a bunch of books on the subject. We are also planning an insect larvae farm, to use food waste as feed, to partially feed the fish.
It turns out there is a massive amount of things to learn. I am lucky my colleagues are full of different expertise than what I have. The know how to grow plants, build buildings, mechanical engineering, electronics, software, sales, the list goes on. It is somewhat scary how complex everything is, but it is amazing to build the thing with your own hands and see it gradually come to fruition. I am learning so many thins that I can’t learn from a book.
We are building this ourselves to learn by doing, as we don’t want to scale up without significant hands on experience.
The FAO small scale aquaponics manual http://www.fao.org/in-action/globefish/publications/details-...
The Aquaponics Farmer (some quibbles, don’t sterilise the water with UV constantly) https://www.amazon.com/Aquaponic-Farmer-Complete-Operating-C...
Commercial Aquaponics systems, Wil Leonard (the book and other resources) http://www.aquaponic.com.au/index.htm
Small scale mealworm farming https://www.mealwormfarming.org/
Only around 20% of teens go directly from school to an university. The rest makes a three or four year long apprenticeship, starting at age 15-16. Apprentices get compensated in the range of 500 to 2000 chf per month.
You can combine the apprenticeship with a secondary education that allows you to go to universities of applied science to study engineering, computer science or whatever it is you are interested in.
So most Swiss with a tertiary education got some practical experience before they stated their tertiary education.
I don't think this is universal, though. Book reading is very natural for me and sticks immediately. In fact, I often find that things I've read today and not understood become magically clear a few days later.
I have never written a program in Go but could probably pick it up through reading, because I have years of experience with other languages. But I pity the poor programmer trying to set up everything for the first time, alone.
Or my first try at home repair was daunting. But now that I have fixed a few simple things I have a better feel for it and might be okay learning the next thing with a book.
I think this is partly why some people like watching Youtube videos and others just want an article.
I've always assumed that's because you're sort of mulling it over in the back of your head.
What I meant with that last sentence was that even for material I did not understand well (because it seemed to go over my head), I usually still finish reading the material, trying to absorb a very handwavey gist or general structure of the idea, avoiding the need for closure and leaving large chunks unclear. Then, after several days, I often find that I now almost magically understand it because it just clicked without me even being aware of it.
But over time (especially reading material from my kids classes) I see a lot of tiny mistakes, left out information, or imprecise statements which make me wonder whether I just did not see that before or quality of school books etc did degrade.
1. Completely self learned people are more often prone to develop some bad habits or worse have some subtil but fundamental misunderstandings which are hard to get out of them. (in my experience)
2. Often just a view month with proper guidance can have much better effects then a year+ of self study or "isolated" experience. The problem most times not the general ideas but the details, wrt. the situations for which there are no clear rules you can "just" apply. And often making a wrong decisions doesn't matter that much and sometimes fall under "programming style", but there are hundreds of such small decisions and making many somewhat suboptimal decisions can easily pill up and cause serious problems.
Best example is KISS (Keep it Stupid Simple). Seems easy right, but what does simple mean? Is less code more simple. Are less sanity checks or maybe less validation more simple (due to less additional complexity in them)? Is using less abstractions more simple, even if more abstraction allow you to have code which is harder to get wrong when writing/changing it, _assuming_ you got the abstraction right? Is it more simple to sometimes just repeat yourself, or should you keep strictly to DRY? Is it more simple to sometimes explicitly write out type which would be inferred anyway? What about kinda unnecessary temporary variables? What if it's like `var valid = ...; if valid { }`? What about splitting functions, is it more simple to have 2 pseudo independent sub-functions you will not reuse or one slightly to large function where everything is in the same place?
The answer is always: It depends on the exact situation.
There is no clear cut definition of simple. The best would probably be based on code readability.
But then is it more readable to have one large function body or to split it into sub-functions which are well named but to which you have to explicitly navigate to "fully" understand all details of that function?
Sure we do have guidelines and they allow you to generally get it right (well ok, if you use some good guidelines, there are many bad ones, too). But there is a limit on how much you can learn from them and the rest needs practice. But many problems only show if you do large projects by yourself _and care to maintain and reflect on them, and come to the right conclusion unbiased by the programming language induced bubble you are in_ which is super time consuming. (So guidance is important, but hardly done as many companies do not plan in any time for that at all).
I don't find this is particularly true of self-taught people. People who are raised in bad coding environments like working alone or, project-based consulting shops may have bad habits. Hint: the habits are not taught in school.
My school tried to teach good habits. Many of the professors are out of touch with what good habits are though, so they usually teach to books of varying quality or practices specific to how they learned a few decades ago.
The right environment helps a programmer evolve through this stage.
In a similar vein, stay at home moms or dads may choose to send their child to daycare a day or two a week to learn how to interact with others. Without these learnings, life, or work, can be more challenging.
I do count school and University courses as self thought, just with a sometimes better fundation (but sadly often with a worth one too).
As long as you don't have someone who checks your code or does pair programming it's all self thought just with different sources of input.
Also school/uni projects tend to be not that useful either even if you do pair programming, because the people you pair up with have roughly the same experience like you (most times).
Besides, self-taught programmers have to work with others as soon as they get their first job.
* * *
Personally I think “schooling” should consist much more of student-directed projects, with scope, difficulty, and autonomy gradually increasing over time.
It’s a real shame that typically the most substantial pieces of work 18-year-olds are expected to complete in school take maybe 10 or 15 hours, and most of the work students do is broken down into atomized and unrelated chunks which individually take <10 minutes with few if any decisions involved.
However, looking back I regret not taking classes that actually interested me. My school (like I would presume most) had a rigorous course schedule that one needed to adhere to in order to graduate. I think in taking classes I was actually interested in I would have (and the ones I took in the curriculum that I was interested in I got A’s) done much better overall.
Maybe I should have gone to a liberal arts school? Either way I’ve supplanted my lack of A’s with lots of books. It’s made up a lot of the difference so far!
Theory is definitely fantastic, but not being exposed to the real world took me longer to come to grips with than it probably should have.
I think book-learning has great return on investments when applied critically. The problem is when it's applied dogmatically like it is today. Not everyone needs to go to college - for profit schools are scum. Universities can hardly call themselves impartial, but it still has a place and is useful.
However, in some jobs you do need a basic understanding of terminology and history. But probably 6-12 months of concentrated book learning is more than sufficient rather than 4+ years.
Isn't that what internships are for?
Like, the best sausages I ever cooked were at a barbecue in park, on a random public grill with no particular attention to the heat (I think the sausages caught fire briefly), and yet they were amazing. Juicy and delicious, with just the right amount of char on the outside. Over my home grill, with careful regulation of the grill temperature and a pro quality instant read thermometer, I’ve never quite managed to do better than “pretty good.”
(I highly suspect one of the details is “undercook your sausages” which is easier to do when you’re blissfully ignorant of the actual temperature.)
She says you have to orient the chicken a specific way in the oven because the corners of the oven are the hottest and the different parts of the chicken will cook evenly that way (?) Not quite sure since I didn't try it. But my friend made it and it was fantastic.
So the way I look at it (without much experience) is that a thermometer measures one dimension, while a chicken is a 3D thing. And an expert chef noticed that enough to put the detail in her recipe. i.e. "reality is complicated".
Not sure if that's the problem with sausages (since they're not that 3D) but there's a reason that specific foods are cooked in specific ovens. i.e. why do people obsess over pizza ovens and import them from Italy? Why is clay pot cooking different than metal pot cooking, etc.?
Because temperature / heat aren't just one-dimensional. She says that good cooks look at the food and not at the thermometer. They're looking for signs in the food which stay constant across environments rather than measuring one aspect of the environment.
tl;dr Samin Nosrat rejects the use of a thermometer because it doesn't measure enough reality to cook well.
In other words, it’s probably quite easy to enjoy an ok sausage if it’s come from some random grill in a park because you’ll be focused on having a good time with your friends or family in a park more than on whether the sausage tastes good. If you make it at home (even if you’re inviting those same people) you can easily get yourself worked up about cooking the perfect sausage and whether the temperature is right and whether the time is right and so on, that you’ll just feel like the sausage doesn’t taste so good (and you’ll probably be more careful and critical about tasting the sausage).
Then again maybe the sausages were just undercooked in the park. Or maybe you used different sausages (I’ve found much more variance between sausages being made differently than how they are cooke)
This is the article to read.
In general I can really recommend The Food Lab as the guy who does it has a very scientific approach.
TBH, I'm not arguing so much against this evolution of software (it seems like the over-complication of web dev has been discussed as nauseum on HN), but more that just from a personal perspective I have less patience for figuring out a new way to take stuff from a database and display it in a browser window.
Oddly the overall costs for building a house have not correspondingly decreased for the consumer as banks and builders generally take a larger share. Though to be fair consumers also want larger "McMansions" as well so part of the factor is some of the savings do go into giving "more".
Still, I think stairs are conceptually almost identical, including in the internal details, in a way that software really isn't. Maybe the rise/run is a slight different ratio or the stringer is an incidentally different material, or the saw has a battery instead of elbow grease, but it's fundamentally similar.
Sure a CPU is still executing instructions somewhere deep down the stack, but the semantics and concepts I am working with to make a control appear on the screen and then do something are wildly different over time in comparison to stairs.
Take a time traveling web programmer from 1995 and ask him to look at some modern web app code. He'll be completely lost for quite a while. Take a time traveling carpenter from 1900 and have him look at some residential stairs built in 2019. His comments might include "why is this lumber so thin?" and he'd probably have opinions on the newer materials (mostly positive, not always) but he would be not at all confused.
I think it would be fair to argue that a modern web app (big, complex system) is not comparable to stairs (simple, subpart of a system), but I think you can extend the analogy a lot. If that 1900s carpenter saw a modern commercial construction project he'd be a little more out of his element, but only because the materials we use are different and it would include stuff like HVAC. Fundamentally though he could easily see "oh, that span is longer than I would have made because they have stronger materials than I had." I can't think of any particularly confusing aspect of modern construction because the physics never change.
Many people just expect more complicated web apps because of the alternatives they use and are familar with (native apps).
It compares well with the stairs example of the article. If there are no people other than you that expect a stairway, you may just pile up some boxes, or use a rope and combine it with your workout. Do you really need and expect a stairway if it's only you?
A given computer program is often stupidly easy, much easier than building a staircase really. But often, what's involved in the computer program is fundamentally new in contrast to the way each staircase is only somewhat new.
That situation gives programming it's wild, messy, unpredictable quality.
After saying that though, I went and walked around their yard and noticed many details I never had before. There were multiple broadleaf weeds including different phases of dandelion and some weeds I couldn't name. There were patches of bare ground and areas where the grass was unusually thick. I saw different kinds of sprinklers and also startled a rabbit while I was walking around.
I was struck, while investigating the lawn, by how before I looked at it, it existed only as a simple object in my mind "Parent's lawn". On closer inspection it has an immense amount of detail.
is what I was expecting
> using a Haskell package for the first time, and being frustrated by how many annoying snags there were > If you’re a programmer, you might think that the fiddliness of programming is a special feature of programming, but really it’s that everything is fiddly, but you only notice the fiddliness when you’re new, and in programming you do new things more often.
I think programmers think that the suckiness of their tools is a fact of the universe, when it's just that they don't know there's a better way.
At Repl.it, we built `upm` (Universal Package Manager) to make using packages a breeze with no fiddling. Ever since I started doing most of my scripting on Repl.it I almost never "fiddle" to get a package or a feature of the language to work.
upm goes as far as to guess your dependencies when you import them and will install and generate the spec and lock files. It's a truly magical experience. More here: https://repl.it/site/blog/upm
And we try to do a similar thing with every potential programming workflow. Can you make it "just work"? I think we can, for most things.
When you go into a carpentry workshop, there are hundreds of tools, all designed to work on wood, and a carpenter will know the majority of their tools quite well. They can invest in a tool knowing they can re-use that knowledge for the rest of their career.
When I inherit a software project, it can often have two, three, even four different language ecosystems involved with hundreds of libraries and tools as dependencies. In software we have to accept that we will be surrounded by dozens of tools we need to work with but will never have time to fully master.
Most people I meet are only proficient in many of their tools enough to get the job done and no more. Soon enough the status quo will change and the software industry will happily drop thousands of man-hours of learning right into bin.
The finer points of library X, framework Y, or tool Z are almost ephemeral. Even a company's core software product could just be thrown away and re-written in the new-hotness at the behest of a PM meeting, often losing nuanced domain knowledge in the process.
Without getting into details and specifics, something I highly enjoy doing, I'm referring to things like Vim, tmux, unix utilities and software, various Linux administration knowledge. Various electronics concepts. I now consciously and deeply evaluate a potential skill to learn based on how likely it is going to improve my life in the long term.
One of the exercises is to draw a tree. Then to go outside and look at a real tree, and draw what you see.
The two could not be more different.
Many artists will talk about when they "learned to see". Which means: understanding that reality isn't the simplicity of what our brain constructs, but rather the seemingly infinite detail of what is actually out there.
It changes the entire way you look at the world.
[1] https://www.amazon.com/Drawing-Right-Side-Brain-Definitive/d...
This is basically the problem with “big” data i.e. more comprehensive data (more columns) rather than more examples (more rows) — it’s difficult to winnow out the relevant features from the irrelevant.
The current belief is that good priors are super important to have any hope of doing that reasonably well — but how to get those good priors is anybody’s guess.
There are some really brave ideas being kicked around among the researchers who focus on their passion of AI, as opposed to those who post ever higher benchmark scores. They don't optimize their algorithms because they feel the algo should be serviceable out of the box. Cool stuff is happening.
> There are some really brave ideas being kicked around among the researchers who focus on their passion of AI, as opposed to those who post ever higher benchmark scores. They don't optimize their algorithms because they feel the algo should be serviceable out of the box. Cool stuff is happening.
Where do I find out more about this? :-)
The papers on Neural Turing Machines, and Neural Tangent Kernels, which is related to Gaussian Processes, are getting a lot of citations. There is work on making these kernels composable.
There are some papers combining some of these approaches but not yet all of them, that I have seen.
If I have understood correctly:
TN in the context of ML seems to be a pre-optimization step which lets you deal with inductive bias.
The NTM learns to use its own memory through an attention mechanism.
The NTK builds compressed representations which should be of great interest to anyone needing interpretable models.
Gaussian Processes are a very different perspective on ML which lets you talk about composition of probability distributions.
It seems to me that these components could be assembled into an ML algo capable of general intelligence (not 'strong AI' IMO) given a curriculum and enough compute. It wouldn't compete with the smartest humans but at least it should make for useful robots, because of the cost of training.
Reality often doesn't need to be that precise. If you're a few degrees off in your angle, it won't matter. The floor and/or walls are probably not perfectly flat and may not even be perpendicular. Stairs will work anyway.
This angle problem has been solved in tooling. You set the (<$100) chop saw for 30° (or whatever), mark the length of the board, and cut. It takes seconds, no tracing required. Trig is a great solution, especially given the "close enough" tolerances of wood.
If you need precision, work with metal.
Stairs are for human legs, and they care about the rise, the run, and the depth of the stair (tread). And all those can be done with a framing square. Angles are incidental to this (google around and you'll see a lot of stringers being cut with a circular saw).
A 3/5 ratio is 31°. You slap down the square, you measure 3 inches on one arm and 5 on the other, and you mark it with a pencil.
Random dude answering question on the internet:
> In US construction stair pitch (angle) is expressed as a ratio between rise and run (vertical and horizontal distances).
> For commercial construction the minimum ratio is 7:11 but 6:12 is often used (these are expressed as rise and run in inches which is why it’s 6:12 and not 1:2)
Crappy tooling, and crappy software in general, is our legacy from Microsoft. Before Microsoft, people had expectations that software would work right. It didn't always, but it was a big deal when it didn't. Microsoft, single-handedly, got people used to rolling their eyes and rebooting, and not demanding a refund, partly by never ever refunding anything. It worked for them, and here we are.
The avoidance of detail, enabling its occasional rediscovery today, is equally new. People took pride in attention to detail, and demanded it. Watch any detective movie from the 30s or 40s and you get a glimpse of how attention to detail was respected.
> "A while ago, I read this amazing piece about building a ladder."
Mind blown
Totally. TIL that I can call my blanket a tent and everybody will know what I'm talking about, being that it's the same thing, just nailed down.
EDIT: Going a step further, what's really weird is just how different human beings are from everything else. Compare a McDonald's bathroom stall to the surface of the moon. How can these things coexist? They don't go together. It's like a giant accident. Like someone spilled pink nail polish on the Mona Lisa.
These things which are crazy complex (which you did not pick particularly complex examples of, better examples might be quantum computers or nuclear reactors, but that's ok) are a natural result of the process that evolution kicked off (this is the accident that you refer to) that allowed people to be a thing, which, when they do their thing results in astounding advancements that necessitate complex designs to fulfill their function. I personally don't believe there needs to be a better reason to explain why we have refrigerators, mcdonald's bathroom stalls, quantum computers, and nuclear reactors other than "because we can". That is to say, once humans became capable of inventing those things, it was inevitable that they would proliferate.
I see your point about the inevitability of humanity's technical achievements. But I can draw attention to my point further by suggesting the following hypothesis: it seems intuitive that something very complex cannot be derived from something very simple. Nonetheless, the smooth, dense simplicity of the big bang has, through a process that is empirically observable, unfolded into this incredibly complex microcosm on Earth. That there is a scientific explanation is not really debatable: we know that the complexity of the tree is stored in the seed as genes. The simplicity is only apparent. So, if we wish to explain the development of the universe as we have explained the development of trees, animals, etc. then we will have to be able to identify some kind of code that contains the potential for infinity complexity; a code that was housed in the smooth, dense big bang and thereafter dictated the procedural unfolding of reality from gas to stars and eventually nuclear reactors. All of this is to say that our intuitive idea that complexity cannot be derived from simplicity is actually, in a weird way, contradicted by biology, and that this "weirdness" applies not just to biological phenomena but physical ones as well so that new things seem to arise out of nowhere, when in fact they were stored in an imperceptible, condensed form that unfolded itself out of itself.
The optimistic newcomer will bite off much more than they can chew, but sometimes they succeed.
"If I knew how much work this would be, I never would have started" is sometimes felt at the end of successful projects.
The good scientists have an intuition for problems where the hairy details and solvable and they are good at solving. Part of research is to develop this intuition.
But I also don't think it's 'obviously' untrue. Yes, the level of detail is mind boggling. But quite a lot of that detail follows naturally from the framework itself: The complexity of an object moving through space and time, interacting with heat and light and atmosphere and etc. is huge. However once the framework is in place (physical laws, light models, properties of materials and so on) everything happens 'naturally' provided you have the processing power to render all the variables.
It's not difficult to imagine a point where a detailed enough framework, and the processing power to render it, could exist. Not soon, but eventually.
Add to that the established tendency of our minds to normalize (ignore things that don't seem to fit, rationalize and otherwise edit reality for palatability) and the power of our neurotransmitter systems to override rational thought... The biological interpreter of the theoretical simulation is well designed to be fooled given a deep enough understanding of it's workings. Which is also not difficult to imagine as a future possibility.
Still, not likely, but too compelling a thought experiment to call bunk IMO.
The problem with your argument is that it makes too many assumptions. We know nothing about the nature of the simulator, nor do we have any reason to believe that (assuming we are not in a simulator) the universe works the way it does for any particular reason. Furthermore, the isomorphism you point out between the the physical world and computers are much more easily explained if you flip the causality chain: we are humans living in this world, and we modeled computers after ourselves and our surroundings.
* Plank length/time: The granularity the simulation is capable of.
* Quantum entanglement: A deep copy/shallow copy bug (that is, shallow copy was accidentally used where deep copy should have been used, hence why quantum entanglement holds across large distances).
I use the word "feel" for a reason. I think we're dealing with emotional reasonableness, not careful analysis.
Not to say that we can't possibly be living in a simulation, but rather that the only way that can be shown, or even evidenced, is through concrete evidence. Thought experiment is insufficient evidence.
Do we live in a computer simulation? UW researchers say idea can be tested: http://www.washington.edu/news/2012/12/10/do-we-live-in-a-co...
61 points by ph0rque on Dec 11, 2012 | 64 comments
The fundamental "direction" is in-out; outward there's this multimodal unbounded fractal, inward there is Self-Awareness, the "infinity shot" of consciousness.
What if the humans that made the simulation are from the year 3020 or 10020?
The reality, in turn, exists independently and does blow your mind every moment given that you are not lowering your attention by deciding what is important and what is not. Children know this perfectly well and can be engaged and mind-blown at every little thing until society forces its rules which in turn develops a layer called personality or ego and after some time only that becomes real. This is where one disconnects from the magic and mind-blowingness of reality, and as a result dissatisfaction, depression and all sorts of mental problems start appearing.
But paying indiscriminate attention to everything can bring back the initial raw perception with all it's joy and wonders and is something they found out in the East, including hinduism and buddhism practices.
> Another way to see that noticing the right details is hard, is that different people end up noticing different details. My brother and I once built a set of stairs for the garage with my dad, and we ran into the problem of determining where to cut the long boards so they lie at the correct angle. After struggling with the problem for a while (and I do mean struggling, a 16’ long board is heavy), we got to arguing. I remembered from trig that we could figure out angle so I wanted to go dig up my textbook and think about it. My dad said, ‘no, no, no, let’s just trace it’, insisting that we could figure out how to do it.
"...different people end up noticing different details"
If this can happen with something as relatively simple as building stairs, might it also happen in more complicated scenarios like interpersonal or inter-cultural/national relations, politics, etc?
> I kept arguing because I thought I was right. I felt really annoyed with him and he was annoyed with me. In retrospect, I think I saw the fundamental difficulty in what we were doing and I don’t think he appreciated it (look at the stairs picture and see if you can figure it out), he just heard ‘let’s draw some diagrams and compute the angle’ and didn’t think that was the solution, and if he had appreciated the thing that I saw I think he would have been more open to drawing some diagrams. But at the same time, he also understood that diagrams and math don’t account for the shape of the wood, which I did not appreciate. If we had been able to get these points across, we could have come to consensus. Drawing a diagram was probably a good idea, but computing the angle was probably not. Instead we stayed annoyed at each other for the next 3 hours.
Considering the amount of detail in the world, it shouldn't be too surprising that two people can look at the same thing and see dramatically different things. Often the two parties can realize how the collaboration went off the rails after the fact. But what happens the next time such a scenario arises - can they recognize in realtime that the same thing is happening again, and consciously step in and prevent another derailing of collaboration?
In my experience, not only is the answer usually no, but even if one of the parties does happen to be aware enough at the moment, and points out the "obvious" fact of what is happening again, just like last time, the conflict will still not resolve, almost as if there is something occurring at the neurological level that prevents it.
> Before you’ve noticed important details they are, of course, basically invisible. It’s hard to put your attention on them because you don’t even know what you’re looking for. But after you see them they quickly become so integrated into your intuitive models of the world that they become essentially transparent. Do you remember the insights that were crucial in learning to ride a bike or drive? How about the details and insights you have that led you to be good at the things you’re good at?
While some skills (riding a bike, playing tennis, etc) can easily be integrated such that one can conduct them with extreme skill completely intuitively, others (interpersonal communication) seem highly resistant to the same level of integration.
It seems common for people to say "So what?" when this phenomenon is pointed out, likely because it's so obvious when being discussed in the abstract sense. But the "so what" is that: in practice, in realtime, this prior knowledge seems near impossible to be intuitively accessed. And not only that, it often seems like it is near ~inaccessible to the conscious mind - if it is pointed out, acknowledgement of a current manifestation of the phenomenon will be refused, typically via anger or silence.
Amen to that.