Приветствую в своей первой статье! Меня зовут Дмитрий. На данный момент я являюсь backend‑разработчиком на языке C#. В этой статье поговорим о программировании в целом. Определим что такое программирование, посмотрим, как программировали раньше и слегка затронем современные тренды.
Лирика
Я изложу, для чего решил публиковать статьи, для кого они предназначаются, какой будет формат и что планируется в дальнейшем.
За свою скромную карьеру Web‑разработчика я успел побывать в роли backend, frontend и fullstack. Но, какую бы роль я не исполнял, мне всегда казалось, что мои навыки недостаточно развиты. Конечно, я уделял много свободного времени на чтение статей, книг, работу над пэт‑проектом. Но обилие информации и технологий для fullstack-роли слегка придавливало. Тогда я решил сфокусироваться на backend‑е, однако быстро стало понятно: материала не стало меньше, просто он стал сложнее, а времени и сил на освоение не стало уходить меньше. Здесь мне и вспомнилась фраза: «Хочешь чему‑то научиться, начни это преподавать». К полноценному преподаванию я не готов, а вот написание статей — это вполне в моих силах.
Для чего — для более глубокого понимания и освоения различных тем в области программирования.
Для кого — для людей, делающих первые шаги в программировании или имеющих начальные навыки.
Формат — планируется делать статьи не очень большими по объему и с легкой, либо средней сложностью материала. Доступным языком.
Планы — будем двигаться от общего к частному. Сначала будут статьи о программировании в общем, о веб‑разработке. После перейдем к прикладным темам на примере конкретных технологий, сравним те или иные подходы к решению различных проблем.
О программировании
Начнем с определения. Заглянем на самый популярный сайт в категории словари и энциклопедии (Википедия) и увидим следующее: Программирование — процесс создания и модификации компьютерных программ. С виду определение выглядит коротко, однако имеет объемное содержание.
Итак программирование — это определенные взаимодействия с компьютерными программами, например написание кода. А что же такое компьютерная программа? По‑простому говоря, это хранимые данные и код, который можно назвать инструкцией. Инструкция, очевидно, нужна для того, чтобы компьютер её выполнял. Но неужели компьютер может так легко «понимать» и выполнять инструкции, которые пишут программисты? Не совсем.
Снова обратимся к популярному сайту и посмотрим, что такое компьютер (будем иметь в виду, что мы описываем обычный ПК). Сначала отметим, что компьютер в переводе с английского (computer) — вычислитель, а с латинского (computare) — считать, вычислять. Определение выглядит так: компьютер — это функциональное устройство, способное выполнять значительный объём вычислений, включая многочисленные арифметические и логические операции, без прямого вмешательства человека. Само же функциональное устройство состоит из основных компонентов: корпус, материнская плата, процессор, система охлаждения, оперативная память, накопитель информации.
Описание всех компонентов выходит за рамки текущей темы, поэтому не будем на них останавливаться, кроме процессора, так как он и является, тем компонентом, который выполняет «значительный объем вычислений, включая многочисленные арифметические и логические операции». Я не буду подробно описывать процессор. Если очень сильно упростить, то современный процессор можно представить в виде микросхемы, на которой содержится огромное количество транзисторов (порядка миллиардов). Транзистор, опять же, сильно упрощая — это прибор, который может либо пропускать электрический сигнал, либо не пропускать. Схема расположения транзисторов определяет выполняемые операции (те самые арифметические и логические). Если процессор состоит из транзисторов, которые либо пропускают, либо не пропускают электрический ток, то сделаем вывод, что процессор «понимает» только присутствие или отсутствие сигналов. А самым простым представлением работы с сигналами являются нули и единицы, где 0 — сигнала нет, 1 — сигнал есть. Последовательность нулей и единиц и есть машинный код, который «понимает» процессор.
Но программисты в основном пишут человекочитаемый код. Как тогда он превращается в нули и единицы для того, чтобы процессор «понял», что нужно делать? На первых порах будем считать, что происходит некое «преобразование» человекочитаемого кода в машинный внутри операционной системы.
Итак, программисты пишут инструкции для компьютера. Эти инструкции компьютер преобразует в машинный код и передает процессору для выполнения. Итогом таких действий является создание или изменение компьютерной программы.
Вот что такое программирование простым языком.
Теперь давайте поговорим о том, как изменялся процесс программирования
Очевидный факт, что процесс программирования напрямую зависит от компьютеров. Принято разделять компьютеры на четыре поколения по типу базового элемента: вакуумные‑лампы, транзисторы, интегральные схемы, микропроцессоры.
Первые компьютеры, а точнее электронно‑вычислительные машины (ЭВМ) первого поколения, представляли собой громадные конструкции от десятков до сотен квадратных метров. В основе вычислительных процессов лежали вакуумные лампы, и использовались они в военных и научных целях, например, для дешифрования военных приказов, расчета баллистической траектории, ядерных и космических расчётов. А инструкциями для таких ЭВМ являлись прямоугольные карты из тонкого картона, на которых в определенных позициях пробивались отверстия. Поэтому и название — перфорационная карта. Если на позиции было отверстие, то это означало наличие информации, если не было, то отсутствие. Для пробития отверстий в перфокарте использовали специальное устройство подготовки данных (УПД), которое представляло из себя клавишное устройство и входной перфоратор. С помощью УПД программисты проделывали отверстия в определенных местах перфокарты путем нажатия на клавиши.
Таким образом, программисты «печатали» инструкции в виде отверстий на перфокартах, что, по сути, являлось двоичным машинным кодом, который компьютер считывал и выполнял. Результаты выполнения программы передавались в виде электрических сигналов в выходной перфоратор и там представлялись в виде системы отверстий на перфокартах. Если при выполнении программы происходила ошибка, то нужно было её проанализировать, найти карточку, в которой была ошибка, затем перфорировать новую и заменить старую.

