# The inns we stayed at

## Fellow travelers

Whenever we think of programmers we tend to think of someone sitting in front of a computer entering code; the glow of the monitor reflecting off of their face. Usually the programmer is alone (though there are methodologies that utilize more than one programmer at a time, "pair-programming" for instance). During those coding sessions there isn't a lot of contact with other programmers and it can feel isolating being in the company of yourself. Granted this can be a good feeling (there are times when I really enjoy being alone at the computer, fully engaged and focused), but there are other times when we need to feel like we're not alone. This is especially true when we're learning and pushing ourselves into uncomfortable territory. Finding others in similar situations can help us with our learning process. Others can help us by fielding our questions and reviewing our progress. Finding a good community that is supportive in our learning is essential on our programming journey. When we have a good community we have a place where we can learn and help others learn. We can grow in the community and find support.

A good community is one that strengthens us and those around us. It nurtures us and provides us shelter. It is a safe place where we don't have to keep our guard up from attacks on ourselves and others. It holds people accountable to each other. We can trust the members of the community and feel that trust is reciprocated. Good communities exist without competition and ego, where members can express themselves openly and accept others as they are.

## Finding a good community

There are a lot of good communities out there that are willing to help you become a better programmer, but how do you find them?

That's a tricky question.

Most programming languages have some form of community centered around them. Some have mailing lists or other communication channels that you can join and participate in. Unfortunately, most popular languages have spaces that are difficult to follow, especially when you're trying to learn. I know I have joined the main channel for a popular language only to be overrun with multiple conversations happening at once. Mailing lists designed to support beginners can have major amounts of traffic, and that traffic can be overwhelming when you're trying to understand the basics of the language while trying to keep up with the deluge of mail in your inbox. Reading the archives of the mailing list or chat can help determine if you're ready for that level of traffic and if the conversations on the list are the types of conversations you enjoy. Remember: this is to help you along your journey. Throwing yourself into a crowded room only to be inundated by the amount of conversations and cacophony will only make you feel more isolated and unwelcome.

Some programming languages have local user groups. Those can seem intimidating at first, especially if the group has been around for a long while. I know I was intimidated before I went to my first user group for fear of what I might find inside. What I found was a group of folks who were interested in the topics that I was interested in. I've made lasting friendships through users groups and I encourage you to see if they might work for you.

If you're at a loss for finding the right group (perhaps you're in an area where you feel you're the only person who shares your interests) you might consider starting your own or branch off of an existing group. My friend Rick and I started a local branch of a group called Coffee House Coders where coders meet once a week for a few hours to sit and code. All we did was post the times and places that we were meeting and told folks to just show up with a laptop to code. We've met some amazing folks along the way, and we've kept the group going for many years. Starting a group is an act of courage. There have been many evenings where I've sat alone in a coffee shop waiting to see if others would show up. That's fine. People get busy and interests fade over time. What is important is creating the space for ourselves and others to feel welcome. For us that meant finding a local coffee shop that was open late at night and had ample space for setting down a laptop. It also helps to find a place that has electrical power so folks can charge their batteries if necessary.

There are many ways to be creative with starting a community. The advent of online tools allows you to build communities with folks across the globe. Bringing these folks together to talk and discuss ideas and offer help is amazing when it happens. Sometimes it can be as simple as creating a chat room around a common interest. Explore what's out there, and if it doesn't meet your needs feel free to create your own.

## The difficulty in finding a good community

I recognize that not everyone can join or build a community. Online spaces have a reputation for not being welcoming places for folks, and in-person group meetings can use up whatever mental resources you have. It took me a long time to find the courage to go to my first in-person meeting as I'd had a bad experience with someone I worked with that I thought would be at these meetings. (I'm not sure if that person ever went to those meetings). But I'm grateful that I did eventually attend my first meetings. Attending these meetings led me to friendships, opportunities, and other "traveling companions" for my journey. It led me to switch to one of my favorite programming languages (Python) and led me to several jobs. It also helped me to feel like I wasn't alone with my interests and introduced me to others I could rely on. It gave me a feeling of belonging.

