Портрет

Чекан Михаил Андреевич
программист-разработчик по профилю Олимпиады КД НТИ "Интеллектуальные энергетические системы", магистрант ИРНИТУ

Программирование — понятие, окруженное мистическим ореолом и мифами, притягивающими и отпугивающими обывателя. На деле же всё гораздо прозаичнее (но не проще), достаточно ответить на вопрос «что и зачем мы программируем?».

#Программирование #ИнженерноеМышление


Программирование? Что это такое? Зачем оно?

Человечество, как мы все знаем, перешло порог постиндустриального общества, в котором главным ресурсом является информация. Эту информацию мы обрабатываем либо мозгами, либо с помощью вычислительной техники.

Даже если обратиться к энергетике и Интернету энергии, Интернет вещей, который имеет место в этом поле, состоит из умных устройств, а умные устройства содержат в себе две сущности. Это hardware, «железо», как мы его называем; и software, программное обеспечение, «мозги». Про hardware стоит поговорить в отдельной истории, сейчас же мы обратимся к программному обеспечению. Программированию.

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

А сейчас мы всё же попробуем демистифицировать понятие программирования, потому что за полвека развития цивилизации понимание программиста перешло от человека, который сидит над монтажной платой и передёргивает проводки, к человеку, который сгорбился над монитором, произносит какие-то непонятные заклинания и нажимает пальцами на клавиатуре. Нет, программирование гораздо шире и глубже.

Конечно, есть попытки демистификации программирования путём выпуска обучающих курсов. Вы их все прекрасно видели, многие фирмы предлагают курсы по программированию, по разработке программного обеспечения, по вёрстке веб-страниц... Но это всё ответы на вопросы «как?» и немножко «зачем?». Но это не ответ на вопрос «зачем программировать вообще?». Почему мы программируем? Именно на этот вопрос мы постараемся начать давать ответ.

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

Здесь надо выделить специально несколько важных моментов. Во-первых, это понятность, потому что у нас есть определённый исполнитель, мы должны ему чётко прописать, какие команды он должен делать, иначе исполнитель просто не сможет выполнить поставленную задачу. Это конечность, потому что бесконечно работающая программа не выдаст никакого результата, а без результата алгоритм не имеет никакого смысла. Ну и, конечно же, универсальность, потому что под каждый набор входных данных разрабатывать отдельный алгоритм — задача очень нерациональная. В программировании важно устранение избыточности, это один из трендов.

Вас пугает определение алгоритма? Если оно пугает, то зря, потому что по своей сути компьютер — это просто очень сложный механизм, основной задачей которого является обработка чисел. «Computer» с английского — «вычислитель». И всё. То есть компьютер прекрасно работает с числами, и он больше не делает ничего, кроме того, что прикажет ему человек.

По сути, у компьютера нет своего сознания: что ему программист прикажет, так машина и сработает. Точно так, как прикажет программист или другой программист, который разработал библиотеки, которыми пользуется первый программист, который пишет для этого компьютера. Да, довольно запутанная система, в программировании много неявных зависимостей, в том числе и между людьми. Но это другая история. Всё же, нам стоит говорить о написании программы, о работе с компьютером.

Но сначала приостановимся и зададим себе вопрос: а нас пугает то, что компьютер делает ровно то, что мы ему прикажем? Если нас это пугает, это действительно хороший момент, потому что ответственность несёт за собой определённую долю страха. Но впадать в панику не надо, потому что, опять же, компьютер не имеет сознания. Как мы пропишем, так он и сработает.

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

Объектно-ориентированное программирование, функциональное программирование, логическое программирование — это всё абстракции просто ради того, чтобы человеку было легче описать, что он хочет от компьютера.

И мы переходим к важному тезису. Суть программирования — это описание на языке, более-менее понятном человеку, определённого рода задачи, этому человеку нужной. Но при этом данный язык должен транслироваться в язык, понятный машине.

История развития языков программирования начиналась с машинного кода, когда человек набирал, даже на перфокартах и перфолентах, он выбивал дырки, задавая двоичные числа, понятные самой машине. Потом появились Фортран, Кобол, дальше Си, C++, потому что люди научились делать трансляторы, которые переводят однозначным образом человеческий (почти человеческий) язык программирования в машинный код.

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

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

цепочка «человек - задача - программа - код - компьютер»

Без задачи программирование не имеет смысла. Потому что если взять какие-то примеры программирования без определённой практической пользы, например программирование инструментального программного обеспечения, когда разрабатываются новые компиляторы, когда разрабатываются различные вспомогательные библиотеки для программистов — это программирование, приложенное к задаче развития программирования. Это те же самые научные исследования по развитию инструментов строительства, тех же научных исследований, по развитию аппарата использования этих инструментов.

Есть так называемая «демосцена», когда программист просто берёт машину и выжимает из неё все возможности, чтобы сделать красивую картинку и впечатляющие визуальные эффекты. Это программирование, приложенное к искусству.

Но обратимся к самому очевидному примеру программирования — это автоматизация. Но мы стреляем в слишком широкое понятие. Автоматизация, а что это? Мы об этом ещё поговорим.

Но стоит сказать, чем хорош компьютер. Да, он просто обрабатывает числа. Но он делает это быстро, он делает это детерминированно: если мы даем ему одинаковые входы, мы получаем одинаковые выходы, и нет творческого элемента, когда компьютеру скажут «выдай десять единичек», а он выдаст восемь единичек и два нолика, просто потому что он так захотел. Нет, у компьютера нет сознания, напомню. Компьютер работает строго так, как прописано в программе. И, да, компьютер, повторюсь, работает очень быстро. Он считает числа гораздо быстрее нас, и мы этим прекрасно пользуемся. 

Для размышления

Рассмотрите используемые вами программы, отвечая при этом на следующие вопросы:

– Какую задачу решает программа?
– Как она это делает в целом?
– Как она при этом работает с данными?

Если вы пишете свои программы, проделайте то же самое, особое внимание уделяя первому вопросу.

Материалы


Последнее изменение: Wednesday, 5 August 2020, 18:17