COBOLSTACK.COM
//CS505  EXEC PGM=COURSE,PARM='CS505'

Modernization track · Intro → Core · self-paced ~120h with labs (12–16 weeks at 8–10h/week; 15 days as a bench cohort) · prerequisite: none (CS100 Mainframe Foundations recommended, not required — Session 1 carries the survival subset: logon, ISPF, submit a job, read SDSF)

Java & COBOL from Zero: Foundations for Modernization Engineers

The course for beginner programmers who have just been assigned to a mainframe-modernization project — new hires on an SI’s bench, career changers, graduates with one semester of anything. No COBOL, little or no Java, no mainframe: you learn both languages at once, one idea per video in both forms (PIC X and String, COMPUTE ROUNDED and BigDecimal, PERFORM and for, FD and BufferedReader, SEARCH ALL and Map), and every claim is proven against the AWS CardDemo original running live on SteelFrame — its COBOL source, batch jobs, CICS screens and VSAM/DB2 data. You grow two programs from one specification, ACCTRPT in COBOL on the mainframe and AcctReport in Java in VS Code, until both re-express CardDemo’s account-master program with a rate table, a reject file and control totals, byte-identical to each other and to the mainframe’s own run. Three beginner blocks are placed where you need them: JCL (write, run and fix your own jobs), CICS (drive, trace under CEDF and read the sign-on and account-view programs; change one message in your own copy) and Assembler (read and hand-trace COBDATFT, the date module CBACT01C really calls; assemble, link and run your own). 86 short videos (about 11 hours), 16 checkpoints, two reading checks, a dual capstone on a hidden dataset. Graduates skip CS105 and CS510 and go straight to CS520, CS521 or CS530.

Self-paced available Cohort

Open for enrollment now. The lesson videos for this course are in production — release order across the track: CS510 → CS505 → CS520 → CS530 → CS521 → CS535 → CS500 → CS550 → CS525 → CS540 → CS545 — and every session below is published as its lessons and lab now and marked Coming soon until its videos are released. CS505 is second in the release order, right after CS510.

Plans: Free individual at no cost, or Paid individual at $349 per course, one-time — code review, extra exercises, grading and priority support.

//SYLLABUS DD DISP=SHR

Syllabus

Every session ends in a lab on your own environment. Labs are machine-checked against expected outputs — you and your L&D team always know exactly where you stand.

Orientation: one job, two languages

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Six videos. The bench you are joining and what a modernization engineer does all day; the mainframe survival subset — logon, ISPF, DSLIST, a tour of the CardDemo estate (44 programs, 47 jobs, 65 copybooks, 21 screens), READACCT submitted and its paperwork read in SDSF; Hello in COBOL through IGYWCL and its listing; Hello in Java through JDK 21, VS Code and javac; the first two-column card — the same idea in both languages — and the first mistake made twice (a missing period, a missing semicolon).

LAB Checkpoint 1: both hellos print your userid and the date, byte-identical to each other, proven by the course equiv CLI.

Data: names, pictures and types

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Six videos. A program is data plus steps — CBACT01C’s WORKING-STORAGE beside AcctReport’s fields; PIC X and String, with the padding bytes in hex; PIC 9 and int/long, and why an account number is text in both languages; PIC S9(10)V99 and BigDecimal — money is decimal; level numbers, group items and FILLER against a Java record, read offset by offset from CVACT01Y.

LAB Checkpoint 2: the account layout typed in both languages, three records displayed identically and every field equal to decode_records.

Arithmetic and money

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Five videos. ADD, SUBTRACT, MULTIPLY, DIVIDE and COMPUTE against operators and BigDecimal methods (and integer division’s trap); ROUNDED, truncation and ON SIZE ERROR against scale, RoundingMode and ArithmeticException, run side by side on SteelFrame; edited pictures against the course formatter, checked against TRANREPT’s printed lines; the cent that disappeared — lost to double in Java and to a missing ROUNDED in COBOL — found the same way, by a control total.

LAB Checkpoint 3: available credit for all 50 accounts, two programs, one total equal to your own ACCTSUM run; the money rules in force from here on.

Decisions

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Five videos. IF/ELSE/END-IF and if/else, compound and class conditions (NUMERIC); EVALUATE and switch, 88-levels and enums; validation as a ladder — CBTRN02C’s four reject reasons and the DALYREJS reason trailer written in both languages; the period that ended the IF and the = that should be ==, each exposed by a wrong count against the oracle.

LAB Checkpoint 4: the four reject reasons over the 300 daily transactions, counts identical to each other and to the 38 rejects POSTTRAN produced.

