In this information age, driven largely by social media and online interactions it is common for people to self identify as anti-social, but I think this is a bit of a misnomer. Our involvement with communities is changing and the definition of what it social should be evolving with the available interactions. Humans are social creatures and we have characteristics that can only be realized in some type of a social environment. Not only that, but research actually shows that depression and drug use occur less often in people that take part in activities with other people.
I've found some really great (and really terrible) communities online. These were across Reddit, Facebook, Discord, Slack/IRC, and the really good communities operate with the same standards that an in person community would operate. The two most prevalent set of rules that I've come across are Reddit's rules of reddiquette and Python's Community Code of Conduct (COC).
I'll list the Python COC as it is more succinct than Reddit's.
- Being open. Members of the community are open to collaboration, whether it's on PEPs, patches, problems, or otherwise.
- Focusing on what is best for the community. We're respectful of the processes set forth in the community, and we work within them.
- Acknowledging time and effort. We're respectful of the volunteer efforts that permeate the Python community. We're thoughtful when addressing the efforts of others, keeping in mind that often times the labor was completed simply for the good of the community.
- Being respectful of differing viewpoints and experiences. We're receptive to constructive comments and criticism, as the experiences and skill sets of other members contribute to the whole of our efforts.
- Showing empathy towards other community members. We're attentive in our communications, whether in person or online, and we're tactful when approaching differing views.
- Being considerate. Members of the community are considerate of their peers -- other Python users.
- Being respectful. We're respectful of others, their positions, their skills, their commitments, and their efforts.
- Gracefully accepting constructive criticism. When we disagree, we are courteous in raising our issues.
- Using welcoming and inclusive language. We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate and everyone can make a difference.
These are all things that mirror what we do in real life (IRL) communities, and are pretty easy to follow for most people; however, these rules have come about in response to a real issue that happens when you allow people to interact while being anonymous. Trolls are a real problem with any community. It just so happens that IRL people come to know you by face and reputation and you are either disallowed from joining events or people avoid you.
Like anything else, we get better at membership to a community by practice. Taking part in the conversation with people and working together is necessary to contribute to any social group, and for the most part software development is always done with a team. We each need to focus on communication and the good of the group in order to achieve anything in a timely manner. We need the ability to both learn and teach within the group. This requires that we communicate effectively, making sure to listen intently and ask questions to understand what everyone is intending to say. It's really easy for us to get caught in a way of thinking that imparts rightness to someone while conversations are typically more fruitful when nobody is trying to win, instead speaking with humility. Many times we need to consider complex strengths and weaknesses. Through this process we hone our vocabulary and the definitions that we have for things so that they more closely align with our team and our industry as a whole when applicable. I believe that as a professional community we should have a value system whereby we value people by the content of their character and their ability to contribute to the community regardless of the role that they play. We should be able to easily model societal ideals of acceptance of our peers regardless of any labels or belonging to any particular group.
- make friends
- learn about companies in your area that hire programmers
- understand company processes that aren't your own
- learn about strengths and weaknesses of tools and languages
I try to open my network up to many different communities. Twitter is a great place to find lots of development interaction. I also find Dev.to to be really great. I've found a couple of Discord and Slack servers with good community where I can both learn and teach. I think that this is really important for our understanding of things. Someone smarter than me once said that if you can't explain something to a five year old then you don't understand it. In programming I'd rephrase it that if you can't explain it to a fresh junior dev then you don't understand it. Learning, as I understand it, has three phases. First we acquire information, then we process it, and finally we share it. If you aren't a part of some community (at work or otherwise) then it is really difficult to complete this process and finally commit the ideas into long term memory.
One of the Slack servers that I'm on posts questions every M-F morning for engagement. Sometimes it is general advice for less experienced people, other times it is just an explanation of what you are doing or have accomplished this week. I at least read the question every morning when the notification pops up on my phone. I don't clear that notification until I either have commented or I decide that I don't have anything to comment. Engaging in the community is easily forgotten when you get busy at work, but it is that community that will help you to grow the most.