Getting Started With AS/400 Systems
I spent about six years working with IBM midrange systems before anyone actually admitted they existed outside of government offices and hospitals that refused to upgrade. If you're trying to learn this platform today, you're probably either inherited a system or someone at work decided it's cheaper than replacing everything. The learning curve isn't steep, but the documentation reads like it was written by committee in 1987 and never revised. Here's what actually works when you're sitting in front of a green screen terminal for the first time. The AS/400—now rebranded as IBM i, though nobody I know uses that name—runs on a completely different architecture than Windows or Linux. You don't navigate with point-and-click. You type commands. Simple ones at first, then increasingly complex strings that feel like you're hacking something even when you're just checking file attributes.
Mastering The As 400 A Practical Hands On Guide
The command line is your primary interface. Type STRSEU to open the Source Entry Utility if you need to edit RPG or COBOL programs. Use WRKOBJ to list objects in a library. QCMDEXC lets you execute system commands from within programs, which becomes important when you're automating batch processes. These aren't optional commands. They're the keyboard shortcuts of a system that predates your birth. I remember spending three hours once trying to figure out why a compiled program kept failing with a CPF2125 error. The message said "Key violation," which tells you absolutely nothing unless you happen to know that a key violation means you're trying to insert a duplicate record into a keyed file. The workaround was checking the unique key specifications on the DDS definition before the program ran. That was version 5R4. Modern systems still throw the same error message with identical wording. RPG programming on the AS/400 follows a lineage that goes back decades. Free-form RPGLE changed the syntax from fixed-column formatting to something resembling C, but the underlying data structures—records, fields, subfields—work exactly the same way. If you understand file access methods like keyed sequential versus relative, you already know 80 percent of what matters.
The real challenge isn't learning the language. It's understanding the object-oriented layer underneath. Libraries contain objects. Objects have attributes like expiration dates, locking modes, and authority profiles. These aren't theoretical concepts. I watched a production system go down for four hours because someone changed the object expiration date on a critical database table from *NOMAX to *ENDVAL. The system quietly rejected writes after the date passed, logged nothing useful, and the error appeared only in program output files instead of the job log. Security authority works differently than most systems. Every object has an OWNER value and a sequence of *PUBLIC, *SAME, and individual user entries. The default authority model assumes least privilege by default, but legacy systems have decades of *ALLOBJ grants applied during installation. Finding actual security holes usually involves running DltObj with the right profile or using DSPAUTL against specific objects. Most shops I've worked with have authority lists spanning thousands of entries for a single user who's been around since 2003. DB2 for i handles queries differently than server databases. You don't typically write SQL unless you're doing something advanced. The native access methods—OPEN, READ, READE, CHG, DELETE—map directly to record-level operations on indexed files. An READD operation on a file keyed by employee number will fetch the next matching record. Mixing SQL and native access in the same program causes performance problems that are nearly impossible to diagnose because the query planner and the record fetch engine optimize differently.
Get the Full Details

CL programming—Control Language—is the glue between jobs, programs, and system events. The CPYFRMIMPF command copies data from import files into database tables. SBMJOB submits batch work. CHGJOB changes job attributes on the fly. These commands form the backbone of most automation scripts. A typical nightly batch process might call five CL programs, each handling a different stage of data transformation and file movement. The Web UI exists, but you'll rarely use it. The Operations Navigator interface works for basic monitoring and some administration tasks. Real work happens through SSH sessions, TN5250 emulators, or the IBM i Access Client Solutions package. The ACS tools include a better integrated development environment than the built-in SEU, plus query managers and debuggers that actually trace variable values without requiring you to write display output statements into your code. Debugging is where most people struggle. The interactive debugger lets you set breakpoints, examine variables, and step through programs line by line. But the job log is often more useful. Commands like DSPJOBLOG and MSGF let you trace exactly what happened during program execution. I once identified a race condition in a multi-user inventory update by watching the job log timestamps align with specific CPF messages across three concurrent jobs. The program logic looked correct. The timing didn't.
Performance tuning on this platform follows a different logic than modern systems. Index selection matters more than query complexity. A well-keyed file accessed through native methods typically outperforms an equivalent SQL query on the same data. Buffer pool configuration affects database access patterns significantly, but most systems ship with defaults that work adequately for light loads and poorly under stress. Checking the system summary with GO SYSPRB gives you utilization numbers. High CPU wait times usually indicate I/O contention, not processing bottlenecks. Migration and upgrade paths are the kind of thing that keeps system administrators up at night. Moving from V5R4 to V7R3 involves testing every custom program, verifying database compatibility, and re-authorizing objects that may have accumulated permission drift over fifteen years. IBM provides migration guides, but the real work happens when a program that compiled fine on the old release throws a constraint error on the new one because string handling rules changed slightly between versions. There's no download link for AS/400 itself. It's enterprise hardware and software running on IBM Power systems. What you can access are development environments through IBM's developerworks portal, documentation libraries, and community forums where people discuss things like handling null values in RPG and avoiding common pitfalls with the MONMSG command. The System i Developer Community forum has threads going back years with solutions to problems you'll encounter.
The ecosystem outside IBM is smaller now than it was ten years ago. Third-party tools exist for version control, continuous integration, and modern development workflows, but they require investment in training and infrastructure. Some shops run Docker containers on IBM i for specific workloads. Others maintain legacy COBOL systems with teams of three people who've been maintaining the same codebase since the Clinton administration. Neither approach is wrong. They're just different points on a spectrum between preservation and modernization. If you're approaching this with the expectation of quick results, you'll be frustrated. The syntax conventions differ from mainstream languages. The error messages reference things like "data structure name exceeds maximum length" without explaining which data structure you're looking at. Authority errors require understanding the full security chain from user profile to object-level permissions. Learning takes time, but the investment pays off in system stability and the ability to maintain environments that other organizations struggle to replace. The practical reality is that AS/400 skills remain valuable because these systems keep running. They're reliable, secure when properly configured, and expensive to replace. Companies that have migrated everything to cloud platforms often regret it when downtime costs exceed licensing fees. The systems that persist do so because they work, not because they're modern. Learning to master them means accepting that the interface feels archaic while the underlying reliability justifies the investment.
