Найти тему

Пример практической задачи для програмиста из окружающего мира

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

Как ни странно, но система лифтов – это стандартный обработчик очереди. Осталось придумать алгоритм, какой лифт будет обрабатывать входящий запрос клиента и, исходя из этого алгоритма, прикинуть, сколько будет среднее время ожидания лифта. Слишком просто покажется? Ну, давайте не будем забывать, что в здании может быть 1 пассажирский лифт и 1 грузовой. У человека 1 кнопочка и если ему нужен грузовой, а приедет пассажирский – он не поедет. Или представьте небоскреб в 100 этажей, где алгоритм имеет катастрофически важное значение для избежания очередей и столпотворения.

Как бы я сформулировал задачку. У нас есть здание, количество этажей которого неизвестно (задается заранее) и неизвестное количество лифтов и их типов. Т.е. может быть 2 лифта оба грузовых или 2 лифта и из них 1 грузовой. Или всего 1 лифт. В очередь будут поступать сообщения клиентов – номер этажа, вес груза и требования к лифту (напоминаю, что у лифтов есть грузоподъемность и если лифт полон, то клиент не сядет и должен поставить еще одно сообщение в очередь).

Т.е. фактически это попытка моделирования процесса. Есть ли уже готовые модели? Уверен, что есть, если поискать. Но я же говорю про процесс обучения. Плюс мы тут помимо идеи очереди еще и асинхронную разработку с потокобезопасностью затронем.

Ну и заканчиваем мы эту постановку задачи широчайшим спектром задач для тестирования.

Что тут можно тестировать:

1) Стандартный жилой дом в 12-17 этажей с двумя лифтами разного типа

2) Стандартный жилой дом в 12-17 этажей с двумя лифтами одного типа

3) 9-этажка с одним лифтом

4) Небоскреб

5) Офисное здание в 30 этажей.

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

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

/