Что такое программирование?
Несколько дней назад сын спросил у меня что такое программирование. Ему 8 лет и, как понимаете, объяснять надо было предельно ясно, при этом на простых вещах.
На самом деле я даже задумался - а что же на самом деле программирование? Набор кода или «цветные буквы», как говорит моя жена? Вчера еще с Лехой обсудили. Про Леху можно почитать в большой статье на Дзене.
Сошлись на том, что программирование - это способ объяснить компу что ты от него хочешь. Но фишка не в том, какими средствами ты это сделаешь и это не ограничивается только компом. По сути, работа программиста - составить наиболее оптимальный алгоритм (способ решения) для поставленной задачи.
Давайте по полочкам (задача от Лехи. Леха, привет!) - есть задача рассортировать некоторые товары по коробкам так, чтобы максимально заполнить коробки по весу. При этом размеры товаров не учитываем. Решений может быть несколько: наивное с перебором всего несколько раз, более оптимальное (типа задачи two sum с leetcode), сверх оптимальное и т.д. Какое выберете? Мы сошлись на том, что надо сперва узнать как часто надо выполнять такую операцию, как много товаров и коробок. И тут оказывается, что коробок обычно 20шт, товаров около 150шт и это надо делать не чаще нескольких раз в день. И тут самый главный вопрос - надо ли запариваться с алгоритмом, который ты не знаешь, чтобы сделать это все максимально оптимально, если по сути код не обязан отрабатывать на 1ms. Мб просто перебор все решит и закроет вопрос, а также позволит более младшим программистам это все поддерживать и не наломать дров. Это не значит, что алгоритмы применять не надо, это значит - что свое время тоже надо экономить и понимать необходимость применения усложненной логики в рамках команды/бизнеса.
Вернемся к основному вопросу - что же такое программирование? Я думаю, это способность решать задачи, обычно с помощью компа. Но часто бывает так, что автоматизировать что-то или сложно или непонятно или просто дорого. В этот момент вы как программист можете написать методичку (алгоритм) для человека. В ней будет список того, что сотрудник должен делать на работе. По сути вы как программист помогаете организовать конвейер. И кроме программистов много у каких людей на работе такая же обязанность, это просто уровень и область принятия решений. Если так задуматься, наверное почти любая компания - это маленьких заводик (привет, Саша!), который должен стараться максимально эффективно для себя выпускать продукцию. Эффективность - это многогранная вещь. Тут реально важно не только качество, но и скорость выпуска, а это всегда, всегда про компромисы.
Короче, как я обычно и говорю - технологии важны, но в первую очередь учитесь решать проблемы, а не создавать их. =)