Andrew Myers

Security, programming languages, and computer systems

What I do

Bad people can make your computer do the wrong things and tell the bad people about stuff they are not supposed to know. People try to make computers that only do the right things. But it is hard to tell a computer what it should do because you have to think of all the mean things that bad people can do to your computer. I figure out how to tell computers to do things in a way that stops the bad people from causing the computers to do wrong things.

(Using the Up-Goer Five Text Editor, which only allows common words)


Why Good Programmers are Master Architects, Negotiators, Gardeners, and Detectives

Good Programmers are Master Architects

Good programmers understand that they are building a complex structure with layers stacked upon other layers. They think critically about their design, and they know they need a strong, reliable foundation to support their work. Since their systems have many interdependent parts, they design carefully to limit these dependencies so that failures and design changes do not cascade throughout the system. Their work may occasionally need repair but it rarely needs to be torn down.

Good Programmers are Master Negotiators

Good programmers understand there are always design tradeoffs to make between different parts of the system. When they are working with other programmers, they are able to work together to find the best interfaces between the different parts of the system. When dealing with competing interests, they do not take hostages; instead, they find compromises that work to the overall good. They are even able to negotiate with themselves.

Good Programmers are Master Gardeners

Good programmers know that programs grow organically. The first plantings will spread and define the shape of the whole garden, so they think ahead about the garden’s layout. Good programmers are always vigilant for weeds and remove them on sight, because spreading weeds can choke the garden and make it hard to tend to the plantings. At the end of the day, they survey their work with pride even if most people cannot appreciate how much work it was.

Good Programmers are Master Detectives

Good programmers know how to quickly find the culprit when things go wrong. They have a theory about how things are supposed to work, so they are also good at forming theories about what is wrong. They have a sharp eye for anything behaving in an unexpected way. They can summon the suspects to the drawing room and efficiently test their theories to remove suspicion from the innocent. Especially, they relish the feeling when the criminal is hauled away in handcuffs.