Программирование не является наукой на сегодняшний день. Но когда сфера пройдет некоторую критическую точку и станет наукой, то какой? Технической (точной) или гуманитарной (не точной)? Статья — свободное размышление на данную тему. Автор имеет 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) о том, как нужно правильно писать. Если программист попытается писать программу не по книгам, а опираясь на свое гуманитарное видение проблемы, он столкнется с некомпетентностью. Он превратится в такой типичный образ гуманитария, который некомпетентен ни в чем, но сам утверждает, что знает все, ведь действительно понахватался всего на верхах.

Вот такие размышления. Надеюсь, никого сильно не загрузил.

* Да, сразу извиняюсь. Это явно какой-то демагогический прием, когда первым же пунктом следует жесткое утверждение без доказательств и примечания, что это всего-лишь мое мнение.
Программирование — это

Проголосовало 14 человек. Воздержалось 6 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Поделиться с друзьями
-->

Комментарии (3)


  1. Crandel
    17.06.2017 22:28
    +1

    Если я пишу код, и он работает, не важно как, и его может запустить другой человек, взяв тот же компилятор/интерпретатор — тогда это точно такая же точная наука, как и физика. То что логика работы не всегда соответствует ожидаемому — ну так и в физике тоже постоянно находят новые теории и устаревают старые. Абсолютно точных наук нету, всегда есть какой-то уровень допущений.


  1. ncix
    17.06.2017 22:51
    +1

    Стоило бы определиться, что значит "гуманитарий". Если не математик, то вы наверное правы. Если желаете по тезисам — извольте, опроверг и ваши аргументы и контраргументы. Собственно непонятно что они должны доказать, эти ваши аргументы :)


    1) В программировании не существует правильного и неправильного решения *.

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


    2) Социализация программиста — один из важнейших критериев приема на работу на должность программиста в 2017. Программист не должен быть оторван от внешнего мира и замкнут на компьютере. Матерящийся бородатый сисадмин в свитере и с крошками от чипсов на груди уходит в прошлое. Робкий очкарик с вейпом, который шарит смешные мемы и смешно разговаривает — вот образ программиста в простонародии сегодня. Извините, если кого обидел, вся статья — шутка ;)

    Посмотрите на кинорежиссеров, например — не борода и вейп отличают гуманитария от технаря. И уж тем более эффективного специалиста от балласта.


    3) ООП — мейнстрим. Каждый объект — это сложная абстракция. Невозможно написать объект, который точно, до атомов распишет какой-то жизненный процесс, хоть многие ПМ и заказчики пытаются это делать. Лучший объект напишет тот программист, который мыслит параметрами реальной жизни, а не цифрами, паттернами, алгоритмами и адресами памяти компьютера.

    ООП сто лет в обед. Оно конечно никуда не делось, но мейнстрим сейчас совсем не там.


    1) Гуманитарий — это заказчик, который создает ТЗ. Задача программиста — точно закодить описанные алгоритмы и выбрать правильный стек, успех работы программы будет зависеть, в основном, от составителя ТЗ.

    По waterfall сейчас даже Почта России не работает. ТЗ нужно только на этапе заключения договора или потом в суде.


    2) Все программирование строилось отдельно от бизнеса и всего-лишь выполняло его задачи. Все способы решения бизнес-задач расписаны в куче книг и там присутствуют точные узкие утверждения (SOLID, DDD).

    Боюсь вас огорчить, но вы не найдете ни одной книги, где автор рискнул бы претендовать на всеобъемлющее решение даже ограниченного круга задач. Все наоборот — существуют подходы, доказавшие или не доказавшие свою эффективность. И кто-то же придумывает постоянно новые.


    1. pistol
      17.06.2017 23:00

      Определение действительно сложно описать словами. Образ термина, возможно, у всех разный :) Я строил размышление, в основном, вокруг понятия «точно» — «не точно». А про образ людей-программистов — это демонстрация ухода от точных цифр и замкнутости в маленьком компьютере к огромному миру с меняющейся модой.