<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/styles/rss-style.xsl"?>

<rss version="2.0"
 xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
>

<channel>
<title>troglodyne.net</title>
<link>http://troglodyne.net//posts/70da5f16-13de-11ec-84d9-cb4bb82b7529?format=xml</link>
<description>troglodyne.net : /posts/70da5f16-13de-11ec-84d9-cb4bb82b7529</description>
<language>en</language>
<pubDate>2026-04-13T17:26:24</pubDate>
<lastBuildDate>2026-04-13T17:26:24</lastBuildDate>

<image>
<title>troglodyne.net</title>
<url>/favicon.ico</url>
<link>http://troglodyne.net</link>
<width>32</width>
<height>32</height>
<description>troglodyne.net favicon</description>
</image>
<item>
<title>Getting &#x26; Staying productive</title>
<link>http://troglodyne.net/posts/70da5f16-13de-11ec-84d9-cb4bb82b7529</link>
<description><![CDATA[One of the things that comes up repeatedly in your career is whether
    your edge is sharpening or dulling.&nbsp; It is very easy to get
    into a pattern when you are at work and not have to change your
    approach, especially if you are performing at or near the top of the
    pack.&nbsp; You can always find a way to improve performance though,
    and a lot of times it's "I should (and do) know better, but haven't
    applied the knowledge yet".<br>
    <br>
    Ultimately the problem is called <a moz-do-not-send="true"
      href="https://en.wikipedia.org/wiki/Metaheuristic">Metaheuristics</a>.
    Viewed in aggregate, the learning behaviors of programmers is a sort
    of <a moz-do-not-send="true"
      href="https://en.wikipedia.org/wiki/Memetic_algorithm">Memetic
      Algorithm</a>.&nbsp; This must also be balanced against the
    constraints of the current economy.&nbsp; Namely that for many
    problems, throwing hardware at the problem is cheaper than throwing
    money at programmers to fix the problem with existing hardware. This
    means that you have to converge on "good enough" and "worse is
    better", and tools/methods that don't fight this.&nbsp; This can be
    hard to do emotionally for engineers, as we all want to build great
    works.<br>
    <br>
    What seems to work best for me these days is <a
      moz-do-not-send="true"
      href="https://troglodyne.net/posts/1618336942">writing essays</a>
    about systems I'm considering designing, and revising it as I go to
    make sure the narrative remains consistent.&nbsp; I feel this
    actually captures the idea of "user story" a lot better than the
    trite one-liners which are actually user acceptance criteria.&nbsp;
    Storytelling is how our brains actually work, and initially the
    story is hopes and predictions (much like the program going with it)
    eventually annealed down to reflect reality.&nbsp; It doesn't hurt
    that this builds documentation and test cases as part of the
    process.<br>
    <h3>Crush everything getting in the way of work</h3>
    The first thing I had to master as a programmer was how to build an
    environment which prevents or mitigates the costs of interruptions
    to <a moz-do-not-send="true"
      href="https://en.wikipedia.org/wiki/Flow_(psychology)">flow state</a>.
    Much of this involved learning interfaces and editors such that I
    could largely do my job without expensive context switches, like
    having to touch a mouse.&nbsp; The two best means I've found to do
    this are Tmux + Vim + guake-ish terminal emulators and VSCode +
    virtual desktops with most the IDE features like suggestions turned
    off.<br>
    <br>
    There are 4 primary features here:<br>
    <ul>
      <li>100% keyboard controlled navigation and context switches</li>
      <li>Good syntax hinting</li>
      <li>Remembering state between sessions</li>
      <li>Full-screened everything, focus on only one thing at a time</li>
    </ul>
    <p>I have to have a solution for every major OS, as this is a
      necessity for testing software properly.<br>
    </p>
    <p>On Linux I can pretty much have everything I need on one to N+1
      virtual desktops, where N is the number of browsers I need to
      support, plus one window for doing documentation lookups (usually
      on a second monitor).&nbsp; I do most of my development on linux
      for precisely these reasons.<br>
    </p>
    <p>This mostly works the same on OSX, however they break immersion
      badly for people like me by having:<br>
    </p>
    <ul>
      <li>different and non-configurable keyboard shortcuts</li>
      <li>window decorations in nonstandard locations</li>
      <li>virtual desktops no longer have consistent ordering between
        sessions after 10.6.</li>
    </ul>
    <p>They seemed to have optimized for the user which Alt+Tabs between
      700 open windows in one workspace, which is a good way to break
      flow with too much clutter.<br>
    </p>
    <p>On windows VSCode has a good shortcut to summon the console, and
      a vim plugin that works great.&nbsp; Windows virtual desktops also
      work correctly, and I can configure shortcuts on linux to match
      both it and the console summon.&nbsp; I would prefer it be the
      other way around, but commercial OS interface programmers tend to
      either be on a power trip or too afraid of edge cases to allow
      user choice.&nbsp; If I could have a tmux-like shortcut to page
      between vscode workspaces like I do panes I'd be a happier camper,
      as I wouldn't need as many virtual desktops.&nbsp; This is
      apparently their most <a moz-do-not-send="true"
        href="https://github.com/Microsoft/vscode/issues/10121">popular
        feature request</a> right now, go figure.<br>
    </p>
    <h3>_ is other people<br>
    </h3>
    <p>Beyond the little hacks you do to increase flow, mitigating the
      impact of interruptions is important.&nbsp; This is a bit more
      difficult as much of this is social hacking, and understanding
      human nature.&nbsp; The spread of computing into the general
      population has also complicated this as the communication style of
      the old order of programmers and engineers is radically different
      from the communication norms of greater society.&nbsp; I, along
      with much of the rest of my peers, are still having a difficult
      time adjusting to this.<br>
    </p>
    <p>The preferred means of <a moz-do-not-send="true"
        href="http://www.catb.org/~esr/faqs/smart-questions.html">communication
        for engineers</a> is information-primary rather than
      emotion-primary.&nbsp; The goal of communication is to convey
      information more than feeling (if that is communicated at
      all).&nbsp; The majority of society does not communicate in this
      fashion.&nbsp; Instead they communicate Feelings above all else
      and Information is of secondary (if any) importance.&nbsp; For
      these people, their resorting to communication of <i>information</i>
      is a sign of <i>extreme frustration </i>that you have not yet
      discerned their emotional message and provided the validation they
      are seeking.&nbsp; If they haven't already <a
        moz-do-not-send="true"
        href="http://www.catb.org/~esr/faqs/smart-questions.html#not_losing">lashed
        out</a>, they are likely on the way to doing so.<br>
    </p>
    <p>It is unfortunate to deal with people operating via a juvenile
      and emotional communication style, but this is the norm in society
      and over the last 20 years has entirely displaced the existing
      engineering culture at every firm I've worked at.&nbsp; Code
      reviews can no longer be <a moz-do-not-send="true"
        href="http://www.mit.edu/~jcb/tact.html">blunt</a>, as it is
      unlikely you are dealing with someone who is not seeking
      validation as part of their communication packets.&nbsp; The punky
      elements of culture which used to build friendship now build
      enmity (as you are dealing with the very "squares" nerd culture
      embraced being hated by).&nbsp; Nevertheless, you still have to
      walk in both worlds as there are still islands of other hackers
      just like you.&nbsp; Taking on and off these masks is risky,
      however, as people are quite hung up on the notion that people
      must be 100% congruent with how they are perceived outwardly.<br>
    </p>
    <p>Everyone out there building an online reputation learns quickly
      that courting controversy will get you far more engagement than if
      you had made a program which cured eczema and allowed sustained
      nuclear fusion. Emotional highs punctuated by warm fuzzies is
      generally the sort of rollercoaster ride people are looking
      for.&nbsp; Lacking better sources they will attempt to draw you
      into their emotional world.&nbsp; Their world is a skinner box,
      and if you enter it unawares they will <i>train you</i>.<br>
    </p>
    <p>They cannot help but be this way, so you must turn off the part
      of your brain that looks for informational meaning in mouth
      noises.&nbsp; Their utterances have little more significance than
      the cries of a baby or yapping of a dog.&nbsp; The only thing that
      matters is whether the behavior is something you wish to encourage
      or discourage.<br>
    </p>
    <p>Operant conditioning is how you must regard your
      interactions.&nbsp; When you validate them (usually with
      attention), you encourage that behavior.&nbsp; Non-acknowledgement
      of irritating behavior is often the most effective
      discouragement.&nbsp; The natural urge to engage with any point of
      fact must be resisted, and instead reserve your communications to
      that which advances your purposes.&nbsp; When a minimum of
      validation is <i>demanded</i>, dismissal via fogging, playing
      dumb or broken-record technique should be engaged in, rather than
      the hard no which is deserved.&nbsp; A satisfying response to a
      demand can never be offered unless you wish to be dominated by
      those around you.&nbsp; Many see this as Machiavellian
      manipulation, but there is no choice.&nbsp; You play this game, or
      get played.<br>
    </p>
    <p>Nevertheless, this all has a huge effect on the corporate
      environment.&nbsp; Most firms devote far more energy to playing
      house than pleasing customers and making money, and tech is no
      exception.&nbsp; Fellow employees are far more likely to seek
      validation on this schedule with <i>each other</i> than
      customers.&nbsp; Most satisfy themselves with a stable IV drip of
      validation from their local group rather than experiencing the
      much more rewarding experience of solving customer problems.&nbsp;
      This should come as no shock, given social media is purpose built
      to inculcate this mental model, as it was found to maximize
      engagement.&nbsp; This is also good at building solidarity at a
      firm but unfortunately comes at the expense of crowding-out
      emotional investment in the customer who cannot and should not
      have so tight an OODA loop with their vendors.<br>
    </p>]]></description>