Пример кода на машинном языке (условный, не для конкретной архитектуры):
0001 0000 1010 ; Загрузить число a в регистр
0010 0000 1011 ; Прибавить число b
0100 0000 1100 ; Сохранить результат в ячейку памяти
1001 0000 1100 ; Вывести результат
С появлением транзисторов они стали использоваться как базовый элемент в ЭВМ. Такое техническое решение позволило значительно уменьшить габариты машин (до нескольких квадратных метров), снизить энергопотребление и увеличить производительность. Кроме того, в конструкцию были внесены крайне важные доработки: появилась возможность хранить базовые и часто используемые программы в памяти компьютера, а не вводить их каждый раз с помощью перфокарт. Эти ЭВМ относят ко второму поколению.
Такие усовершенствования открыли путь к использованию обслуживающего программного обеспечения, например, компиляторов и ассемблеров, а также к хранению повторно используемых подпрограмм в памяти.
Справка:
Компилятор — переводил программы, написанные на языках высокого уровня (таких как Фортран), в машинный код.
Ассемблер — выполнял аналогичную функцию, но для программ, написанных на языке ассемблера — более низкоуровневом, но человекочитаемом.Низкоуровневый — в данном контексте значит, код близкий к «железу», т. е. который может быть использован аппаратной частью без дополнительной обработки, но плохо понимаемый человеком.
Высокоуровневый — напротив, код который хорошо понимает человек, однако, аппаратная часть не может с ним работать без «перевода» в машинный.
Для программистов это означало, что больше не нужно писать инструкции в виде машинного кода, состоящего из нулей и единиц — теперь использовались символические команды, понятные человеку. Эти тексты автоматически преобразовывались в машинный код с помощью соответствующих программ.
Однако сам процесс программирования оставался во многом прежним: сначала код писался вручную на бумаге, затем переносился на перфокарты, после чего вводился в ЭВМ. Результаты вычислений выводились на печатающее устройство или на перфокарты. В случае ошибок производился анализ и замена соответствующих карточек.
Пример кода на языке ассемблера (условный синтаксис):
MOV A, 5 ; загрузить число 5 в регистр A
MOV B, 7 ; загрузить число 7 в регистр B
ADD A, B ; сложить A и B, результат в A
OUT A ; вывести значение A
Пример на языке Fortran - первом популярном языке высокого уровня:
PROGRAM SUM
INTEGER :: A, B, RESULT
A = 5
B = 7
RESULT = A + B
PRINT *, RESULT
END PROGRAM SUM
Следующим этапом стало изобретение интегральных схем или микросхем, которые позволили размещать в одном чипе тысячи транзисторов. В целом, благодаря микросхемам стало возможным еще сильнее уменьшить машины до двух кв. метров, повысить надежность и удешевить производство, что привело к массовому распространению. Теперь ЭВМ могли себе позволить не только оборонные предприятия и крупные институты, а различные государственные, финансовые, промышленные учреждения. Высокоуровневые языки стали основой для написания программ. Перфокарты, как способ ввода все еще массово использовались, однако на самых продвинутых машинах стали появляться терминалы для ввода и вывода, что значительно упростило взаимодействие с программами и, в целом, выглядел как современный процесс программирования, но без продвинутого графического интерфейса.

