A lot of former mainframe people will tell you that it was a pretty rough transition from the good ole' days of COBOL and VMS to the modern paradigm of Object-Oriented C++/Java/.NET development. Some have stuck around, fighting over the handful of jobs maintaining the remaining systems. Others are still in denial, believing that "minicomputers" are just a fad and that we will soon return to the heyday of mainframes.
A few have actually snuck into our world, trying to undermine and transform it into a world of flat files, and fixed-length strings. Be on the look out for these developers. Fortunately, their M.O. is easy to spot: who can miss UPPR_CSE_EVRYTHNG? But the sure-fire way of telling is to look for a single underlying string for all data storage, such as this code from James Watson's JavaBOL-based system:
public void setCUSTOMER_NBR(String value) { final int paddingType = P_RIGHT_SPACE_FILL; final int offset = 16; final int length = 6; String s = padString(value, length, paddingType); setValue(offset, length, s); } public String getCUSTOMER_NBR() { final int paddingType = P_RIGHT_SPACE_FILL; final int offset = 16; final int length = 6; String s = getValue(offset, length); return unpadString(s, paddingType); } private String getRawCUSTOMER_NBR() { final int offset = 16; final int length = 6; return getValue(offset, length); } private String getValue(int offset, int length) { return data.substring(offset, offset + length); } //ED: and the technique for repeating records ... public int getLINE_NBR(int index1) throws IndexOutOfBoundsException { final int paddingType = P_LEFT_ZERO_FILL; final int offset = 294; final int length = 3; int[] indexes = new int[1]; indexes[0] = index1; ArrayDimensions[] ad = new ArrayDimensions[1]; ad[0] = new ArrayDimensions(75, 96); String s = getValue(calculateOccursOffset(offset, indexes, ad), length); return unpadInt(s, paddingType); } public static int calculateOccursOffset(int baseOffset, int[] arguments, ArrayDimensions[] ad ) { int calculatedOffset = baseOffset; for(int i=0; i<ad.length; i++) { calculatedOffset += (((ArrayDimensions)ad[i]).occursLength * arguments[i]); } return calculatedOffset; }