<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://beandrake.com/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://beandrake.com/blog/" rel="alternate" type="text/html" /><updated>2026-09-11T21:23:19+00:00</updated><id>https://beandrake.com/blog/feed.xml</id><title type="html">Notes from the Journey</title><subtitle>Human thoughts from posthuman times</subtitle><author><name>Branden Bean Drake</name></author><entry><title type="html">Who Can Contribute to Open Source?</title><link href="https://beandrake.com/blog/who-can-contribute-to-open-source/" rel="alternate" type="text/html" title="Who Can Contribute to Open Source?" /><published>2026-09-03T00:00:00+00:00</published><updated>2026-09-03T00:00:00+00:00</updated><id>https://beandrake.com/blog/who-can-contribute-to-open-source</id><content type="html" xml:base="https://beandrake.com/blog/who-can-contribute-to-open-source/"><![CDATA[<p>If you want to contribute to a software project, you need to join the team that manages that project. Or at least, that’s the impression I was under for a long time. It turns out that’s not always the case.</p>

<p>In reflection, I can see why I thought this. Whenever I had worked on a coding project with a group, whether in an academic setting or a professional one, access to the group’s code had always been restricted to those within the group. The group set up a code repository for the project, and only members of the group were given access to it.</p>

<p>I had heard that open source projects did things a bit differently. Instead of keeping their code private, open source teams published their code online. This meant the public had read access, enabling anyone to generate a copy of that code and use it to make their own software.</p>

<p>But for a long time, I never heard anything about the other major difference that many open source projects share: <em>anyone can contribute to them</em>. While every open source project works differently, there are many projects where you don’t need to be a member of the project group to contribute code. Here’s a brief overview of how the process works:</p>

<ol>
  <li>You create a <a href="https://docs.github.com/en/pull-requests/get-started/about-forks">fork</a>, which is a copy of the open source project you’re interested in.</li>
  <li>You make your code changes in the fork.</li>
  <li>You make a <a href="https://docs.github.com/en/pull-requests/reference/pull-requests">pull request</a>, which asks the open source project to merge your code into theirs.</li>
  <li>The project owner(s) vet your changes.</li>
  <li>If the owner(s) approve your changes, your code gets merged into the official project.</li>
</ol>

<p>In this way, <em>anyone</em> can contribute to open source. Even if you don’t have the time to make an ongoing commitment to a project, you can still get involved by fixing just one bug. Even if you’re a beginner at coding, you can still help out with less technical tasks, such as improving documentation. And by getting involved in these ways, you’ll be gaining experience with both the social and technical aspects of contributing to software projects.</p>

<p>If you’re interested in giving open source a try but don’t know where to start, I recommend Roshan Jossy’s <a href="https://github.com/firstcontributions/first-contributions">First Contributions</a>. It provides a streamlined, step-by-step tutorial that will walk you through the process of creating a fork, making a change, and submitting a pull request. I’ve also found GitHub’s <a href="https://opensource.guide/how-to-contribute/">How to Contribute to Open Source</a> article to be a helpful resource.</p>

<p>Despite the fact that I haven’t been involved with open source for very long, I’ve already learned so much thanks to it, and I’m excited to think about how much more I’ll be able to learn and accomplish in collaboration with the open source community.</p>]]></content><author><name>Branden Bean Drake</name></author><category term="open source" /><category term="software development" /><category term="GitHub" /><summary type="html"><![CDATA[If you want to contribute to a software project, you need to join the team that manages that project. Or at least, that’s the impression I was under for a long time. It turns out that’s not always the case.]]></summary></entry><entry><title type="html">The Benefits of Pair Programming</title><link href="https://beandrake.com/blog/the-benefits-of-pair-programming/" rel="alternate" type="text/html" title="The Benefits of Pair Programming" /><published>2017-06-05T00:00:00+00:00</published><updated>2017-06-05T00:00:00+00:00</updated><id>https://beandrake.com/blog/the-benefits-of-pair-programming</id><content type="html" xml:base="https://beandrake.com/blog/the-benefits-of-pair-programming/"><![CDATA[<p>During my college internship, I was one of two programmers who worked on the proof of concept for a game called <a href="https://github.com/beandrake/Hug-The-Line"><em>Hug The Line</em></a>. We experimented a good deal to figure out which software development methodology would be the most effective for our specific project, and in the end we decided to use an agile methodology loosely based on <a href="https://en.wikipedia.org/wiki/Extreme_programming">Extreme Programming</a>.</p>