Пример кода на языке Pascal:
program SumExample;
var
a, b, result: integer;
begin
a := 5;
b := 7;
result := a + b;
writeln(result);
end.
Четвертый этап развития характеризуется внедрением в ЭВМ микропроцессоров, созданием персональных компьютеров и еще более широким распространением. Размер компьютеров уменьшается до такого, что тот без проблем помещается на столе. Производительность увеличивается настолько, что один компьютер может заменить несколько ЭВМ предыдущего поколения, а в некоторых случаях, даже, десятки! Стандартными устройствами ввода становятся компьютерная мышь и клавиатура, устройствами вывода — монитор. Теперь компьютер могут себе позволить не только предприятия, но и частные лица. А программирование проникает практически во все сферы деятельности.
Теперь стандартный процесс программирования выглядит как ввод инструкций в компьютер через клавиатуру, полученный результат отображается на мониторе. Отлаживать программу и исправлять ошибки с помощью монитора и клавиатуры становится в разы проще и быстрее. В языках программирования тоже происходит эволюция — из‑за широко распространения компьютеров среди обычных людей появляются более простые и понятные человеку языки. Поэтому программировать теперь могут не только профессионалы. Достаточно выучить базовые принципы и ключевые слова нужного языка программирования, установить на ПК специальное программное обеспечение и вот вы уже можете писать свои программы.

