# How to be a Programmer: Community Version

Robert L. Read with Community

Copyright 2002, 2003, 2016 Robert L. Read

Licensed under [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).

## はじめに

良いプログラマになることは難しく、高貴です。ソフトウェアプロジェクトの実質的なビジョンを実現する最も難しい部分は、同僚や顧客を扱うことです。コンピュータプログラムを書くことは重要であり、優れた知性とスキルを必要とします。しかし、実際に子供の遊びであるのは、良いプログラマが、顧客と部分的に責任がある無数の同僚の両方のために成功するソフトウェアシステムを作るために必要なことです。このエッセイでは、21歳のときに誰かが私に説明したかったことを可能な限り簡潔にまとめようとしています。

これは非常に主観的なものであり、したがって、この論文は個人的で、多少の意見をもって運命づけられます。私はプログラマが自分の仕事で直面しなければならない可能性が高い問題に自分自身を限定しています。これらの問題の多くとその解決策の多くは人間の状態に非常に一般的なものであり、おそらく私は説得力があるように見えます。それにもかかわらず、私はこのエッセイが役立つことを願っています。

コンピュータプログラミングはコースで教えられます。優れた本：Pragmatic Programmer \[Prag99]、Code Complete \[CodeC93]、Rapid Development \[RDev96]、Extreme Programming Explained \[XP99]はすべてコンピュータプログラミングと優れたプログラマーであるという大きな問題を教えています。ポール・グラハム（PGSite）とエリック・レイモンド\[ハッカー]のエッセイは、この記事の前に、またはこの記事とともに読むべきです。このエッセイは、社会問題を強調し、必要なスキル全体を包括的に要約することによって、それらの優れた作品とは異なります。

このエッセイでは、ボスという言葉は、あなたがするプロジェクトを提供する人を指すのに使用されます。私はビジネス、会社、部族という言葉を同義語として使っていますが、ビジネスはお金を抱くことを暗示しますが、会社は現代の職場を暗示し、部族は一般的にあなたが忠誠心を分かち合う人々です。

部族へようこそ。

## Contents

