Математика vs Литература. Битва за программирование

Программирование – наука или искусство? Программист – ученый или писатель? Поразительно, как одной области удается сочетать несочетаемое!

Математика vs Литература. Битва за программирование

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

Итак, что нужнее программисту: математический талант или мастерство писателя?

Математика

Математика vs Литература. Битва за программирование

Некоторые области программирования – это чистая математика:

Однако нам интереснее прямая связь математики и программирования без привязки к конкретному разделу компьютерных наук. И эта связь очевидна.

Проблемы и их решение

Математика и компьютерная наука имеют очень схожий взгляд на то, как надо решать проблемы. Они без всякого опасения берут большую сложную задачу и делят ее на множество маленьких и простых подзадач. Затем решают каждую отдельно, объединяют результаты и – вуа-ля! – находят ответ.

И в математике, и в программировании мы анализируем входные данные, пытаемся с их помощью сделать какие-то локальные выводы, которые в сумме приведут нас к решению. Мы стараемся учесть все возможные случаи, как тот тестировщик из бородатого анекдота (вдруг информации нет или она невалидна).

Заходит однажды тестировщик в бар.
Забегает в бар.
Пролезает в бар.
Танцуя, проникает в бар.
Крадется в бар.
Врывается в бар.
Прыгает в бар
и заказывает:
кружку пива,
2 кружки пива,
0 кружек пива,
999999999 кружек пива,
ящерицу в стакане,
–1 кружку пива,
qwertyuip кружек пива.

Алгоритмы и методы

Даже сами алгоритмы решения очень похожи – и неудивительно, ведь программирование многое позаимствовало у своей более опытной коллеги.

Взять хотя бы булеву логику, системы счисления, функции преобразования входных данных в выходные, Big O нотацию анализа производительности. Рекурсия очень похожа на метод математической индукции. А если спуститься на машинный уровень, то мы будем иметь дело исключительно с числами и вычислениями в различной форме.

Абстракции

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

Программирование, как и математика, оперирует не реальными вещами, а абстрактными представлениями. Без абстрактного чертежа нельзя соединить отдельные кирпичи в единое здание, без абстрактного треугольника – вычислить азимут, без абстрактных функций – написать красивый эффективный код.

Программирование == математика?

Разумеется, нет.

Многие программисты легко могут прожить без математики как таковой. Однако владение математическим подходом – это всегда огромный плюс. Практически все IT-профи сходятся в том, что программист без математики – это маляр, с ней – художник.

Мудрые преподаватели знают, насколько это важно. Keith Devlin (знаменитый британский математик) рассказывает, что престижные университеты зачастую требуют от студентов computer science пройти курс высшей математики, чтобы развить эту способность.

Зачем программисту математика?

  • Приводит ум в порядок. (с) М. В. Ломоносов.
  • Некоторые области computer science – это чистая математика.
  • Математическая абстракция позволяет взглянуть на задачи под другим углом и лучше описывать объекты реального мира.
  • Понимание алгоритмов и оценки их эффективности.
  • Работа с функциональными языками.

Если вы хотите стать художником от программирования, держите наши подборки полезных книг и ресурсов по математике:

Писательское мастерство

Математика vs Литература. Битва за программирование

Программирование очень похоже на литературу. Это сходство не столь очевидно, как в случае с математикой, но оно определенно есть. Особенно, если говорить о нон-фикшн. А еще больше оно похоже на лингвистику – другую гуманитарную науку.

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

Выходит, что у программирования и литературы один и тот же основной инструмент. А что еще?

Структурирование текста

Программирование в большинстве случаев – работа командная. Над проектом могут работать несколько человек, которые, разумеется, должны понимать код друг друга. Важно, чтобы программа была хорошо организована, тогда ее легко изменять, расширять и поддерживать.

Подобное структурирование кода напоминает работу над художественным произведением. Программист рассказывает своего рода историю, все части которой понятны и логично следуют друг за другом. Методы и функции здесь – главы, а классы и объекты – действующие лица.

Стремление к идеалу

Работая над программой или литературным текстом (например, над сообщением в блоге), вы пытаетесь выразить какую-то идею. Некоторое время уходит на составление плана. Затем вы приступаете к работе, делаете первые наброски. Пересматриваете написанное, видите, что можно улучшить и что нужно изменить.

Это два очень похожих итеративных процесса постоянного совершенствования. Ни хорошая программа, ни красивый текст не создаются с первой попытки. Ревью и рефакторинг – наше все!

Стиль

Представьте, что сто человек пишут короткую инструкцию, как приготовить спагетти карбонара. Даже если у них одинаковый рецепт (что маловероятно), вы не получите на выходе двух идентичных работ, ведь есть множество способов сделать одну и ту же вещь.

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

  • Кто-то пишет нечитаемые простыни кода, а кто-то аккуратно делит его на абзацы и форматирует отступами.
  • Один дает своим героям скучные и невыразительные имена, а другой умеет сразу подчеркнуть их особенности и характер в подходящем наименовании.
  • Вы любите циклы, а ваш коллега предпочитает функциональное программирование.
  • Некоторые идут от частного к общему, другие – наоборот.

Даже для такой простой проблемы как определение частоты слова в тексте найдется множество решений.

Фантазия

Вы начинаете свою программу с чистого листа. Все, что она будет делать, вам придется придумать и воплотить самостоятельно, как настоящему писателю. В программировании и литературе без креатива никуда.

Программирование == литература?

Разумеется, нет.

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

Многие успешные программисты были лингвистами, возможно, у них были для этого некоторые профессиональные предпосылки.

Некоторые области computer science подходят к лингвистике и литературе максимально близко. Это, например, компьютерная лингвистика, обработка естественных языков.

А если вы решите создать новый язык программирования, можете с полным правом называть себя лингвистом.

Зачем программисту литература?

  • Выстраивание логической структуры программы.
  • Хороший стиль кодинга.
  • Понимание своего главного инструмента – языка программирования.
  • Создание новых языков.

Если вы хотите стать Шекспиром от программирования, держите наши интересные материалы о работе с текстами и хорошем стиле кодинга:

Математика или литература?

Каким же талантом прежде всего должен обладать идеальный программист? Должен ли он легко щелкать математические задачки или писать красивый и логичный код? Вероятно, вы уже знаете ответ.

У computer science, безусловно, много общего с математикой. Математический склад ума – большое преимущество в этой области. А работа над кодом очень напоминает работу над литературным произведением. Можно даже сказать, что программирование – это математическое ядро в литературной оболочке.

Впрочем, есть у него и много своих особенностей, не позаимствованных у более опытных коллег. Программы постоянно модифицируются и расширяются, поведение среды выполнения добавляет программированию еще одно измерение, не связанное с написанием кода и т. д.

А как вы считаете, будет ли хороший писатель лучшим программистом, чем плохой?

Оригинал: Programming: Math or Writing?

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
Golang разработчик (middle)
от 230000 RUB до 300000 RUB
Продуктовый аналитик
Екатеринбург, по итогам собеседования
Продуктовый аналитик в поддержку
по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