How-to-be a Programmer: A Short, Comprehensive, and Personal Summary

Translations of this material:

into Russian: Как стать программистом: краткий, исчерпывающий и субъективный ответ. 99% translated in draft. Almost done, let's finish it!
Submitted for translation by suvit 25.11.2008

Text

How to be a Programmer: A Short, Comprehensive, and Personal Summary

Robert L Read

Copyright © 2002, 2003 Robert L. Read

Copyright

Copyright © 2002, 2003

by Robert L. Read. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with one Invariant Section being ‘History (As of February, 2003)’, no Front-Cover Texts, and one Back-Cover Text: ‘The original version of this document was written by Robert L. Read without renumeration and dedicated to the programmers of Hire.com.’ A copy of the license is included in the section entitled ‘GNU Free Documentation License’.

2002

--------------------------------------------------------------------------------

Dedication

To the programmers of Hire.com.

Table of Contents

1. Introduction

2. Beginner

Personal Skills

Learn to Debug

How to Debug by Splitting the Problem Space

How to Remove an Error

How to Debug Using a Log

How to Understand Performance Problems

How to Fix Performance Problems

How to Optimize Loops

How to Deal with I/O Expense

How to Manage Memory

How to Deal with Intermittent Bugs

How to Learn Design Skills

How to Conduct Experiments

Team Skills

Why Estimation is Important

How to Estimate Programming Time

How to Find Out Information

How to Utilize People as Information Sources

How to Document Wisely

How to Work with Poor Code

How to Use Source Code Control

How to Unit Test

Take Breaks when Stumped

How to Recognize When to Go Home

How to Deal with Difficult People

3. Intermediate

Personal Skills

How to Stay Motivated

How to be Widely Trusted

How to Tradeoff Time vs. Space

How to Stress Test

How to Balance Brevity and Abstraction

How to Learn New Skills

Learn to Type

How to Do Integration Testing

Communication Languages

Heavy Tools

How to analyze data

Team Skills

How to Manage Development Time

How to Manage Third-Party Software Risks

How to Manage Consultants

How to Communicate the Right Amount

How to Disagree Honestly and Get Away with It

Judgement

How to Tradeoff Quality Against Development Time

How to Manage Software System Dependence

How to Decide if Software is Too Immature

How to Make a Buy vs. Build Decision

How to Grow Professionally

How to Evaluate Interviewees

How to Know When to Apply Fancy Computer Science

How to Talk to Non-Engineers

4. Advanced

Technological Judgment

How to Tell the Hard From the Impossible

How to Utilize Embedded Languages

Choosing Languages

Compromising Wisely

How to Fight Schedule Pressure

How to Understand the User

How to Get a Promotion

Serving Your Team

How to Develop Talent

How to Choose What to Work On

How to Get the Most From Your Teammates

How to Divide Problems Up

How to Handle Boring Tasks

How to Gather Support for a Project

How to Grow a System

How to Communicate Well

How to Tell People Things They Don't Want to Hear

How to Deal with Managerial Myths

How to Deal with Organizational Chaos

Glossary

A.

B. History (As Of February, 2003)

C. GNU Free Documentation License

PREAMBLE

APPLICABILITY AND DEFINITIONS

VERBATIM COPYING

COPYING IN QUANTITY

MODIFICATIONS

COMBINING DOCUMENTS

COLLECTIONS OF DOCUMENTS

AGGREGATION WITH INDEPENDENT WORKS

TRANSLATION

Pages: ← previous Ctrl next
1 2 3 4 5 6 7 8 9

© Copyright © 2002, 2003. License: GNU Free Documentation License, Version 1.2