Getting over the initial hurdle is hard. Our fear of rejection and our fear of making ourselves vulnerable to strangers can wear us down. Overcoming that fear takes a lot of our mental energy and can sap us of the desire to be part of yet-another-community. I can't say that it will be easy, but I can point to some of the benefits it had in my life. I hope you can find those benefits as well.

 An alternative to in-person communities are online communities. Online communities can be a great way to find others. They gather folks from many different locations and bring them to a common area. Part of the reason I made my jump into meeting folks in person was because of the good experiences I had with these folks on IRC (Internet Relay Chat). I enjoyed the company of these folks through our online interactions and felt comfortable meeting them in person.

The low barrier to entry for many online communities can allow us to see what the community is about. What are their priorities? Are they kind to folks who are starting out? Do they have a pattern of helping folks like us or do they tend to hurt folks like us? Do they have members who nurture their fellow members or are they cutting each other down?

I'm not aware of a good strategy for determining if a community is helpful or hurtful. It takes some effort to follow a community and get a sense of who they are. It is emotionally draining to put ourselves in situations where we are vulnerable in order to see if others will be gentle with us. Communities are made up of people and people are fickle and irrational creatures. What might be an amazing community for one person may be a toxic environment for another. While I don't have a strategy I do have some ideas on key elements that make up a community.

## Things to look for in a good community

There are a number of things that I would look for in a community. While this is not a definitive list of everything that makes up a good community it lists some guidelines for what I think is important:

* **Code of conduct**: Good communities have guidelines for things that the community will accept, tolerate, and abhor. It should be visible to all members of the community, and each member of the community must be accountable to those guidelines. It must also be enforced. If you note situations where the code of conduct is selectively enforced against certain members you should be wary of staying within that community. 
* **Moderators**: There needs to be someone (or a group) in the community that can diffuse situations and meter out meaningful punishments when folks get out of hand. Moderators should be even-handed and as consistent as possible with their decisions. They should demonstrate that they are also following the same code of conduct by their actions in the community. A good moderator should be visible but not overbearing. You should feel welcomed by the presence of a moderator and feel free to engage the moderators if you have questions about the community.
* **Spaces for questions and guidelines for good questions**: There should be a place for folks to ask questions related to the topic of the community. People should feel safe in asking on-topic questions, and the community needs to be clear on what it considers an on-topic or good question. Is the space OK for beginner questions? If not, could such a space be made? What sorts of questions would the community be happy to answer and what sorts of questions would upset the community? These need to be clearly defined so beginners can have a sense of what the community will welcome and what it will not tolerate.
* **Joy**: Do the people in the community seem pleased to discuss things? What is the tone of the conversations? Are folks interacting in a positive way with each other or are they resorting to insults and name-calling? Are questions welcomed or are they discouraged or ignored? If there's no joy in being in the community then the likelihood of folks sticking with it will be lowered.
* **Compassion and empathy**: Does the community allow for people to make mistakes? When something goes wrong does the community try to help? Does the community remember what it was like to be beginners and act with compassion, or do they expect everyone to have more experience before participating?
* **Kindness**: This is the most important factor --- does the community behave in a kind manner to others or do they split off into factions and try to cut each other down. Do they view new folks as friends or as outsiders that must prove themselves? This relates to compassion and empathy above, but we tend to see acts of kindness before we see compassion and empathy. Kindness manifests itself when community members are OK with folks not getting everything right away and act with gentleness rather than taking a stern approach. They let folks know that they too have had trouble and suggest ways to work together to smooth things out for the next folks who might experience this same trouble. They act in a way that does not put their ego first, and instead behave as though they have been given a gift that is best shared with others. 

We'll talk more about kindness in upcoming chapters.

These are just a sample of what I find in good communities. Feel free to add to this list as your experience grows and let me know so I can update this list for future readers.
