Google I/O 2009 - The Myth of the Genius Programmer

Google I/O 2009 - The Myth of the Genius Programmer

Introduction and Introductions

In this section, the speakers introduce themselves and their background in Version Control. They also ask the audience some questions to gauge their coding experience.

Introductions

  • Brian Fitzpatrick and Ben Collins-Sussman introduce themselves as long-time Version Control geeks.
  • They mention their experience in the Open Source world, particularly with Google Code.
  • The audience is encouraged to attend a talk on Mercurial implementation on Google Code.

Audience Questions

  • The speakers ask how many people write code entirely by themselves and how many work in teams.
  • They also inquire about the audience's involvement in code reviews.
  • Lastly, they ask who is afraid of looking stupid in front of others.

The Myth of the 'Genius Programmer'

This section explores the concept of insecurity among programmers and its connection to the myth of the genius programmer. The speakers discuss psychological factors that contribute to this phenomenon.

Insecurity and Celebrity Endorsements

  • The speakers present quotes that reflect feelings of insecurity among programmers.
  • "I'm not a real programmer."
  • "I don't want anyone else to see my code."
  • "I'm afraid of looking stupid."
  • They draw parallels between buying products endorsed by celebrities and idolizing famous programmers.
  • People tend to associate certain behaviors or materialistic items with their programming heroes.

Opinions and Subjective Experience

This section emphasizes that the talk is based on the speakers' subjective experience. They encourage different opinions but assert that these talks are meant to provoke thought.

Opinionated Talks

  • The speakers acknowledge that their talks are opinionated based on their own experiences.
  • They state that if their opinions upset or anger anyone, they have done their job.
  • They suggest that those with different opinions should present their own talks at their own conferences.

Audience Participation

The speakers engage the audience by asking them to read slides and quotes related to the topic of the myth of the genius programmer.

Reading Slides and Quotes

  • The audience is asked to read slides and quotes displayed on screen.
  • The purpose is to involve the audience in actively considering the content being presented.

Conclusion

The speakers conclude this section by summarizing the common feeling of insecurity among programmers and how it relates to the myth of the genius programmer. They introduce a quote about "pervasive elitism" as a result of wanting to appear smart.

Insecurity and Elitism

  • The speakers reiterate that many programmers want to appear smart.
  • They mention that feelings of insecurity can lead to a desire for elitism.
  • A quote about "pervasive elitism" is introduced, highlighting a general desire not to look stupid.

Psychological Factors

This section delves deeper into psychological factors behind insecurity among programmers, drawing parallels with celebrity endorsements and idolization.

Celebrity Endorsements and Programming Heroes

  • The speakers discuss how people are influenced by celebrity endorsements in purchasing decisions.
  • They draw parallels between this behavior and idolizing famous programmers like Linus Torvalds or Bill Gates.
  • Programming heroes are mentioned, such as Guido van Rossum, but it is noted that they may not deserve all credit for their respective projects.

Summary

This section concludes with a final quote about pervasive elitism. It emphasizes that these talks are based on subjective experiences and aim to provoke thought about programming culture.

Pervasive Elitism

  • The speakers introduce a quote about pervasive elitism, which stems from a desire not to look stupid.
  • They reiterate that the talks are based on subjective experiences and encourage different opinions.
  • The audience is invited to continue exploring the topic of the myth of the genius programmer.

The Myth of the Genius

This section discusses the myth of the genius who works in isolation and produces brilliant work. It highlights that geniuses are rare and that this myth is not how things actually work.

The Reality of Geniuses

  • Geniuses are incredibly rare, making the idea of a lone genius working in isolation unrealistic.
  • The desire to be seen as a genius by peers drives some individuals to work in seclusion.
  • Insecurity also plays a role, as people may want to hide their mistakes and failures from others.

Inhibiting Progress through Isolation

This section explains how working in isolation can hinder personal and project progress.

Low Bus Factor

  • Working in isolation reduces code quality and increases the risk of knowledge loss if key individuals leave or become unavailable (referred to as the bus factor).
  • Having multiple team members familiar with different parts of the codebase increases redundancy and mitigates risks associated with low bus factors.

Lack of Feedback and Learning Opportunities

  • Working alone limits opportunities for learning and improvement, as there is no immediate feedback from others.
  • This problem extends beyond computer science and affects various fields, including academia.

Overcoming Isolation for Better Results

