Support specialists may work within an organization or directly for a computer or software vendor. Increasingly, these technical professionals work for help-desk or support services firms, providing customer support on a contract basis to clients as more of this type of work is outsourced. Programmers often are categorized as technicians, distinct from the higher level of theoretical expertise characteristic of computer scientists, computer engineers, and systems analysts. However, many technical innovations in programming advanced computing technologies and sophisticated new languages and programming tools have redefined the role of a programmer and elevated much of the programming work done today. Computer programs tell the computer what to do, such as which information to identify and access, how to process it, and what equipment to use.
Programs vary widely depending on the type of information to be accessed or generated.
Although simple programs can be written in a few hours, programs that use complex mathematical formulas, whose solutions can only be approximated, or that draw data from many existing systems, require more than a year of work. In most cases, several programmers work together as a team under a senior programmer's supervision. Programmers write specific programs by breaking down each step into a logical series of instructions the computer can follow. Programmers usually know more than one programming language and since many languages are alike, they can often learn new languages relatively easily. In practice, programmers are often referred to by the language they know or the type of environment they generally work in, such as mainframe programmer, object-oriented programmer, or Internet or World Wide Web programmer.