Merge branch 'release/0.3.0'
[themediocreprogrammer.git] / chapter04.md
1 # The inns we stayed at
2
3 ## Fellow travelers
4
5 Whenever we think of programmers we think of a person working in solitude entering code into a computer. Usually that programmer is alone, although 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 to be in the company of yourself for most of the day. Granted this may be a good feeling (there are times when I really enjoy being by myself at the computer) but there are other times when we need to feel like we're not alone in this. This is especially true when we're learning and pushing ourselves into uncomfortable territory. Finding others who are in a similar situation can help us with our learning process by fielding questions and reviewing our progress. Finding a good community that is supportive of our learning is vital to our programming journey. When we have a good community we have somewhere that we can learn and help others learn. We can grow in the community  and find friendship.
6
7 A good community is one that strengthens us and the ones around us. It nurtures us and provides some shelter. It is a safe place where we don't have to constantly keep our guard up from attacks on ourselves and others. It holds people we can trust and feel that trust is reciprocated without fear of betrayal.
8
9 ## Finding a good community
10
11 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?
12
13 That's a tricky question.
14
15 Most programming languages have some form of community around them. Some have mailing lists or other communication channels that you can check out. Unfortunately most popular languages have spaces that are next to impossible to follow, especially when you're trying to learn. I know I have had instances where I've joined the main channel for a popular language only to be overrun with multiple conversations happening at once. 
16
17 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.
18
19 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 a branch of an existing group. My friend Rick started a branch of a group called Coffee House Coders where coders meet once a week for a few hours to sit and code. We've met some amazing folks along the way. Starting a group is an act of courage and there have been many times where it's just myself sitting in a coffee shop. That's fine. People get busy and interests fade over time. What is important is creating the space for others to feel welcome. And for us that meant finding a local coffee shop with later hours and ample space for setting down a laptop.
20
21 There are many ways to be creative with this as well. The advent of many different 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.
22
23 ## The difficulty in finding a good community
24
25 I recognize that not everyone can do this. Online spaces have a reputation of not being a welcoming place for folks, and in-person group meetings can use up whatever mental resources you have. It took me a long time to get up the courage to go to my first in-person meetings as I'd had a bad experience with someone who I thought was at these meetings. But I'm grateful that I did get the courage to attend my first meetings. These lead me to friendships and other "traveling companions" to help me along the way. It lead to switching to one of my favorite programming languages (Python) and a feeling of belonging. It also lead to other work as folks got to know me.
26
27 But betting over the initial hurdle is hard. Our fear of rejection or of making ourselves vulnerable to strangers takes a lot of mental energy and can sap us of the joy of wanting to be a part of this.
28
29 Online communities can be a great way to find others. They gather folks from locations other than our own and bring them to a common area. Part of the reason I made my jump into meeting folks in person was because of good experiences on IRC. I started enjoying the company of these folks and felt comfortable meeting them in person.
30
31 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 or of hurting? Do they have members who nurture their fellow members or are they cutting each other down?
32
33 I'm not aware of a good strategy for determining if a community is going to be helpful or hurtful. It takes some effort to put ourselves out and be vulnerable for a bit 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.
34
35 ## Things to look for in a good community
36
37 There are a list of things that I would look for in a community. This is not a definitive list of everything that makes up a good community but it will give some guidelines for what I think is important:
38
39 * Code of conduct: There needs to be some list of things that the community will accept, tolerate, and abhor. It should be visible to all members of the community. It must also be enforced. If you note discussions where the code of conduct is selectively enforced you should be wary of that community.
40 * Moderators: There needs to be someone in the community that can diffuse situations and meter out meaningful punishments if folks get out of hand. They should demonstrate that they are following a visible code of conduct by their actions.
41 * Spaces for questions and guidelines for good questions: There should be a place for folks to be safe in asking questions of the members of the community. People should feel safe in asking questions, and the community needs to be clear on what considers a good question. Is the space OK for beginner questions? If not, can 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?
42 * Joy: Do the people in the community seem pleased to discuss things? What's the tone of the conversations? Are folks being positive with each other or are they resorting to insults and name-calling? Are questions welcomed or are they discouraged or ignored?
43 * Compassion and empathy: Does the community allow for people to make mistakes? When something goes wrong does the community try to help as best it can?
44 * 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?
45
46 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).