This section emphasizes the importance of collaboration and sharing work early on for better outcomes.

Timely Collaboration

  • Sharing work early allows for feedback, collaboration, and catching potential issues sooner rather than later.
  • Interacting with others during development helps improve skills more rapidly.

Avoiding the Cave Mentality

  • The analogy of interacting with a compiler is used to illustrate the importance of not working in isolation and waiting until the end to share work.
  • Collaboration and sharing should be encouraged to foster a more productive and efficient development process.

Conclusion

This section concludes by highlighting the need to overcome isolation, collaborate, and share work early for better progress and outcomes.

Importance of Collaboration

  • Overcoming isolation is crucial for personal growth, project success, and avoiding knowledge gaps.
  • Collaboration allows for faster learning, improved code quality, and increased redundancy within teams.

Addressing Challenges

  • Recognizing insecurities about making mistakes publicly can help individuals overcome the fear of collaboration.
  • Encouraging a culture of openness and timely sharing can lead to more effective development processes.

The Importance of Collaboration and Communication in Software Development

In this section, the speakers discuss the significance of collaboration and communication in software development. They highlight the potential pitfalls of working alone and emphasize the benefits of sharing ideas and collaborating with others.

Collaborating to Avoid Redundancy and Improve Ideas

  • Working alone can lead to publishing redundant papers or focusing on the wrong thing without realizing it.
  • Collaboration allows for better papers by combining ideas and perspectives.
  • Getting feedback from others helps determine if you are on the right track.

The Need for Collaboration in Writing Software

  • Similar to academic research, writing software requires early feedback from others to ensure you are working on the right thing.
  • Collaboration helps identify flaws, refine ideas, and achieve consensus within a team.
  • Successful software development is inherently collaborative.

Overcoming the "Genius" Trap

  • Recognize that you are not unique; there are many talented individuals out there.
  • Working well with others is crucial for success, regardless of individual brilliance.
  • Building strong collaborations attracts like-minded individuals who contribute to project success.

Fostering a Collective Ego

  • Instead of having a large personal ego, focus on developing a strong collective ego around your project or software.
  • The Apache Software Foundation is an example where community is prioritized over individual code contributions.

Interacting with People: Giving and Receiving Feedback

  • Interactions should involve being a nice person and providing constructive criticism.
  • Learning how to give feedback effectively is a valuable skill in collaborative environments.
  • Being open to receiving criticism helps improve both personal growth and project quality.

Cultural Challenges in Some Companies

  • Some companies struggle with creating a culture that values constructive feedback.
  • Overcoming cultural barriers is essential for fostering effective collaboration.

Building Communities Around Open Source Projects

This section focuses on the importance of building communities around open-source projects. The speakers discuss how community involvement contributes to project success and helps maintain project health.

Community as the Essence of Open Source Projects

  • The Apache Software Foundation prioritizes community over code.
  • Building a community is more important than receiving a large amount of code contributions.
  • Successful projects are proud of their work and strive for community involvement.

Avoiding Accumulation of Code without Community

  • Merely accumulating lines of code without building a community leads to software decay.
  • A strong community ensures the longevity and health of a project.

Interacting with People: Being a Nice Person

  • Interactions should involve being respectful and considerate towards others.
  • Constructive criticism should be given in a way that encourages growth and improvement.

Overcoming Challenges in Collaborative Environments

This section discusses challenges faced in collaborative environments, including cultural issues within companies. The speakers emphasize the importance of effective communication and collaboration skills for successful software development.

Overcoming Negative Feedback Perception

  • Some individuals may perceive constructive criticism as negative feedback, leading to resistance or discomfort.
  • Recognizing that feedback is integral to writing good software is crucial for personal growth and project success.

Cultural Challenges in Companies

  • Some companies struggle with creating a culture that values constructive feedback.
  • Overcoming cultural barriers is essential for fostering effective collaboration.

Effective Communication Skills

  • Learning how to give constructive criticism is a valuable skill in collaborative environments.
  • Separating personal identity from code allows for objective evaluation and improvement.

Conclusion

In this section, the speakers conclude by emphasizing the importance of collaboration, communication, and building communities in software development. They highlight that successful software development requires working well with others rather than relying solely on individual brilliance.

Increasing the Bus Factor and Code Review

The importance of increasing the bus factor and implementing code review in software development.

