Найти тему
ZDG

Программист с лопатой #2

Предыдущая часть:

Есть куча песка, у вас в руках лопата, и вам дают задание: переместить кучу песка в другое место.

Как вы поступаете?

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

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

Получается, что вы, ни разу не обучавшись программированию, тем не менее прекрасно знакомы с понятием цикла:

-2

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

Таким образом, вы не просто знакомы с понятием цикла, но и всегда знали, как его оптимизировать:

-3

Но вы ещё не только знаете, как убрать весь песок, но и как вернуть его обратно:

-4

Всегда знали, правда?

Сможете ли вы теперь запрограммировать следующую задачу:

Есть ДВЕ кучи песка, и надо сделать так, чтобы они были одинаковые?

-5

А может, просто сделать так?

-6

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

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

Для этого нужно развивать абстракцию моделей. Закодировав количество песка числом 100, мы создали абстракцию высокого уровня. Но кроме свойств объектов абстрагировать нужно и процессы. Например, перекидывание песка можно полностью исключить из модели и перейти сразу к готовым результатам.

Однако это не значит, что так надо делать всегда.

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

Если мы в программной модели хотим воспроизвести это состояние на любой момент времени, то мы должны воспроизводить и сам процесс.

В модели, где состояния куч меняются мгновенно, у нас не будет такой возможности.

-7

Какую модель выбрать для курицы, переходящей дорогу?