1. [Beginner](https://braydie.gitbook.io/how-to-be-a-programmer/en/1-beginner)
   * Personal Skills
     * [Learn to Debug](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/01-learn-to-debug)
     * [How to Debug by Splitting the Problem Space](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/02-how-to-debug-by-splitting-the-problem-space)
     * [How to Remove an Error](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/03-how-to-remove-an-error)
     * [How to Debug Using a Log](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/04-how-to-debug-using-a-log)
     * [How to Understand Performance Problems](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/05-how-to-understand-performance-problems)
     * [How to Fix Performance Problems](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/06-how-to-fix-performance-problems)
     * [How to Optimize Loops](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/07-how-to-optimize-loops)
     * [How to Deal with I/O Expense](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/08-how-to-deal-with-io-expense)
     * [How to Manage Memory](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/09-how-to-manage-memory)
     * [How to Deal with Intermittent Bugs](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/10-how-to-deal-with-intermittent-bugs)
     * [How to Learn Design Skills](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/11-how-to-learn-design-skills)
     * [How to Conduct Experiments](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/personal-skills/12-how-to-conduct-experiments)
   * Team Skills
     * [Why Estimation is Important](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/01-why-estimation-is-important)
     * [How to Estimate Programming Time](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/02-how-to-estimate-programming-time)
     * [How to Find Out Information](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/03-how-to-find-out-information)
     * [How to Utilize People as Information Sources](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/04-how-to-utilize-people-as-information-sources)
     * [How to Document Wisely](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/05-how-to-document-wisely)
     * [How to Work with Poor Code](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/06-how-to-work-with-poor-code)
     * [How to Use Source Code Control](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/07-how-to-use-source-code-control)
     * [How to Unit Test](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/08-how-to-unit-test)
     * [Take Breaks when Stumped](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/09-take-breaks-when-stumped)
     * [How to Recognize When to Go Home](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/10-how-to-recognize-when-to-go-home)
     * [How to Deal with Difficult People](https://braydie.gitbook.io/how-to-be-a-programmer/jp/1-beginner/team-skills/11-how-to-deal-with-difficult-people)
2. [Intermediate](https://braydie.gitbook.io/how-to-be-a-programmer/en/2-intermediate)
   * Personal Skills
     * [How to Stay Motivated](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/01-how-to-stay-motivated)
     * [How to be Widely Trusted](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/02-how-to-be-widely-trusted)
     * [How to Tradeoff Time vs. Space](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/03-how-to-tradeoff-time-vs-space)
     * [How to Stress Test](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/04-how-to-stress-test)
     * [How to Balance Brevity and Abstraction](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/05-how-to-balance-brevity-and-abstraction)
     * [How to Learn New Skills](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/06-how-to-learn-new-skills)
     * [Learn to Type](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/07-learn-to-type)
     * [How to Do Integration Testing](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/08-how-to-do-integration-testing)
     * [Communication Languages](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/09-communication-languages)
     * [Heavy Tools](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/10-heavy-tools)
     * [How to analyze data](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/personal-skills/11-how-to-analyze-data)
   * Team Skills
     * [How to Manage Development Time](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/team-skills/01-how-to-manage-development-time)
     * [How to Manage Third-Party Software Risks](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/team-skills/02-how-to-manage-third-party-software-risks)
     * [How to Manage Consultants](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/team-skills/03-how-to-manage-consultants)
     * [How to Communicate the Right Amount](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/team-skills/04-how-to-communicate-the-right-amount)
     * [How to Disagree Honestly and Get Away with It](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/team-skills/05-how-to-disagree-honestly-and-get-away-with-it)
   * Judgment
     * [How to Tradeoff Quality Against Development Time](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/judgment/01-how-to-tradeoff-quality-against-development-time)
     * [How to Manage Software System Dependence](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/judgment/02-how-to-manage-software-system-dependence)
     * [How to Decide if Software is Too Immature](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/judgment/03-how-to-decide-if-software-is-too-immature)
     * [How to Make a Buy vs. Build Decision](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/judgment/04-how-to-make-a-buy-vs-build-decision)
     * [How to Grow Professionally](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/judgment/05-how-to-grow-professionally)
     * [How to Evaluate Interviewees](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/judgment/06-how-to-evaluate-interviewees)
     * [How to Know When to Apply Fancy Computer Science](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/judgment/07-how-to-know-when-to-apply-fancy-computer-science)
     * [How to Talk to Non-Engineers](https://braydie.gitbook.io/how-to-be-a-programmer/jp/2-intermediate/judgment/08-how-to-talk-to-non-engineers)
3. [Advanced](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced)
   * Technological Judgment
     * [How to Tell the Hard From the Impossible](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/technical-judgment/01-how-to-tell-the-hard-from-the-impossible)
     * [How to Utilize Embedded Languages](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/technical-judgment/02-how-to-utilize-embedded-languages)
     * [Choosing Languages](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/technical-judgment/03-choosing-languages)
   * Compromising Wisely
     * [How to Fight Schedule Pressure](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/compromising-wisely/01-how-to-fight-schedule-pressure)
     * [How to Understand the User](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/compromising-wisely/02-how-to-understand-the-user)
     * [How to Get a Promotion](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/compromising-wisely/03-how-to-get-a-promotion)
   * Serving Your Team
     * [How to Develop Talent](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/01-how-to-develop-talent)
     * [How to Choose What to Work On](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/02-how-to-choose-what-to-work-on)
     * [How to Get the Most From Your Team-mates](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/03-how-to-get-the-most-from-your-teammates)
     * [How to Divide Problems Up](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/04-how-to-divide-problems-up)
     * [How to Handle Boring Tasks](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/05-how-to-handle-boring-tasks)
     * [How to Gather Support for a Project](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/06-how-to-gather-support-for-a-project)
     * [How to Grow a System](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/07-how-to-grow-a-system)
     * [How to Communicate Well](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/08-how-to-communicate-well)
     * [How to Tell People Things They Don't Want to Hear](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/09-how-to-tell-people-things-they-dont-want-to-hear-1)
     * [How to Deal with Managerial Myths](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/10-how-to-deal-with-managerial-myths)
     * [How to Deal with Organizational Chaos](https://braydie.gitbook.io/how-to-be-a-programmer/jp/3-advanced/serving-your-team/11-how-to-deal-with-organizational-chaos)
4. [Glossary](https://braydie.gitbook.io/how-to-be-a-programmer/jp/glossary)
5. [Appendix A - Bibliography/Websiteography](https://braydie.gitbook.io/how-to-be-a-programmer/jp/5-bibliography)
6. [Appendix B - History (As of January 2016)](https://braydie.gitbook.io/how-to-be-a-programmer/en/6-history)
7. [Appendix C - Contributions (As of January 2016)](https://braydie.gitbook.io/how-to-be-a-programmer/jp/7-contributions)

\
How To Be A Programmer: Community Version by Robert L. Read with Community is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).
