In the "good old days" motor vehicles did not have any computers or electronics at all (except for maybe a radio). The engine management controls were primitive (compared to what we have today) consisting of vacuum operated motors (switches) and mechanical operated switches and triggers, etc. Electronics and computers were incorporated into the automotive industry mainly to reduce exhaust emission and increase fuel economy; drivability and power were not as important.
Because of the explosion of inexpensive powerful computers, todays cars now have the technology to lower their emissions and increase fuel efficiency dramatically while not sacrificing power and drivability; technology and computers have given us the best of both worlds.
I have often heard complaints that todays cars have become way too complicated and too hard to fix for the DIYer. Yes todays automobiles do have systems that are extremely complex and they do have much more "stuff" which really does seem to complicates repairing these system. OBD (On Board Diagnostics) was introduced in around 1996 which implemented a universal system that mandated that all manufacturers use a universal standardized system with a universal connector for reading diagnostic codes and gathering vehicle information from all the various vehicles computers.
This simplifies diagnosing all vehicle problems by having a simple easy way for the cars computers to be able to tell you (in a code) what the system detected to be out of range or defective. You just need to have the right tool (scanner) to access the codes. Basic scanners can only read the codes, better quality scanners (bi-directional) are also able to interact with the various vehicle systems giving you the capability to test the various systems to help you "nail down" the fault faster and accurately so you can avoid guessing at and replacing the wrong parts.
OBD-II diagnostic codes are identified depending on which system (and computer) they are part of and use a five-character alphanumeric codes. The first character indicates the system:
First Character is a letter indicating the system that is involved:
Second Character is a number indicating whether the code is generic or manufacturer-specific:
Third Character is a number indicating the specific subsystem:
Fourth and Fifth Characters are a specific fault index numbers that pinpoint the exact problem within the subsystem.