Особенности мышления программиста. Математика, логика, алгоритмы.
История одного преподавателя информатики. Задача: посчитать площадь треугольника по заданным параметрам. Студент показал результат. Корень квадратный из минус 18.
— Вас ничего в результате не настораживает?
— Нет. Все же откомпилировалось без ошибки…
Обсуждения «Нужна ли математика программисту» ведутся регулярно на многих интернет-ресурсах. Они чаще напоминают спор, а не обсуждения. Основной аргумент спорящих: некоторые разделы математики нужны очень небольшому проценту программистов, а поскольку спорящие себя к ним (пока) не относят, то и математику считают ненужной нагрузкой. Но это только некоторые разделы нужны единицам. А вообще в математике очень много тем для изучения.
Задача по математике, взял у дочери, 7ой класс общеобразовательной школы:
Отметить на координатной оси t область значений за пределами области t >= 8; t <= 20;
Ну это же скука скучная. Сделал кое-как, списал у соседа, получил троечку. А после школы решил в гаму погамать. Засиделся с ней до самого вечера … и тут случилось страшное! Интернет пропал. Звонишь провайдеру — а там никто не отвечает, только автоответчик повторяет одно и то же механическим голосом: «Нет доступных операторов, позвоните пожалуйста в рабочее время с 8 утра до 20 вечера».
Кто-то из программистов провайдера сделал так, чтобы во время отсутствия персонала отвечал автоответчик. Рабочее время с 8 до 20, то есть область времени t >= 8 и t <= 20. А нерабочее время — за пределами области рабочего времени, то есть время меньше 8 и больше 20.
Вот она, математика.
Задачи про множествах и области — это раздел «дискретная математика».
Задачи, в условиях которых встречаются слова «не», «и», «или» — это раздел «математическая логика».
Капец скука. Да вапще фиг знает как считать. Кому это надо, блин?
В летние каникулы решили с друзьями замутить интернет-магазинчик. Через некоторое время, по разным причинам, магазин начал давать доход, ура. Но продажи нерегулярные, иногда раз в сутки, иногда несколько раз в сутки. И сумма покупок разная. Сколько же зарабатывает магазин за месяц?
Так. Сравним с скучной задачей выше. Покупки — это события. Они случаются нерегулярно. Сумма покупки — это воздействие. Оно разное. Ну, давай, считай, сколько ты зарабатываешь.
Указанная задача относится к разделу «статистика».
Опять этот чёртов бассейн. Пробку нормальную не могут вкрутить уже 100 лет. Когда же он наполнится-то?
У тебя два интернет-магазина, каждый из которых приносит приблизительно 5 и 10 тысяч рублей в сутки. А на хостинг и рекламу приходится тратить в среднем 0.5 тысячи рублей в сутки. Явно видно, что ты в профите, но попробуй сам определить, за сколько дней получится накопить на новую игруху для PlayStation или на гиро-скутер, на которые ты постоянно заглядываешься в магазине.
Это классическая задача «скорость-время-расстояние». И обычная алгебра.
Ну периметр я, предположим, посчитаю. А как площадь посчитать — я даже представить себе не могу. А ещё написать алгоритм… Как заставить машину посчитать за меня эту задачу?
Так, может быть начать с алгоритма «как составить алгоритм решения задач»?
1) Прочитать задачу.
2) Выписать известные и неизвестные нам переменные в «дано»
В этой задаче к известным переменным относятся стороны: a, b, c; к неизвестным — площадь S и периметр P
3) Вспомнить либо составить необходимые формулы
Периметр треугольника — это сумма всех его сторон
Площадь треугольника по трём сторонам — это хитрая формула
4) Составить блок-схему или словесное описание действий
Нам надо как-то получить значения трёх сторон, посчитать и вывести результат пользователю.
5) Записать решение на языке программирования
В языке программирования есть какие-то функции, которые позволяют реализовать ввод данных (через командную строку или через графический интерфейс), выполнить математические вычисления (корень квадратный), а также вывести результат.
Надо ещё вспомнить, что не может существовать треугольник, у которого сумма любых двух сторон меньше третьей стороны. А также, периметр не может быть отрицательным. А также корень квадратный из отрицательной величины посчитать в общем случае нельзя.
Итак, у школьника в начале этой статьи получилось площадь равна корень квадратный из минус 18. Значит у него одна из сторон треугольника слишком длинная, но он не добавил проверку на возможность расчёта. И этим расстроил преподавателя.
Таких примеров скучных задач, которые встречаются на практике, очень-очень-очень много. Математика, логика и алгоритмы для программиста — это как еда, воздух и вода. Без них прожить можно, но недолго. На практике это выглядит так: без проверки знания основных разделов математики, логики и алгоритмов тебя могут взять на испытательный срок в софтовую контору, но долго ты там не удержишься. Либо не справишься с практической задачей, либо взорвётся мозг. И как следствие — не справишься с практической задачей.
Думаю, если ты ещё не закрыл эту страницу, то принял факт: программирование, математика, логика и алгоритмы живут вместе, дополняют друг друга, помогают друг другу. На тот случай, если ты совсем недавно заинтересовался информационными технологиями и программированием, хочу помочь. Вот небольшой план по изучению основных разделов математики, логики и алгоритмов. И иногда тут встречается программирование, но это второстепенно.
Общее
Цели:
- Понимать, что программирование — это второстепенное
- Понимать, что программа должна решать задачи пользователей
- Понимать, что существуют разные решения, уметь находить решения, уметь сравнивать их между собой
- Уметь делать свои программные решения понятными, стабильными, быстрыми, гибкими
Литература:
- «Программист-прагматик. Путь от подмастерья к мастеру» Эндрю Хант, Дэвид Томас
- «Джоэл о программировании» Джоэл Спольски
- «Джоэл: и снова о программировании» Джоэл Спольски
Алгоритмы
Цели:
- Понимать основы теории информации и алгоритмов
- Уметь составить алгоритм на словах или в блок-схемах
- Уметь читать алгоритмы
- Уметь определять алгоритмы в чужие программах
Литература:
- «Дискретная математика для программистов» Федор Новиков
- «Алгоритмы. Просто как 2×2» Игорь Красиков, Ирина Красикова
- «Математические основы информатики» Елена Андреева, Ирина Фалина, Людмила Босова
Видео
Изображение для обложки Variation Investigation 2 позаимствовано у Mobilelectro