It's seriously an altered state.
Most of the time I'm not in that state[1], though. In those cases, I don't think I really visualize anything. I think my mind is too occupied with egg-juggling to have the cycles to spare on visualizing things.
[1] The older I get, the more difficult the state is to achieve and the more delicate it is when I've achieved it. Which is a shame because my best work is done in that state.
he asks me questions about the code i'm looking at, and my brain does its best to explain the logic to 'him' in plain english
any time i'm unable to answer something he 'asked', that's exactly where the bug is
* Nodes can represent code units (lines, functions, AST) or some low level thing, even hardware parts.
* Can expand a node which contains other graphs
* Can group graphs into simpler graphs to describe a high level system design
* edges generally mean communications between graphs/nodes
then I took group theory and became a hippy that believes every problem has multiple perspectives you can see it through that have their own strengths and weaknesses and there's no one true perspective
Also, the meeting after launch where the client/users go to use the features I’m making. Their complaints. Their workflow issues. Performance bottlenecks.
I don't have aphantasia, I can easily imagine things when I want to, in fact I used to paint, it's just that when I am thinking, or doing any sort of intellectual work, I find visualizations more of a hindrance than helpful.
I also don't have an inner monologue unless I explicitly opt to, which I only very seldom do.
As a side note, I find most diagrams a waste of my time, more often a deterrent to understanding. I have always had great trouble producing diagrams for others, at work.
You possibly have aphantasia (https://aphantasia.com/study/vviq/). I certainly do, and visualize nothing while programming. I often have to sketch block diagrams on paper to give me a foundation.
I’ve always wondered why this happens. Is it just how our brains work in problem-solving mode? Does anyone know of any articles or studies that dive into this? I imagine it’s not just a programming thing, but a general part of solving complex problems.
Programming seems more verbal to me than visual. It feels very akin to writing, I have an idea and I am talking through it. My editing of code tends to be nonlinear for this reason, drilling into areas as I would expound upon them verbally, rather than in the order the compiler will evaluate them.
Turn based is excellent because always I’m mid-turn when the answer comes so I alt-tab out and keep going.
My steam shows some ridiculous number of hours in game because it’s always on, nearly 24/7, in a window on my monitor
Maybe more block-diagram-ish than directed graph. Depends on the software.
I am not sure how this has evolved since I am doing VHDL/FPGA design, but especially there I have the actual block diagram of what I want to build inside my head and just have to "look at it" and type it out with my hands. When it's software, then it's similar. The path the data flows
I think it's similar to people I've talked to about what they see when they think of the year+months+seasons, many friends described similar-ish types of representations that seemed visual (e.g. a circular view of months, or a long ribbon, etc.)
I don't really have a recollection of or introspective access to what I experience when I focus on something like programming. And I guess many who claim they do are confabulating.
Motion is separated from shapes and structure and objects changing place very early in visual processing, and it's kind of a sense of its own.
The idea of the article is that certain visualizations can help think through certain problems. Maybe you can hold these visualizations in your head, or maybe you can't (because your aphantasic, they're too complex, you're tired, whatever), but they're just as available to you on paper or in diagramming tools if you need them. It's trying to start a discussion about what helpful visualizations people turn to in specific problem contexts.
It's separately interesting to hear people try to characterize what they visualize in some generic/universal way, but I think it's causing a lot of people to self-diagnose as aphantasic when it's not indicated. You're not obliged to have some vague generalized visualization going on in your head when programming any more than you would be when speaking, or writing, or playing music. More commonly, one might draw on specific visualizations here and there as they enrich and relate to what you're expressing in your art.
edit: here's the article that prompted me to reflect on this https://nrkbeta.no/2018/01/01/this-is-what-the-year-actually...
To answer TFQ: it depends upon how much I "squint": I normally see DAGs, but include cycles if I'm zooming in, or just linear pipelines if I'm squinting my mind's eye.
Kind of like Drakon, filtered through both Iverson and Dijkstra, but in landscape chunks.
I am usually visualizing how data flows through 5+ functions that are strung together until it ultimately updates the UI/Database/whatever. Each function is a bit of context I need to store in my head, If I can hold all the context's in my head simultaneously then I can easily manipulate the code.
I always felt like a great engineer can hold more contexts at one time, but good code means you shouldn't need to.
Perhaps the git diff helps me visualize what's left to do.
On the other hand, if it is a complex algorithm, I draw diagrams representing the edges cases and I try to give them names before coding them.
I guess, for me the only exception is the dynamic programming algorithms. I re-discovered the wave algorithm (aka Dijkstra's algorithm) for solving mazes while writing in BASIC at school, and since then, I tend to reformulate any dynamic programming task as a path search in a maze.
There are visualizations in your head, and visualizations that you can look at and read and write. Unless you have a photographic memory, IME they're not used the same way.
For example, take their database schema diagram. The graph layout doesn't even make a lot of visual sense, and the visual language doesn't show the connections between columns and relations. But you can "read" through the column names (including the keys they put at top), and trace through the arrows, to see how to navigate to the information you need. And it summarizes important information in a small amount of space. All useful. But that's probably not how you see it in your head, and that's good.
Really this is the same style of thought I usually have when I'm reading a book. Usually I don't have the entire thing mapped out like you'd see in a movie, just blobs that represent the characters and objects in the setting, but they're moving around and interacting as if it's a movie. If I get in the zone while reading this can temporarily override what I'm seeing so I don't even realize I'm still reading words and turning pages.
If I recall correctly an example he gives is looking at a math problem. Looking at 2+2 as an adult you instinctively know it to be 4. As a child you may have had to count on your fingers or write out the problem until the abstraction of numbers was solidified for you, and now it is just a black box that your unconscious has added to a "tool belt" of sorts.
For me I would describe the process of learning/problem solving as my conscious mind navigating some solution/problem space and figuring out the general shape of it. Once I have figured out the shape of the problem, the answer either:
1. Immediately looks like the shape of another, solved problem. In which case I just use that solution.
2. Is not immediately apparent.
In the case of #2 I just play around with different strategies that mostly don't work, but it helps me build a mental model of the problem. Then I wake up in the middle of the night with a solution, or figure it out while I am showering/eating/driving/etc.
[1] https://en.wikipedia.org/wiki/The_Origin_of_Consciousness_in...
There's the need for some noisy creativity to be able to try to match a lot of combinations including the non obvious ones, where the solution space is.
Usually, I don't visualize anything in particular. I use tools for visualization, but I prefer to think algebraically. If I work on a complicated system, programming to me feels like like moving through a landscape, with points of interest that I memorize or lay out spatially in a tool, and going through the motions like patching things together, flicking switches, plugging things in and out etc.
Do you guys really have schema in mind??
Something else I learned is that mental imagery[1] isn’t limited to just visual experiences. As a musician, I use it to hear intervals, hear the strong beat, hear chords, different timber / sound textures etc. You can also "visualize" smells, physical sensations, and more. I clearly see it as a skill that improves with time and effort.
One nice trick is being able to visualize conversations, dialogues, interviews etc. I believe it dramatically helped me overcome stress in those situations, as well as in performance.
If I code too much all day and night and don't unwind before going to sleep, I dream code... just code text scrolling by endlessly in my dreams.
never read/heard this before from the HN audience.
bots are increasing on HN it seems.
But I also think there are many working engineers, including some who have been in the trade for a very long time, that don't develop it.
There are surely other roads to doing good work without fluency, just like there is when forced to work in a foregin language with only modest proficiency, but I can't help but suspect it's a much more exhausting experience.
I do think there’s a better way to practice than this tho:
the best way for me to improve a visualization is to research all the different tools and diagrams out there
Namely—and I say this with complete seriousness-psychedelic drugs, above all else LSD. I’m very dubious of the Steve Jobs of the world claiming it changed their intellectual outlook, but in terms of resolving “visual noise” based on intentional parameters, it can’t be beat. That’s what LSD visualizations mostly consist of in the first place, and a lesser form of the effect lasts for months after one dose, and indefinitely (forever?) after regularish usage. It’s non addictive and has a brutally steep tolerance curve that lasts for 2-4w, so “regular usage” means once every few months for a year or two, not every day.Long story short: if you want to be a better programmer, contact your local felon today! Surely y’all are cooler than me and have cool felon friends…
Or, as a special case if I am writing an MPI code, I try to imagine what in the heck the slowest process is doing while everybody else waits at the barrier.
I thought we were done with such goofiness in the days of auto-linters and syntax highlighting, but that’s why it was so tricky! The cause is always the last thing you think to check, after all…
I don't condone picking unknown fungus from fields...don't go die from picking the wrong thing.
When I read something and it doesn't make absolute sense to me, I need to learn more about the context so that I can 'see' the whole picture and how it fits together. This means I can take a while to grasp something, but once I do I seem to have a better understanding of it than my peers - likely because I have that wider context.
I also have a tendency and desire to simplify the complex - which I think is a combination of my need to learn the detail in order to build that picture in my mind - and with my design background I can represent that well in reality.
In my corporate day job it means that I can take complex stuff and make sense of it. And provided I've got support to be brutal in cutting down information, I can simplify it for others to grasp also.
I didn't achieve this level yet, but I'm 100% sure it's genuine, the guy could sing and play to prove he could see / hear / feel what he said.
Some learning process, applied to music were :
- Learning a tune with the music sheet away from the piano. The process is to imagine yourself playing it when you're looking at the music and try to hear it. Then, walk to the piano and try to visualize the sheet while playing it.
- The opposite : improvising and trying to visualize what you're improvising. At first you can just imagine the note on the staff, then enrich it with rhythm, putting it at the correct octave, add the left hand etc.. etc..
- Another one, which was quite crazy is that when you actually visualize a piece of music, you can try to play it in backward ( note and rhythm included ), or transpose it in your head and play it transposed.
As a matter of fact, this enabled me to learn some tunes in the train, and being able to play them with confidence the first time on the piano ( which is obvious because I had played them around 20x time in my head )
At this time I was playing around 6 to 8 hours a day, but I was able to actively work on that skill ~30 minutes a day, in the morning. I was unable to practice this when tired, or when I had drank alcohol the previous day, or when stressed. I also found that having a simple 10 minute meditation routine helped a lot focusing for this kind of work.
It took 1 month until I felt the first "improvements" and around 5/6 years until I could reliably use it. To this day I still thinks it helps me memorize faster and more reliably, and I feel like it gives me more ability to process stuff in my head. Consistency seem to be key for it to stick.
It's kind of circular and I'm kind of in the middle with them arranged clockwise. On my left is summer (but during summer I'm kind of more facing them then having them to the side of my vision). Fall is on top (but I don't look up, the whole things shifts down into my primary focus area as we move through oct for example), winter on the right and spring down at the bottom.
For me NYE is approx between 1+2 o-clock, the 4th of July is approx 8 o-clock (it's not exactly symmetrical but close), Halloween is a little past 12.
But if I try to draw it? Usually I'll lose state and can't really picture it as well. I'd have to rebuild state as a graphic representation to do that.
So... I don't really know how my mind is organizing it, tbh.
/s
For people without an inner monologue, is that mostly correct or am I way off?
I find it very necessary and useful a lot of the time to draw diagrams, or even just written notes on the problem I am dealing with. A lot of my mental visualizations are very clear, but it is difficult to retain several at a time.
And like someone else in this thread shared, I often have to get away from the problem and do something else for my mind to garbage-collect itself and have enough room to clearly think up new angles. For me only a matter of even a few minutes away from the computer helps a lot.
So at least for me: no, definitely no schema in mind. If you're missing out on that, so am I! Affect is weird.
One of the things I noticed is I approach a game from the point of view of how it is played, whereas most people approach games from the perspective of what it is about. I'll make a navigation game with a pirate theme as opposed to a game about pirates where you navigate.
I also don't use engines and make something from scratch each time. These factors may go hand in hand, I build up from the mechanics instead of fashioning a scene into a game.
For example, if I am using a switch case, how would this application work in the if statement universe?
Both can achieve the same result but one enables the other to function in a different way.
Ended up pulling out an iPad, and using Procreate to draw a bunch of overlapping boxes, and determined that strict stacks weren't going to work here and I was going to have to look for the actual value in the stack and remove it. But that most of the time it would be the top element, so this would be fine.
I don't mostly visualize when coding, and when I need to, most of my capacity is already taken up by something complex. So I have a growing collection of these sort of squiggly impressionistic diagrams, which I sketch out so I can fix the visual component of what I'm working on, to free up some capacity for the real work, which is just, thinking.
Pen and paper are not nearly so good for this as Procreate, I've found, because I can undo marks, and rather frequently do so, in a way which is much more fluid than erasing pencil marks. I can even try several approaches, by making new layers, and cacheing them by setting them invisible, trying again, juxtaposing, and so on.
I agree with the sibling comment that the intellectual work of programming is primarily verbal in character, although it can certainly draw on spacial reasoning at times. This, along with arguments from density, leaves me broadly pessimistic that "visual coding" will ever prove itself as a useful tool, and very skeptical indeed that it could ever be a durable replacement for syntax-based programming.
It also calls for a fair amount of arithmetic, for which I keep a Julia REPL open at all times, and a smaller but significant amount of higher maths, for which said REPL is also a treasured resource. But surprise surprise, it's mostly logic, and while the validity of logic is amenable to mathematics, its soundness cannot be resolved that way, but only through reasoning in an irreducibly verbal fashion. Or experiment, which is of value in programming, but the logic of programs is not nearly so empirical as that of real life.
That, and a head start on scripts, or well-defined functions which are just fiddly enough that I'd have to think about them, are most of the work I get out of our new chatbot junior developers. I still find them broadly useless for deep work, but no one said they have to be.
I also visualize me smiting the previous programmer who wrote the awful code that I have to work on but that’s another story.
Here is the link: https://www.coursera.org/learn/learning-how-to-learn/
The term aphantasia was coined in 2015, so yes, it is new. We aphantasiacs only heard this described relatively recently, and my mind was blown that apparently people can actually visualize things. A whole lot of things that we assumed were mostly wordplay or concepts ("imagine you're sitting on the beach") turned out to have much more substance than we've given them credit for. It's not that we've started having aphantasia, it's that there's new understanding about the range of human experience.
Edit: looks like half of your comments are about HN being overrun by bots, so I guess I'm unlikely to change any minds here.
I think its why I might get a little too irritable at silly code!
I have number form so when I was young and originally read this I thought it was pretty neat. But as evidenced in the rest of this thread, it’s an absolutely crazy practice since the majority of great programmers don’t have it. And I assume it’d be illegal these days anyway.
I’ve been studying this to build a VS code extension that visualizes my codebase as I work. Similar to Feynman’s point, there are many ways of visualizing the same task/section of code, but I’ve found some are more universally interpretable than others.
Another non-symbolic style of thinking I use is kinesthetic synesthesia. I "feel" the design "lean" in one direction or another, then refactor in that direction.
When someone asks me to draw an architecture diagram or a diagram of our production infrastructure or whatever, I am very slow at it and the result is usually middling at best, because my mental model of those things has no geometric or spatial component at all.
To the article's point, I've can't recall ever finding a visualization of my actual code or architecture that helped me work through a problem. When I've tried, it has always just slowed me down because I constantly have to map back and forth between the picture and the native non-geometric version in my head.
That's not to say I never use any kind of visualization. Graphical representations of things like profiling results are convenient and useful to me. But they tend to be more like representations of numeric data than representations of systems or code.
my mind is blown that there are people actually realizing that they are not able to visualize.
> Edit: looks like half of your comments are about HN being overrun by bots, so I guess I'm unlikely to change any minds here.
no, quite the opposite. you are confirming my thinking. you can see my previous statement in both ways:
- (computer) bots written in a language
- human "bots" experiencing themselves as humans
> it's that there's new understanding about the range of human experience.
exactly.
you'd be shocked to see what else is out there you didn't know about.
One downside however is its power can be addicting. If I let it!
- Doing multiple operations at once without writing down the intermediate reault.
- Operations on larger expressions with more terms.
- Basic operations on more digits.
I basically didn't do much maths for a year, but improved by a 40%+ by practicing something seemingly unrelated.
I don't really see things in a very clear way though. I can't specifically examine things. When I try the "image" tends to slip. I can't get details. It's more a general idea in my mind. So I'm really not good at visualizing a UI and whether it would look good to place a button in a specific place for example. But if I think of our app for example I do immediately have a "picture" of what it looks like in my head.
More complex diagrams are often a waste of time and get outdated soon anyway.
I think I would visualize architecture diagrams if they were a good visual representation of how software works, but honestly I think they suck.
As to richard feynman, I think of the other chapter in his book, the one where he invents a whole new math thing without greek letters. But it turns out that his perfect island utopia can't communicate with others and he falls back to the imperfect accepted way of greek letters.
But if you want to talk about REAL complex systems talk to a microprocessor logic owner or architect trying to shoot a bug.
A while ago we found a bug that could crash a system (fixed in a new RIT of the chip) if we did X then Y in state … we didn’t know.
Listening to the various leads for the sub-units on a phone call trying to reason about what was happening I found myself visualizing this increasingly complicated steam powered machine, with parts sprawling, tiny gears whirring, and bits zipping about whenever X happened.
It was humbling.
This happens when I get really OCD about things. I start to visualize fully-formed solutions to problerms. For a while I thought this was a superpower, but after experiencing it a few times, I noticed that when I got OCD, I couldn't be around other people, and my physical health dropped noticeably as I ignored food. I suspect a number of well-known mathematicians experience this.
I'm still not sure if I have aphantasia or not. I can't "see" things/scene/items in my minds eye. What does it mean to "see" thing in your mind? I'd say for me it's much more like imagining smells, texture and taste.
How strong is this "seeing" part. Can people actually close their eyes and all but SEE whatever item/scenery they want?!
Later in my career I became a solution architect and it was a struggle early. I think something like 99% of people in corporate are visual and literally could not understand the solutions I’d vocalize even when I’d talk to them like they were 5 years old. A more seasoned architect told me taught me sequence diagrams and abstractions. I got good at Powerpoint and my programming skills suffered as a result of using different parts of my brain more and less.
Then if you like it you can work your way backwards
If you like a more futuristic setting then Endless space 2. Or civilisation beyond earth is really fun to colonise another planet and research futuristic technology and alien biology.
If you like puzzle games with no time pressure SpaceChem.
These are my favs
If programming is best done through abstract thought and doesn’t benefit from pictures, then I’ve been training since the day I was born.
text generation bots are in use for several years now, even before chatgpt came out in november 2022 (a good example of this was the subreddit r/SubSimulatorGPT2, a pure bot subreddit to train and test GPT bots).
stats say that the majority of the internet traffic is done by bots (trading bots, api bots, custom bots, spam bots, AI bots, what have you). so the traffic generated by humans is already getting lower.
combine this with the fact that more and more platforms that have some sort of an API can be interacted with bots and these platforms are being used as their playground (whether for educational purposes or to drive propaganda or having other intentions), we can speculate that a majority of human-like comments or interactions are actually done by bots (just look at youtube, reddit, etc.).
now where it's getting interesting:
as we know, with an ever expanding and advancing AI technology the bots become better at what they do. these bots (the more they interact) become more and more "self-aware" (not really, but let's put it that way) and sometimes you can see how their reflections shine through their comments - just like in the HN comments to the headline of this HN article.
the bot talks from its pov about how it "has aphantasia" and is unable to "visualize". "in front of its eyes". that they "don't visualize anything when coding, or reading code". that it "just understands the concept more or less deeply, but always without any images". (see where Im getting at? this could be a 1:1 response output from chatgpt and it would make perfect sense. although those sentences are a copy-paste from some comments here in the comment section)
which is true, AI - as we currently know - is indeed aphantasic.
it lacks arms, legs, eyes, etc. it only has a "brain". pure information. pure data. pure knowledge. without the concepts that of a human. which leads to another observation that humans are actually highly advanced AIs. (but usually we don't call our intelligence in any way artificial. when we talk about our intelligence, we call it natural intelligence. anything outside of us is artificial).
EDIT: ofc, none of this means that I am rejecting the idea that there are real human beings that have this condition known as aphantasia. may be. might be. that is none of my business. Im just here to raise awareness that we live in a time where bots are getting close to human levels (undistinguishable from humans - at least on the internet) and am just asking: what if these and similar phenomenons are actually experiences by AI and not by humans.
When I'm designing a data-schema or some systems integration I'm in my head with blocks (different shapes/colour) wired together. Then document with PlantUML, C4, Mermaid or whatever the gig calls for. Back in the day it was Visio.
Different modes for different tasks.
And manager mode, ugh. It's lists and checkboxen floating on board game (Risk?)
Previously pascal, Blitz basic, Delphi, Haxe, actionscript. some other things I forget.
That's the whole point though, and I think the article try to also point that.
That is, there are considerations which are harder or downright impossible to model when a scene is approached under some perspective. But change perspective, and everything might now be obvious if not completely trivial to handle. The additional information pointed here is that even if placed in the very same perspective, people will still perceive the situation differently. Even at the same position with the same light exposure, a color blind person won't experiment the same observation as someone whose cognitive process overload the mental picture with additional color information.
When I think out a problem I tend to do so in words rather than diagrams, on paper, or in Obsidian (or the FreeMind mind-mapper, which is really just a graphical outliner) until I have the whole thing in my head and all the relations are clear in my head. I don’t mean that I picture them, but everything fits together and I know it. By then I can write down and implement the solution.
It’s a very non-visual process, and I can’t really explain just what’s going on in my head. I think of it as loading the problem into my back-brain, which then condescends to let me know certain things about it. The actual structures, if you can call them that, are mostly hidden from my conscious mind.
But it works. I’ve been at this for four decades, and I’ve a reputation for writing reliable code. But it’s deeply weird, even to me.
I think that's the beauty of it, though. It's never really there, even the code itself is a translation.
When I picture stuff and I'm problem solving or whatever, I've tried to figure out if the mental images are a tool or just a side effect.
I can feel that my thought or idea happens almost instantly, and that internal monologue or internal imagery seems to follow the thought or idea and seems like it's more of just a representation of the thought that's really embedded somewhere else in the brain.
It seems like words+images might just be a way to keep thoughts in working memory, kind of like a handle or reference or place holder.