<author>george</author>
<guid isPermaLink="true">http://troglodyne.net/posts/70da5f16-13de-11ec-84d9-cb4bb82b7529</guid>
<pubDate>2021-04-30T15:18:11</pubDate>
<enclosure type="text/html" url="http://troglodyne.net/posts/70da5f16-13de-11ec-84d9-cb4bb82b7529" />
</item>
<item>
<title>Getting &#x26; Staying productive</title>
<link>http://troglodyne.net/posts/1619795891</link>
<description><![CDATA[One of the things that comes up repeatedly in your career is whether
    your edge is sharpening or dulling.&nbsp; It is very easy to get
    into a pattern when you are at work and not have to change your
    approach, especially if you are performing at or near the top of the
    pack.&nbsp; You can always find a way to improve performance though,
    and a lot of times it's "I should (and do) know better, but haven't
    applied the knowledge yet".<br>
    <br>
    Ultimately the problem is called <a moz-do-not-send="true"
      href="https://en.wikipedia.org/wiki/Metaheuristic">Metaheuristics</a>.
    Viewed in aggregate, the learning behaviors of programmers is a sort
    of <a moz-do-not-send="true"
      href="https://en.wikipedia.org/wiki/Memetic_algorithm">Memetic
      Algorithm</a>.&nbsp; This must also be balanced against the
    constraints of the current economy.&nbsp; Namely that for many
    problems, throwing hardware at the problem is cheaper than throwing
    money at programmers to fix the problem with existing hardware. This
    means that you have to converge on "good enough" and "worse is
    better", and tools/methods that don't fight this.&nbsp; This can be
    hard to do emotionally for engineers, as we all want to build great
    works.<br>
    <br>
    What seems to work best for me these days is <a
      moz-do-not-send="true"
      href="https://troglodyne.net/posts/1618336942">writing essays</a>
    about systems I'm considering designing, and revising it as I go to
    make sure the narrative remains consistent.&nbsp; I feel this
    actually captures the idea of "user story" a lot better than the
    trite one-liners which are actually user acceptance criteria.&nbsp;
    Storytelling is how our brains actually work, and initially the
    story is hopes and predictions (much like the program going with it)
    eventually annealed down to reflect reality.&nbsp; It doesn't hurt
    that this builds documentation and test cases as part of the
    process.<br>
    <h3>Crush everything getting in the way of work</h3>
    The first thing I had to master as a programmer was how to build an
    environment which prevents or mitigates the costs of interruptions
    to <a moz-do-not-send="true"
      href="https://en.wikipedia.org/wiki/Flow_(psychology)">flow state</a>.
    Much of this involved learning interfaces and editors such that I
    could largely do my job without expensive context switches, like
    having to touch a mouse.&nbsp; The two best means I've found to do
    this are Tmux + Vim + guake-ish terminal emulators and VSCode +
    virtual desktops with most the IDE features like suggestions turned
    off.<br>
    <br>
    There are 4 primary features here:<br>
    <ul>
      <li>100% keyboard controlled navigation and context switches</li>
      <li>Good syntax hinting</li>
      <li>Remembering state between sessions</li>
      <li>Full-screened everything, focus on only one thing at a time</li>
    </ul>
    <p>I have to have a solution for every major OS, as this is a
      necessity for testing software properly.<br>
    </p>
    <p>On Linux I can pretty much have everything I need on one to N+1
      virtual desktops, where N is the number of browsers I need to
      support, plus one window for doing documentation lookups (usually
      on a second monitor).&nbsp; I do most of my development on linux
      for precisely these reasons.<br>
    </p>
    <p>This mostly works the same on OSX, however they break immersion
      badly for people like me by having:<br>
    </p>
    <ul>
      <li>different and non-configurable keyboard shortcuts</li>
      <li>window decorations in nonstandard locations</li>
      <li>virtual desktops no longer have consistent ordering between
        sessions after 10.6.</li>
    </ul>
    <p>They seemed to have optimized for the user which Alt+Tabs between
      700 open windows in one workspace, which is a good way to break
      flow with too much clutter.<br>
    </p>
    <p>On windows VSCode has a good shortcut to summon the console, and
      a vim plugin that works great.&nbsp; Windows virtual desktops also
      work correctly, and I can configure shortcuts on linux to match
      both it and the console summon.&nbsp; I would prefer it be the
      other way around, but commercial OS interface programmers tend to
      either be on a power trip or too afraid of edge cases to allow
      user choice.&nbsp; If I could have a tmux-like shortcut to page
      between vscode workspaces like I do panes I'd be a happier camper,
      as I wouldn't need as many virtual desktops.&nbsp; This is
      apparently their most <a moz-do-not-send="true"
        href="https://github.com/Microsoft/vscode/issues/10121">popular
        feature request</a> right now, go figure.<br>
    </p>
    <h3>_ is other people<br>
    </h3>
    <p>Beyond the little hacks you do to increase flow, mitigating the
      impact of interruptions is important.&nbsp; This is a bit more
      difficult as much of this is social hacking, and understanding
      human nature.&nbsp; The spread of computing into the general
      population has also complicated this as the communication style of
      the old order of programmers and engineers is radically different
      from the communication norms of greater society.&nbsp; I, along
      with much of the rest of my peers, are still having a difficult
      time adjusting to this.<br>
    </p>
    <p>The preferred means of <a moz-do-not-send="true"
        href="http://www.catb.org/~esr/faqs/smart-questions.html">communication
        for engineers</a> is information-primary rather than
      emotion-primary.&nbsp; The goal of communication is to convey
      information more than feeling (if that is communicated at
      all).&nbsp; The majority of society does not communicate in this
      fashion.&nbsp; Instead they communicate Feelings above all else
      and Information is of secondary (if any) importance.&nbsp; For
      these people, their resorting to communication of <i>information</i>
      is a sign of <i>extreme frustration </i>that you have not yet
      discerned their emotional message and provided the validation they
      are seeking.&nbsp; If they haven't already <a
        moz-do-not-send="true"
        href="http://www.catb.org/~esr/faqs/smart-questions.html#not_losing">lashed
        out</a>, they are likely on the way to doing so.<br>
    </p>
    <p>It is unfortunate to deal with people operating via a juvenile
      and emotional communication style, but this is the norm in society
      and over the last 20 years has entirely displaced the existing
      engineering culture at every firm I've worked at.&nbsp; Code
      reviews can no longer be <a moz-do-not-send="true"
        href="http://www.mit.edu/~jcb/tact.html">blunt</a>, as it is
      unlikely you are dealing with someone who is not seeking
      validation as part of their communication packets.&nbsp; The punky
      elements of culture which used to build friendship now build
      enmity (as you are dealing with the very "squares" nerd culture
      embraced being hated by).&nbsp; Nevertheless, you still have to
      walk in both worlds as there are still islands of other hackers
      just like you.&nbsp; Taking on and off these masks is risky,
      however, as people are quite hung up on the notion that people
      must be 100% congruent with how they are perceived outwardly.<br>
    </p>
    <p>Everyone out there building an online reputation learns quickly
      that courting controversy will get you far more engagement than if
      you had made a program which cured eczema and allowed sustained
      nuclear fusion. Emotional highs punctuated by warm fuzzies is
      generally the sort of rollercoaster ride people are looking
      for.&nbsp; Lacking better sources they will attempt to draw you
      into their emotional world.&nbsp; Their world is a skinner box,
      and if you enter it unawares they will <i>train you</i>.<br>
    </p>
    <p>They cannot help but be this way, so you must turn off the part
      of your brain that looks for informational meaning in mouth
      noises.&nbsp; Their utterances have little more significance than
      the cries of a baby or yapping of a dog.&nbsp; The only thing that
      matters is whether the behavior is something you wish to encourage
      or discourage.<br>
    </p>
    <p>Operant conditioning is how you must regard your
      interactions.&nbsp; When you validate them (usually with
      attention), you encourage that behavior.&nbsp; Non-acknowledgement
      of irritating behavior is often the most effective
      discouragement.&nbsp; The natural urge to engage with any point of
      fact must be resisted, and instead reserve your communications to
      that which advances your purposes.&nbsp; When a minimum of
      validation is <i>demanded</i>, dismissal via fogging, playing
      dumb or broken-record technique should be engaged in, rather than
      the hard no which is deserved.&nbsp; A satisfying response to a
      demand can never be offered unless you wish to be dominated by
      those around you.&nbsp; Many see this as Machiavellian
      manipulation, but there is no choice.&nbsp; You play this game, or
      get played.<br>
    </p>
    <p>Nevertheless, this all has a huge effect on the corporate
      environment.&nbsp; Most firms devote far more energy to playing
      house than pleasing customers and making money, and tech is no
      exception.&nbsp; Fellow employees are far more likely to seek
      validation on this schedule with <i>each other</i> than
      customers.&nbsp; Most satisfy themselves with a stable IV drip of
      validation from their local group rather than experiencing the
      much more rewarding experience of solving customer problems.&nbsp;
      This should come as no shock, given social media is purpose built
      to inculcate this mental model, as it was found to maximize
      engagement.&nbsp; This is also good at building solidarity at a
      firm but unfortunately comes at the expense of crowding-out
      emotional investment in the customer who cannot and should not
      have so tight an OODA loop with their vendors.<br>
    </p>]]></description>
<author>george</author>
<guid isPermaLink="true">http://troglodyne.net/posts/1619795891</guid>
<pubDate>2021-04-30T15:18:11</pubDate>
<enclosure type="text/html" url="http://troglodyne.net/posts/1619795891" />
</item>
</channel>
</rss>