Пример на языке C#
using System;
class Program
{
static void Main()
{
int a = 5;
int b = 7;
int result = a + b;
Console.WriteLine(result);
}
}
Мы видим, как процесс программирования изменился до неузнаваемости (с момента создания первой ЭВМ прошло почти восемьдесят лет). Конечно же, этот процесс будет меняться и дальше, ведь сейчас становятся все более популярны ИИ-ассистенты, которым можно поручить рутинную часть работы. Возможно, в скором будущем достаточно будет давать инструкции ИИ-помощникам, чтобы они делали всю «механическую» работу, а программистам останется принимать концептуальные решения.
О современных трендах в программировании
В этом разделе я обобщу все виды искусственного интеллекта в один и буду использовать всем надоевшую аббревиатуру — ИИ. Недавнее широкое распространение ИИ буквально всколыхнуло информационное пространство. До сих пор встречаются сообщения о том, что ИИ заменит собой многие профессии. К таким заявлениям можно относиться по-разному. Я придерживаюсь такого мнения: ИИ при правильном использовании может оптимизировать труд человека, но точно не заменит его полностью.
По прошествии нескольких лет, когда все немного привыкли к этому явлению, начали формироваться новые подходы в программировании. Но, перед тем как к ним перейти, давайте вспомним, что процесс программирования непрерывно связан с поиском какой-либо информации о программировании. Самый простой пример — нужно понять, как работают те или иные методы из импортированных библиотек. Сигнатуры и краткого описания не всегда может хватить для правильного применения, и необходимо лезть в документацию разработчиков.
Такая потребность была и будет всегда, так как информации о предметной области слишком много для того, чтобы держать её в голове. И её становится ещё больше.
До создания глобальной сети источниками информации были книги и специалисты более высокого уровня. Можно представить, сколько времени и сил уходило на поиск решения своей проблемы. Но и после объединения компьютеров в общую сеть поиск специфической информации был непростой задачей. Информации было в разы меньше, чем сейчас. Только после достижения критической массы активных пользователей интернета и производимой ими информации можно относительно легко и быстро найти решение локальной проблемы.
Теперь в поиске информации нам на помощь пришёл ИИ, в частности ChatGPT. Если возникла непонятная ошибка или нужно расшифровать спагетти-код, который заботливо оставил коллега, то можно смело вставлять в чат кусок кода с определённым описанием того, что нам нужно, и помощник всё понятно объяснит и предложит улучшения.
Очевидно, что с помощью ИИ искать информацию стало гораздо проще. Это современный подход к поиску и анализу информации. Правда, есть нюансы в точности предоставляемой информации из-за галлюцинаций ИИ. Поэтому стоит внимательно проверять ответы.
Теперь поговорим о процессе программирования.
С помощью чата с ИИ можно не только быстро искать информацию, но и генерировать код. Новый подход подразумевает точечную генерацию небольших объемов кода. При таком подходе можно без труда отслеживать генерируемый код, подстраивать по стилю проекта, исправлять ошибки и неточности.
Становятся популярными расширения с ИИ к IDE (GitHub Copilot) и даже полноценные IDE со встроенным ИИ (Cursor), которые, анализируя проект, предлагают сгенерировать очень близкий по стилю и архитектуре код. В данном подходе мы можем генерировать как весь код, так и отдельные части, что-то дополняя или корректируя. В целом, это похоже на метод парного программирования, только вторым программистом выступает ИИ. Объем генерированного кода увеличивается, соответственно, отслеживать его труднее. Больше времени уходит на то, чтобы разобраться, где допущена ошибка, потому что код написан не самостоятельно.
Я привёл подходы к программированию, которые подразумевают непосредственную работу с кодом. Но с помощью ИИ стал доступен подход, который позволяет абстрагироваться от кода на языках программирования и оперировать только человеческим языком. Такой подход называется вайб-кодинг (vibe coding). С его помощью можно создавать программы за короткое время без навыков программирования. Он подразумевает работу только с помощью человеческого текста: нужно просто описать необходимый функционал в чате и проверить результат. Соответственно, сто процентов кода будет генерированным, и лучше даже не пытаться в нём что-то править самостоятельно. Какого качества будут эти программы — вопрос открытый. С одной стороны, мы посредством человеческих запросов (промптов) сами описываем требуемый функционал и, имея навык их составления, можем получить хороший результат. А с другой — мы лишаемся контроля над генерируемым кодом. Вряд ли можно качественно провести ревью сотни генерированных файлов, плюс есть возможность галлюцинаций. Поэтому множество итераций обучения ИИ на своём же генерированном коде, скорее всего, приведёт к огромному количеству ошибок в будущем.

Вывод
Мы с вами определили, что такое программирование, рассмотрели, как менялся процесс программирования в зависимости от компьютеров. Вспомнили, что ещё не так давно можно было писать код без интернета, а сейчас сложно представить программиста, который совсем не пользуется ИИ-помощниками. Кратко рассмотрели современные подходы к программированию.
Надеюсь, в статье вы узнали что-то новое. А дальше будем говорить о технологии WWW и веб-программировании.