Taking about community
[themediocreprogrammer.git] / chapter04.md
1 # The inns we stayed at
2
3 ## Fellow travelers
4
5 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 in programming. 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 somewhere that we can learn and help others learn. We can grow in the community and find support.
6
7 A good community is one that strengthens us and the ones 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.
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 sign up 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 had instances where I've 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 a lot of traffic and it can overwhelm you when you're trying to get the basics of the language while trying to keep up with the deluge of mail in your inbox. It might help to look at the archives of mailing lists or chat logs to see what the level of participation is in that forum to see if it's something you want to participate in. Remember: this is to help you along your journey. Throwing yourself into a crowded room only to be inundated by the amount of conversations going on in that room will only make you feel more isolated and unwelcome.
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 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 would do is just post the times that we were meeting and 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 and there have been many times 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. And for us that meant finding a local coffee shop that was open late into the night and ample space for setting down a laptop. (It also helps to have a place that has electrical power so folks can charge their batteries).
20
21 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.
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 find the courage to go to my first in-person meetings 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 it to those meetings). But I'm grateful that I did eventually attend my first meetings. Attending these meetings lead me to friendships, opportunities, and other "traveling companions" for our journey. It lead me to switch to one of my favorite programming languages (Python) and several of the jobs in my career. It also helped me to feel like I wasn't alone with my interests and had others I could rely on. It gave me a feeling of belonging.
26
27 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 take 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.
28
29 Another 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. I enjoyed the company of these folks I met online and felt comfortable meeting them in person.
30
31
32 #### FIXME
33
34 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?
35
36 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.
37
38 ## Things to look for in a good community
39
40 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:
41
42 * 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.
43 * 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.
44 * 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?
45 * 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?
46 * 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?
47 * 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?
48
49 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).