Основы программирования. Данные.

В программировании все предельно просто. Все зависит от точки зрения. Не стану нагромождать сложноподчиненные предложения, скажу просто и прямо. Данные это информация. Минимальные данные это 1 бит. Точнее его состояние, нолик или единичка. Дальше только массив данных. И множество форматов.
Так вот, если посмотреть с точки зрения данных, все укладывается в 3 клика, или 3 шага

1. Считать данные
2. Обработать данные
3. Вывести результат.

При необходимости повторить несколько раз.

В программировании, то есть в цифровых системах любого уровня данные можно либо просто считать готовые из файла, либо считать первичные данные с датчиков (могут быть представлены файлом устройства), либо ввести данные вручную. На клавиатуре, на перфокартах.

Далее происходит их обработка. Здесь мы можем сравнивать, складывать, умножать, форматировать как нам удобно, клонировать, опять обрабатывать… Последовательно, или параллельно, в двоичном виде или в текстовом… Как бы не велико было многообразие вариантов,но это все один этап обработки.

Наилучшим вариантом обработки данных будет параллельный. Взяли, выстроили входные данные в необходимом порядке и произвели их обработку, на выходе получили результат. Такой подход позволяет произвести обработку за один такт. Для этого и придумали ПЛИС и RISC процессоры. Чтоб все делать быстро и за один такт. Естественно что это идеальная ситуация и в природе почти не встречается, даже занесена в Красную Книгу. А зря. Достоинств масса, и реализовать несложно. Но все равно в Красной Книге.

Почему же разработчик, чья свобода ничем уж точно не ограничена и не может быть по определению ограничена, кроме как им самим, использует для обработки как правило другой, более сложный путь?

Причина простейшая. Микропроцессоры. В какой-то момент человечество свернуло с прямой дороги на дорогу по спирали. Она конечно тоже имеет конец — коннектор, где можно считать результат обработки данных, но она похожа на спутанный клубок ниток, а не на гениальную по простоте кратчайшую прямую. Процессор выполняет операции последовательно, с очень многими избыточными служебными и промежуточными операциями, в цикле. Микропроцессорная система, особенно как она сейчас обычно устроена, или простаивает с загрузкой меньше процента, или загружена на все 100. Знакомо?

Задавая вопрос ускорили ли компьютеры нашу жизнь,я склонен ответить что нет. В целом нет. Наоборот, замедлили. Добавили ли удобств? Немного. Добавили ли проблем? Более чем достаточно.

Меньше кода выше надежность. Меньше транзисторов, меньше вероятность случайного сбоя. Пусть вероятность этого сбоя мала, она присутствует абсолютно всегда, и случится обязательно. Физика. Неумолимо.

Мы скоро запутаем эту спираль в клубок еще сильнее. Да, квантовые процессоры, сверхвысокое быстродействие. Пока у них вероятность получения правильного результата меньше, чем мы в уме можем посчитать. Победят и это, уж если мы чего решили, то будет обязательно. Вопрос с какими издержками в коде, в оборудовании, вероятности ошибки. Будет лучше? Риторический вопрос.

То есть не обязательно считать что микропроцессор и все, других путей нет. Может и есть. Может вообще процессор лишний на плате.
Все ведь можно сделать и на ПЛИС, их возможности сейчас ничего так, подросли. На ПЛИС можно и микропроцессор собрать, а вот на микропроцессоре ПЛИС и ее возможности не реализуешь, только эмулируешь в ряде случаев. И другие примитивы. Поэтому прежде чем выбирать элементную базу для разработки, начните с абсолютно чистого листа, решайте прикладную задачу за 3 шага не более. В комплексе «конструктив-железо-софт». Или стремитесь к этому, насколько возможно.

Тогда программирование принесет желаемый результат, быстро, просто, надежно и с удовольствием. Но закладывается этот результат на этапе осмысливания проекта, с вопроса «С чего начнем?». С анализа данных.