Программирование и жизнь

Сейчас прохожу базовый курс computer science на codeacademy. При том, что на работе меня никто не заставляет программировать, есть понимание, что без этого навыка сложно в современном мире: сложно понимать, как что работает. Неожиданный положительный эффект – улучшение логики при выполнении упражнений и привычка составлять алгоритм решения задачи. Находясь всю трудовую деятельность между бизнес-заказчиком и техническими специалистами, старался развиваться именно в сторону первых, то есть в сторону методических знаний, как устроены операционные модели и бизнес-процессы в конкретной области. Системы, которые мы применяем сейчас, были разработаны достаточно давно, а небольшое число современных систем представляют собой облачные решения. Облачные решения ведь и придуманы для того, чтобы не нужно было знать, как там всё устроено, верно?

С одной стороны да, но с другой я уверен, что ИТ-ландшафт даже консервативного бизнеса скоро необратимо изменится, и не только в сторону облачных решений, но и в сторону продуктов на современном наборе технологий. Поэтому пропускать такое, как мне кажется, – непозволительная роскошь. Разобраться сходу, что такое Angular или любое другое загадочное и модное слово без понимания основных принципов функционирования ИТ и взаимодействия ИТ-компонентов между собой, принять решение, что из этого имеет смысл применять в конкретном решении, – с одной стороны, это задача ИТ-архитекторов. С другой, по личному опыту, лучше доверять им, но проверять. Например, есть люди, которые любят набор технологий Microsoft, и сместить их на что-то другое крайне сложно, они всегда будут обосновывать выбор именно этого набора технологий.

Как же так получилось, что знание именно программирования понадобилось уровню выше технических специалистов и ИТ-архитекторов? На примере своей биографии могу рассказать о том, что это всегда было так, просто у людей, не знакомых с программированием, сформировался ореол загадочности или мистики вокруг этой области навыков. Именно навыков, а не только знаний, то есть чего-то, что "руки помнят".

Два мира, бизнес-заказчиков и ИТ-специалистов, движутся навстречу друг другу. Бизнесу всегда нужна была гибкость, а максимальная гибкость обеспечивается при написании кода. Есть несколько вариантов решения этой задачи: визуальный конструктор и lowcode-решения, которые представляют собой нечто среднее между конструктором и "настоящим" кодом. Не удивлюсь, если через 5-10 лет не только специалисты и менеджеры, но и руководители будут решать свои задачи именно с помощью программирования, пусть и более высокого уровня. Хотя ещё в 2002-м встретил в розничной компании менеджера именно в управленческой структуре компании, который (которая, это была девушка) не стеснялась писать SQL-запросы к Access-базе данных. Просто человеку так оптимально было строить разные отчёты, на основе которых она же и принимала решения.

Читал много историй о том, как люди начинали с бейсика, который к программированию имеет опосредованное отношение. Да, ты пишешь коды и компьютер их выполняет, но мне всегда было интересно "настоящее" программирование, то есть функциональное либо объектно-ориентированное. В функциональном ты задаёшь функции, которые можно вызывать с параметрами и которые возвращают значения, а в объектном ты создаёшь классы и объекты, которые с помощью методов также делают что-то полезное. Питона (python) тогда не было, наиболее красивым и академичным был Паскаль, который, по счастью, и оказался на моём пути в школе и на домашнем компьютере. Это было стопроцентное хобби без понимания его практического применения, ведь я поступил на экономический факультет.

Первые 5 лет карьеры, поскольку я занимался внедрением информационных систем, даже мысли что-то написать самому не было, поскольку всегда рядом были коллеги-программисты, и это были программисты достаточно высокого уровня. Затем я перешёл в управленческий консалтинг, отличительном признаком которого являются презентации и анализ данных в Excel. Вот тут и началось самое интересное, поскольку в штате консалтинговой компании программистов тогда не было, хотя позже они появились (когда компания решила заняться проектами, связанными с внедрением информационных систем).

Первая задача была вроде бы простой, анализ штатного расписания, даже количества сотрудников по подразделениям. Беда была в том, что компания, которую надо было проанализировать, работала по всей России, у неё было множество филиалов и сотрудников, поэтому набор данных в Excel никак не влезал. Ну ничего, открываем Access, загоняем туда данные, пишем запросы. Среди коллег были те, кто это умел делать, но это не считалось базовым навыком.

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

