Для меня программирование это постоянное задавание вопросов "что это такое", "в чем смысл этой вещи", "что оно делает". Вот, например, канцелярская скрепка. В чём смысл скрепки? Чтобы скреплять бумаги, но не просто скреплять, а еще и легко раскреплять и повторять это многократно. Но и это не определяет скрепку. Есть много способов скреплять бумаги: клей, степлер. Скрепку выделяет из них то, что если это хорошая скрепка, она не повреждает и никак не меняет бумаги. Кроме того, скрепка не может скрепить сколько угодно бумаг: обычно до 10 листов. Она может скреплять бумаги непосредственно, без помещения листов в дополнительные контейнеры.
Как скрепка скрепляет бумаги? Она сама это делает? Нет, обычно это делает человек. Он берёт несколько листов бумаги, ровно складывает их стопкой, и затем надевает на угол этой стопки скрепку. Можно подложить под скрепку какую-нибудь бумажку, если документы особенно ценные.
Всё ли это, что можно делать со скрепкой? На самом деле нет. Её можно изогнуть и применить самым разнообразным образом, правда это будет скорее что-то, сделанное из скрепки. Можно описывать долго. Где-то нужно поставить точку.
По большей части, программирование — это такое выстраивание и фиксация своего понимания всего (вещей, людей, отношений, действий, состояний) и объединение этих моделей в систему. В том числе описание будущих активностей, которые появятся как полезный продукт работы этого кода (например, бизнес может сэкономить деньги, заменив одни действия другими, а софт при этом будет координировать людей).