1. 4

    Hi. My name is Nato. And I’m (somewhere) on the ol’ Spectrum.

    Question to the author, should you care to divulge: @baweaver, does coding accentuate/agitate some of the ASD-ness? ‘Was curious. I find that coding resonates to that type-a-ness to such a degree, that it’s perhaps the last craft I should have chosen for myself. Perhaps I should have chosen a craft that mollifies all the ASD type feelings.

    P.S. I mean no snark in the first part of the comment, to be clear.

    1. 4

      It does, and to some extent that’s bad but to another it’s amazingly helpful. It’s allowed me a level of focus and creativity that’s not normal, and now I’ve leveraged that into doing conference talks using cartoon lemurs to teach programming as an outlet for some of those crazy ideas:

      https://www.youtube.com/watch?v=TVwVLBor8WE

      There are several such talks of mine in circulation: Reducing Enumerable, Scaling Christmas, The ActionCable Symphony, Tales from the Ruby Grimoire, The Night Before Code Freeze, Professor When and the Timey Wimey Extensions (soon), and more on the way.

      In a lot of ways I leaned in once I realized that my level of eccentric was not only tolerated but celebrated in the Ruby community.

      1. 1

        Thanks for taking the time to reply. Looking forward to going through these. Best to you.

    1. 3

      On occasion I will allow myself a few weekends or nights to really dig into an interesting problem, but that too can be a bit dangerous so I try and refrain and budget work time for it.

      I could imagine that this is super valuable occasionally.

      I’d be interested in what is dangerous about that. Leading you more astray? A waste of energy?

      1. 7

        Mostly dangerous to my already perilous sleep schedule. Staying up until 3-4AM on a Sunday night isn’t a great idea when you have 9AM meetings the next day.

      1. 18

        Well, guess I’ll share my story and thoughts here too; please note this is in no way intended to invalidate or challenge anything in your article; contrasting your own story and experiences with someone else’s can sometimes come off as being dismissive of the other person’s story, and that’s absolutely not my intent. I’m simply describing my own experiences. I just wanted to state this clearly up-front in case I accidentally phrase something in a poor way 😅


        When I was 15 I was diagnosed with PDD-NOS, or Pervasive Developmental Disorder Not Otherwise Specified. I was a shy and socially awkward kid, very insecure, struggled with authority (still do), and was generally not in a happy place for several reasons (education system didn’t work well for me, shitty toxic parents, bullying), which eventually led to the school concluding “there must be something wrong with him”, culminating in the PDD-NOS diagnosis.

        I haven’t talked about this in, ehm, almost 15 years mostly because I feel it just hasn’t really been relevant to my life. Quite a few points in your article sound familiar to me (easily distracted, getting a bit to obsessed with things) but there are quite a few differences as well (I’m not forgetful for example), but I mostly just see these as personality traits, rather than a “disorder”. I guess this fits with the neurodiversity movement, but I’m only superficially familiar with it (and some of its proponents seem a bit, ehm, too far out).

        For example, take the negativity you mentioned in your article; this sounds awfully familiar as well. But then again … I remember family birthdays when I was younger where the entire family would complain about everyone and everything, and let’s not even get started about my mother specifically: she complains about everyone and everything. Negativity feedback loops are a very real thing. Is this a “disorder”? I don’t know… It’s entirely plausible I would have been a lot less negative if I had grown up in a different environment (and how would this have affected my other traits?)

        I was a scout leader for many years, and at the time it was somewhat popular for GPs to refer autistic kids to scout groups “as it will be good for them”. As a consequence we had quite a few autistic kids, and some were genuinely impossible to deal with and clearly did have a disorder. We eventually had to tell some of them that they were no longer welcome; we hated doing this but a bunch of untrained volunteers dealing with autistic kids freaking out every weekend ruining the entire atmosphere for all the other kids as well was unsustainable :-( I’m not so sure if it’s useful to lump everyone who is a bit socially awkward, easily distracted, and can be a tad obsessive in the same group as them. I think it’s doing neither group any favours (never mind stuff like “rain man autism”).

        Counselling, for me, has probably been more harmful than helpful. Much effort was spent on validating the worst parts of my personality, which only strengthened them and didn’t help me grow at all. Simply put, sometimes you need a swift kick in the backside and people telling you you’re a fucking idiot rather than an empathic voice. Don’t get me wrong, I’m a big fan of being empathic with people’s struggles, but sometimes being brutally direct has value too. It certainly had for me. Looking back, much of my early to mid 20s were kind of wasted because of bad counselling and I didn’t start actually solving my issues until I stopped listening to them. Don’t get me wrong, I know many people for whom counselling has worked out great – even literally life-saving – so I don’t want to discourage anyone from seeking out counselling if they think it might help, but I would encourage people to carefully evaluate if the counselling you’re getting is helping you grow or if it’s merely making you feel better (it certainly made me feel better about myself) and either get different counselling or try something else if you feel it’s not.

        The entire description of PDD-NOS is essentially “there’s something wrong, but we can’t quite say what so let’s just label it as this”. Meh. In some cases this is probably justified, but in others probably not so much. In fact, only “Difficulty with social behavior” from that “signs and symptoms” list sounds familiar to me. My own experience made me very wary of these kind of “labels”, or treating them as “disorders”.

        I don’t really have any special techniques to deal with any of this, other than being very open to introspection and taking extra effort in not being defensive when someone is being critical of my behaviour. From the looks of it, I think I’m probably “less autistic” than you are, so I probably don’t need it as much. Part of this means is that I’m fine with my more “distracted” and less productive moods, and that I try to capitalize on my more obsessive and productive moods as best I can. There are weeks where I do almost nothing, and there are weeks where I quite literally do nothing but work just for the craic.

        This means I’m not a good fit for, say, a company with a rigid structure where you’re assigned a task every morning that you’re expected to finish in n amount of hours. I’m okay with that; not everyone needs to be a good fit at every company.

        The best thing I probably did was to actively seek out social situations. Turns out that social skills is a, well, skill, and skills are things you can learn (unlike what those darn counsellors implied). In retrospect, I think a lot of it was just insecurity rather than a true lack of social skills anyway (although there was certainly some of that too).


        I guess all of this is a bit rambly; but I figured I might share my own personal story and I fear that if I don’t hit the post button now I probably never will 😅 ASD as currently defined is so broad and encompassing that it’s almost impossible for any single person to comprehend all of the different experiences. My own probably reflects some other people’s experiences as well (I’m not that special or unique), but many people have markedly different ones. It always bothers me when people point to a single experience and think that describes the entire matter; it rarely does on any topic, and certainly doesn’t on this particular topic.

        1. 6

          Thanks for taking your time to share this.

          1. 4

            Yep, it’s a wide spectrum and no two people are the same on it. There’s nothing wrong with that, nor dealing with things differently. What works for me may well be a horrible idea for others, and I acknowledge that.

            If anything I wanted this to serve as a point for others to tell their own stories of who they are and what they’ve experienced.

          1. 8

            I’ve personally found note taking (on pen and paper) to be a secret weapon so to speak, one that seems often overlooked. I have about 5 years worth of notes/ideas/etc, spread across 8 notebooks (5 big ones, 2 small ones, one tiny one for on the go), and I quite regularly revisit them. I too keep record of what I do, though this is mostly limited to just simple checkboxes ([✓] Scheduled meeting with Bob for example). I also deliberately keep these daily todos/logs somewhat messy. I find this quite “therapeutic” compared to the very rigid/well-defined workflow that usually comes with software development.

            Looking back at the last decade or so, I think my advice for a new developer would be as follows: get a good (fountain) pen, a good notebook (Dingbats Wildlife is really good), and take notes; lot’s of notes.

            1. 5

              a good notebook

              I’ve been using a nice notebook, similar to that one, for a long time, but I’m starting to wonder whether it’s the best option. I’ve recently been considering using a binder (or just binder clips!) which would add the options to:

              • Have a smaller ‘notebook’ on the go, or a big ‘notebook’ at home
              • Remove pages without tearing
              • Add blank pages (!), with whichever pattern is necessary (college ruled, square grid, dot grid, blank, etc)
              • Add other documents (tickets, business cards, etc)
              • Transfer documents between notebooks
                • Maybe my grocery list for this week shouldn’t be attached to my writing about my emotions for the past few years

              Have you had any experience with this? I haven’t used a binder since high school, but it actually seems like a pretty good solution.

              1. 3

                I’ve experimented with various paper and digital based solutions. At present, I’m using Joplin and it’s working well for me.

                During my experiences with paper-based solutions, I think the best overall was to use a portfolio binder (representative example – I am not affiliated with this vendor, and have never tried this specific product, just linking here for the pictures). Mine is an old Franklin Covey one from the 90s. It offers the benefits you listed, but also has space for storing bits of paper (handouts, forms, etc.), a pen or two, and some business cards. I think they also look more “professional” for what that’s worth.

                Usually at the end of each semester, I would take out all the pages and put them into folders in a file cabinet, one for each of my classes. In a professional setting, I would probably do this by project, or maybe by sprint. Being able to add, remove, and re-order pages was a huge benefit compared to a traditional paper notebook.

                To echo what the GP comment said, there is definitely something about the physical experience of writing on a piece of paper, as opposed to with a stylus or typing, that makes it worth something. However I found the extra weight and bulk, and lack of search-ability, to be a major detractor of using paper. The benefits of search-ability, automatic backups, cross-device sync, and being able to copy/paste are worth the inferior writing experience to me.

                1. 3

                  The Dingbats notebooks allow you to remove pages without ruining them, as they come with those tear lines (forgot the term). I personally have never needed anything more than lined pages. Transferring notes is something I haven’t really had a need for either. If that’s something you want to do, you indeed are likely better off with a binder of some sort.

                  1. 2

                    Perforated is the word, I forget it a lot as well.

                    For me a lot of what I tend to do is pick the simplest thing I can and make sure that I don’t end up obsessing over the formatting and methodology of note taking over just taking notes. It’s the same reason why I won’t write a custom blogging engine even though I could, it’d detract from me actually writing which was the original value proposition.

                    The more steps and the more complicated I make it to take notes, the higher the barrier I put up for myself. If it’s high enough I end up in the kick-start problem in which if I can’t get it done one day the rest of it falls apart quickly afterwards. “Well I can do it tomorrow” turns into “I can catch up at the end of the week” turns into “why don’t I have notes for the past year?”

                    That said, do what works for you. Most of my process involves actively foiling my own bad tendencies and acknowledging them, and those are different for different people.

                2. 1

                  I couldn’t agree more. Bullet Journaling, for example, has saved my bacon countless times.

                1. 11

                  I really like parts of this, and the structure of “problem, solution, how it turned into a strength” is really cool. I’d like to hear more about the interpersonal issues related to ASD the author or others may have experienced and how they navigated that.

                  1. 8

                    The fun part is I’m talking to several others in the industry on the neurodiverse spectrum about writing similar posts to try and give a wider view of how more senior engineers work with that.

                    Perhaps amusingly I don’t have many issues with being social or a lot of the faux pas that seem to be associated with aspergers, well, at least not where I’m currently at. Years ago maybe, but as of recently I’ve been able to adapt pretty well. I’ll have to do a followup on that some time later.

                    Feel free to ask whatever though in the mean time here or over on Twitter @keystonelemur, I’ll answer both.

                    1. 2

                      I think the social issues are a bit more nuanced than ‘is social’ vs ‘is not’. Also I think age and experience help everyone with social skills (as long as they are getting practice and working to get better) so that means on the non-neurotypical spectrum too. ‘Just get older’ doesn’t feel like the best advice though!

                      1. 3

                        It doesn’t, and there’s certainly more to it than that, hence the mention of a followup some time later to explain some more concrete steps about what I did. While age and experience do help they won’t have nearly the effect they could have with more deliberate practice, observance, and introspection.

                        Take for instance that I play guitar. I’ve been doing that for some 15 or more years. By time and age I should be incredible, but considering I’ve more of dabbled instead of putting in serious dedicated practice under mentors and by myself I’m no where near where I could have been had I done those things. Same with social skills I figure, time helps but that’s one factor among many.

                        1. 3

                          Some of the perceived change could come for shifts in one’s social group, too. It’s my understanding that people on the spectrum (likely myself included) aren’t “anti-social” so much as wired to socialize in a different way than neurotypical people. It certainly feels like I have an easier time socializing among groups of autistic people (regardless of shared interests) more so than other social groups.

                          It may be a lack of autistic peers that constrains one’s success with socializing more than the neurodivergence itself, not unlike being the only expat among a group of locals.

                    1. 3

                      Today, I learned that you can indeed get colored mechanical pencil lead. Totally going to grab some.

                      I already have [an ending] planned for Red and made lore to build up to it already. The content already exists, it’s just a matter of getting the talks accepted and delivering on the ideas now.

                      Nice. That’d be cool even if the story got published as an illustrated book of Ruby like a certain guide with chunky bacon.

                      1. 3

                        I very well may already be working on such a thing :)

                      1. 6

                        When I tell them, people often say “but you don’t act autistic!” Well yeah, that’s because I’ve spent years learning how to socialize better!

                        Also, most people don’t realize that autism has physical effects on you too. I’m extremely sensitive to textures and automatically walk tiptoe if I’m barefoot.

                        1. 4

                          A lot of non-autistic people don’t really seem to internalize the fact that social skills are, in fact, skills that can be learned and practiced. They do it all the time for special-case scenarios like giving presentations or trying to sell something, but the idea of doing it for “normal” things like sitting down and having coffee with someone, or participating in a conversation involving more than three people, doesn’t occur to them.

                          1. 3

                            For me it’s hearing and textures. I can hear conversations clearly across a room, and certain food will make me physically sick if I try and eat it when prepared a certain way.

                            The loud noises meme is no joke, I end up wearing some form of headphones in offices at all time to drain out noise because my head picks up everything.

                            1. 1

                              I hope you’ve had. an ortho look at you head to toe to mitigate the consequences of a lifetime of toe walking. If not, do it now. When you reach my age you’ll be glad you did.

                            1. 2

                              To summarize: everyone more productive than me is an autistic slave being driven by an abusive boss. My fragile ego thanks the author.

                              1. 6

                                Said author is autistic and thinks you miss the point. The point is, and a more apt summary: the traits which make a supposed 10x engineer are very similar to ASD tendencies, and because they don’t always know their limits they run full blast into burnout. Some managers will indeed abuse this tendency.

                                1. 1

                                  Your summary is accurate. My summary is tongue in cheek. People like hearing things that make them feel like those who perform better than them are cheating, unsustainable, privileged, etc. so that they don’t have to acknowledge that they are anything less than the best.

                              1. 16

                                One of the big realizations of my career was noticing that by working crazy hours to meet any deadline or unforeseen issue that arose, I was actually perpetuating bad design practices. By always meeting deadlines, no matter the cost, I was enabling fellow engineers and management the luxury of not having to take the time to plan projects with time integrated for unforeseen risks. Working like this can be doable for a deadline or two, but over time it encourages a continual cycle of unsustainable work practices that led to burnout.

                                It’s challenging to spend the time to be disciplined enough to properly plan a project out and push back on overly optimistic deadlines. Sometimes it’s even just fun to program late into the night to impress stakeholders. As a software engineer I’m a highly paid professional, and I feel like I should be able to meet the needs of the company, even when it comes in the form of last minute requirements. But overtime it’s led to me having less skills in the planning and estimating parts of a project. This then lead to more underestimated projects, resulting in the whole death march situation happening again.

                                Right now I’m reading The Mythical Man-Month and Rapid development to try to develop my skills in time estimation and planning. It’s not as fun as learning a new language or tech stack, but I think it’s important. Coding is just one aspect of being an effect software engineer.

                                That being said, I could totally be wrong. Sometimes I wonder if true innovation requires working at a crazy fast speed, and not being conservative about what can be accomplished given some good engineers and a lofty goal. Maybe I’m just becoming lazier as I get older.

                                1. 7

                                  One of the big realizations of my career was noticing that by working crazy hours to meet any deadline or unforeseen issue that arose, I was actually perpetuating bad design practices.

                                  I came to the same conclusion: propping a faulty process removes any incentive to fix the process.

                                  It took me working 80+hrs a week (with 24/7 on call) for 18 months before I hit burnout. Thankfully I was old enough and well established enough in my life that it didn’t destroy me or my career. I do worry about my 2 ASD kids having the ability to pull the brakes early enough to get out of it relatively unscathed.

                                  1. 3

                                    I’ve certainly gone full throttle right over the cliff myself. Some of my later posts will cover topics on communication and trying to avoid that very thing, though admittedly it’s quite easy to do so despite whatever experience and knowledge I have that I’m vulnerable to it.

                                    I think a lot of it is being vigilant and knowing your worth, including that of your free time.

                                  2. 4

                                    I have often asserted the need to service infrastructure yearly in the same way one would look after their car. In the past fifteen years of working in various industries I can safely say no company I worked for ever did; most had largely jury rigged applications held together with duct tape and hope or simply worked on fire and forget projects with no care on ROI.

                                    Case in point, we have several event programs of which most were last ran more than two years ago. Last week I got called into a meeting asking how quick we could spin up one of them for an event one client was proposing us to host later this year. I had the hard job of explaining how a system at rest can still atrophy; That the code hadn’t been touched by anyone in three years, I joined last year and have never had time nor need to look at the code and having done so briefly I can see the technology stack it operates on is by now almost a decade old, unsupported and in some cases no longer available.

                                    1. 1

                                      The Mythical Man-Month

                                      Yes. 100%, yes. Recently (finally) read the entire thing. I had spent years (years!) talking about bits and pieces of it and having colleagues mention how yes, we have heard of it too…it’s an old school book. I honestly would love to work for any company that made it standard reading for new hires while reminding them that challenging some of its assumptions isn’t a bad thing either.

                                    1. 4

                                      The final proposal of allowing function calls and method calls does look really slick. But reading the code later, how would you know which it is? How would the VM even know what to do?

                                      1. 4

                                        There was a comment to that note: https://bugs.ruby-lang.org/issues/15799#note-26

                                        It’s a very fair point, and one I don’t think the interpreter would quite be clever enough to handle, as much as I wish it were. The local lookup would likely go local variable > local method > ancestor chain whereas direct calls would be an entirely different resolution chain, making it horribly slow.

                                        I might rewrite that to:

                                        5
                                        |> &double
                                        |> &increment
                                        |> to_s(2)
                                        |> reverse
                                        |> to_i
                                        

                                        In which & would signify there’s something external being passed in that needs to be treated like a proc, retaining the original meaning of the symbol and giving the additional flexibility as well.

                                        I’ll rewrite the ending to express this.

                                      1. 2

                                        Can someone explain to me what the when statement in the example code does? Is it just like an advanced if?

                                        1. 3

                                          Putting the syntax here for continuity:

                                          res = [:ng, 500]
                                          case res
                                          when %p([:ng, status])
                                            p status
                                          end
                                          

                                          The idea is that any variable name that’s not bound would be bound as a local variable inside the when statement. In this case status is the match that would get assigned to 500.

                                          Note that there are several other suggestions for how to perform this task syntactically in the thread, and personally I’d lean against any shorthand that’s not immediately clear what it does.

                                          1. 1

                                            Thanks for that. Yeah it seems to me there should be a clearer way to express this.

                                        1. 2

                                          It’s worth noting that JS has a pattern matching feature under consideration as well. https://github.com/tc39/proposal-pattern-matching

                                          1. 4

                                            So, story time then as far as how this all started.

                                            Fog City Ruby, Pat Shaughnessy was talking about FP in Ruby and lamenting that it didn’t really have pattern matching. Me and @havenwood were playing with some syntax after with case statements to try and make a psuedo-system on it and ended up writing this gist as a “proof of concept”:

                                            https://gist.github.com/baweaver/611389c41c9005d025fb8e55448bf5f5

                                            Afterwards we’d joked about maybe making it a gem, but I hadn’t quite thought it through. I saw @maybekatz tweet about pattern matching in JS (beginning of the proposal) not too long afterwards and thought why not? So I decided to make Qo and see how far I could push it.

                                            Qo was meant far more as a “what if” and proof of concept than a “do this” exactly. I wanted to use it as a catalyst for discussion on how Ruby could have pattern matching while retaining some of its own natural look and feel. After it was released I pushed hard to get it in front of people and spread the idea around to see if it took hold.

                                            Matz has said before that good language feature proposals start as gems of some sort and evolve, so that was the entire goal. Get them talking, give them ideas, and try and qualify all the concerns and nuances around it.

                                            The part I didn’t quite expect was Zverok posting the issue. As soon as that dropped I basically took all the notes and thoughts I had and dumped them into the issue, including references to the TC39 proposal that really got me started on it.

                                            So the short version of all of this is no, the timing was not an accident. This was the best time to try and get the issue brought up and get real attention to it, and it looks like we’re having some degree of success with it so far.

                                            1. 1

                                              I’m glad there’s back-and-forth among the language communities. Thank you for sharing.

                                          1. 10

                                            Pattern matching is one of the only features I regularly feel is lacking in Ruby.
                                            There are other things I dislike or wish weren’t present, but the only missing feature is this.
                                            Combining conditionals and assignment just feels 10x better than having them separate.

                                            I even built a pattern matching library with some gross fun hacks on top of a specific namespace, thread-local singleton instance variables and caller_locations to allow for kinda-mostly pattern matching. I’m going to see if I can dig up the code, because aside from a first/rest pairing, I managed to get nested matching across Arrays and Hashes, and an Any object to match anything.
                                            Then I bumped into a Ruby Tapas video on the topic and stole the hubcaps to implement Erlang-like guard clauses.

                                            1. 6

                                              Have you looked at Qo at all? If so, any strong opinions about where it’s lacking? (Admittedly, it’s a giant hack, but it’s a pretty good giant hack.)

                                              1. 12

                                                Hello! Author of Qo here. Yeah, you’re right, it is a bit of a giant hack XD

                                                Anyways, I’d love to hear any ideas or suggestions on it. Typically I use the issue tracker to keep tabs on what I want to do with it, so feel free to jump in there as well.

                                                Admittedly I’m also the one who wrote a small-scale novel on pattern matching in the description to try and cover bases as I really really really want this feature, as evidenced by writing Qo in the first place.

                                                1. 3

                                                  What do you think about the %p() or %m() syntaxes? I think they’re really ugly personally. Is it possible to make a spin on case which parses the when clauses as patterns without any special extra delimiters? You somewhat hit on that when talking about Scala style I think. Something like this maybe?

                                                  match val 
                                                  when [:constant, "constant", [1], variable_binding]
                                                    variable_binding + 1
                                                  else
                                                    0
                                                  end
                                                  

                                                  If you already covered that, apologies, I read your comments quickly last night and might have missed it.

                                                  1. 4

                                                    EDIT Codefied my idea here - https://bugs.ruby-lang.org/issues/14709#note-6

                                                    match(value) do |m|
                                                      m.when(/name/, 42) { |name, age| Person.new(name, age) }
                                                      m.else { |object| raise "Can't convert!" }
                                                    end
                                                    

                                                    An example practical usage:

                                                    def get_url(url)
                                                      Net::HTTP.get_response(URI(url)).then(&match do |m|
                                                        m.when(Net::HTTPSuccess) { |response| response.body.size }
                                                        m.else { |response| raise response.message }
                                                      ))
                                                    end
                                                    

                                                    Original:

                                                    Not a problem, there are a lot of them (may Matz and Koichi forgive me)

                                                    I hadn’t quite covered it yet. That’s always been the trick about this: what should it look like?

                                                    Truthfully I don’t know quite yet, but I’m working on ideas. In regards to the %p and %m I would agree with some Reddit comments that they can tend slightly Perl-ish. I’d like a more fluent syntax if possible that reads intuitively, and I don’t think that quite does it.

                                                    I had initially proposed this:

                                                    new_value = match value
                                                      when %m(:_, 20..99) { |_, age| age + 1 }
                                                      else { |object| ... }
                                                    end
                                                    

                                                    …which is quite similar to your suggestion. I’d almost consider switching the syntax a bit to something more like this:

                                                    new_value = match value
                                                      when matches(:_, 20..99) { |_, age| age + 1 }
                                                      else matches(:_) { |object| ... }
                                                    end
                                                    

                                                    When possible I would prefer very clear words as syntax over the percent shorthands. With this you could almost amend case to look for matches

                                                    1. 1

                                                      Ahhh, I hadn’t seen how binding the match results as block arguments would be valuable, but your example of using === overloads like Class.=== and Regexp.=== have convinced me. I learned pattern matching in Erlang so I was thinking about the Erlang style mostly, and I didn’t think of how pattern matching would be most useful in Ruby. Blocks are a good way to reuse the case style matching that’s already well understood.

                                                    2. 1

                                                      OOH I like this! You should counter-propose this syntax.

                                                  2. 2

                                                    I only just saw it via this proposal. Hope to find time to play with it today after work.