Heeris is an Australian programmer who posts small pieces, including a well-known cartoon about interrupting programmers.
HN links his cartoon as the best illustration of how interruptions break a developer's flow, often in remote work and open office debates.
Advertising has approximately the same "context switch" problem[1] that programmers often complain about. By definition, an advertisement is not the thing I'm currently involved with.
At best, a even a "tasteful" ad requires you to
0. Interrupt whatever you were doing.
1. Parse text or recognize the basic features of an image.
2. Run whatever heuristics you use to decide if the parsed data is an ad.
3. Try to skip past the ad, either temporally or spatially.
4. *Continue* to monitor the ad until you recognize that it no longer
impedes the thing you interrupted in #0.
These are complex behaviors that have non-trivial costs. The only reason you don't see those costs some of the time is because you've invested a lot of time and effort learning these skills. If you abstain from all advertising for a few months, the parsing costs will become much more obvious.
> every
If your definition of "advert" is so broad it includes everything, it's not a particularly useful definition. Ad blockers (and this discussion in general) are talking about ads that are not the content the user requested; otherwise ad blockers would ban the entire page.
[1] http://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer/
> Good Commandment 5. Thou shalt disturb thy neighbors.
> Researchers have found that innovation is enhanced if all participants
work in a single open space less than 50 meters across, as it
encourages spontaneous discussions across disciplines.[viii] The goal
is for the space to support concentration and communication. For
example, for the last four centers of Table I, the faculty gave up
their private offices to be embedded with students and postdocs in
open space, where only the meeting rooms have walls.[ix] Faculty access
draws students from their home offices to the lab, which increases
chances of interactions. A downside of shared space is the cost of
remodeling to create an attractive open space . This is a one-time
capital expense, since following projects will use it, but even so,
the cost was equal to just two students over the life of a
center. Shared open space is certainly more beneficial to a center
than a few more students
I have to wonder how they get any research done.
http://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer/
Do they normally have very quiet participants and students?
I think there is a balance to be struck between visualizing various aspects of a program (control flow, data flow etc.) and retaining the control available to developers writing their programs as text stored in files. It does seem strange in some ways that we're still dumping text into files in 2014. A given function might interact with classes and functions defined in 10 different files, and we can only view two or three files at a time.
It seems like programmers compensate by creating a mental model of their program as they try to memorize how it will execute. (The comic This is why you shouldn't interrupt a programmer comes to mind: http://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer)
I'm actually working on a plugin for Visual Studio roughly modeled off of Code Bubbles to see if it's practical to solve this problem. (http://codeconnect.io) I think text is the best way to express exactly what you want out of a program, but the way we're interacting with that text can be improved.
> Do you find it difficult to converse with folks while programming? How do you maintain flow state while streaming? (Maybe this is just a skill you pick up?)
This comic (which you've probably seen!) sums up context-switching as a programmer: https://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer/
Imagine that but multiplied by 100. Every 3 seconds, someone is saying something that you can see out of the periphery of your vision. How difficult it is to interact is up to you; you can hold off on chat and handle it every X minutes, you can let them interact with themselves, or you can interrupt your flow every few seconds.
I try to take extensive notes about what I'm doing at any given moment so that I can always pop the context back off the stack and resume my work. It's a skill you'll hone as you go.
> Also, I find myself having to take notes to come back to later.
I rely on notes too. I'm not sure it's entirely due to my memory getting worse with age. It's also that as you progress to more senior or leadership roles over the course of your career, the rate at which you become interrupted by questions or meetings increases, and the number of different issues you need to juggle also increases. I use my notes as a non-volatile memory to save my current mental state so I can resume after these interrupts.
If I'm coding uninterrupted and in a state of "flow", I can still remember details of my code from years ago.
Cartoon about interrupting a programmer: https://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer
I feel directly opposite to this, I am way more productive working from home as a programmer, for this reason alone:
https://heeris.id.au/2013/this-is-why-you-shouldnt-interrupt-a-programmer/
Also I find modern tools easily make up for not being in close proximity.
Best of all as an engineering lead, I am not restricted to hiring in the small pool of engineers who can travel to the physical location of an office. I can hire talent world wide
> I had a stronger work/life separation. I rarely turned on my work laptop at home.
To be fair, that's a matter of personal discipline. There is nothing to stop you closing your laptop at 5pm and leaving it until the next day to open it again.