The Success of C
C is a remarkable language. Designed originally by one man, Dennis
Ritchie, working at AT&T Bell Laboratories in New Jersey, it has
increased in use until now it may well be one of the most widely-written
computer languages in the world. The success of C is due to a number of
factors, none of them key, but all of them important. Perhaps the most
significant of all is that C was developed by real practioners of
programming and was designed for practical day-to-day use, not for show or
for demonstration. Like any well-designed tool, it falls easily to the hand
and feels good to use. Instead of providing constraints, checks and
rigorous boundaries, it concentrates on providing you with power and on not
getting in your way.
Because of this, it's better for professionals than beginners. In the
early stages of learning to program you need a protective environment that
gives feedback on mistakes and helps you to get results
quickly—programs that run, even if they don't do what you meant.
C is not like that! A professional forester would use a chain-saw to
cut down trees quickly, aware of the dangers of touching the blade when the
machine is running; C programmers work in a similar way. Although
modern C compilers do provide a limited amount of feedback when they notice
something that is out of the ordinary, you almost always have the option of
forcing the compiler to do what you said you wanted and to stop it from
complaining. Provided that what you said you wanted was what you really did
want, then you'll get the result you expected. Programming in C is like
eating red meat and drinking strong rum except your arteries and liver are
more likely to survive it.
Not only is C popular and a powerful asset in the armoury of the serious
day-to-day programmer, there are other reasons for the success of this
language. It has always been associated with the UNIX operating system and
has benefited from the increasing popularity of that system. Although it is
not the obvious first choice for writing large commercial data processing
applications, C has the great advantage of always being available on
commercial UNIX implementations. UNIX is written in C, so whenever
UNIX is implemented on a new type of hardware, getting a C compiler to work
for that system is the first task. As a result it is almost impossible to
find a UNIX system without support for C, so the software vendors who
want to target the UNIX marketplace find that C is the best bet if they
want to get wide coverage of the systems available. Realistically,
C is the first choice for portability of software in the UNIX
environment.
C has also gained substantially in use and availability from the
explosive expansion of the Personal Computer market. C could almost
have been designed specifically for the development of software for the
PC—developers get not only the readability and productivity of a
high-level language, but also the power to get the most out of the PC
architecture without having to resort to the use of assembly code.
C is practically unique in its ability to span two levels of
programming; as well as providing high-level control of flow, data
structures and procedures—all of the stuff expected in a modern
high-level language—it also allows systems programmers to address
machine words, manipulate bits and get close to the underlying hardware if
they want to. That combination of features is very desirable in the
competitive PC software markeplace and an increasing number of software
developers have made C their primary language as a result.
Finally, the extensibility of C has contributed in no small way to its
popularity. Many other languages have failed to provide the file access and
general input-output features that are needed for industrial-strength
applications. Traditionally, in these languages I/O is built-in and is
actually understood by the compiler. A master-stroke in the design
of C (and interestingly, one of the strengths of the UNIX system too)
has been to take the view that if you don't know how to provide a complete
solution to a generic requirement, instead of providing half a solution
(which invariably pleases nobody), you should allow the users to build
their own. Software designers the world over have something to learn from
this! It's the approach that has been taken by C, and not only for I/O.
Through the use of library functions you can extend the language
in many ways to provide features that the designers didn't think of.
There's proof of this in the so-called Standard I/O Library (stdio), which
matured more slowly than the language, but had become a sort of standard
all of its own before the Standard Committee give it official blessing. It
proved that it is possible to develop a model of file I/O and associated
features that is portable to many more systems than UNIX, which is where it
was first wrought. Despite the ability of C to provide access to low-level
hardware features, judicious style and the use of the stdio package results
in highly portable programs; many of which are to be found running on top
of operating systems that look very different from one another. The nice
thing about this library is that if you don't like what it does, but you
have the appropriate technical skills, you can usually extend it to do what
you do want, or bypass it altogether.
|
Printer-friendly version
The C Book
This book is published as a matter of historical interest.
Please read the
copyright and disclaimer information.
GBdirect Ltd provides up-to-date training and consultancy in
C,
Embedded C,
C++
and a wide range of
other subjects based on
open standards if you happen to be interested.
|