Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
The Effects of Computer Programming on the Brain (2012) (virtuecenter.com)
116 points by max0563 on May 30, 2013 | hide | past | favorite | 37 comments


I know I am addicted to programming. I have rather nasty chronic pain, and I have found programming to be one of the best coping mechanisms so far. The whole "spacing in"/hyper-focus/computer-zen-trance thing results in me not noticing the pain. I am at minimum addicted to the not-hurting caused endorphins of programming.

This has good and bad results. It means I not only can, but wish to code for long continuous stretches (about 40-50 hours has been my max before burning out, with a few 5-20min food/unkink/bathroom breaks) and I have difficulty programming for less then 5 hours in a stretch. It means that when I finish something, or find myself without an active project then I go a bit nuts: I tend to write a first few thousand lines of a GA or Chat-bot until I get my fix and can stop (and normally chuck the resulting code). It means I do a lot of "code-katas". It also means I am very frustrated in team scenarios where I have to often "come up for air" to communicate with teammates as this diminishes the pain-avoidance. It means I do not spend a lot of time on design and documentation, I just dive in and start writing code and actually enjoy the process of spending hours fiddling with things until they work.

In fact, my addiction to programming is likely a core factor in my choice of education and career. With this moment of reflection, I get to ask myself a question: Is the fact I do what I do largely as a symptom of addiction a bad thing? At minimum is a strike against my self actualization. Is an addiction that people will pay you to feed a bad thing?


I think this addiction can be fine as long as its not self destructive and not detrimental to your personal happiness.


Is your pain linked to movement? Sitting straight for long hours may be an option then. Or maybe it's not really the pain, just a slightly uncomfortable feeling... Because really, you can't program while in pain. You can't even think straight, nor sleep, nor eat. No amount of "coping" ever helps and sooner or later, no matter how strong a person you are, you wish for death.

I've been there, there is no saying how great an impact pain has on your quality of life, your thinking, your family, your dreams, everything. Guess what I want to say is that you're incredibly lucky to cope with your pain just by programming, but I think you shouldn't call it nasty - exactly because something like programming helps.


