Как ни удивительно, но не все языки программирования созданы для программистов. Классические примеры языков для непрограммистов — COBOL и Basic. COBOL был создан не для того, чтобы облегчить жизнь программистам или повысить надежность программного продукта, и даже не для повышения продуктивности труда программиста, а для того, чтобы непрограммисты могли читать и понимать написанные на нем программы. При создании языка Basic в значительной степени преследовалась цель сделать для непрограммиста доступным решение на компьютере относительно простых задач.
В противовес этому язык С был создан и апробирован активно работающими программистами. В результате С обеспечивает то, чего и ждут от него именно программисты: небольшое количество ограничений, блочную структуру, автономные функции и малое количество ключевых слов. Программы, написанные на языке С, обладают эффективностью программ, написанных на языке ассемблера, и структурированностью, присущей программам, созданным на языках Pascal или Modula-2. Поэтому неудивительно, что во всем мире С стал универсальным языком программирования.
Решающим фактором успеха языка С стало то, что во многих случаях он может быть использован вместо ассемблера, который основан на символическом представлении бинарного кода, непосредственно выполняемого компьютером. Каждая операция ассемблера представляет для компьютера одну элементарную задачу. Разрабатывая программу на языке ассемблера, программист может сделать программу максимально гибкой и эффективной, однако работа с самой программой ассемблера и ее отладка — чрезвычайно трудоемкий процесс. Более того, из-за отсутствия средств структурного программирования в языке ассемблера окончательная программа представляет собой то, что программисты называют «спагетти» — хаотичную совокупность переходов, индексов и вызовов функций. Из-за своей неструктурированности программа, написанная на языке ассемблера, с большим трудом поддается расширению, модификации и даже просто пониманию. И что, возможно, наиболее существенно, процедуры, написанные на языке ассемблера, не обладают переносимостью на компьютеры с процессорами, система команд которых отличается от системы команд исходного процессора.
Первоначально С использовался для решения задач системного программирования. Системная программа — это часть операционной системы компьютера или утилита, как, например, редактор, транслятор, компоновщик и т.п. По мере роста популярности С, многие программисты стали использовать его для решения других задач благодаря его переносимости и эффективности, а также потому, что им это нравилось! Поистине этот язык стал долгожданным и впечатляющим достижением в области языков программирования.
С появлением языка C++ многим программистам стало казаться, что С прекратил свое существование как отдельный язык программирования. Однако это не так. Во-первых, не для всех программ нужны объектно-ориентированные возможности C++. Например, такие приложения как системы внедрения объектов, по-прежнему программируются главным образом на С. Во-вторых, в настоящее время во всем мире работает чрезвычайно много программ, написанных на С, причем разработчики продолжают модернизировать и поддерживать эти программы. В-третьих, разработка нового стандарта С99 убеждает в том, что развитие и совершенствование С продолжается. То, что С стал базисом для C++, навсегда останется его неоспоримой заслугой, и в то же время язык С сам остается одним из лучших языков программирования.