Importance of Code Review

  • Code review is mandatory at Google before submitting code to the Version Control system.
  • It ensures that peers have reviewed and approved the changes made by a developer.
  • Code review helps increase the bus factor, which means multiple team members are familiar with different parts of the codebase.

Embracing Failure

  • Failure is an essential part of learning and growth.
  • Failing on different attempts allows for continuous learning and improvement.
  • Different people have different ways of learning, including trying and failing, reading books, or listening to others.

Learning from Failure

  • When failure occurs, it is important not to panic but instead document what happened and learn from it.
  • Postmortems are conducted to analyze failures and prevent them from happening again.
  • Blaming individuals is not the purpose; rather, it's about understanding what went wrong collectively.

Overcoming Fear of Failure

Overcoming fear of failure through personal anecdotes.

Personal Anecdotes

  • One person shares their experience of learning banjo in a bluegrass jam. They were initially afraid to perform solos but overcame their fear by realizing that making mistakes among friends was acceptable.
  • Another anecdote involves a business executive who made a costly mistake. Instead of firing him, the CEO saw it as a valuable lesson learned through an expensive training process.

Language Barriers as Learning Opportunities

  • Speaking languages in foreign countries can be intimidating due to fear of looking foolish. However, making mistakes is crucial for learning.
  • Personal experiences shared include ordering a toothbrush instead of asking for a knife while speaking Italian in Italy.

Embracing Failure and Iteration

The importance of embracing failure and iterating quickly in the software development process.

Failing Fast and Iterating

  • Failing fast is crucial for learning and improvement.
  • Google encourages failing quickly and iterating by providing a platform like Google Labs for experimentation.
  • Rapid iteration allows for faster learning and progress.

Transparency in Failure

  • It is important not to hide failures but instead learn from them openly.
  • Version Control systems like Subversion, Mercurial, or Git should not be used to hide tracks but rather to maintain code integrity.

Conclusion

Final thoughts on embracing failure and the importance of learning from mistakes.

Learning through Failure

  • Embracing failure is the easiest way to learn and grow.
  • Overcoming fear of failure leads to personal growth and improved skills.
  • Failure should be seen as an opportunity for learning, not something to be ashamed of.

Importance of Iteration

  • Iterating quickly after failure accelerates the learning process.
  • Google's approach of failing fast and iterating helps teams improve at a faster pace.

This summary covers key points from the transcript. Please refer to the original transcript for complete details.

The Importance of Practice

In this section, the speakers discuss the importance of practice in improving skills and overcoming the fear of failure.

Practicing to Improve Skills

  • Practicing helps to make the iteration-failure cycle faster.
  • By practicing, failures become smaller and less intimidating.
  • Over time, failures tend to get smaller while successes tend to get larger.

Being a Small Fish

  • Being a small fish, working with people who are smarter or more skilled than you, helps in improving your own skills.
  • Working with junior team members may provide some learning opportunities but it can be harder to improve compared to working with someone more experienced.

Facing Fear and Learning Quickly

  • Being a big fish in a comfortable environment may not lead to significant growth or improvement.
  • Being a small fish in a challenging environment can be scary but it leads to rapid improvement.
  • Facing fears and embracing challenges is rewarding and helps in personal development.

Influence and Vulnerability

This section focuses on the importance of being influenced by others and embracing vulnerability for personal growth and leadership.

Openness to Influence

  • Being open to the influence of others allows for new ideas and perspectives.
  • The more influence you have on others, the more likely they are to listen to you.
  • Respect is a two-way street; showing respect towards others fosters mutual respect.

Embracing Vulnerability

  • Admitting mistakes and being vulnerable opens up opportunities for growth.
  • Admitting mistakes shows strength rather than weakness in the long term.
  • People who admit their mistakes are often admired for their strength.

Leadership and Dedication

This section discusses the importance of vulnerability in leadership and how it can foster dedication and participation in projects.

Cementing Dedication

  • Being open to influence and vulnerability helps in gaining dedication from others.
  • It differentiates between being a leader who drives the project alone and having a team of dedicated individuals who actively contribute.

Software Tools and Collaboration

The speakers discuss the impact of software tools on collaboration and social habits.

Social Problems vs. Technical Solutions

  • Technical solutions cannot fix social problems.
  • Examples like DRM technology restrictions highlight the need for addressing societal issues rather than relying solely on complex technological solutions.

