Opinion ID: 597418
Heading Depth: 2
Heading Rank: 1

Heading: computer program design

Text: 8 Certain elementary facts concerning the nature of computer programs are vital to the following discussion. The Copyright Act defines a computer program as a set of statements or instructions to be used directly or indirectly in a computer in order to bring about a certain result. 17 U.S.C. § 101. In writing these directions, the programmer works from the general to the specific. Whelan Assocs., Inc. v. Jaslow Dental Lab., Inc., 797 F.2d 1222, 1229 (3d Cir.1986), cert. denied, 479 U.S. 1031, 107 S.Ct. 877, 93 L.Ed.2d 831 (1987). See generally Steven R. Englund, Note, Idea, Process, or Protected Expression?: Determining the Scope of Copyright Protection of the Structure of Computer Programs, 88 MICH.L.REV. 866, 867-73 (1990) (hereinafter Englund); Peter S. Menell, An Analysis of the Scope of Copyright Protection for Application Programs, 41 STAN.L.REV. 1045, 1051-57 (1989) (hereinafter Menell); Mark T. Kretschmer, Note, Copyright Protection For Software Architecture: Just Say No!, 1988 COLUM.BUS.L.REV. 823, 824-27 (1988) (hereinafter Kretschmer); Peter G. Spivack, Comment, Does Form Follow Function? The Idea/Expression Dichotomy In Copyright Protection of Computer Software, 35 U.C.L.A.L.REV. 723, 729-31 (1988) (hereinafter Spivack). 9 The first step in this procedure is to identify a program's ultimate function or purpose. An example of such an ultimate purpose might be the creation and maintenance of a business ledger. Once this goal has been achieved, a programmer breaks down or decomposes the program's ultimate function into simpler constituent problems or 'subtasks,'  Englund, at 870, which are also known as subroutines or modules. See Spivack, at 729. In the context of a business ledger program, a module or subroutine might be responsible for the task of updating a list of outstanding accounts receivable. Sometimes, depending upon the complexity of its task, a subroutine may be broken down further into sub-subroutines. 10 Having sufficiently decomposed the program's ultimate function into its component elements, a programmer will then arrange the subroutines or modules into what are known as organizational or flow charts. Flow charts map the interactions between modules that achieve the program's end goal. See Kretschmer, at 826. 11 In order to accomplish these intra-program interactions, a programmer must carefully design each module's parameter list. A parameter list, according to the expert appointed and fully credited by the district court, Dr. Randall Davis, is the information sent to and received from a subroutine. See Report of Dr. Randall Davis, at 12. The term parameter list refers to the form in which information is passed between modules (e.g. for accounts receivable, the designated time frame and particular customer identifying number) and the information's actual content (e.g. 8/91-7/92; customer No. 3). Id. With respect to form, interacting modules must share similar parameter lists so that they are capable of exchanging information. 12 The functions of the modules in a program together with each module's relationships to other modules constitute the 'structure' of the program. Englund, at 871. Additionally, the term structure may include the category of modules referred to as macros. A macro is a single instruction that initiates a sequence of operations or module interactions within the program. Very often the user will accompany a macro with an instruction from the parameter list to refine the instruction (e.g. current total of accounts receivable (macro), but limited to those for 8/91 to 7/92 from customer No. 3 (parameters)). 13 In fashioning the structure, a programmer will normally attempt to maximize the program's speed, efficiency, as well as simplicity for user operation, while taking into consideration certain externalities such as the memory constraints of the computer upon which the program will be run. See id.; Kretschmer, at 826; Menell, at 1052. This stage of program design often requires the most time and investment. Kretschmer, at 826. 14 Once each necessary module has been identified, designed, and its relationship to the other modules has been laid out conceptually, the resulting program structure must be embodied in a written language that the computer can read. This process is called coding, and requires two steps. Whelan, 797 F.2d at 1230. First, the programmer must transpose the program's structural blue-print into a source code. This step has been described as comparable to the novelist fleshing out the broad outline of his plot by crafting from words and sentences the paragraphs that convey the ideas. Kretschmer, at 826. The source code may be written in any one of several computer languages, such as COBAL, FORTRAN, BASIC, EDL, etc., depending upon the type of computer for which the program is intended. Whelan, 797 F.2d at 1230. Once the source code has been completed, the second step is to translate or compile it into object code. Object code is the binary language comprised of zeros and ones through which the computer directly receives its instructions. Id. at 1230-31; Englund, at 868 & n. 13. 15 After the coding is finished, the programmer will run the program on the computer in order to find and correct any logical and syntactical errors. This is known as debugging and, once done, the program is complete. See Kretschmer, at 826-27.