13 ms·
If you worked at a place that did 100% pair programming, anyone who couldn’t succeed at pair programming would be filtered out. Personally, whether or not I ca
by kayodelycaon 5y ago
If you worked at a place that did 100% pair programming, anyone who couldn’t succeed at pair programming would be filtered out.
Personally, whether or not I can do pair programming has a lot to do who I’m working with, what I’m doing, and what kind of day I’m having. The same thing goes for test-driven development. I have ADHD and short-term memory issues.
This causes me to work by feel on some tasks because I don’t work on problems in order. I visualize everything like a house of cards. I see everything at once and load random parts of what I’m looking at until I see the whole thing in my minds eye. (Because I have three logical registers on a good day.)
Asking me to explain my thinking requires me to restructure the process in reverse and put it into a linear thought that can be understood by someone else. Which half the time dumps all of the registers in my short term memory. Meaning I don’t understand what I was looking at. Communicating with neuro-typical people is frustrating, mostly because I try really hard to communicate clearly. (Good communication means better relationships with coworkers and less wasted code.)
Despite the complete chaos in my brain, I write extremely good code (by other people’s measures), because I think about readability, algorithmic complexity, side effects, testability, and a thousand other minor details at the same time. Tests come in once I’m happy with the structure. (I hate working without clean understandable tests!) Then I refactor to clean up the code and comment to explain reasons why it was written specific ways, so coworkers (or future Kayodé) don’t want to murder me.
If this comment is a bit rambling, you know why. :)
- Gravityloss 5y agoText is linear. Would drawing be an easier method for you to explain something? It often is for me.
- kevin_thibedeau 5y agoYou waste your time managing visual presentation (more so than 1D text). Schematic entry used to be commonplace for FPGA and ASIC development in the 90s. The industry has mostly moved to HDLs for digital logic because it is more productive and you get side benefits like revision control, easier reusability, and tooling independence. Anyone promoting 2D visual development for programming is selling snake oil.
- Gravityloss 5y agoWe're not talking about programming here but explaining a concept.
- NateEag 5y agoI'd have said those are very, very similar things, if not I fact the same. Granted, code requires far more details than many conceptual explanations, but it is still one.
- bear8642 5y agoIndeed! And even then drawing can help with the programming! Discussing code for linked lists for example, having the box and pointer notation for what happens and scenarios very helpful! [1]<->[2]<->[3] to [1]<->[3] means changing [1]'s and [3]'s pointers and freeing [2]
- tharkun__ 5y agoI've found the opposite. An approximate quick and dirty visual representation can transport almost instantly the knowledge that writing back and forth for half an hour could never achieve. When I learn about and talk about a system a visual representation of the flows of data and function calls is playing in my head. I get an overview of the system and what it does. Think "mental model". I "see" that this service calls that service to get that piece of data, which it gets from that database table and it all flows over there to do that and suddenly it all makes sense. I recall those high level flows for a very long time too and I have no idea how I do it. It just happens. I hope my mind keeps doing this for a very long time still. I can talk about it and it makes perfect sense to me. There are other people at the company usually that share the same knowledge and understanding and if we speak a similar enough language we can communicate well. And then there are people that do not seem to get this level of understanding, even after prolonged periods of working on the same code base. Ever. When you ask them to explain to you how the systems and modules interact, they can't. And then you draw some simple graphs of this service and that service, and this database here etc. and it finally clicks for them. They could not synthesize this from code or written text. They only ever saw the local view of the module they worked in. Overall, more abstract flow of information and modules was lost to them. You have to actually visualize it for them. Note that I am not talking about "visual programming" as in drawing UML like diagrams and such to actually program. It's purely about showing data flow and call stack and such. Usually I don't need to draw this for myself as my head does it for me and it works really well with statically typed languages without any magic going on where I can just have the IDE navigate to exactly the right places, find all the code references quickly and accurately etc. One time (a looong time ago) I actually threw together a quick script to generate a graphviz file for the call graph of some system based on some proprietary database's stored procedures that I had to quickly come up to speed with and that nobody was there to explain to me. I think it printed out to like 15 pages that I taped up on the wall next to me just to make sense of it. No IDE support to click through from one procedure to the other.
- kayodelycaon 5y agoNot really. But I’m glad you asked! Google “crazy conspiracy board meme” and you’ll have a good analogy for what’s happening. If I start writing it down, things randomly disappear from board. Which requires me to look at the gaps and fill in the blanks. You can imagine what this looks like from the outside. My dad has interrupted me so many times with “get to the point” and the only response I have is “working on it.” The funny thing is… I’m an author and prefer to work with text.
- Gravityloss 5y agoYeah, for mind map style note taking I use hierarchical bullet lists. It's the same topology (if there are no cycles) without having to worry about layouts, and you can have both hands on the keyboard. I go up and down a lot and move blocks around.
- kayodelycaon 5y agoYup. I'll break out my eink tablet, write bullet points, and make liberal use of the selection tool. (Text editing requires too many operations.)
- lvl102 5y agoI agree with this comment. Not all problems can be solved this way. Sometimes I need to sit down and think without constant interactions. Interactions are great but they have bandwidth limitations for the most part.
- zarmin 5y agoAs someone with ADHD and memory issues, your comment is what I hope my future looks like. Would you mind expanding on how you're able to work through ADHD symptoms, motivation issues and such?
- kayodelycaon 5y agoMine is comorbid with being bipolar. The only thing that helped was medication and then… - Learning CBT from a book with the help of a therapist to guide me. https://www.amazon.com/Feeling-Good-Handbook-David-Burns/dp/0452281326 https://www.amazon.com/Feeling-Good-Handbook-David-Burns/dp/... The core of it is in the first few chapters. Never read the later ones once I got the concept. - Learning how to have realistic expectations about what I can do day after day. - Prioritize self-care and optimize for long-term performance over short term success. This includes going to bed earlier than I want. :( - Working with my manager to have the proper accommodations. In my case, strict 40-hour work week, no work interruptions outside of that, and time off as needed. I’ve needed accommodations less since things have evened out, but I’ll never be able to do on-call.
- yonaguska 5y agoMedication and note taking helped a lot with me. Even better, a good note taking app since my handwriting is garbage, right now I'm using OneNote and I keep it pinned to every desktop separate from my code. Motivation- you need to actually align your tasks with an actual concrete personal goal or sense of accomplishment. And be invested in the work. Lacking that, you'll be dependent on external stressors to get anything done, which will reflect poorly on you if it gets to that.
- kayodelycaon 5y agoMotivation. Forgot to mention that. Without it, everything is so much harder. :)
- zarmin 5y agoThank you. I do rely on medication and note taking apps (though mine are a bit scattered). One of my issues with motivation is what you mentioned: I really really struggle to get invested. Things that are "work" seem to live in an anti-motivation bucket, regardless of how organically interesting they may be to me outside of a work contest. I'm in my 30s now, and I've been doing this my whole life and it is killing me. It takes a tremendous amount of effort and an extremely imminent deadline to get me to start anything. This (ostensibly) runs completely contrary to my self-concept and value system, but the motivation problem permeates every fucking inch of my life, and always has. I can read this back and recognize a defeatist attitude, but I don't know what else to do.
- BFLpL0QNek 5y agoYou just put in to words that I couldn’t, exactly how I work and think :)
- ineedasername 5y agoEchoed. I've done very limited task-specific paired programming and it's been okay, and I got enough out of it to see how it may be a good way of operating for some folks, but not as a matter of routine for me. It would be awful. I just don't approach problem solving in a way that lends itself to having to communicate what & why I'm doing something a certain way as I do it. It takes too long to explain. After the fact? Sure, I can explain and document quite clearly, but not while peeling the onion and sometimes boring through a few layers to come out of the current one at a different point. I don't think this makes me better or smarter, just a different method. I think the GP post (GGP?) about the utility of sharing expertise is a good one, though I think that can be done w/o it being 100% all the time as well. It probably also depends on the nature of the tasks and complexity of the system. There may be jobs that really do optimize better w/ a lot of paired programming, and I'm just not a good candidate for those roles. We all have different niches in which we achieve our best performance.
- wellpast 5y agoI'm at a mandatory-pairing-multiple-times a day place right now and I've made the same observations you are identifying here. Pairing may be good to some degree for knowledge sharing but it works against good architectural design, which requires the kind of holistic thinking you describe, as well as kind of micro-iterative whittling away at the problem that interactive pairing couldn't ever achieve. In addition, the n^2 communication lines yield the worst effects of Conway's Law https://en.wikipedia.org/wiki/Conway's_law https://en.wikipedia.org/wiki/Conway's_law Nearly all of the computational problems we face in industry (save a narrow class of specialty problems) can be pretty easily articulated in the "macro" sense: "oh, we'll just have this distributed actor invoke that one and he'll reply with the blah, blah state". Look, we just paired and collaborated on a design, cool! But the reality is that none of the hard parts have been solved. The hard parts are always the unanticipated errors, edge cases, invariant violations that beset every system--a large set of issues that need to be made airtight when it comes down to actually putting the code and tests together, and these require the holistic thinking you're talking about or either you get subtle bugs or otherwise a mess is made in the code. As an industry we've gone so hard on coming up with social processes to "knowledge share" (pairing etc) and do things like audit for defects (code review process), but all of these are ultimately compensatory measures for bad design and bad code; and, in fact, as you suggest, they kind of encourage and trend toward bad code. A different approach to building systems socially would focus on the code being decoupled and articulated such that the barriers to entry would not _require_ pairing and these other processes. Decouple and compose components that can be understood at face value and in situ. But this is very hard and requires extensive practice and expertise, something our industry isn't keen on talking about. We like that quick race to "expert beginner" wherein we can say "Phew, now I'm an expert". So instead of focusing on mastering these we go for least-common denominator processes, which if you think about it is what pairing, and many of our processes are,- least common denominator. The truth is we're social creatures, so I don't think we'll ever get out of this state. Social processes will win not because they optimize the problem space but because most of us love and crave the interaction. My only lament is that we don't call the spade a spade and we try to argue that these processes are necessary for optimization when they really impeded optimizations and create downstream frustration and limitations.
- 5y ago
- legutier 5y agoi have ADHD too, and have the same problems. In fact i'm assigned into one-person team in my company because i work effective in that way. My feedback is always 10/10 by my managers, but i think i couldn't work that good with such things as pair programming.
- aendruk 5y ago> Because I have three logical registers on a good day. That’s a fun way to put it. When encountering the usual brain–computer metaphors, I’ve always felt like I relate more to the Turing machine scanning over its strip of tape.
- toomanydoubts 5y agoThanks for posting this. Yesterday I came across a job position on a company that does 100% mob(!) programming everyday¹. This means every programmer works 6 hours per day on a zoom call with 2 other programmers, rotating roles between typist, navigator and support every ten minutes. I couldn't help but feel my soul being slowly crushed as I read further on their description of the daily activities. Needless to say, the filter indeed worked out. As someone with ADHD, I couldn't last a single day on a job like that. [1]: https://engineering.meetsoci.com/mob-programming https://engineering.meetsoci.com/mob-programming
- switchbak 5y agoThat kind of context switching sounds like it's horrible for just about everyone (including the business).
- toomanydoubts 5y agoHonestly, it's sounds kinda insane. Mob programming certainly is a tool with its good use cases, like maybe tracking a bug, onboarding a new team member or making critical changes to core stuff. However, I just can't imagine having three engineers making 100k+ sitted together everyday on a single laptop to write yet another REST api or whatever.
- a9h74j 5y agoDoes Zoom have a "Mutex" button for obtaining keyboard access?
- jcal93 5y agoI lol'd at this... was thinking the same thing. "Who's driving!"
- replyifuagree 5y agoCompare that to 3 engineers struggling through solving problems in isolation because they lack information that is in each other's head. Culturally traditional management is biased to create the 3 struggling engineers scenario because most management strongly believes that people working on many tasks in parallel is peak efficiency. You see this manifest in places that run the Jira + PR feature mill. Staff that complete lots of jiras and have lots of green dots PRs in their GitHub profile are considered "peak performers" The fortune 500 is littered with companies full of this anti-pattern. Less so each year though, because if amazing execution on digital transformation matters to the business, to the extent those 3 struggling engineers execute poorly, the competition slowly eats the incumbent's market share.
- brailsafe 5y agoAs someone also with ADHD, I can relate in a lot of these respects. The idea of doing pair programming every fucking day would ruin me. I really don't mind collaborating or discussing with people, because I think that's what our brains are great for, but not in the pair programming sense, and not every day. In my last job, I was very open about this, but my manager seemed to basically brush it off and pull up a chair whenever he felt that was cool. "Time for pair programming". Bleh, thankfully I burnt out and got fired. I've been following a very similar path as you describe in your last paragraph, and I'd be very curious if there are other similarities that differ from how others write code. By chance, do you struggle with eating sounds in offices to the point where you panic?
- ratww 5y agoI don't think I have ADHD, but I burned out pretty quickly after a few months of 8h/day pair programming. I started taking medication and took some extended vacation. Thankfully the CEO of the company wasn't much into it, so he forced our pointy-haired boss of a manager to make it optional. The whole team unanimously decided to never do it again.
- brailsafe 5y agoThis almost made me tear up. I've genuinely never thought before this thread that there were companies that did this, and that it's just not a big deal to people with decision making power. I don't do anything for 8 hrs a day, but if I had no choice but to be doing 8 hrs per day of pair programming, I'd really be having some dark thoughts. Not exaggerating, this scares the shit out of me. Thanks for sharing. I actually feel like I need to step away from my computer and relax a bit just trying to imagine myself in that position.
- smaudet 5y agoMakes me almost wonder what management is actually good for, besides a high level filtering system... I like continous pair programming, but not because I actually continuously pair - if someone wants to watch me work, or is too green to go it alone quite yet, its fine. But usually we only pair when it makes sense to, i.e. we are at the beginning of something and figuring out what to split up. If management tried to force real continuous pairing down everyone's throat all the time....yeah no. That management should be fired, they don't understand how people work.
- adhd3 5y agoThanks I also have adhd and this comment was illuminating
- a_t48 5y agoI keep putting off getting a formal ADHD diagnosis, but this sounds a lot like me. :) My programming/thinking style is very instinctual and doesn't really fit any sort of linear style. I kind of put things together as I go, trusting my subconscious to get all the little details together. I can explain post hoc why I wrote something a certain way, but won't be able to do it beforehand.
- theonething 5y agoI'm the same way and my commits reflect that. I've never stood how people could organize their commits in linear progression. I always squash my commits before merging because of this.
- cromka 5y agoBy reading this I think I just realized I have AHDH, and also problem with short-term memory. Damn, need to talk to a specialist about it.
- kayodelycaon 5y agoADHD isn't the only thing that can cause this type of thinking.
- DenisM 5y agoYou don’t really have to fit things into logical registers before you can speak of them. If you stop trying to do that you will find that you can speak your mind directly, which requires a lot less effort. The recipient of your message is also a human mind and while you will lose the handrails of logical clarity you will gain the safety net in abundance of bandwidth and feedback loops. It’s a trained skill tho.
- kayodelycaon 5y agoI guarantee you, my mind does not work like yours and I need to translate. If you want me to explain code as I see it, I'll start in the middle of a function, where you have no context what it happening and jump to another line of code that is two functions removed. Repeat. You will have absolutely no idea what's going on as I flip through tab after tab of code. My brain does not like doing things in order. I have to force it. Hence the processing overhead. My friends find it entertaining to listen to me tell a story, because none of it is in order. I frequently backtrack or go down "irrelevant" paths, before returning to one of several previous threads. Fortunately for this comment and the second and third novels I'm working on simultaneously, editing exists.
- ftyers 5y agoIt sounds like working on understanding your thought processes would be useful practice for people who want to learn to think and understand flexibly. You seem to be explaining things from the point of view that your different way of thinking is a problem for others rather than an opportunity for them to grow and learn. That's kind of odd... Personally I think it would be very interesting to work through code in that way, and I don't think it would particularly detract from my understanding.
- kayodelycaon 5y agoThat's because I spent a lot of time sitting down to explain how I think clearly while not overloading the reader with chaos. If you'll indulge me, I'll try to explain using part of a story I wrote as an example. (It is a furry story, hence the animal body language.) —— ## My explanation “You went grocery shopping?” “About two hours from now.” “You can relax,” he says after he sets the kettle down. His ears perk up, staring at me intently, and I steel myself. “I took the week off.” “I didn’t expect you to be up so early.” Then I notice the grocery bag on the table. Breakfast probably being oatmeal or toast; we were out of eggs. “You okay?” —— Who is speaking at each section of dialog? 1, 1, 2, 2, 1, 1 —— ## Original “Yeah,” he replies sheepishly. “You got three minutes to get dressed while I get your coffee.” “You can relax,” I say after he sets the kettle down. His ears perk up, staring at me intently, and I steel myself. “I took the week off.” He breathes out slowly, but his tail gets more frazzled. “And you were going to tell me this when?” he says with restraint. “About two hours from now.” It’s my turn to look sheepish. “I didn’t expect you to be up so early.” “Thought I’d make you breakfast.” Breakfast probably being oatmeal or toast; we were out of eggs. Then I notice the grocery bag on the table. “You went grocery shopping? Did you take your anxiety medication?” —— Bonus round: What does “You okay?” from the previous section refer to? There was a minor accident in the kitchen that let to this discussion. —— This is a bit contrived and I mixed things up more than usual because understanding creative writing on paper is easier than explaining code over zoom.
- drawkbox 5y agoPair programming for integrations or maintenance might be ok, but for new projects that is like having multiple people write a novel. Not only will it be pulled in many directions, it may eliminate some great innovations. Usually one person in the pair also has more influence politically in the company so they get their way. There is a reason why nearly all good programming languages, standards, platforms and even games are usually started and prototyped by one developer. That is because programming is creative value creation and business/finance/project managers passionately want it to not be, they want it to be a factory and it never was, is or will be that until the initial versions are out. They want to value extract before the value creation, they also try their hardest to make sure no programmer has much power so they are "swappable" which again is not true in product creation, maybe maintenance or once the base is created, but not initially. Programming is a creative skill and should always be seen that way. Most product developers, game developers and full stack to presentation developers know this and can make some of the best value creation because they can take it from start to finish. Once it is prototyped or first versions, it can be ramped up for value extraction.
- KronisLV 5y ago> Pair programming for integrations or maintenance might be ok, but for new projects that is like having multiple people write a novel. Not only will it be pulled in many directions, it may eliminate some great innovations. Usually one person in the pair also has more influence politically in the company so they get their way. This feels pretty relatable and sometimes also extends to code review, when another developer essentially goes: "Hmm, i don't like this for subjective reasons, you should rewrite it to be different." even in situations where doing so would have no tangible benefits and the only thing that ends up happening is the development velocity being ruined. I think that sort of problem would manifest itself both in pair/mob programming, architecture discussions, sprint planning as well as code review, it's not like you can easily avoid it altogether, unless you avoid the people in question entirely or provide pushback against nitpicking and bikeshedding, which may or may not be viable.
- dottedmag 5y ago> Hmm, i don't like this for subjective reasons, you should rewrite it to be different That's why code review process must have a guidebook with a rule "it's on the reviewer to show why the suggested change has a tangible benefit".
- iamdbtoo 5y agoI can relate to this so much. Thank you for putting it into words.
- pengaru 5y agoI don't think one requires ADHD and/or short-term memory issues to struggle with serializing their internal state verbally without disrupting said internal state when it's sufficiently broad and deep in complexity. This is literally the problem with interruptions and open-office floor plans for knowledge workers. There's no effing way we're all ADHD-addled goldfish. Decades ago my senior cube-mate liked to tell non-engineers who walked into our cube asking questions unannounced: "like I tell my wife, we're in here balancing a stack of plates in our heads, and you just walked in here and knocked them all down." You're right about it being a house of cards, and the industry isn't doing us any favors selecting for people who can chat about it vs. arrange the metaphorical cards high and get the hard things done.
- kayodelycaon 5y agoYou’re correct. People with ADHD have many of the same problems as non-ADHD people have. An open office is difficult for anyone to concentrate in. The difference is the matter of degree.
- libraryatnight 5y agoQuick "QQ" Question, Pummeler of Productivity, Destroyer of Deep Thought, Harbinger of Headaches. In more crass circles, "Flow Fucker."
- pseudoalternati 5y agocombining serializing their internal state verbally without disrupting said internal state when it's sufficiently broad and deep in complexity. I struggle with this during technical interviews. I can't think deeply and explain what I'm doing at the same time. Since talking is required it means that I can't think.
- erik_seaberg 5y agoYeah, I try not to interrupt candidates unless they clearly misunderstood the problem and are building something that doesn’t show their expertise but they think I want. I voted hire on a guy who worked silently for over half an hour and ended up with a good solution, though it’s a little more persuasive for a candidate to offer more signals in case the final code doesn’t come out right.
- bothandeach 5y agome too
- DeathArrow 5y agoI too have an attention deficit and bad memory (this is why I hate interviews where you are asked to recite concepts and textbooks definitions, framework functions with parameters and so on). I get over it by understanding the concepts, understanding the big picture and researching today what I just forgot two months ago. I think you are mistaking in believing you have trouble explaining because you use a different thought process. For almost everyone of us, figuring a complex system means you deconstruct the system in small pieces, understand the small pieces, construct the system again in your mind along with making a kind of mind diagram about how it works. But when it comes to explain to others you use a different process than you used to figure it out. You already have that mind diagram, so you proceed like in most text books or in articles by already providing the big picture and going in details only when you feel is needed. I also write good code, but it doesn't have anything to do with attention or memory. You write good code because you believe it's important to have something that is working well and also will be readable and maintainable. And writing good code is something almost every programmer can do if the working environments permits - i.e. they are not valuing churning bad code fast over writing good, reliable code.
- psyclobe 5y agoI can really relate to this comment
- Gatsky 5y ago(Note: I am not doubting in any way that you’re great at what you do and highly successful. Nor am I downplaying any difficulties and struggles you have had.) My genuine question - Is it possible to have ADHD and be a coder? It’s just that coding requires so much focussed attention over long periods. If you are enjoying a career as a coder I’m inclined to think either the ADHD is mild or treated very effectively? Or even that treated ADHD actually makes you better than the median somehow?
- alathon 5y agoSure. I've been diagnosed with very severe ADD and I've been programming since I was 8 (now 34), professionally since ~18. I took medication for ADD but have since stopped, as it basically caused me to sit for 9 hours and work with no breaks or food. I still have plenty of issues related to ADD, but I'm good at what I do all the same. It has way bigger consequences outside of work for me. Things which you are very passionate about are easier to focus on than things you are not, regardless of AD(H)D.
- slavik81 5y agoAttention-deficit hyperactivity disorder is poorly named. It does not necessarily imply an inability to focus. It's essentially a combination of impulsiveness and poor short-term memory. A person with ADHD will have a tendency to get distracted from the task they're supposed to be working on, and will instead work on other things. That's not necessarily bad if those other tasks are important. Perhaps counter-intuitively, the lack of impulse control may even lead them to hyper-focus on a task... just maybe not the one they were assigned. People without ADHD also get distracted, but they have the impulse control to better resist tempting distractions, and the memory to remember to return to their original task after unavoidable distractions. My entire view of ADHD changed when I saw a video for parents of children with ADHD a few years back. This is one of my favourite HN comments of all time: https://news.ycombinator.com/item?id=17889156 https://news.ycombinator.com/item?id=17889156
- kitsune_ 5y agoIt is possible, the condition is a bit poorly named. The video of the talk by Russell Barkley that is linked elsewhere is a good primer https://www.youtube.com/watch?v=YSfCdBBqNXY https://www.youtube.com/watch?v=YSfCdBBqNXY). People with ADHD can have episodes of hyper focus. However this is a bit a misnomer, it's called Perseveration and is not really a good thing, and has more to do with one's inability to task switch (https://en.wikipedia.org/wiki/Perseveration https://en.wikipedia.org/wiki/Perseveration). However it also allows you to completely zone into a code base or a problem. The problem is you don't really have much control over what will catch your attention. But of course you can develop quite some deep technical expertise this way. Now, that said, there is a new movie, Everything Everywhere All At Once, and if you take this title as a stand in for ADHD, maybe you can see that while this way of living can be overwhelming it also allows you to have a pretty good overview over systems and how their components interacts very fast. I think that's what many ADHD'ers are actually very good at, grokking code bases or the gist of things very quickly. Systems thinking in general. Also quick recall / association chains... Also, on average, the higher your IQ, the later in your life your ADHD diagnosis will be (see this video on adult ADHD https://www.youtube.com/watch?v=dVDhYtQkuO8 https://www.youtube.com/watch?v=dVDhYtQkuO8). Your other abilities can compensate somewhat for your ADHD. Also of course when battling this condition you will build many personal tools and habits that neuro-typical people will never have to do, so in that sense you also might have a leg up in certain situations. I'd say professionally the biggest problem is not so much on a technical level, but more on an emotional / impulse control level. ADHD'ers can come off as brash, speaking their mind freely, not being able to just put that comment in when it's better to shut up.
- sai_c 5y agoHave an upvote from me and thank you so much for this comment. This describes perfectly my own state of mind. I've noticed having problems communicating my thoughts about my code in meetings, but simply could not point a finger at the exact reasons. But this describes it perfectly. If I may bother you, could you answer two questions? - Were you officially diagnosed with ADHD. I never went to a doctor, but in the last years I had growing assumptions I might have ADHD or Asperger (or both). - Do you follow certain strategies which made communicating your thoughts and ideas easier and/or better?
- kayodelycaon 5y ago> Were you officially diagnosed with ADHD. I never went to a doctor, but in the last years I had growing assumptions I might have ADHD or Asperger (or both). Diagnosed bipolar 1 recently. But I was diagnosed as ADD as a child thirty years ago. ADHD is a popular addition to the standard Bipolar feature set. > Do you follow certain strategies which made communicating your thoughts and ideas easier and/or better? Not in a way I can easily teach. I learned my social skills late and had to study people to understand them. I take all of the inputs and outputs of a known person and mentally visualize what their internal state is. Then I play out how different phrasing will be received. Whatever part of the brain normally handles social interaction is broken in mine, so I use logical thinking to run other people's brains in a virtual machine.
- sai_c 5y agoThank you very much for answering, although it is a very personal thing to ask about. I guess I should get an official opinion. Nevertheless, diagnosed or not, virtualizing people seems like it could work for me, although it seems to take a significant amount of time for each person to work.
- kayodelycaon 5y agoIt took a lot of time to optimize the process. Once you get used to understanding people individually, pattern emerge and you can generalize a few things. I have a number of mental guardrails like: If (person) is (things), then don't express (idea). IF my dad IS talking about (politics|religion) THEN do not enter discussion.
- heurisko 5y ago> Communicating with neuro-typical people is frustrating, mostly because I try really hard to communicate clearly. > If this comment is a bit rambling, you know why. :) Everyone has struggles with communicating clearly don't they? Do you think it is possible that we put too much emphasis on apparently typical and non-typical way of thinking, with one pathologised? Would ADHD really be noticeable if we were living in a medieval agricultural society? I'm speaking as part of a generation where boys grew up being medicated for what I saw over-diagnosis of ADHD.
- kayodelycaon 5y agoThe whole ADHD as an adaptation theory has been throughly debunked. Your confusion is very understandable because most people don't know what ADHD is. Some of the symptoms overlap with immaturity, so people who are not qualified to tell the difference will frequently misdiagnose the problem. If you want to understand ADHD, this video for parents of ADHD children will explain. https://www.youtube.com/watch?v=YSfCdBBqNXY https://www.youtube.com/watch?v=YSfCdBBqNXY You don't need to watch the entire 3 hours. The first 10 minutes should be fairly enlightening.
- misja111 5y agoI don't have ADHD but I couldn't work 100% pair programming either. It's true, pair programming does an amazing job when it's about knowledge sharing, but I find it exhausting. For me the optimum would be a few hours pair programming per day on tasks where it's the most beneficial.
- mattikl 5y agoThanks for wording this so well. I notice it when a coworker asks for help, I usually have little idea how to help them when looking at the problem together, unless it's something obvious. But when I look at the code by myself, my mind is somehow free to explore it in "the natural way", and the answers may come quickly.
- docmars 5y agoYou described how I program and think in my job better than I could have ever dreamed. Thank you for articulating this!
- nathias 5y agoThis is probably more a problem of expectations in pair programming than pair programming. It comes the easiest to extroverted people with "standard" thinking patterns that are mappet to language 1:1, I also have to translate thoughts into words which is more of an effort than actual coding. But you don't have to express everything with words, if I can see what you are doing I can just follow that. I can't imagine doing it always, but for onboarding and from time to time its great. Not just for knowledge of the system, but learning how other people flows are completely different, what tools they are using and how their workflow looks like, etc.
- msluyter 5y agoAside from one's subjective take on pair programming -- and there are obviously many valid reasons why it doesn't work for some folks -- I'd have to guess that doing it 100% of the time is quite inefficient. Software development presents a wide variety of tasks of varying cognitive difficulty. I tend to believe that pair programming's sweet spot is for tasks of medium to medium-high levels of difficulty. For the most challenging tasks, say, coming up with an original solution to an unsolved problem, I think it's better to alternate deep focused thinking alone with group brainstorming. But you really need that meditative alone time to gnaw at difficult problems -- for me it tends to be in the shower, or during a walk. That's where you have those awesome "Aha!" moments. On the other end of the scale, certain mundane/repetitive/trivial tasks really don't warrant pair programming IMHO. You're spending two brains on something that really takes 1/4 of a brain. The ideal case for pair programming, IMHO, are those tasks where you can visualize the general path forward, but where there are significant challenges wrt implementation such that another pair of eyes can really provide insight. For example, say you have to implement a module, and you have a general idea of what it needs to do, but the overall decomposition and abstractions involved may be inchoate. While I think a fair amount of "implement this new feature" type of stories fall into that category, in my experience that comprises only ~40-60% of the total workload. The above mostly applies to pair programming with two fairly equivalent/experienced developers. I agree with others who have noted that it's a fantastic training mechanism for new/junior devs. And then, there are various special case scenarios that justify it, as in, you have a problem with X and need to pair with an expert in X to resolve it. IMHO, these are best done ad hoc rather than via a formal process.
- luke_value 5y agoMan up. Stop being weak and making excuses.
- AtlasBarfed 5y ago100% pair programming is not compatible with deep thought and concentration. However, solo thought doesn't necessarily activate all neural pathways that will solve problems. Much like explaining problems to someone else often causes you to realize the bug, social interaction activates communication, idea formation, recall, association, and error checking neural pathways that don't necessarily fire when thinking in isolation. So for 100% pair programming: again with the dogma in IT. 100% code coverage. TDD. Strict agile/process alignment. Stop with the dogma.