My pain is not linked to anything except stress and barometric pressure. I have been diagnosed chronic migraines (a diagnosis I do not really agree with) and chronic sinusitis. When I was 16 a classmate with whom I had a disagreement with saw fit to smash my face between his fist and a wall I was backed up against. This scarred my sinuses and two surgeries to attempt to fix it have failed (and they can't safely try again). In addition I suffer from something resembling a migraine, I say resembling because it has not stopped for the last 6 years (migraines are suppose to come and go, this just changes in intensity. My current theory as to the cause of my "migraines" is I have a sensory processing disorder, but according the the DSM I need to also be autistic to have sensory processing disorder (of which I only have the symptoms that overlap with being a programmer and academic and thus it does not make a lot of sense)

The first few years of these pains were exactly like you described. I was constantly suffering and it was breaking me down. I was mostly non-functioning and barely able to keep up with high-school. After three years of nonstop pain I realized my life was not going to go anywhere until I had made some changes. I decided I was going to strive to not suffer from my pain. That is an impossible challenge. It is not 'coping' per say, as I do not hurt any less but it is coping in the sense that I decided to put on the strong facade of not hurting to the majority of the world.

I've been neurologists, on multiple medications. The few medications that did work (Topimerate for example) lessened and even stopped the migraines, but with bad cognitive effects (short term memory issues and shortening of my attention span). Right now I am unmedicated and working on my PhD. My end solution to the pain is to work so much that I don't have much energy left for suffering. It's not fun, but it is better then wallowing and I'll take that.


The downvote caused me to think, and I wanted to apologize if my post sounded arrogant. What I meant is that, while I understand what you're saying and it's very good that you've been able to win against your pain, there are pains that are on god-mode and impossible to beat or ignore, or even to cope with.

My polyneuropathy is one of things like this - I was able to put a strong facade for five years, until it worsened to the point where I couldn't anymore. And that was just the beginning, because it went downhill from there.

It's good to be "strong", but it's stupid to be stubborn and when the pain becomes too much taking medications is the right way. Even if you become a bit dumber because of them. At least that's what I did and having felt relief I can't imagine suffering once more like that. I have nightmares about that.


You are right, that there is no "winning" only fighting to stay in the game.

A few years ago I was researching diseases that could be causing my type of pain. Neuropathy was something I knew I did not have, but reading about it gave me a bit of confidence. It was one of the few chronic pain issues I deemed clearly "worse off than me" and the fact there were people without it out there leading productive lives gave me a lot of encouragement that I could do it myself.


I think what this guy calls "addiction" is at the same time a very good and important aspect of a programmer, and it makes a programmer good, and better.

You could rephrase "addicted" as "passionate". As the writer explains, passionate programmers want to get new puzzles all the time and get bored solving old puzzles. This is a very logical process. When somebody got bored with an old puzzle, it means he/she gained more knowledge/experience and has become a better programmer.

When you become a better programmer and you notice you're getting bored with your current work, it means you should move on. If your current job doesn't offer you anything more interesting you should get another job.

That's my "remedy". It would be such a waste if you would say to yourself: "I shouldn't become a better programmer, I should go on with coding boring stuff and finish my projects". If you do this you'd better just become a sales person (or something else boring).

Of course, it can happen that you have an exiting project but there are some less exiting puzzles in the project that you avoid doing all the time. I think you can easily solve this with project management (indeed, as the writer suggests). If the puzzles aren't that challenging, then the time to solve it won't be very much either. And if you work in teams, you can devide this stuff equally. This is just a manner of discipline.

So please guys, go on being addicted! It's awesome to be a programming addict! Just don't forget to satisfy your boss once in a while!


> ... Usually, he could not complete a project, because once all the interesting stuff was done, he simply could not motivate himself to keep on working on it. Clearly this was extreme and unhealthy.

If that's the case, a lot of programmers (including me) are extreme and unhealthy. I've lots of unfinished projects that I stopped working on right after the interesting bit was done or almost done.


> ... Usually, he could not complete a project, because once all the interesting stuff was done, he simply could not motivate himself to keep on working on it. Clearly this was extreme and unhealthy.

Don't agree. This implies that it is healthier spending your life doing things that are uninteresting.

> If that's the case, a lot of programmers (including me) are extreme and unhealthy. I've lots of unfinished projects that I stopped working on right after the interesting bit was done or almost done.

Me too. Prioritizing doing stuff about which you are passionate is much healthier. Of course I am probably in denial...


Anecdote: the effects have not been good. Searching the net for answers to computer problems, sifting through mountains of garbage for the crucial part, has destroyed my ability to read long passages without becoming distracted. I've been at it almost 13 years, though.


That's not an effect of programming, per se.

I've been at it for ~30 years now, and I notice the same effect - iff I spend too much time reading short-form content. Being able to deal with long-form content requires practicing interaction with long-form content. As it turns out (lately), I more and more often deliberately turn off network connectivity, having pulled major references I need offline. For exactly that reason - the scanning through garbage is disruptive to my ability to focus.

Otherwise, I seem to have survived programming fine ;)


You mean you can't read a book? Unless you are a pathological case, you can train yourself by reading books.


Reading books has been a good way for me personally to pull myself away from online pursuits that break up attention into 15-second spans such as browsing HN and news sites. That tends to be the real addiction for me (...wait, someone is wrong on the internet! must post! must read replies!).

I don't see coding as an addiction. Sure, it is a time sink and feels good, but after a focused coding session the results are (usually) constructive and I learn new things along the way.

This is different from addictions which are usually a way of instant easy satisfaction, a "high", after which you feel useless and down when it weans off. Programming is nothing like that at least for me.


> online pursuits that break up attention into 15-second spans such as browsing HN