<p>One of the most interesting aspects of Extreme Programming we adopted was pair programming. This meant that almost all of our code was written as a team; while only one of us would typing at any given time, we were usually both engaged in dialogue about what to do next or how to do it.</p>

<p>To some this might seem like a waste of resources. Why use two programmers to accomplish a single task? Couldn’t they get twice as much done separately? In theory that’s certainly possible, but based on my experience I think that pair programming offers some key advantages.</p>

<p><img src="/blog/assets/images/Swiss_cheese_model.png" alt="Three parallel slices of cheese with different holes, with lines passing through holes in the cheese or being blocked where there is no hole." class="align-center" /></p>

<p>To understand why, let’s look at the <a href="https://en.wikipedia.org/wiki/Swiss_cheese_model">Swiss Cheese Model of Accident Causation</a>. This model conceptualizes systems as multiple slices of Swiss cheese, where each hole is a possible point of failure; if a single linear hazard can pass through every layer without being blocked, an incident occurs. By aligning multiple systems with differing points of failure, the likelihood of a failure falling through the entire stack of cheese is reduced.</p>

<p>Leveraging this model, we can think of every programmer as a slice of cheese. Because we are human and capable of making mistakes, each slice will have holes. And by collaborating with a different slice of cheese, we can mitigate the possibility of errors. If I make a mistake, my programming partner has a good chance of catching it. These mistakes can range from the simple (using the wrong variable in an equation) to the major (programming unnecessary systems due to a misunderstanding). While these errors could certainly be discovered during code reviews, why wait that long? Pair programming nips these issues in the bud, minimizing the time spent exacerbating problems and subsequently correcting them.</p>

<p>And this same phenomenon also applies to problem solving. Having two programmers focused on the same challenges frequently resulted in better solutions because each of us would have different ideas about the best way to solve problems, and generally one person’s idea was better. The more complex or high level the process, the more likely that we would disagree, at which point we would have brief, productive arguments to determine how best to proceed.</p>

<p>These arguments were always incredibly fruitful. I would even go so far as to say that having respectful arguments feels like an integral part of pair programming. But how do you keep things constructive as opposed to antagonistic? Looking back, I think there are a few reasons why our arguments were always so productive:</p>

<ol>
  <li>
    <p><strong>We both genuinely respected and cared for each other.</strong></p>

    <p>Making a point was never more important than the other person’s feelings; kindness and tact were always maintained.</p>
  </li>
  <li>
    <p><strong>We were both of similar skill levels.</strong></p>

    <p>Because of this, neither of us was inclined to defer to the other’s judgment due to seniority. Similarly, neither of us was ever tempted to think that our experience made our own judgment superior.</p>
  </li>
  <li>
    <p><strong>Our goal was always to find the best solution, never to “win” the argument.</strong></p>

    <p>If someone wins, someone else loses; this dynamic has no place on a collaborative team. Both of us wanted not only what was best for the project, but what was best for each other. Often neither of us started the argument with the best solution; rather, we would discover it together over the course of our debate.</p>
  </li>
  <li>
    <p><strong>We listened as much as we talked.</strong></p>

    <p>It’s really a corollary of the above, but if you’re not truly listening to someone else’s ideas, you rob yourself of the opportunity to learn anything. No matter how right I thought I was, when my partner talked, I <em>wanted</em> her to convince me — and she often did.</p>
  </li>
  <li>
    <p><strong>We both had very different perspectives.</strong></p>

    <p>This is where I think the core value of arguments — and pair programming — comes from. The more identical your cheese slices, the more redundant they are. Both of us had wildly different backgrounds and perspectives, resulting in a great deal of accident coverage as well as a wider breadth of creative solutions.</p>
  </li>
</ol>

<p>Pair programming worked great for us on <em>Hug The Line</em>. If the chance ever presents itself, I’d love to do it again.</p>]]></content><author><name>Branden Bean Drake</name></author><category term="programming" /><category term="software development" /><category term="collaboration" /><summary type="html"><![CDATA[During my college internship, I was one of two programmers who worked on the proof of concept for a game called Hug The Line. We experimented a good deal to figure out which software development methodology would be the most effective for our specific project, and in the end we decided to use an agile methodology loosely based on Extreme Programming.]]></summary></entry></feed>