NOMAD is distinguished by five characteristics: • An intuitive database-oriented
fourth-generation programming language (4GL) for creating databases, managing data, and writing applications • An interactive environment in which any 4GL statement may be typed and immediately processed (comparable to interactive tools like PHP or Perl) •
Relational database features, supporting lookup tables and the other elements of a
normalized relational database • Powerful set-at-a-time operations under the control of simple imperative commands • Accesses data from many sources, such as
VSAM,
IMS,
IDMS,
DB2,
Oracle, and
SQL Server. NOMAD's language was designed to simplify the application development process, especially for reporting applications. Where possible, common requirements were addressed by intuitive nonprocedural syntax elements, to avoid traditional programming. The heart of the system was the LIST command, which created report output. LIST BY STATE BY CUST_ID NAME PHONE ACROSS STATUS BALANCE WHERE STATE AMONG('CT','NY') State Customer ID Name Phone Active Inactive New ----- ----------- ----------------- ------------ -------- -------- --------- CT 1001 ABC Co. 203-555-1212 1200 0 0 1012 DEF Co. 203-555-1313 0 50 900 NY 1305 GHI Co. 212-555-1414 2650 0 0 In this example, database fields STATE, CUST_ID, NAME, PHONE, STATUS, and BALANCE are laid out on a grid, with two sort breaks (via BY), generated columns based on data values (via ACROSS), and data selection (via WHERE). Additional keywords could control subtotals, titles, footers, table lookup, and myriad reporting details. The LIST command is somewhat analogous to the
SQL SELECT statement, but incorporates formatting, totaling, and other elements helpful for tailoring output to a business requirement. The SELECT statement, in contrast, is essentially a data query tool: its results would be processed or formatted as required using other mechanisms. This distinction is highlighted by SQL's classification as a 'Data Sublanguage' (DSL): SQL is a powerful formalism for controlling
data retrieval. The LIST command is a comprehensive
report writer addressing broader functionality. Another example of NOMAD's power is illustrated by Nicholas Rawlings in his comments for the Computer History Museum about NCSS. He reports that
James Martin asked Rawlings for a NOMAD solution to a standard problem Martin called the ''Engineer's Problem'': "give 6% raises to engineers whose job ratings had an average of 7 or better." Martin provided a "dozen pages of COBOL, and then just a page or two of
Mark IV, from
Informatics." Rawlings offered the following single statement, performing a set-at-a-time operation, to show how trivial this problem was with NOMAD: CHANGE ALL SALARY=SALARY*1.06 WHERE POSITION='ENG' AND AVG(INSTANCE(RATING)) GE 7 Rawlings continues: "[Martin] decided to drop the idea [of showing alternative solutions to the problem]. [The NOMAD solution] was too unbelievable for him. He published his book in 1982 [
sic: 1981], with many fine examples of NOMAD, most of which look silly today, for they don't reflect what NOMAD was really used for in the years since: serious, mission critical applications. I used Martin's Engineer's Problem in hundreds of NOMAD classes, as I forced people to think in terms of sets of data, instead of record-at-a-time, which is how they'd been taught." ==Early development==