What exactly is a mainframe and what exactly does a programmer do on that?
I have searched (googled) a lot but nothing answers me clearly. From what I get, "huge" computers with "many" CPUs running "legacy" software written in "legacy" languages are mainframes and the programmers "maintain" them.
I am confused. Firstly, could a cloud be considered a mainframe or if I built a system with 23 cpus with oodles of RAM and disk space would it be a mainframe? And what about the programmer's job?
So here I come to this place that has a reputation of giving quick and relevant replies. Please explain. :)
Solution 1:
MAINFRAME: noun. An obsolete device still used by thousands of obsolete companies serving billions of obsolete customers and making huge obsolete profits for their obsolete shareholders. And this year's run twice as fast as last year's. (from The Devil's IT Dictionary)
Below are two sections. One on what mainframes are, the other on mainframe programmers.
The first thing you need to know about mainframes is that they are designed for a different purpose than many modern computers.
Today's computers are all about the speed and power of the processor. Occasionally a PC will hang in a wait cycle and sometimes they even crash.
Mainframes on the other hand are about reliability, availability, and serviceability (RAS).
Reliability. This word is used both in the hardware sense (they keep running) and in the data sense (data corruption is mind-freaking outrageously rare). See my notes below on WHY this is true.
Availability. Mainframes have something called "five nines" availability which means that a mainframe's "up time" factor is 0.99999 or put in plain English, a mainframe can run non-stop 24x7x365 supporting thousands of simultaneous users for a full year and can reliably be counted on to not be "down" for more than about 5 minutes total for the year.
Serviceability. A mainframe is built with many custom designed circuits, each focused on a special task. If some part starts to fail, the problem will be sensed automatically and another circuit will take over and the system operator will be notified. If the problem circuit needs to be replaced, it usually can be done so while the computer keeps on running.
Modern computers start with a generic Central Processing Unit (like the x86 series) and the OS software is written using the existing CPU codes. But the reason WHY mainframes are so solid is because the hardware and software are co-designed.
If the operating system needs to continuously do a complex task in a PC then a routine is written and called by the CPU which does all the work. But in a mainframe -- if the demand for it is high enough -- sometimes a specialized circuit is designed and installed dedicated to that task. For example in some modern mainframes there are specialized circuits just for encrypting and decrypting data and other circuits just for executing Java code. There also are special circuits for talking to disk drives and printers so the CPU doesn't get tied up in trivia. And of course there is a ton of special circuitry designed to prevent data corruption. In a modern PC all of that is done by the CPU.
The closest thing we have to that in PC's are (1) math co-processors and (2) graphic co-processors, both relatively modern inventions for PC's but mainframes were doing this kind of stuff more than 50 years ago.
One last thing: The greatest strength of mainframes in how they are used is something called massive parallel transaction processing. This is the ability for a single mainframe to communicate with tens of thousands of users and/or other systems all at the same time. Think about all those debit card point-of-sale systems at virtually every store/gas-station/restaurant you shop at. All of them talk to a mainframe every time someone swipes a card and an answer is returned usually in less than a second after searching through billions of records.
The bottom line: Unless something goes very VERY seriously wrong (and even then it is usually caused by human error) mainframes don't hang and they don't crash. The data they handle is accessed quickly and accurately. They are called "big iron" for a good reason.
See http://www.mainframes360.com/2009/06/what-is-mainframe-computer.html and also http://www.wired.com/2015/01/z13-mainframe/ for more information.
You also asked about programmers "maintaining" the computer...
Mainframes have two different kinds of programmers. The first kind is what you are used to, application programmers. These are the folks who write using COBOL and C++ and JAVA to work with databases and reports and stuff like that. The other kind are called system programmers and their job is to maintain the operating system and monitor the hardware.
Legacy code is simply code that was "inherited" from previous generations of programmers. It is good solid code that works and because it works the companies that use it would rather not replace it with "new" code that might have bugs. Like all software things happen that require the code to occasionally be modified and that is where programmers who specialize in legacy code are needed. They know these old languages and systems and that knowledge is valuable to companies that use mainframes and other kinds of older computers.
Every single PC user has a unique combination of applications and hardware. Yet Microsoft sends out periodic one-size-fits-all "updates" to Windows and you either accept or reject them. Same thing with some of the various Linux distros. And sometimes those updates cause problems because they don't work right with your hardware and software.
A mainframe is like an airplane, it makes money when it works and it loses money when it doesn't. A mainframe is incredibly expensive to have sitting idle or crashing due to a bad update and companies who operate them cannot afford "problems". So they have system programmers to prevent those problems.
The job of a systems programmer is to analyze the OS updates (patches) from IBM and test them BEFORE installing them to make sure they do not cause problems on that particular machine. They actually examine parts of the source code of the updates and compare it against their company's hardware and software configuration. If needed they will work with IBM to customize the update so it will work safely with their unique system.
The system programmer has to know every application that is installed and every piece of hardware that is connected. He or she is responsible for anything and everything that changes on the system.
This is a small part of what a systems programmer does, and the typical training period for an expert systems programmer is 10 to 20 years.
See https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zmainframe/zconc_sysprogrole.htm for more information.
Solution 2:
The mainframes I used to work on allocated CPU priority levels and RAM to dumb terminals which, in effect, acted like computers in their own right. In this way, many users could run programmes on the same computer without interfering with each other. The mainframe hardware consisted of several PCBs, each with it's own function. The central processor could consist of more than one board e.g. registers, arithmetic logic unit, floating point processor, etc.