Loops and the batch skeleton

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Five videos. PERFORM in every form against for and while; the skeleton every batch program shares — initialise, prime, loop until end, finalise — read in CBACT01C and written as AcctReport’s main; counters, accumulators and the four control totals an operator checks first; paragraphs and methods with one job each, and why PERFORM THRU has no Java form.

LAB Checkpoint 5: the skeleton over a table of accounts in both languages, detail lines and totals identical, the balance total equal to ACCTSUM.

JCL: running what you write

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Six videos. JOB, EXEC and DD — the DDname is a contract with the program’s SELECT; DSN, DISP, SYSOUT and instream data, with your report cataloged under your own name; compile-link-run with IGYWCL, STEPLIB and the load module, and Maven as the Java side’s deck; return codes, COND and IF read in POSTTRAN, a real multi-step production chain; JCL ERROR, S806 and S013 read from JESMSGLG and fixed.

LAB Checkpoint 6 — the beginner-JCL gate: a three-step job you write from a blank member (compile, run, conditional print) at RC 0, plus three seeded JCL faults fixed from the messages alone; mvn verify green.

Files: reading the account file in both languages

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Six videos. SELECT/ASSIGN, FD, OPEN/READ/CLOSE and AT END against Files, BufferedReader and try-with-resources; FILE STATUS after every I/O against exceptions, with a FILE STATUS 35 in SDSF beside a NoSuchFileException; fixed-length records, LRECL and the copybook contract against the fixed-width parser; the keyed VSAM READ against a Map, with CARDXREF as the lookup; the LRECL mismatch and the silent zero-count run that balances because nothing was in it.

LAB Checkpoint 7: both programs read the real account file — detail lines and four control totals identical to each other, the count equal to READACCT, the total equal to ACCTSUM, every I/O checked.

Bytes: EBCDIC, zoned and packed

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Five videos. Hex, EBCDIC and why a PS dataset is bytes at rest, read with IDCAMS PRINT HEX and decoded with Charset IBM037; zoned decimal and the sign overpunch, native to COBOL and decoded by Java; COMP-3 packed decimal nibble by nibble, and the S0C7 provoked on purpose; COMP binary and ByteBuffer; the charset rule proven both ways.

LAB Checkpoint 8: a byte-true Java reader over the EBCDIC and packed images — 50/50 records, every field equal to decode_records, round-tripped to identical bytes; the COBOL program reading the KSDS prints the same lines as its PS run.

Writing: the report and the reject file

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Five videos. WRITE AFTER ADVANCING, headings and page breaks against a Writer and fixed 133-byte lines; detail lines, totals and the reject file with its reason trailer as first-class outputs; trailing spaces, line endings and the download charset against the byte diff; the oracle — run_capture, masks, the rules file and the equiv CLI with its three verdicts.

LAB Checkpoint 9: ACCTRPT and AcctReport each produce the report, the reject file and the totals — byte-identical to each other, to your READACCT capture and to your ACCTSUM capture.

Tables, lookups and sorting

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Five videos. OCCURS and subscripts against arrays and List (1-based meets 0-based); SEARCH and SEARCH ALL against Map, with the DISCGRP rate table CBACT04C reads and its DEFAULT fallback; DFSORT SORT FIELDS against Comparator and the EBCDIC-before-digits ordering trap; REDEFINES as views and dates as text in java.time.

LAB Checkpoint 10: monthly interest per account from the rate table, listed sorted by group and account, identical between the two programs and to the cent against INTCALC’s run.

Subprograms, copybooks and packaging

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Five videos. COPY and the copybook against import and the shared class; CALL USING and the LINKAGE SECTION against method parameters — with CBACT01C’s own CALL to the assembler module COBDATFT; link-edit and the load library against the JAR and the classpath, with S806 beside ClassNotFoundException; Git for both programs, with the PDS member statistics beside git log.

LAB Checkpoint 11: the rate calculation moved into RATECALC (COBOL, statically linked) and RateCalc (Java, its own module) with output unchanged by a byte; the CSUTLDTC driver’s ten date validations reproduced in Java; the commit on your remote.

Testing and debugging both sides

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Five videos. A ZWSUNIT test deck against JUnit 5; golden-file tests where your own run_capture of the COBOL run is the expected file; the SteelFrame debugger on ACCTRPT beside the VS Code debugger on AcctReport, stopped on the same record; reading an abend — S0C7, S0C4, S013 and the listing offset — against a stack trace.

LAB Checkpoint 12: JaCoCo at 85% branches, a five-check ZWSUNIT suite green, and the diagnosis lab — six seeded bugs, three per language, found and named (five of six required).

SQL: DB2 and JDBC

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Four videos. Tables, rows and SELECT in SPUFI on CardDemo’s TRANSACTION_TYPE and TRANSACTION_TYPE_CATEGORY; embedded SQL — the cursor in COTRTLIC, host variables, the DCLGEN and SQLCODE as the FILE STATUS of SQL; JDBC — the same cursor as a ResultSet with parameters against PostgreSQL loaded from CARDDEMO.DDL; the same join three ways, and what happens without ORDER BY.

LAB Checkpoint 13: the type × category join in SPUFI, embedded SQL and JDBC — 18 identical rows, both equiv summaries submitted.

CICS basics: the online half of CardDemo

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Six videos. What online means — CC00 sign-on, the menu and CAVW on the 3270, with the balance your batch report printed; transactions, tasks and programs in the CSD, CEMT, and the CLOSEFIL/OPENFIL seam between batch and online; reading COSGN00C — EXEC CICS RECEIVE and SEND MAP, READ FILE, XCTL, RETURN TRANSID, the COMMAREA and RESP; the BMS map and its attribute bytes beside the live screen; CEDF stepping CAVW’s three READs and their responses.

LAB Checkpoint 14 — the beginner-CICS gate: the sign-on-to-account-view trace table matched against the CEDF reference, and your own copy of COSGN00C with one message changed, compiled and defined under your names in a workspace, its cics_run_script transcript equal to the expected one — the live program untouched.

Assembler basics: the module CBACT01C calls

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Six videos. Why assembler is still there — COBDATFT, the date module CBACT01C really CALLs, and MVSWAIT; sixteen registers, the PSW and the condition code, with nothing typed; base + displacement and the object-code column of the ASMA90 listing; reading COBDATFT line by line — STM, USING, CLI/BE, MVC/MVI, LM/BR — each move drawn onto the caller’s record; assemble, link and run a module that returns a value through R15; the registers at an S0C7.

LAB Checkpoint 15 — the beginner-HLASM gate: COBDATFT hand-traced for two dates and the error path, matched against the reference; your module CALLed from ACCTRPT so the step RC equals the record count; one abend’s PSW offset named.

Capstone: two programs, one specification

Coming soon The videos for this session are being produced; its lessons and lab are published here now.

Six videos. The specification — ACCTRPT and AcctReport on a hidden CardDemo account-file variant with negative balances, an over-limit account, an inactive one, a missing rate group and a 2029 expiry; the COBOL review and the Java review against the craft rules; reading checks over an unseen COBOL program and an unseen Java program; the capstone run and the certificate; where next — the doors off the hallway (CS520, CS521, CS530, CS535) and the depth courses (CS120, CS150, CS170), with the CardDemo call graph as the estate you can now read.

LAB Checkpoint 16 — the dual capstone: both programs’ report, reject file and totals byte-identical to each other and to the reference run on the hidden variant, all craft rules green, checkpoints 1–15 complete and both reading checks at 80%.

//SKILLS  DD DSN=AFTER.THIS.COURSE

After this course, you can

//CERT    DD DSN=CS505.CERTIFICATE,DISP=(NEW,CATLG)

How the certificate is earned

CobolStack Certificate — Java & COBOL Foundations for Modernization (CS505) is issued from the lab harness’s own record of your runs — not from attendance. To earn it you must clear every gate below:

The certificate attests that you can write a complete batch program in COBOL and the same program in Java with identical bytes out, each proven against the mainframe’s own run; that you can read COBOL, JCL, CICS and assembler you have never seen well enough to work on a modernization bench from week one; and that a machine, not an attendance sheet, verified it.

The environment

Your seat is a private, full z/OS-compatible environment with the AWS CardDemo estate (COBOL, JCL, CICS/BMS, VSAM, DB2, two Assembler modules) and the SteelFrame oracle tools (run_capture, decode_records, cics_run_script, CEDF), beside your own Java 21 + Maven + VS Code + PostgreSQL toolchain in the browser — nothing to install, snapshot and reset per exercise. By the end of the course the lab harness will have verified: strong COBOL and strong Java you can write — a complete sequential-file batch program with VSAM read, rate table, report, reject file, control totals and a CALLed subprogram, in both languages, byte-identical to each other and to the mainframe reference on a hidden CardDemo variant, with a 30-question reading check per language — and beginner JCL, CICS and Assembler proven by three run-read-modify gates: your own three-step job at RC 0, a CEDF trace table plus a changed-program transcript, and a hand-traced production module plus your own assembled module returning the record count as the step RC.