I have found that the best programmers have an attention to detail not unlike that of an accountant. They are meticulous, and feel the need to check their work thoroughly. They are extremely detail oriented.
A programmer should have strong communication and leadership skills. A solid relationship between the programmer and the operators, based on mutual respect, is essential. If there is disparity between the operators and a programmer, efficiency suffers. If operators trust the programmer, then they can concentrate on the setup and operation of the machine. If they do not, a lot of time is wasted as they dry run and nit pick everything the programmer does.
"Programmers do not need to be machinists. They do however, need to understand machining concepts such as safety, speeds, feeds, tool geometry, part set up, and so on."-
You may be asking yourself, if programmers need to know all that machining stuff, doesn’t that make them machinists? Of course not. Knowing the concepts does not make one a machinist any more than memorizing a book on race car driving makes a person a race car driver.
This may sound counterintuitive, but some of the best programmers have what I call a lazy tendency. These programmers don’t like doing unnecessary work or extensive amounts of repetitive work. So their code tends to be more compact, cleaner if you will. They also find ways to have a computer or the machine control do the repetitive tasks. This is especially true of programmers that use Computer Aided Manufacturing (CAM) systems such as Unigraphics, DP Esprit, MasterCAM, etc.
An essential quality of excellent programmers is consistentcy. Excellent programmers create programs that, as much as possible, have the same structure, use the same tools and tool locations, and so on. This means the operator can depend on the programmer which frees the operator to focus on machining the part, rather than trying to figure out what the programmer is trying to do.
This goes back to the concept of laziness. If the programmer takes advantage of work done before, the programs have the same look and feel for the operator. This consistency reduces setup and dry-run times, reduces learning curves and builds confidence in operators.
Another important quality of the best programmers is a desire to go out on the shop floor and see their work in action. They do not have any fear or disdain for being at the machines. Nor do they fear or object to feedback from the operators about ways to improve their programs.
Excellent programmers also have a tendency toward perfection. They are not happy doing something ‘half-assed.’ The downside of this is that production schedules, programming backlogs and shifting priorities often do not leave the programmer with enough time to satisfy their quest for perfection. So, in addition to a desire for perfection, the best programmers have the ability to make programs that, while not perfect, get the job done on time. They will also want to go back and improve them better when they have enough time.