Path-Based Access Control

  • Creating complicated rules for path-based access control in version control systems may not address the underlying issues.
  • Technological restrictions should be complemented with addressing the reasons behind incorrect commits.

The transcript provided is already in English, so there is no need to respond in a different language.

New Section

In this section, the speakers discuss the limitations of using technology to solve social problems and how small technological changes can have a big social impact.

Technological Restrictions and Social Problems

  • Using technology as a solution for social problems is not always effective.
  • The internet magnifies the presence of negative individuals, making it seem like they are everywhere.
  • While technology cannot solve sociological problems, small technological changes can influence behavior.

Examples of Technological Changes with Social Impact

  • Requiring users to sign in on Google Code helps limit spam and allows for better communication regarding bug reports.
  • Limiting the number of licenses on Google Code project hosting discourages proliferation of open-source licenses.
  • Small technological choices can lead to significant behavioral changes.

New Section

In this section, the speakers emphasize the importance of defaults in software tools and how they influence collaboration and behavior.

Influence of Defaults in Software Tools

  • Defaults play a crucial role in shaping user behavior.
  • Examining default behaviors in software tools helps understand their impact on collaboration.
  • Email notifications with code diffs make code review effortless and increase participation.

New Section

In this section, the speakers discuss the significance of CVS as an early version control system and its impact on collaboration.

The Role of CVS in Collaboration

  • CVS introduced Anonymous Pserver, enabling easy contribution from external individuals through concise patches.
  • The introduction of Anonymous Pserver had a significant social impact on collaboration.

New Section

In this section, the speakers explore the default behaviors of distributed version control systems and their implications.

Default Behaviors in Distributed Version Control

  • Distributed version control systems have both positive and negative consequences due to their default behaviors.

The transcript does not provide further details or insights in this section.

New Section

This section discusses how the use of version control systems can both discourage and encourage collaboration. It highlights the benefits of lowering barriers for participation and the shift in the role of committers.

Collaboration and Version Control

  • The use of version control systems can discourage collaboration due to the effort required to find a server and do a push.
  • However, it also encourages collaboration by lowering barriers for everyone to participate, providing access to history and allowing individuals to checkpoint their code.
  • Being a committer becomes more of a social title rather than having exclusive tools.

New Section

This section further explores how version control systems impact collaboration and raises concerns about future implications.

Impact on Collaboration

  • Version control systems lower barriers for people to participate in projects.
  • Everyone has access to the same toolset, enabling them to checkpoint their code and collaborate.
  • The concern is whether this will tilt the dial back towards less collaboration in the future.

New Section

This section emphasizes the benefits of lowered barriers for participation in version control systems.

Lowered Barriers for Participation

  • Previously, collaborating required checking out code, emailing patches, waiting for reviews, and feeling helpless.
  • With version control systems, there is no need to wait as anyone can participate by checkpointing their code.
  • Lowered barriers allow people walking by to easily join in on projects.

New Section

This section highlights the importance of paying attention to default behaviors in tools and their impact on collaboration dynamics.

Default Behaviors of Tools

  • It is crucial to pay attention to the default behaviors of tools used for collaboration.
  • The social behavior encouraged by these tools can significantly affect team dynamics.
  • Understanding and evaluating the impact of tool behaviors is essential.

New Section

This section discusses the timing of collaboration and when it is appropriate to involve others in a project.

Timing of Collaboration

  • The question arises regarding when it is a good time to collaborate on a project.
  • Research shows that projects evolve from an idea to a prototype before extensive coding takes place.
  • Collaboration can occur at any stage, even during the early phases, as long as there is value in sharing progress.

New Section

This section delves into the different stages of a project's evolution and when collaboration becomes crucial.

Evolution of a Project

  • Projects start as ideas in one's head and progress to prototypes for demonstration or personal validation.
  • Sharing progress with others happens at various stages, such as showing friends or colleagues.
  • Extensive coding follows, leading to completion and potential domination.

New Section

This section emphasizes that project phases can be done publicly, but advertising oneself should be timed appropriately.

Public Phases and Advertising

  • All project phases can be done publicly without hiding progress.
  • It is not necessary to work in isolation even during mock-up stages.
  • Advertising oneself should be timed based on the significance of progress made.

New Section

This section explores involving people neither too early nor too late in a project for effective collaboration.

