The typical role-specific responsibilities of a Programmer are to:
Understand and evaluate the relevant requirements, architecture, and design documentation.
Reuse software components from the reuse repository.
Acquire, configure, and extend commercial software components.
Implement softare components (including prototype code,
deliverable new code, and deliverable “glue code”
to integrate the software components) in accordance with the:
Relevant requirements.
System and software architectures.
Design.
Language specification and idioms.
Coding standards.
Refactor and iterate software components.
Produce unit test software.
Perform unit testing of software components including the
design, implementation, evaluation, and execution of unit tests.
Programmers should typically have the following personal
characteristics:
Strong analytical problem solving skills.
Able to comfortably multitask (i.e., perform multiple
design, implementation, and testing tasks concurrently).
Solid verbal and written communication skills, and thus
able to explain and document the software design,
implementation, and testing its diverse audiences.
Programmers should typically have the following
expertise:
Expert practical knowledge of the:
Programming languages to be used including their
idioms.
Associated coding standards.
Unit (e.g., class-level) testing theory, practice, and
tools.
One or more of the platforms (e.g., hardware, operating
system, browsers) to be used.
The theory, practice, and tools of software
engineering.
Solid practical knowledge of:
Major object-oriented concepts such as abstraction,
encapsulation, inheritance, and polymorphism.
Standard modeling languages (e.g., UML or OML) being
used to document the design to be implemented including the
ability to read both static and dynamic models
(diagrams).
Major component-based development (CBD) concepts such
as components, component models, component infrastructures,
and interfaces.
Implementing distributed software components.
Standard techniques for interfacing with relational and
object databases (e.g., wrapper classes, query languages,
and stored procedures).
Basic practical knowledge of:
Requirements engineering concepts and techniques.
Software architecture patterns, concepts, and
techniques.
Configuration identification, configuration control,
and associated configuration management tools.
Programmers are only needed as part of the
endeavor-specific process if the process involves the
production of modification of software components.
The required expertise, training, and experience may vary
depending upon the specific responsibilities and tasks, which
in turn may vary depending on the type of software components
to be produced. For example, different programmers may:
Need to have mastered different programming languages,
component infrastructures, and/or platforms.
Program prototype vs. deliverable vs. test software
components.
This role combines both unit programming and low-level
software testing because the same person typically performs
all three in a highly iterative, incremental, and interleaved
manner. However, unit testing and/or software integration
testing may be instead allocated to the
test engineer role during
process tailoring, especially if different persons are going
to be responsible for unit programming and low-level software
testing.