Изучение нескольких документов показало, что они похожи. Регламенты вводились в действие приказами, в которых в одном абзаце описывалась суть регламента, а заканчивался приказ словом "Утверждаю". Был написан скрипт, который в первую колонку вытаскивал название файла (оно соответствовало названию регламента), а во вторую вытаскивал описание из приказа. Тогда мы смогли разделить список на несколько человек по областям и приступить к более детальному изучению документов. Было ещё несколько задач, и у меня образовалась коллекция скриптов на VisualBasic. В основном, они преобразовывали выгрузки из 1С к виду, пригодному для анализа в сводных таблицах Excel.

Дальше в моём опыте программирования последовал перерыв, поскольку задач для реализации в коде вроде бы не было, были презентации, графические схемы процессов и текстовые регламенты. А потом я оказался в небольшой логистической компании, где был отдел транспортной логистики, и этот отдел использовал наёмный транспорт. Сетки транспортных тарифов различались, в зависимости от объёма и веса посылки, а также в зависимости от города назначения было выгодно использовать одну или другую транспортную компанию. Программисты были, и был молодой парнишка, который занимался этой задачей; он сделал её с помощью формул, но немного не доделал. Потом у него был конфликт с руководством, он ушёл, инструмент так и остался недоделанным. Лично мне показалось, что про эту программу дольше говорят, чем займёт времени сесть и написать.

С большими формулами я не умел работать (и не умею до сих пор), поэтому написал код на VisualBasic, который состоял из функций: каждая функция отвечала за расчёт тарифа одной транспортной компании. Написано всё было достаточно криво, но меня интересовала не красота реализации, а то, что это всё работало. Уже перед уходом из этой компании коллега-программист сказал, что можно не писать кучу if-else там, где тариф выбирается в зависимости от веса/объёма, а сделать цикл по границам диапазонов веса. Переписал всё, при этом нашёл кучу интересных ошибок.

Дальше я оказался в добывающей компании, на проекте внедрения информационной системы. Было несколько случаев, когда требовалось преобразовать данные, но написать очередной "шедевр" пришлось в следующей ситуации. Было где-то 10 вечера, мы остались вдвоём с коллегой, которому требовалось заполнить справочник "Плановые сроки поставки", причём сегодня. Каждый срок поставки нужно было ввести по комбинации условий. Коллега взял калькулятор, посчитал количество комбинаций, у него получилось 30 тысяч, если я правильно помню. Это не важно, поскольку сейчас это больше 80 тысяч. Программа ничего сложного собой не представляла, просто 5 вложенных циклов, которые на каждую комбинацию добавляют строку в файл, потом с помощью формул определялось уже значение срока поставки без скрипта.

На этом самое смешное не закончилось. А что, если меня не будет, как будут люди пользоваться этим скриптом, подумал я. Там было несколько переменных (таблиц) которые нужно было аккуратно задать. Подумал, и сделал заявку на доработку 1С, чтобы она сама создавала справочник, на что мне ответили, что это потребует слишком много человеко-часов (профессиональных разработчиков). Кроме того, та информационная система считалась временной. Но информационная система в итоге отработает минимум 3 года, а моим скриптом пользовались не раз.

Сейчас популярность набирает Питон, поскольку он и проще (даже проще Паскаля за счёт отсутствия скобок и лаконичного синтаксиса), и мощнее за счёт объектного подхода. Тот курс computer science, о котором я писал в начале, идёт именно на примере Питона, поскольку Питон для учебных целей лучше всего подходит. Когда я впервые увидел, как объектных подход использован в веб-фреймворке django, то не поверил, насколько это просто. Django в целом выглядит как конструктор: накидал логику, формы, структуру таблиц, остальное он делает сам. При это именно на django были созданы первые версии Instagram. Первые примеры на django, когда освоишься с ним, выглядят крайне простыми, но чтобы написать что-то стоящее, потребуются более глубокие знания именно основ программирования.

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

В Великобритании приняли решение обучать детей программированию с 5-ти лет, и если говорить о выстраивании логики, это, как мне кажется, самое лучшее решение. Курсы программирования есть и на Uchi.ru, например, где у меня дочь нашла задания по программированию и сама начала проходить.

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

@Константин Овчинников
Теги: #развитие

Комментарии