I don't understand, how do you use HN then? I take a look at a front page and open interesting comments pages in background tabs. Then I close the front page and proceed to comments. There is frequently more than 100 comments on interesting topics and many of them long, involved and worth reading. I'm done with one page after some time, from 10 to 30 minutes. Then I sometimes read the article (if the comments convinced me to) or just go straight to the next tab with comments. A single comment may be worthless, but it's then short and easily identified as such, reading them hardly takes 15 seconds. On the other hand, long comments tend to form threads, which I then read as an essay, which takes much longer than 15 seconds.

So, how do you use HN to have your attention split into 15-seconds spans?


I'm not saying HN is bad specifically (otherwise I wouldn't be here). There are obviously links to excellent articles posted here, and interesting projects. So this is not an issue with the quality, but more the quantity. Call it "information overload" if you want.

"15 second spans" was exaggerated, this is not Twitter. However reading these kind of sites causes a lot of context switches between topics and articles that seem interesting, or make me want to argue, but a few hours later I cannot really remember anymore what they were about.

It's a very fragmented experience with no clear narrative (at least, that my brain bothers remembering), but it does wear me out.

In any case, it's not that I don't have it under control, but to me it feels more like a potential addiction than coding ever did.


The addiction to solving technical problems with creative and uncommon solutions is very problematic for me. What it means that when writing a <personal project here> for example, at some point instead of fixing the bug which makes half of the project broken, I'll focus on optimizing the code to great lengths(speed, code size, even source readability) because it's simply so much more rewarding than actually fixing the seemingly hard problems of having bugs, which merely just hinder me from doing what gives me the fix. Project scrapped, and a next one started for a few days max.

The real problem? Working in an environment where the first and foremost goal is to "get shit done" and deliver a product. Programming in such sense is outright boring, because the fix comes from solutions which require deep digging, reseach and some creativity rather than readig a spec and implementing it.


There are zero citations in this article. It appears the author imagined these ideas about dopamine and addiction and then wrote a blog post with zero scientific credibility.

Did I miss something? There is no research here, just a flight of fancy. We shouldn't discuss or upvote such garbage.


This article sounds a lot like a couple of Paul Graham's essays. Come to think of it, a lot of stuff that shows up on HN sounds like Paul Graham. For instance, repeating how important it is to work on "hard problems," pretentious blather about "hackers" and master programmers... Do you suppose that they are emulating Paul Graham, or is there a cult of people that think alike, and PG is one of them...?

For the record -- if PG is reading -- I enjoyed your essays on the first reading, but seeing the exact same ideas keep repeating in posts is kind of weird...


Indeed. Author is clearly pathologizing non-pathological behavior.

Real addiction is defined by severe life consequences: jail, death, destroyed relationships. Describing an employee who struggles to do boring tasks and focuses on fun ones as a troubled "addict" is just severely, incredibly stupid.


I came to say the same thing. I was expecting the article to discuss research mapping out how pathways in the brain changed as people learned to program. Instead I got a bunch of unsubstantiated claims and speculation.


Interesting blurb which negates the opportunity to explore the mental flow we acquire through the state which programmers go through when working through a problem set or pet project.

Though I agree that avid learners new to programming concepts may experience anxiety or euphoria depending on the problems which they are working on defeating. I wouldn't necessarily call it an addiction; no more than I would suggest that a musician is addicted to playing their instrument or writer is addicted to creating prose.

The art of programming in which begins with exploring computational programming models and processes ultimately ends with the craft in which itself is as fluid as a master composer composing whom subsequently is also a master musician.

Though it's that "Teach Yourself Programming in Ten Years" which may be what TFA is referring. Not everyone programs inside skinner's box, even in their early years of programming. There is better research on the subject than this generalized blog post which is far from aphoristic of the effects of computer programming on the brain.


Some of this article definitely implies the use of a flow state (Csikszentmihalyi) to get things done well. This doesn't always require addiction, that's for sure.

The addiction comes when you don't have any other fun games to play where you get into flow. For example: sex, reading, outdoor activities, building art cars...