Involving People at the Right Time

  • People often involve others too late rather than too early in projects.
  • Waiting until completion limits the opportunity for valuable input and stakeholder involvement.
  • There is a risk of wasting time by not seeking feedback and potentially needing to start over due to poor design choices.

New Section

This section highlights the importance of seeking feedback and avoiding wasted time in project development.

Risk of Wasting Time

  • Making significant progress without involving others can lead to wasted time if design choices are flawed.
  • Code reviews become challenging when faced with large amounts of code, making it difficult to provide meaningful feedback.
  • Seeking feedback, discussing designs, and sharing ideas can prevent wasted effort.

New Section

This section discusses the lack of interest from others when a project is nearly finished.

Lack of Opportunity for Stakeholders

  • When a project is 95% complete, there is little opportunity for others to take a stake or significantly influence its direction.
  • Involving people earlier allows them to feel more engaged and have a meaningful impact on the project's outcome.

New Section

This section introduces the concept of "brain crack" and its relation to sharing progress.

Brain Crack

  • "Brain crack" refers to the excitement one feels about an idea but fails to share or collaborate on it.
  • Sharing progress through communication channels like mailing lists helps overcome brain crack and invites collaboration.

The Importance of Getting Ideas Out Quickly

In this section, the speakers discuss the importance of quickly getting ideas out and avoiding keeping them to oneself.

Brain Crack and Idea Generation

  • Brain crack refers to the ideas that one keeps to themselves and continuously feeds on.
  • The point is to try to get ideas out as quickly as possible rather than hoarding them.
  • Many ideas may turn out to be garbage, but it is important not to keep them bottled up.

Pitfalls of Early Collaboration

This section explores the potential downsides of involving collaborators too early in the creative process.

SourceForge and Google Code Examples

  • Projects on platforms like SourceForge or Google Code often have a single author with minimal content.
  • Lack of a prototype or tangible progress can lead to either no interest or an overwhelming number of people wanting different things.
  • Design by committee can result in endless discussions without any concrete outcomes.

Attracting People with Different Goals

Here, the speakers discuss the risk of attracting individuals who do not align with your project's goals.

Communication and Wasting Time

  • When you want to go in one direction but attract people who want something else, it leads to wasted time and energy.
  • It is crucial to clearly communicate your project's purpose, goals, and non-goals through a coherent design and mission statement.
  • Having some running code or proof of concept helps create momentum without giving others the impression that they cannot contribute.

Finding the Sweet Spot for Collaboration

This section emphasizes finding a balance between having a clear direction while remaining open for revisions and feedback.

The Sweet Spot: Coherent Design and Mission Statement

  • The sweet spot involves having a well-defined design and mission statement, clearly communicated on the project's website.
  • This prevents others from derailing the chosen direction and ensures that everyone is aligned with the project's goals.

Balancing Progress and Involvement

  • It is essential to have some running code or a proof of concept to show seriousness and generate interest.
  • However, it should not be too far along that people feel they cannot contribute or influence the project.
  • Being open to revisions, criticism, and documenting failures is crucial for growth and improvement.

Documenting Failures for Learning

The speakers highlight the importance of documenting failures in open-source projects.

Lack of Documentation on Failed Attempts

  • Open-source projects often document their plans, successes, and what has worked for them.
  • However, there is rarely documentation about failed attempts or discarded design documents.
  • Deleting failed attempts can lead to wasted effort if someone else wants to try a similar idea later.

Benefits of Documenting Failures

  • Documenting failures can save time by preventing redundant discussions or efforts in the future.
  • Even if someone leaves the project or important information gets lost, having a record helps others understand past decisions.

Case Study: Subversion Project

The speakers discuss their experience with starting the Subversion project as a case study.

Starting with Three Collaborators

  • The Subversion project began with three individuals working together in an office.
  • They spent time writing a design document collectively over two to three weeks.
  • Having two or three collaborators allowed for constructive feedback and different perspectives without becoming chaotic like larger groups.

Ideal Number of Collaborators

This section explores how having too many collaborators can hinder progress.

Optimal Number for Design Docs

  • One person working on a design document may make many wrong choices.
  • Two or three collaborators provide a balance of perspectives and the ability to challenge each other's ideas effectively.
  • Beyond three people, collaboration can become chaotic and unproductive, similar to large meetings or group travel experiences.

