
Программирование не является наукой на сегодняшний день. Но когда сфера пройдет некоторую критическую точку и станет наукой, то какой? Технической (точной) или гуманитарной (не точной)? Статья — свободное размышление на данную тему. Автор имеет 9 классов образования и с темой про науку, написанную за 2 часа перед сном, залезает «со свиным рылом в
калашный ряд твою ленту Хабра». Поэтому научным светилам не стоит заходить во внутрь, содержание носит легкий, юмористический характер.
Программирование
Программирование — частная прикладная дисциплина в информатике. Однако, это не значит, что в программировании нельзя найти научную новизну, я сам лично защищал подобную новизну в конкурсе "
Умник", — строил свою позицию на основе чужих диссертаций и советов близких к науке людей. Никто не сказал мне, что я втираю «дичь». Я спокойно прошел отбор и вышел в финал. Но в разделе IT тогда выиграл экономист с экономической новизной, где программирование является всего-лишь прикладной задачей для реализации его проекта.
Я считаю, что де-факто программирование является наукой и если хорошо напрячь извилины, то в этих ветвлениях if-else и прочих конструкциях можно найти новизну. Хотя, нет… Как раз if-else и манипуляции с битами нет — это всего-лишь алгоритмика (раздел информатики), а научная новизна располагается где-то в очень высокоуровневом программировании, где манипуляция идет объектами
реальной жизни. Но о реальной жизни чуть позже, сразу после главы про математику и алгоритмику.
Математика и алгоритмика
В сознании обывательского общества прочно закрепилось мнение, что программирование — это прежде всего математика. Утверждение на 100% верно, когда речь идет о низкоуровневом программировании, еще пару десятков лет назад было сложно представить, как можно программировать, не зная ничего о принципах работы памяти компьютера, а память — это цифры, а цифры — абстракция в чистом виде. Самая низкоуровневая абстракция, которую через много других слоев абстракций можно отточить и вписать в нее что угодно — хоть табуретку, хоть выплату зарплат сотруднику, хоть аватарку Васи Пупкина. Раньше все это делалось через километр перфоленты, перебор битов в памяти в определенном адресе и т.д. — это чистая алгоритмика на основании математических функций, чтобы овладеть пониманием всего этого, нужен чисто технический склад ума. Сам код был плоским, объемы и абстракции были в математике. Точность — критерий правильной записи данных в память, любой алгоритм должен давать точный результат, иначе зачем он нужен?
Много-много слоев абстракции
За последние 30 лет все, чем занимались программисты — строили слои абстракции поверх предыдущего слоя. Простой пример на уровне языка программирования: Assambler -> C -> PHP -> Smarty. Каждый следующий язык программирования — это язык программирования, который написан на предыдущем языке программирования. Все ради чего? Ради упрощения технической сложности и более изящной абстракции. Чем проще ЯП, тем быстрее идет разработка. Чем изящнее абстракция, тем больше шансов, что какой-то бизнес-процесс в коде всю жизнь будет соответствовать реальному.
Благодаря такой слоености, сегодня любой школьник может освоить выскоуровневый ЯП C# и с помощью фреймворка Unity написать свою игру, где можно грабить фуры и кастовать ульт Зевса по КД. Никогда игры не писал, но уверен, что «умные» персонажи сегодня создаются одной строкой area.createCharacter(new Zeus('Зюся', 100, -1)).
Все хорошо, но есть и проблемы у абстракции — она все еще кривая. И порой программисты от бессилия сделать что-то еще в выбранном стеке технологий, натягивают презерватив на глобус, программа едет по сценариям вымышленного мира. Программа может выписать сотруднику вместо зарплаты просмотры какой-то статьи или автоматически уволить штраф за невыход на работу.
Бред, наркомания и шизофрения! Как вообще такое могло родиться, ЭТОГО ЖЕ НЕТ В РЕАЛЬНОЙ ЖИЗНИ!!! Да такое даже в голову не придет здоровому человеку!!! Примерно вот так, казалось бы, нужно к этому относиться. Но люди относятся лояльно по состоянию на 2017 год, потому что так все устроено, абстракции кривые и без багов пока что никуда. Я уверен, через 100 лет сегодняшние баги будут казаться чем-то нереальным, как сейчас представления людей о плоском мире.
Гуманитарная наука
Гуманитарность — слово, конечно, интересное (Хром подсвечивает его, как несуществующее). В моем техническом окружении быть гуманитарием считается не круто. Я не удивлюсь, если сейчас этот текст читает некий чувак, у которого при прочтении данного слова сработал триггер тролинга в комментариях. Такому человеку я могу посоветовать только попробовать критически отнестись к тому, что он узнал от своего окружения. Ты должен сейчас представить, что твой круг общения ограничен и все, что ты знаешь — это чужое мнение, навязанное тебе в твоем информационном поле. Где-то по соседству существует гуманитарный круг, который считает технарей примитивными людьми. Все это необъективно, давай не начинать шоу «Дом2», а попробуем посмотреть на мир сверху. Не нужно сразу унижать меня в комментах, когда я озвучу скромное предположение, что программирование может стать гуманитарной наукой.
Вот такая длинная прелюдия, потому что я понимаю, что читателями статьи будут технари, которые твердо уверены, что программирование — это никак не гуманитарная дисциплина.
Ну и стоит дать мое краткое определение этому термину. Гуманитарная наука — неточная наука, которая пытается наиболее правильно описать жизненные процессы.
Реальная жизнь
Думаю, я не исключение. И большинство программистов, которые читают этот текст, применяли сложную математику в своей работе 1-2 раза в жизни. В повседневной работе нужно вычислить процент или посчитать пропорцию для кропа картинки, не более. Но обыватель смотрит на тебя, как на великого математика, просто потому что в информационном пространстве программирование — техническая, прикладная наука. Но в реальности, я считаю, это гуманитарная дисциплина. Сразу оговорюсь, что в статье речь идет исключительно о высокоуровневом программировании, абсолютное большинство современных программистов ничего не знают о низком уровне и об устройстве компьютерных плат и памяти.
Бой с тенью
Не знаю, как это в науке называется бой с тенью. В этом абзаце подискутирую сам с собой. Может быть, кто-то захочет присоединиться. Итак, я утверждаю, что программирование — это гуманитарная наука. И вот мои аргументы.
1) В программировании не существует правильного и неправильного решения *. Когда все работает, качество решения субъективно, нравится — не нравится, модно — не модно. Самым важнейшим объективным критерием является опыт. Жизненный опыт.
2) Социализация программиста — один из важнейших критериев приема на работу на должность программиста в 2017. Программист не должен быть оторван от внешнего мира и замкнут на компьютере. Матерящийся бородатый сисадмин в свитере и с крошками от чипсов на груди уходит в прошлое. Робкий очкарик с вейпом, который шарит смешные мемы и смешно разговаривает — вот образ программиста в простонародии сегодня. Извините, если кого обидел, вся статья — шутка ;)
3) ООП — мейнстрим. Каждый объект — это сложная абстракция. Невозможно написать объект, который
точно, до атомов распишет какой-то жизненный процесс, хоть многие ПМ и заказчики пытаются это делать. Лучший объект напишет тот программист, который мыслит параметрами реальной жизни, а не цифрами, паттернами, алгоритмами и адресами памяти компьютера.
Все аргументы ничем не подкреплены. Все это — игры разума. Может быть, кто-то в комментариях придумает, как провести эксперимент и что-то доказать в этой теме?
А вот мои контраргументы.
1) Гуманитарий — это заказчик, который создает ТЗ. Задача программиста — точно закодить описанные алгоритмы и выбрать правильный стек, успех работы программы будет зависеть, в основном, от составителя ТЗ.
Второй аргумент — тот же первый, но с другого бока.
2) Все программирование строилось отдельно от бизнеса и всего-лишь выполняло его задачи. Все способы решения бизнес-задач расписаны в куче книг и там присутствуют
точные узкие утверждения (SOLID, DDD) о том, как нужно правильно писать. Если программист попытается писать программу не по книгам, а опираясь на свое гуманитарное видение проблемы, он столкнется с некомпетентностью. Он превратится в такой типичный образ гуманитария, который некомпетентен ни в чем, но сам утверждает, что знает все, ведь действительно понахватался всего на верхах.
Вот такие размышления. Надеюсь, никого сильно не загрузил.
* Да, сразу извиняюсь. Это явно какой-то демагогический прием, когда первым же пунктом следует жесткое утверждение без доказательств и примечания, что это всего-лишь мое мнение.
комментарии (3)