The article raises some interesting points for sure. Although it does not delivier to its promise: The effect of Computer Programming on the Brain. Which would have interest me a lot

Nevertheless it does raise some interesting thoughts on motivation, self-reward of the brain, etc. Which are not specific to programming per-se. You also have this in sciences, math, etc. Programming is just very immersive in the way that you do not have to leave your desk.

The addiction part is really questionable since you cannot discuss addiction without defining what you mean by addiction, etc.


My name is Matt and I'm an addict.

I think many of us can relate to what is being discussed. I, for one, get a huge kick out of trying to write concise, clever code to solve problems, but that often leads to a lot of time spent on something insignificant. I'm trying to train myself to A) finish projects I start & B) become OK writing code quickly and not worrying if it's less than perfect.


I find the programming has made my writing more structured and precise. It has also made me less forgiving of writing which is disorganized and imprecise. (This week, that was technical information on the PayPal developer site.)


Programming has allowed your brain to express rules of structure and precision. You did that to your writing by choosing programmers to read.

Like in writing on paper with pen. These qualitative subjective judgments are not coming from programming per se but rather a style of programming. Think: continental versus American styles of philosophy. Programming as we know it is arguably Western (structured, "precise" and all that hooplah). Programming itself isn't inherently Western, even if ARPANET was a US Grant, if you get my figures of speech, and grant me poetic license (which you probably won't do).


So, two years ago or so I started a project in the middle of my Master's -- not a great time to focus purely on that project. The idea was to replace Node.js's callback hell with Scheme-type promises (i.e. deferreds), ideally preventing most applications from writing `function callback(err, value) {}` ever again. The Promise library was not bad and I might reuse it in other applications; it's only 250-ish SLOC if my memory serves me correctly.

But I quickly realized when using it that the project could not live up to my earlier ambitions. The problem was that I hadn't foreseen the problems in not being able to overload JS operators: something like half of the Promise library just wrapped the JS operators, so that `this.gt(that)` becomes a deferred representation of `this > that`. This kind of worked, but I began to lose interest in this general approach when I started to struggle with how to idiomatically represent (a) variables, (b) if-then-else constructs, which are right now of the form promise.then(promise_if_truthy, promise_if_falsey), and (c) composite statements.

Fortunately, I found the right thing to study, and off-and-on for the past year I've been studying it. The right thing to study in this case is Haskell, because the way that Haskell reduces 'do notation' to a pure sequence of function applications is precisely what you need above to solve (a) and (c) at least.

Another idea was to take a revision control system like Darcs and try to move it, as much as possible, out of the realm of IO so that it could work on an arbitrary in-memory data structure as well. (I might then try to move it back into IO by storing the internal representations in a database, which would probably look a lot like a graph database or like Datomic) This is a great idea but it has stalled because the handling of dictionaries requires 'confluently persistent tries'. There's a great paper on these by Erik Demaine et al., where basically they make functional link/cut trees and build the system out of those, then optimize them to languages which aren't functional as well. I say 'there's a great paper' on it but actually that paper is an incremental result, not a tutorial -- so while it looks really interesting it's required me to learn a tremendous amount of new concepts before I can even implement it.

What I am trying to say is this: is this a code addiction? Probably, but that's not why the projects are stalling. The projects are stalling because my Master's degree and interest in physics have become more important. Computer programming has only a second-order effect on the brain; the first-order effect is distractions. We should not write articles on the problems of being addicted to computer programming, the time I spent programming yesterday, while substantial, is about as long as I've spent typing this comment today. This comment (or other distractions which might replace it, TV or comparative religion podcasts or whatever) is more of the problem than the programming.

I wish the things that competed for my attention had a simple ordering relation.


Do you have to write a thesis? If so, it's probably more procrastination than code addiction.


I've already graduated at this point; I had to write a thesis, but when you've got two interesting projects going on at once, it's hard to say which is the "procrastination." My point was more that the programming projects "have not moved forward in a long time", but this isn't, I think, because they are somehow boring now that I've got the "hard part" solved. (I viewed the original post as warning about such a thing.)


