266 Are the Androids Dreaming Yet?
Epstein Suite indexes the text; the original document lives at its official source. We don't host the original file — view it on the official release to read it in full.
View the original on the official releaseDocument text
Text is machine OCR and may contain errors. Confirm against the original source above.
266 Are the Androids Dreaming Yet?
will need to unload this person of ALL interruptions and administrative
burdens. This is the most effective way to solve a creative programming
task. Practically, once your task is over the limit for a single human, a
software project must be split up. This requires great care. Dividing a
problem efficiently means specifying the interfaces between them and
decoupling the components. This is the art of an architect or a producer
in the creative arts. The creative process operates similarly in other walks
of life. There are many examples of successful creative duos — Rogers
and Hammerstein (The Sound of Music), Ben Elton and Richard Curtis
(Blackadder).
Good managers, therefore, find ways to break projects into
manageable sub-projects that can be worked by pairs or rely on single
super-programmers with support around them. If you are lucky enough
to gather together a group of super-programmers and can divide a
problem efficiently amongst them, you can achieve great things. You
see this pipeline in movie production. A script writer generates a script
creatively. The casting director finds the actors, a director is in charge of
filming, and an editor puts it together. In very great movies you will often
find a great director or producer who had a hand in almost everything
holding it all together. They are often accused of micro-managing but
you can see that’s what they must do. They are the super-programmer
with the whole creative work in their head, and an eye on the audience
and financial backers.
If you talk with great programmers you will be amazed by their
breadth of technical, commercial and product knowledge. Why do they
need all this commercial information to do their job in the round?
Rules and Tips
I began writing some rules on how to split up a project, and almost
immediately ran into exceptions and special cases. The job of dividing
things into sub-tasks is, itself, a creative problem and must not be done
mechanically. Any ‘one size fits all’ rule will fail and you must apply
domain knowledge and careful thought to the process.
It is the job of architects or a senior engineer to split projects into
smaller chunks. To do this they must accurately ‘guess’ boundaries
between subtasks to create self-contained, creatively solvable problems.
This can be done by either vertical or horizontal abstraction. Both have
their problems.
HOUSE_OVERSIGHT_015956
Have a question about what this document contains?
Ask the documents