That's true - when HFT first became a thing, there were a few studies that compared reaction times between the top traders and the machines and found that expert traders that composed the market making function could make better trades in less time (on the order of fractions of a second) with fewer errors. Of course, that's a distant memory at this point -- the machines have obviously won out on the part of the market's structure but kind of interesting that the humans were quite fast (faster than I would have guessed).
Fair point.. but equally interesting is pondering the neural structures of those who are domain experts but were born blind. Do they have a sympathetic structure that aids them? What does that look like? Is there a way to develop both this and "cortical representations" equally?
Probably. It has been pretty much confirmed everywhere it has been tested.
For example, chess masters memorize chess positions faster than normal people--but only for chess positions that are "valid". If you can't get to the position with play, they don't memorize them any better than normal people.
An interestingly (IIRC) they had amazing memory for boards which were actual states of play. But if the pieces were arranged randomly, they were little better than beginners.
> For the first factor, we adopted programmers’ ratings in competitive programming contests (AtCoder), which are objectively determined by the relative positions of their actual performances among thousands of programmers
This makes me extremely skeptical of the study. At best, it says something about people who are whizzes at programming competitions, and certainly not "Expert programmers" in general.
My girlfriend is an fMRI physicist with access to a scanner - I’ll recommend this as a study if she comes to a loose end with her research for a while :P
Well this explains why, when I first started to learn to program, it took me hours to find one missing semicolon in 15 lines of C code, but after 20 years I can basically glance at a screen full of code and find them almost immediately.
I am a solo in a multi-million line of code codebase, and im always amazed about how many detail are still in my memory, even when i dont see those particular chunks of code for a year.
It amazes me mostly because this is not the sort of tasks our brains were specialized in doing, by estimating our development path in nature as mammals.
We discover and/or create new models and yet, we are able to adapt to them with some effort. Our new environments will probably affect the DNA that have the brain design, and we will pass all of this as a legacy to our kind.
> It amazes me mostly because this is not the sort of tasks our brains were specialized in doing, by estimating our development path in nature as mammals.
concievably this might be similar to spatial navigation, which would be something we'd evolve for as hunter/gatherers
And that we build artificial structures that align to how our brain operates. I suspect the source code written & the tools built would look a bit different if they're tuned to a brain with a totally different operational principle.
This is a great observation. Our tools would be designed according to our experience of the world.
But theres another catch, the tools we use change the shape of our mindset, leading us to design other tools that now map to this new perception of reality we have with the new mindset we built by using the former tools.
The hunter-gatherer example given in the first comment for instance, i bet with enough evolutionary steps, we will not be able to trace back to that mindset, because we have "patched" our own mindset so many times with new tools(over tools) that we will have very little "mindset identity" to share with our former "hunters-gatherers" primordial cousins.
Ooh, this seems like something we can test! Brain scan while doing spatial navigation tasks vs tasks that require reasoning about the structure of code -- hypothesis would be that it should light up some of the same areas?
When you revisit old code, does it seem like a room in a house? Does it make you think of other code? (code nearby, or maybe code you write around the same time..?) Honestly just curious. It feels like rooms in houses to me.
I've worked with lot of different codebases in my life, but nothing ever like the one im dealing now, so thats why i had no idea how/if i could handle it.
Of course theres a erosion process if you dont touch that piece of code for more than 1 year, and it happens with a codebase of that side, but the 'partial data' is is still there, and with a couple of minutes dealing with it, you recover the information.
Its better when you shape the code yourself.. when you lay down the objects, methods, etc.. But this also works great with code i've happen to just use.
For the architecture and where things are.. be it files, methods, or where i could find something i want.. there were no lost.
I feel i need this partial recovery process mostly for codebases with 2 or more years, and the lost is minimal and can be recovered quickly.
Now being more specific over your question, for me it fells more like a map, smaller maps or trees connected to top-level maps... But yes, it feels a little like rooms as in a quadtree, where you need to specialize and ignore the other parts of the tree for a bit, much like the occlusion/visibility process that algorithm gives.
By the way is great that you have used this analogy, because this is also part of an observation i've had about laying down the information for a specific goal i have in mind.
I cant wait to experiment with this as soon as i finish this thing im working on, to see if its really cool as my intuition is telling me..
I know what you mean. I was called over to a colleague's desk to answer a query he had with a change he was making, (in an old IDE without colour-highlighting). It just looked wrong.
So I rearranged the code slightly and it was immediately obvious he'd mismatched his closing parentheses.
If you're older than syntax highlighters, you probably don't need them like all those pesky kids on your lawn.
When I worked in a computer lab, I'd often walk past kids writing code in notepad, peer over their shoulder and spot imbalaced parentheses or a missing semicolon. I'd keep it to myself unless they asked for help, because it's a learning process... and then they'd be amazed as I immediately found the spot.
And sure, they probably save you time. But for me, they add visual clutter and only spot trivial issues, and rarely save me a few seconds per day.
You might be a visual kind of person, those make a good mathematician.
After a decade of experience I happily dump all the boring stuff to type checkers and linters.
One day in the morning I was being in a state of half dreaming - half awake, and among other closed-eyes visuals I observed a series of white screens (sort of 80x25), filled with the same digit, like all zeroes or all threes.
I don't know if those were the layers of my brain's NN responsible for recognizing texts. But I generally suck at visual navigation: I don't rely on code-minimaps, scroll-bars, I don't remember if that particular function is above or below. I use tools like quick-jump, fuzzy search, I just need to run a thread of interest through my mind and recall instantly what to search.
Yeah, I have a similar experience and the other day I was working on a little bit of scheme which is new to me and couldn't figure out which parasites was missing. Took a lot of visual linting to spot it. I know there are tools but i was using the repl where you have to do it by eye/hand. Hopefully it'll get better as I love the language.
This. My students have been absolutely astonished how quickly I can spot any problem they had in their code. They made the same beginner mistakes that I made many years ago so it's relatively easy to find what's wrong.
Programming is somewhat unique in the size and complexity of the structures expert practitioners have to hold and maintain. But only somewhat. It would be certainly be interesting to compare with other professionals with similar years of experience.
How might one quantify "size and complexity" for different domains? Physical architecture seems to me like maybe it's somewhat similar to programming, but even that seems hard to me to compare. Fiction author also seems like an interesting comparison, but again, I 'm unsure of how to begin to quantify size/complexity in a way that's apples-to-apples with programming.
Not surprising but good to see some research. Just off the top of my head I assume working memory capacity may be slightly increased, whatever portions of the brain are used to decode / encode information, and perhaps even spatial intelligence.
"Tell me what you pay attention to and I will tell you who you are." - Jose Ortega
This is fantastic. I've always had a hunch that experts are "seeing" things differently than novices, and seeing things that people who aren't in the same domain aren't even aware of. As people develop more expertise, I imagine the gap becomes larger, to the point where they're aware of things that "laymen" aren't even cognizant of.
Two examples:
In one of Malcolm Gladwell's books--I forget which one--he writes about a firefighter who, almost unconsciously, ordered his men out of a building right before it collapsed. He didn't even know why. After going through the day's events with a researcher, the researcher realized that the fireman was subconsciously (unconsciously?) attuned to what was happening around him. His brain was operating unbeknownst to him due to his years of expertise.
A friend of mine started a small business late last year. He started it on a lark, after a trip to the local autobody shop. Usually his spouse handled all of the car-related affairs, but for some reason he ended up having to do it himself this time. When he went to the store, he noticed that the software they were using to manage their inventory was dated and quite awful. He took down the manager's information and messaged him a week later with a proposal for revamping their software system. The autobody became his first client. The manager said that hundreds of people come in and out of that store every day, but my friend was the first person to point out that their software wasn't very good. My friend isn't an expert programmer by any stretch, but he was more of an expert than anybody in that office in regards to developing software. His brain basically zeroed in on it without him noticing.
I've become somewhat "obsessed" with this topic recently and would love to know if others know of any resources I can check out. I read "The World Beyond Your Head" by Matthew Crawford recently--he spells out this phenomenon quite well.
EDIT: Jose Ortega's full name is Jose Ortega y Gasset--I forgot to add the last part.
I think he's basically using it as "passive income." They pay him a few hundred dollars per month for "maintenance", but I'm not quite sure what that entails. There was a lot of initial legwork to write the software, but it's a pretty simple CRUD app, according to him. He noticed that everybody at the office was using expensive iPads to do basic tasks, so he convinced the manager that he could do it for cheaper. He's not actively growing the business or finding new clients. This was more of an experiment on his part to see how easy or hard it would be to get a paying customer.
That's the one--thanks! I've read three of his books, so a lot of the stories have bled together over the years. I forget which book had which stories.
I think understanding these expert responses could be a way to advance generalized AI. It seems to me that one part of pattern recognition is having a guess that's indexed to a key composed of the senses. There may be multiple close matches (the expert) or many distant or conflicting matches (the novice). <<I'm certainly not informed on AGI state of the art so forgive me if this sounds like a total NOOB statement...
My guess is that this is related to how LSTM networks operate: they learn to pay attention differently to various parts of data, focusing more on some depending on the input. I believe the broader class is composed of various "attention mechanisms". But I'm mostly giving keywords away, I do not have an intricate understanding of the way they work either.
Constant chat in our head, keeps us away from reality. Try not think for few seconds and see how you become aware about surroundings. Only intense moments shook us from this chit-chat.
Take a look on yoga too. I am not an expert but core philosophy is being aware/conscious/witness about yourself.
Thanks for the recommendation. I think you're onto something--this idea of being more aware and conscious about the things around you.
I've noticed that when I spend time away from my phone I'm a lot more clear-headed. Initially, I get really antsy--"What's happening on HN? Twitter? Reddit?"--but after some time I become a lot calmer.
I don't know what 'cortical representations' are exactly, but it seems generally true that experts in a domain build up gradually higher level pattern recognition in their area of expertise. Whether it is driving a car, playing a sport or game, or writing software.
As a beginning programmer I had to consciously think about fundamental concepts all the time, or grapple with my limited knowledge of a programming language, instead of thinking about the problem.
As an experienced programmer I think in higher level concepts and abstractions, and the fine code details happen without me consciously thinking about them particularly.
This actually makes learning a new programming language or IDE more painful now than it was when I was new. It probably takes me less time to get to an equal level of skill in language X than a beginner, but getting to the level of fluency where the low level details don't require conscious thought takes time and practice. Being slowed down so much while getting to that point is deeply frustrating.
Took the words right out of my mouth! I feel a little guilty when I'm reminded that "the language is just a tool," meanwhile I am loathe to switch unless truly necessary. Honestly, I don't think I have the memory space to be deeply fluent in more than a few languages, and so when presented with the option of learning/using a new one, I weigh that against proficiency lost in other areas. I know it's not zero-sum, but context switches have a cost. Especially in industry, languages are often so similar that it's hard to justify. I used to feel differently, and be more enthusiastically polyglot (I've got production code currently running somewhere in the world in about 8 languages). It wasn't until I found a language that clicked with me that I even had the motivation to become really fluent.
I called this building consciousness. If you are pouring lot of code daily and moving between many projects, you will start writing comments automatically. Once you build enough consciousness about anything, learning become very second nature. And this is the reason 10000 hours rule work imo.
On side note, the biggest mistake people do is they can't think straight. If you want to learn coding, start coding first. Don't read theory or watch youtube videos. If you want to learn public speaking, start giving speeches. Don't read motivation books. This is how child learn. Fail and improve. Sadly many kids want to become hacker by watching hollywood movies and youtube videos.
well, "cortical representations" is just a fancy way of describing modern day phrenology. I.e. you stick a programmer in the fMRI scanner, the signal gives more blobbiness in the brain cortex (i.e. the outer layer of noodles) in a certain pattern vs. an aged match nonprogrammer control.
If you actually get inside the skull and attach electrodes, you then can maybe measure the oscillatory dynamics and properties of say a bunch of neurons in a specific part of the cortex and claim there's tuning because some paramater - phase coupling, firing frequency, etc etc etc appears different than a group of aged matched controls. But I'm sure no programmer voluntarily agreed to non-medically necessary brain surgery...
For me I've noticed that over time I've stopped worrying about the code and now mostly care about the data. How it's stored, how it's transformed etc. The code comes from how the data is managed.
As a new programmer, you certainly spend more time thinking about the details and minutae of the code itself.
Changing languages within the same group tends to come pretty easy, a C-like is mostly similar to other C-likes, flipping from python to ruby isn't all the terrible (or vice versa).
Moving between language groups is harder though, still struggling to wrap my head around lisp and haskell for example. Probably due to my skewed upbringing, BASIC to 6502 to 68k to C to python.
> Moving between language groups is harder though, still struggling to wrap my head around lisp and haskell for example
I played around with CL and Scheme before coming to Clojure. I did not have much success with the first two but with Clojure it finallly clicked because at least on a superficial level Clojure seems to have more syntax than the other lisps (because of vector and hash-map literals). And eventually I understood why "code is data" in lisp. But I think that the visual distinction for the different collection types really helped me understand the concepts behind lisp better.
FYI: I haven't used Racket yet (if that should be relevant).
The brain is a computation device. Like any computer, it has to represent data in some kind of structure in order to operate on it. But what are the exact data structures that brain uses? Nobody really knows, but there are some fascinating clues.
fMRI is a really crappy imaging technology: it has low spatial and temporal resolution. Yet when we use it to read activity in the brain, we're able to gain real insights into how the brain actually works. This paper goes into what fMRI's success tells us how about the brain represents concepts and what fMRI's success rules out: "the neural code must be somewhat spatially and temporally smooth with respect to neural activity (which is several orders of magnitude smaller than voxels) for fMRI to be successful. Whatever is happening in the roughly one million neurons within a voxel (Huettel et al., 2009) through time is being partially reflected by the BOLD summation, which would not be the case if each neuron was computing something dramatically different for in-depth discussion"
When I was young kid and teenager I would spend a lot of time playing checkers with my father. My father wasn't master or grandmaster level but he played well. We would sometimes spend entire evening playing dozens of fast paced games.
When friends asked me how it is possible to calculate so many moves in advance in such short time (I would typically have response prepared for whatever move they made) I realized I don't really know. Only occasionally I would spend time really analyzing the future state of the board and I was typically able to imagine how the board would look like in many moves in advanced and was even able to predict which moves would look tempting in half a dozen moves in the future.
It did not feel as if I was playing the game. Retrospectively, it felt more as choosing from menu of options but I did not know or cared to know where the options came from.
I came to conclusion after so many repetitions the brain gets somehow wired and runs all those simulations "behind the scenes" so that the conscious part of the mind is relatively free to make very high level decisions.
I was pretty excited to see this paper but unfortunately it seems like they have a pretty big multiple comparisons problem. The spatial structure of their brain maps and the really strong correlations scream multiple comparisons. Glancing through their methods briefly to try to figure out why, it looks like they are performing their decoding and leave-one-out cross validation independently for each small group of voxels, which should generate a ton of false positives. This is pretty easy to control for, but they didn't do the key control analysis: scramble the trial identity (category) to create null datasets and then recompute the measures. Unfortunately I bet that these null models would have had similar correlations to what they observed.
65 comments
[ 2.8 ms ] story [ 116 ms ] threadFor example, chess masters memorize chess positions faster than normal people--but only for chess positions that are "valid". If you can't get to the position with play, they don't memorize them any better than normal people.
An interestingly (IIRC) they had amazing memory for boards which were actual states of play. But if the pieces were arranged randomly, they were little better than beginners.
Ah perfect.
It amazes me mostly because this is not the sort of tasks our brains were specialized in doing, by estimating our development path in nature as mammals.
We discover and/or create new models and yet, we are able to adapt to them with some effort. Our new environments will probably affect the DNA that have the brain design, and we will pass all of this as a legacy to our kind.
The brain is such a masterpiece of nature.
concievably this might be similar to spatial navigation, which would be something we'd evolve for as hunter/gatherers
But theres another catch, the tools we use change the shape of our mindset, leading us to design other tools that now map to this new perception of reality we have with the new mindset we built by using the former tools.
The hunter-gatherer example given in the first comment for instance, i bet with enough evolutionary steps, we will not be able to trace back to that mindset, because we have "patched" our own mindset so many times with new tools(over tools) that we will have very little "mindset identity" to share with our former "hunters-gatherers" primordial cousins.
You are brave to handle that much code, imo.
Of course theres a erosion process if you dont touch that piece of code for more than 1 year, and it happens with a codebase of that side, but the 'partial data' is is still there, and with a couple of minutes dealing with it, you recover the information.
Its better when you shape the code yourself.. when you lay down the objects, methods, etc.. But this also works great with code i've happen to just use.
For the architecture and where things are.. be it files, methods, or where i could find something i want.. there were no lost.
I feel i need this partial recovery process mostly for codebases with 2 or more years, and the lost is minimal and can be recovered quickly.
Now being more specific over your question, for me it fells more like a map, smaller maps or trees connected to top-level maps... But yes, it feels a little like rooms as in a quadtree, where you need to specialize and ignore the other parts of the tree for a bit, much like the occlusion/visibility process that algorithm gives.
By the way is great that you have used this analogy, because this is also part of an observation i've had about laying down the information for a specific goal i have in mind.
I cant wait to experiment with this as soon as i finish this thing im working on, to see if its really cool as my intuition is telling me..
So I rearranged the code slightly and it was immediately obvious he'd mismatched his closing parentheses.
It wasn't conscious. I just knew it was wrong.
When I worked in a computer lab, I'd often walk past kids writing code in notepad, peer over their shoulder and spot imbalaced parentheses or a missing semicolon. I'd keep it to myself unless they asked for help, because it's a learning process... and then they'd be amazed as I immediately found the spot.
And sure, they probably save you time. But for me, they add visual clutter and only spot trivial issues, and rarely save me a few seconds per day.
After a decade of experience I happily dump all the boring stuff to type checkers and linters.
One day in the morning I was being in a state of half dreaming - half awake, and among other closed-eyes visuals I observed a series of white screens (sort of 80x25), filled with the same digit, like all zeroes or all threes.
I don't know if those were the layers of my brain's NN responsible for recognizing texts. But I generally suck at visual navigation: I don't rely on code-minimaps, scroll-bars, I don't remember if that particular function is above or below. I use tools like quick-jump, fuzzy search, I just need to run a thread of interest through my mind and recall instantly what to search.
This is fantastic. I've always had a hunch that experts are "seeing" things differently than novices, and seeing things that people who aren't in the same domain aren't even aware of. As people develop more expertise, I imagine the gap becomes larger, to the point where they're aware of things that "laymen" aren't even cognizant of.
Two examples:
In one of Malcolm Gladwell's books--I forget which one--he writes about a firefighter who, almost unconsciously, ordered his men out of a building right before it collapsed. He didn't even know why. After going through the day's events with a researcher, the researcher realized that the fireman was subconsciously (unconsciously?) attuned to what was happening around him. His brain was operating unbeknownst to him due to his years of expertise.
A friend of mine started a small business late last year. He started it on a lark, after a trip to the local autobody shop. Usually his spouse handled all of the car-related affairs, but for some reason he ended up having to do it himself this time. When he went to the store, he noticed that the software they were using to manage their inventory was dated and quite awful. He took down the manager's information and messaged him a week later with a proposal for revamping their software system. The autobody became his first client. The manager said that hundreds of people come in and out of that store every day, but my friend was the first person to point out that their software wasn't very good. My friend isn't an expert programmer by any stretch, but he was more of an expert than anybody in that office in regards to developing software. His brain basically zeroed in on it without him noticing.
Related to a thread from last week about our brains physically changing depending on what we do and pay attention to: https://news.ycombinator.com/item?id=22201771
I've become somewhat "obsessed" with this topic recently and would love to know if others know of any resources I can check out. I read "The World Beyond Your Head" by Matthew Crawford recently--he spells out this phenomenon quite well.
EDIT: Jose Ortega's full name is Jose Ortega y Gasset--I forgot to add the last part.
- Jean Anthelme Brillat-Savarin
- Old proverb
Take a look on yoga too. I am not an expert but core philosophy is being aware/conscious/witness about yourself.
https://aeon.co/ideas/an-ant-colony-has-memories-that-its-in...
I've noticed that when I spend time away from my phone I'm a lot more clear-headed. Initially, I get really antsy--"What's happening on HN? Twitter? Reddit?"--but after some time I become a lot calmer.
As a beginning programmer I had to consciously think about fundamental concepts all the time, or grapple with my limited knowledge of a programming language, instead of thinking about the problem.
As an experienced programmer I think in higher level concepts and abstractions, and the fine code details happen without me consciously thinking about them particularly.
This actually makes learning a new programming language or IDE more painful now than it was when I was new. It probably takes me less time to get to an equal level of skill in language X than a beginner, but getting to the level of fluency where the low level details don't require conscious thought takes time and practice. Being slowed down so much while getting to that point is deeply frustrating.
On side note, the biggest mistake people do is they can't think straight. If you want to learn coding, start coding first. Don't read theory or watch youtube videos. If you want to learn public speaking, start giving speeches. Don't read motivation books. This is how child learn. Fail and improve. Sadly many kids want to become hacker by watching hollywood movies and youtube videos.
If you actually get inside the skull and attach electrodes, you then can maybe measure the oscillatory dynamics and properties of say a bunch of neurons in a specific part of the cortex and claim there's tuning because some paramater - phase coupling, firing frequency, etc etc etc appears different than a group of aged matched controls. But I'm sure no programmer voluntarily agreed to non-medically necessary brain surgery...
As a new programmer, you certainly spend more time thinking about the details and minutae of the code itself.
Changing languages within the same group tends to come pretty easy, a C-like is mostly similar to other C-likes, flipping from python to ruby isn't all the terrible (or vice versa).
Moving between language groups is harder though, still struggling to wrap my head around lisp and haskell for example. Probably due to my skewed upbringing, BASIC to 6502 to 68k to C to python.
I played around with CL and Scheme before coming to Clojure. I did not have much success with the first two but with Clojure it finallly clicked because at least on a superficial level Clojure seems to have more syntax than the other lisps (because of vector and hash-map literals). And eventually I understood why "code is data" in lisp. But I think that the visual distinction for the different collection types really helped me understand the concepts behind lisp better.
FYI: I haven't used Racket yet (if that should be relevant).
Related paper: https://elifesciences.org/articles/21397 "What the success of brain imaging implies about the neural code"
fMRI is a really crappy imaging technology: it has low spatial and temporal resolution. Yet when we use it to read activity in the brain, we're able to gain real insights into how the brain actually works. This paper goes into what fMRI's success tells us how about the brain represents concepts and what fMRI's success rules out: "the neural code must be somewhat spatially and temporally smooth with respect to neural activity (which is several orders of magnitude smaller than voxels) for fMRI to be successful. Whatever is happening in the roughly one million neurons within a voxel (Huettel et al., 2009) through time is being partially reflected by the BOLD summation, which would not be the case if each neuron was computing something dramatically different for in-depth discussion"
When friends asked me how it is possible to calculate so many moves in advance in such short time (I would typically have response prepared for whatever move they made) I realized I don't really know. Only occasionally I would spend time really analyzing the future state of the board and I was typically able to imagine how the board would look like in many moves in advanced and was even able to predict which moves would look tempting in half a dozen moves in the future.
It did not feel as if I was playing the game. Retrospectively, it felt more as choosing from menu of options but I did not know or cared to know where the options came from.
I came to conclusion after so many repetitions the brain gets somehow wired and runs all those simulations "behind the scenes" so that the conscious part of the mind is relatively free to make very high level decisions.
...of checkers?