Google "addicted definition", second meaning - "Enthusiastically devoted to a particular thing or activity". Don't instantly associate term "addiction" with negative things like drug addiction, which, unfortunately, the author tries to exploit by even referring to cocaine effects on the brain and comparing it to programming. The article is designed to provoke a reaction from programmer community for attention.


Maybe here's the anatomy of the addictive aspect

Let's say you have a web idea, its so "simple".

So you code it and do a "proof of concept".

Then you start coding, you think you have it nailed, you predict you can do this thing in a few thousand lines of code using bla bla framework.

So you write those few thousand lines of code. Its done. It works.

Except, it doesn't scale, it has no security, you have no hosting, load balancing, failover, replication, user authentication, marketing, no decent website, no android or iOS presence, no enterprise customers, it looks like crap, you have no graphic artists, you have no CSS experts, you do OK on those but its not professional.

And then the features: the "real" product you wish you were building is beyond your means.

Sure you can try to patch it together, but your "few thousand" lines of code delusion is just that.

That's a sure sign of code addiction. And Ive been there myself. Its not that you CANT do all of those things. Its that you spent your time ignoring all of those things to justify coding. And when you hit that wall, you will most likely stop in your tracks and ditch your idea and the work you put into it, to focus on your next "thing".


Wow, I have literally just gone through that whole process. This post really hit home for me. I will code what I find intellectually challenging and then as the complexity dies off so does my motivation. What would be your suggestion be to find it within oneself to complete those periphery objectives and break this cycle?


Programming for me since I was 12 has been addictive. Im 45. I don't regret that. I was a professional musician for almost 20 years before I went back to software.

As a musician I practiced 4-8 hours a day for 15 years.

As a software engineer I have had coding durations for much longer periods with more time in between due to burn out.

I think as in any pursuit, we can sometimes delude ourselves, that the more we do something whatever it is, the better we will get at it.

Its not true. In any performance related field, its acknowledged that there CAN be too much of a good thing.

And too much coding is just as bad for you as too much high-jump practice.

You will end up with a lot more text files expressing your desire, but you will not be improving.

So at some point we as software engineers have to make decisions and choices about how we spend our time and effort without making ourselves robots, pursuing ever diminishing returns, to the exclusion of our personal happiness and fulfillment.


Addiction is an element of passion. The point is how do you prevent an addiction from becoming detrimental to others (and yourself, although that's harder to define). Most people would prefer to live their passions rather than live a bland life, and addictions are part of life.


If you time delay a video of my screen (vim) terminal splits fly open and closed, ranging from 1-2 under some work cycles to 4-5.

I like to think of this as an analogy to how the brain processes (what we call "having a thought"), in that our most widely used metaphor is of a light show or fire crackers going on in a cloud of smoke. The beams of light, when taken as groups arranged over time, or distributions, represents the neurotransmitter, the statistical distributions of light give us a concept map or ontology of thought.

Sometimes I close all of my terminal splits on accident with an ending of "Aha!"

Do this because you believe in semiotic alchemy, and for no other reason. There should be 10-15 physical programmers, if that. Anything more is excess.


What in the world are you talking about ?


I'm making an analogy between two very thematic experiences in my life which involve abstractions.

1. Writing code in vim.

2. An attempt to extend a common philosophical image in cognitive neuroscience ( http://youtu.be/Bm40BSZJRck?t=48m28s ) which involves the behavior measurement of phenomenological experience, like perception. The description in terms of temporal modality is precise, however a grammar (set of valid images) is necessary to enable the merger of these data into public consciousness. So, I'm using the event of spotlights or firecrackers flashing in smoke as an analogy.

If you look at LightTable, perchance you'll understand ? And if you split more often, and employ many IDE-ish tools in vim ? I am a coder trying to relate my experience of Flow to you.

What does it matter if anyone is addicted. Addicts talk about addiction.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: