The Linux Foundation Projects
Skip to main content
Blog | COBOL Programming Course | Mentorship

Summer Mentorship 2025: From Midpoint to Finish: My LFX Mentorship with the COBOL Programming Course, Athar Ramzan

By | September 24, 2025

Introduction

Hi, I’m Athar Ramzan. I recently completed my mentorship in the Linux Foundation’s LFX program, working on the Open Mainframe Project’s COBOL Programming Course with my mentors Sudharsana Srinivasan (IBM) and Michael Bauer (Broadcom).

The goal of my mentorship was to improve the COBOL Programming Course by creating new hands-on labs and debugging exercises that make mainframe programming more accessible and engaging for future learners.

In my midpoint blog, I wrote about learning the course as a student, improving lab clarity, and planning new debugging and ABEND (abnormal end) labs. This final post shows what I actually built in the second half of the mentorship, why those changes matter, and what I learned from the process.

What I Worked On

At the midpoint, I set a clear goal: add hands-on labs that teach real COBOL runtime errors and practical debugging skills. I wanted learners to be able to:

– read and interpret error output

– reproduce bugs in a safe way

– fix code themselves using a step-by-step approach

During the second half of the mentorship, I put that plan into action – creating new labs, improving existing exercises, and ensuring each lab followed a simple, practical learning path.

What I Built

I added six contributions focusing on real, common issues COBOL developers encounter. Each lab is designed for students to learn by doing – running code, reading system output, diagnosing the problem, and fixing it.

Lab Contributions

  1. S0CB-Division by Zero (PR #335)

What it does: Provides a COBOL program and JCL that intentionally causes a divide-by-zero ABEND.

Learner experience: Run the job, read the CEEDUMP/S0CB output, identify the uninitialized divisor, and correct the code.

How it helps: Teaches input validation, defensive coding, and how small mistakes (like uninitialized values) can cause major crashes.

 

  1. S0C7-Data Exception (PR #337)

What it does: Reproduces an S0C7 error by performing arithmetic on invalid numeric data.

Learner experience: Examine error messages and data layout, identify the faulty field, and correct the data handling.

How it helps: Builds skills in data validation, understanding field types, and reading system error clues—crucial for production debugging.

 

  1. Case-Sensitive String Comparison (PR #334)

What it does: Shows how COBOL handles string literal comparisons, where case sensitivity matters.

Learner experience: Fail once, diagnose why “Alice” ≠ “alice”, then update the code or logic to handle the case correctly.

How it helps: Reinforces attention to detail and demonstrates how subtle language rules can cause real bugs.

 

  1. Lab 8.6 Enhancement – Count Clients from a Different State (PR #333)

What it does: Adds a challenge where students modify an existing client-count program to filter by another state.

Learner experience: Edit working-storage and conditional logic, run the job, and verify results.

How it helps: Shifts learners from copying and pasting to thinking, reading, and modifying COBOL code in practical ways.

 

  1. S322-Timeout / Infinite Loop Lab (PR #338)

What it does: Shows an infinite loop that triggers a system timeout (S322). Includes JCL with a short TIME= setting to force the timeout.

Learner experience: Observe the timeout, locate the loop bug, apply a fix, and confirm the job finishes.

How it helps: Teaches loop termination, resource management, and why infinite loops are a real issue.

 

  1. Documentation Fix (PR #332)

What it does: Corrects a typo in an ABEND message in the course documentation.

This was actually my very first contribution – looking back, it’s remarkable how much I’ve grown from fixing a simple typo to designing complex debugging scenarios.

 

Overall Impact

These labs bring COBOL to life by reproducing real errors and requiring hands-on fixes, making learning interactive. Each lab includes comprehensive educational content, such as complete programs, job control files, step-by-step instructions, and screenshots. Learners develop curiosity to find solutions and excitement when they successfully fix problems.

What I Learned

I went from a complete beginner to confidently writing COBOL and JCL, using IBM Z Open Editor and Zowe Explorer, and designing labs that reproduce common ABENDs (S0CB, S0C7, S322); along the way, I learned to write clear step-by-step instructions and interpret system dumps. Professionally, I improved my technical writing, learned how to teach through practical examples, and gained hands-on experience with open source collaboration – submitting PRs, responding to reviews, and using community feedback. Most importantly, my mindset changed: I now see confusion as the start of learning, and I’ve learned that systematic thinking and persistence turn obstacles into useful learning opportunities.

Closing Thoughts

This mentorship transformed my approach to COBOL and mainframe development. I started curious but often overwhelmed; now I’m confident in writing COBOL, debugging ABENDs, and creating educational resources.

Sudharsana and Michael’s guidance let me learn at my own pace while providing freedom to experiment, fail, and improve. The labs I created will help future COBOL developers handle real-world challenges with confidence instead of panic.

Thank you to the Linux Foundation, the Open Mainframe Project, and my mentors for this transformative opportunity. Moving from the uncertainty I shared in my midpoint blog to this place of confidence proves that with persistence and good mentorship, anyone can grow from a confused beginner to a capable contributor.

Linkedin Github 

Share