The summary provides an overview of the main points discussed in the transcript, highlighting the importance of quickly sharing ideas, avoiding pitfalls of early collaboration, finding a sweet spot for collaboration, documenting failures for learning, and considering the optimal number of collaborators.

New Section

This section discusses the sudden increase in interest and participation in a project after it had working code. It also mentions the initial use of CVS in the Open Source world.

The Magic Threshold

  • As soon as the project had working code, people started showing up without any advertising.
  • It felt like crossing a magic threshold where they were ready to welcome more participants.
  • Previously, CVS was the only tool used in the Open Source world.

New Section

This section highlights the early stages of the project and how private discussions were initiated due to distractions from early participants.

Private Mailing List

  • To deal with distractions caused by early participants, a private mailing list was created for design discussions.
  • Initially, some team members felt embarrassed about this approach.
  • Brian Behlendorf expressed his outrage and encouraged them to stop talking privately and engage with everyone openly.

New Section

This section discusses how the team realized that private discussions were hindering collaboration and how they eventually embraced open communication.

Indignant Anger

  • The team initially felt indignant about being asked to stop private discussions.
  • However, over time, they realized that Brian Behlendorf was right in encouraging open communication.
  • They learned that if someone is bored by their conversations, they can simply leave.

New Section

This section reflects on the case study of two individuals who have given numerous talks together and their process of preparing for presentations.

Writing Talks Together

  • The two individuals have been giving talks together for several years.
  • They prefer brainstorming ideas on paper rather than using laptops or phones.
  • They face challenges finding cafes that stay open long enough for their brainstorming sessions.

New Section

This section continues the discussion on the case study of preparing talks and highlights the importance of gradual evolution and collaboration.

Gradual Evolution

  • After brainstorming ideas, they filter and refine them together.
  • The ideas are then organized into an outline to make the talk more coherent.
  • They collaborate by exchanging slides and making changes based on feedback from each other.

New Section

This section emphasizes the importance of practicing presentations before delivering them at events.

Learning from Experience

  • It is crucial to practice a presentation before delivering it at an event.
  • They learned that speaking about CVS to a room full of young individuals who were unfamiliar with it was not effective.
  • Feedback from colleagues and presenting at local user groups helped improve their presentation.

New Section

This section provides a summary of key takeaways regarding collaboration.

Key Takeaways

  • Collaboration is more effective than striving for individual genius.
  • Embrace collaboration and pay attention to how tools affect collaborative behavior.
  • Timing is essential in collaboration, finding the right balance leads to success.

New Section

This section discusses the concept of pair programming and its benefits, as well as dealing with egos in a team.

Pair Programming

  • Pair programming is ideal for tackling difficult problems.
  • Example: Writing CVS to SVN was one of the hardest tasks, and pair programming helped in solving it effectively.
  • For day-to-day tasks, a write-code-review process is preferred over pair programming.
  • Pair programming can create social stress if individuals don't know each other well or are not tolerant of each other's quirks.

Dealing with Egos

  • People with big egos tend to attract others who either want to follow them or argue with them.
  • It can be challenging to deal with people who have a big ego on a project.
  • Friendly and consensus-building individuals tend to attract like-minded people, while alpha personalities attract other alphas.
  • A talk on "poisonous people" provides guidance on protecting projects from difficult individuals.

New Section

This section addresses questions about applying certain methodologies in different environments and dealing with constructive criticism.

Applying Methodologies

  • The effectiveness of certain methodologies may vary depending on the environment.
  • It is important to consider the potential consequences before implementing new approaches in different settings.

Dealing with Constructive Criticism

  • The speaker acknowledges that people have egos and that they are real.
  • There is evidence that some individuals are geniuses, but they are relatively few in number compared to most people's perception.
  • The talk aims at those who can control their project or environment rather than addressing every possible scenario.

The Ideal vs. Implementation

In this section, the speakers discuss the challenges of implementing the ideal and making it happen in real-world scenarios.

Implementing the Ideal

  • Implementing the ideal is a separate problem from describing it.
  • Open Source projects provide a similar environment to Google, where collaboration and contribution are valued.
  • Transitioning from being a small fish to becoming a big fish requires seeking out more knowledgeable individuals and challenging projects.
  • Actively getting involved with experienced individuals and their work can help improve skills.

