Introduction
Overview
Teaching: 2 min
Exercises: 0 minQuestions
What makes for an effective development community that is also enjoyable to work in?
Objectives
Understand how this module fits in with other, more technically oriented modules in contributing to building an effective collaborative community.
Some points here about the other modules
Blah blah blah
Key Points
Building an effective collaborative community involves Social, Socio-technical and Technical aspects.
Other modules cover some of the technical aspects, such as Project Management, collaborative use of Git and GitHub, Code Reviews and Pair Programming.
Benefits
Overview
Teaching: 3 min
Exercises: 0 minQuestions
Why work collaboratively?
Objectives
Understand the benefits of building a collaborative community
Most real-world projects involve teams
- Too big to do alone ### Produce working code more quickly ### Better designs
- Consider more options ### Can be more enjoyable
Key Points
Most projects involve working together.
Most people produce better code and enjoy work more when they work with others.
Challenges
Overview
Teaching: 3 min
Exercises: 0 minQuestions
What are some challenges of working collaboratively?
Objectives
Understand challenges of working collaboratively
Logistics
- Location
- Time zone
Decision-making
- Standard practices
- Designs
Communication and coordination
- Who works on what
- Status
Egos (personal factors)
- The benefits of collaborative construction are greatly affected by the egos, or humility, of the participants
- The Egoless Programmer
“…most of programming is an attempt to compensate for the strictly limited size of our skulls. The people who are best at programming are the people who realize how small their brains are. They are humble. The people who are worst at programming are the people who refuse to accept the fact that their brains aren’t equal to the task. Their egos keep them from being great programmers. The more you learn to compensate for your small brain\, the better a programmer you’ll be. The more humble you are, the faster you’ll improve.” (Code Complete 2ed. pg. 821, summarizing a 1972 Turing Award lecture by Edsger Dijkstra)
Strive to become an egoless programmer
Key Points
Logistics, decision-making and communication all can negatively impact your ability to work effectively
Egos can be a significant problem. Strive to be an egoless programmer.
Social Aspects
Overview
Teaching: 3 min
Exercises: 0 minQuestions
What are important social aspects of building a collaborative community?
Objectives
Be aware of social aspects of building a community
Be able to apply these aspects to building your own collaborative community
Inclusivity
Codes of conduct and their enforcement
Attitude: “Our” vs. “My” software
Engaging with new contributors
Group practices
- Leadership
- Decision-making style
- Egalitarian vs. acknowledged leader
- How much autonomy does an individual developer have?
- Time commitments to the project
Key Points
Social aspects of collaboration such as inclusivity, conduct and attitudes contribute significantly to how effective and enjoyable work will be.
Socio Technical Aspects
Overview
Teaching: 3 min
Exercises: 0 minQuestions
What are important socio-technical aspects of building a collaborative community?
Objectives
Be aware of socio-technical aspects of community building
Be able to apply these aspects when building your own community
Remote Collaborations
- Meeting scheduling
- Need for more explicit communication
- Feeling “part of the team”
- Getting to know each other ### Modes of communication
- Common terminology
- Helping people at remote sites ### Understanding team expertise
- Science
- Data
- Visualization
- Computer system and language
Key Points