У первобытных народов не существовало развитой системы счисления. Одной из наиболее древних систем счисления является египетская иероглифическая нумерация, возникшая еще за 2500 – 3000 лет до н. э. Это была десятичная непозиционная система счисления, в которой для записи чисел применялся только принцип сложения (числа, выраженные рядом стоящими цифрами, складываются). Аналогичными системами счисления были греческая, геродианова, римская, сирийская и др. Другая система счисления основанная на позиционном принципе, возникла у индейцев майя, обитателей полуострова Юкатан ( Центральная Америка) в середине 1 – го тыс. н. э. Современная десятичная позиционная система счисления возникла на основе нумерации, зародившейся не позднее 5 в. в Индии. Вскоре после возникновения десятичная позиционная система счисления начинает распространяться из Индии на Запад и Восток.
В файловых системах одновременная работа нескольких пользователей, связанная с модификацией данных в файле либо вообще не реализовывалась, либо была замедлена. Эти недостатки привели к разработке новых подходов к управлению информации. Этот подход был реализован в рамках новых программных средств и называется системой управления базой данных (СУБД), а сами хранилища информации назывались базами данных и банками данных. Одним из первых этапов создания базы данных – это были большие ЭВМ. Первые СУБД были даны в эксплуатацию фирмой IBM в конце 60-х годов. Эта СУБД была связана с организацией базы данных на больших ЭВМ (360) и ЕС (Единая система). Здесь базы данных хранились во внешней памяти центрального ЭВМ. Пользовательскими задачами были запуск данных в пакетном режиме. Мощные операционные системы параллельно обеспечивали множество задач. Эти системы можно было отнести к системе распределённого доступа, потому что база данных была централизованной. Хранилась на установленной внешней памяти одной из центрального ЭВМ, а доступ к ней поддерживался от многих пользователей и задач.
Основная отличительная черта системного программирования по сравнению с прикладным программированием заключается в том, что результатом последнего является выпуск программного обеспечения, предлагающего определённые услуги пользователям (например, текстовый процессор) . В то время как результатом системного программирования является выпуск программного обеспечения, предлагающего сервисы по взаимодействию с аппаратным обеспечением (например, дефрагментация жёсткого диска) , что подразумевает сильную зависимость таких программ от аппаратной части. В частности выделим следующее:
программист должен учитывать специфику аппаратной части и другие свойства системы в которой функционирует программа, использовать эти свойства, например, применяя специально оптимизированный для данной архитектуры алгоритм.
обычно используется низкоуровневый язык программирования или такой диалект языка программирования, который
позволяет функционирование в окружении с ограниченным набором системных ресурсов.
работает максимально эффективно и имеет минимальное запаздывание по времени завершения.
имеет маленькую библиотеку времени выполнения (RTL) или не имеет её вообще.
позволяет прямое управление (прямой доступ) к памяти и управляющей логике.
позволяет делать ассемблерные вставки в код.
отладка программы может быть затруднена при невозможности запустить её в отладчике из-за ограничений на ресурсы, поэтому может применяться компьютерное моделирование для решения этой проблемы.
Системное программирование существенно отличается от прикладного, что обычно приводит к специализации программиста в одном из них.
Часто, для системного программирования доступен ограниченный набор средств. Использование автоматической сборки мусора довольно редкое явление и отладка обычно сложна. Библиотека времени выполнения, при её наличии, часто менее и совершает меньшее количество проверок. В связи с этими ограничениями обычно применяют при мониторинге и записи данных — операционные системы.