Changing Your Environment

  • If you're already in an environment where you're considered a big fish, seek opportunities to work with even bigger fish.
  • Look for challenging projects and knowledgeable people to learn from.
  • Continuous growth comes from being challenged and stepping out of your comfort zone.
  • If trapped or bored in a job, consider looking for new opportunities elsewhere.

Becoming a Big Fish

This section explores strategies for transitioning from being a big fish to becoming a small fish in order to continue personal growth.

Hiring Bigger Fish

  • In corporate environments, hiring bigger fish can help challenge and push boundaries.
  • Seek out harder projects and individuals who possess greater knowledge than yourself.
  • Gradually involve yourself with their work to expand your own expertise.

Adapting in Different Environments

The speakers discuss how to adapt when you are either a small or big fish in different environments.

Small Fish Strategies

  • If you find yourself as a small fish in an environment, focus on finding ways to change that situation without leaving entirely.
  • Seek opportunities for skill improvement within your current environment or explore alternative ways of gaining experience.

Big Fish Strategies

  • As a big fish in a corporation, take advantage of your position to migrate your career towards more challenging opportunities.
  • Look for ways to work with other bigger fish and expand your knowledge and skills.

Balancing Code Ownership and Knowledge Sharing

This section addresses the tension between code ownership and spreading knowledge within a team or project.

Efficient Bug Fixing

  • Assigning bugs to individuals who are most proficient in the corresponding component can lead to faster resolution.
  • However, spreading knowledge among team members is crucial for long-term sustainability.
  • Consider occasionally assigning bugs to individuals less familiar with the codebase to promote learning and spread expertise.

Short-Term vs. Long-Term

  • Balancing short-term efficiency with long-term risk management is essential.
  • Experts should primarily handle critical tasks, but occasional involvement of others helps mitigate risks.
  • Pair-programming bug fixes or assigning small tasks in unfamiliar areas can provide valuable experience and coverage.

Improving Bus Factor without Generalization

The speakers discuss strategies for improving bus factor without making everyone a generalist.

Documentation as Risk Management

  • Solid documentation, including code comments, design docs, and general documentation, helps improve bus factor.
  • Code review ensures that multiple people have at least cursory knowledge of different areas of code.

Technological Solutions for Social Problems

This section touches on the concept of using technological solutions for social problems.

Addressing Social Problems

  • The speakers acknowledge the idea of using technology to solve social issues but do not delve into it further.

Forking and Participation

The discussion revolves around the concept of forking code and its impact on participation in open-source projects.

Forking Code and Visibility

  • Forking allows others to see that you have forked their code. This can lead to cases where fixes made by someone get pulled back into the main branch.
  • The speaker wonders how this aspect is considered and if Google Code has plans to address it.

Support for Mercurial and Server-side Clones

  • Google Code now supports Mercurial.
  • They are working on implementing server-side clones similar to GitHub, allowing users to clone repositories on the site and perform pulls from them.

Balancing Forking and Participation

  • While forking may lead to code being pulled back into the main branch, it also lowers the barrier to participation compared to a centralized system.
  • The speaker believes that this balance ultimately leads to increased participation in open-source projects.

Challenges of Coding Pressure

The discussion focuses on the challenges faced when under pressure to write more code, becoming a guinea pig, and dealing with psychological problems associated with coding.

Pressure from Management

  • Under pressure from management, there is an expectation to write more code even when one is still learning or relatively inexperienced.
  • Peers may look up to individuals who are expected to deliver exceptional results despite being new or small fish in the team.

Psychological Challenges

  • Coding pressure can lead to psychological problems such as neglecting personal relationships, causing anger or complaints from loved ones.
  • The question arises about how these challenges should be approached.

Conclusion

The transcript covers two main topics: forking code and its impact on participation in open-source projects, as well as the challenges faced under coding pressure. It provides insights into how forking can affect project development and the balance it brings to participation. Additionally, it discusses the pressures faced by developers to write more code and the psychological challenges that can arise as a result.

Video description

Google I/O 2009 - The Myth of the Genius Programmer Brian Fitzpatrick, Ben Collins-Sussman A pervasive elitism hovers in the background of collaborative software development: everyone secretly wants to be seen as a genius. In this talk, we discuss how to avoid this trap and gracefully exchange personal ego for personal growth and super-charged collaboration. We'll also examine how software tools affect social behaviors, and how to successfully manage the growth of new ideas. For presentation slides and all I/O sessions, please go to: code.google.com/events/io/sessions.html