Programmers write the code that tells computers what to do. System code tells a computer how to interact with its hardware; applications code tells a computer how to accomplish a specific task, such as word processing or spreadsheet calculating. Systems programmers must be familiar with hardware specifications, design, memory management, and structure, while applications programmers must know standard user interface protocols, data structure, program architecture, and response speed. Most programmers specialize in one of the two areas.
At the start of projects, applications programmers meet with the designers, artists, and financiers in order to understand the expected scope and capabilities of the intended final product. Next, they map out a strategy for the program, finding the most potentially difficult features and working out ways to avoid troublesome patches. Programmers present different methods to the producer of the project, who chooses one direction. Then the programmer writes the code. The final stages of the project are marked by intense, isolated coding and extensive error-checking and testing for quality control. The programmer is expected to address all issues that arise during this testing. Systems programmers may be hired on a Monday, handed the technical specifications to a piece of hardware, then told to write an interface, or a patch, or some small, discrete project that takes only a few hours. Then on Tuesday, they might be moved to a different project, working on code inherited from previous projects. Systems programmers must prove themselves technically fluent: “If you can’t code, get off the keyboard and make room for someone who can,” wrote one. Both arenas accommodate a wide range of work styles, but communication skills, technical expertise and the ability to work with others are important in general.
Programmers work together respectfully; they help each other when they want to. But there are no significant professional organizations which might turn this group of people into a community. The best features of this profession are the creative outlet it provides for curious and technical minds, the pay, which can skyrocket if a product you coded is a major success, and the continuing education. A few programmers we surveyed indicated that an aesthetic sensibility emerges at the highest levels of the profession, saying that “Reading good code is like reading a well-written book. You’re left with wonder and admiration for the person who wrote it.”
Academic requirements are gaining in importance for entry-level positions in the field of programming. Coursework should include basic and advanced programming, some technical computer science courses, and some logic or systems architecture classes. The complexity of what first-time programmers are asked to code is growing, as is the variety of applications, such as compatibility to the Internet and the ability to translate into a marketable CD-ROM. Long hours and a variety of programming languages--PERL, FORTRAN, COBOL, C, C++--can make the initial programmer’s life a whirlwind of numbers, terms and variables, so those who are not comfortable working in many modes at once may find it difficult to complete tasks. The programmer must remain detail-oriented in this maelstrom of acronyms. For mobility within the field, programmers should concentrate on developing a portfolio of working programs that show competence, style, and ability.
A number of programmers take on additional duties to become systems architects, software producers, or technical writers. Others take their programming expertise to a related profession, such as graphic designer or animator. Those who go into government work can become computer security consultants, encryption specialists, or federal agents specializing in computer science. A few who enter the business world become Management Information Systems Specialists (MISSs) who analyze, improve, and maintain corporate information systems for (usually) large, multinational corporations.