Choice of programming language
Assembler: Many consider this a difficult language to use and master but the benefits are total control of your environment. This is the best choice for manipulating data sets and interfacing with the operating system via its many services. Assembler is tops for working with buffers and variable length data, and handling the vagaries of data conversions.
Cobol: Can handle data sets well but dynamic data set allocation is more difficult to accomplish. The data conversion mechanism is cumbersome and inefficient due to the requirement to do a double conversion process from one code page to national, and then from national to your final code page. Further, lack of good control over variable length data buffers adds to the complications of using this programming language effectively. Nevertheless, the provided examples demonstrate how it can be used.
PL/I: Good all-around choice.
C: Good all-around choice. When using C, care must be taken if data being transmitted contains binary zeros, particularly if you are using C library string functions to manipulate the buffers since many of these functions depend on a binary zero to terminate a string.