Командное приготовление яичницы
Фантазия на тему, как наша команда готовила бы яичницу.
Product manager (он всегда спецификацию пишет по-английски):
Our customers need fried eggs. Result should be hot and round. Sunny-side up.
P0. Should be cooked from eggs
P2. Fried eggs should be edible
Microwave method is out of scope.
Design of fried eggs will be attached later.
Team leader:
— Мне нужны точные оценки сколько времени потребуется на создание яичницы и разбиение по задачам. Поскольку требования сложные — предлагаю сделать сначала прототип.
Младший разработчик:
— Парни, подскажите, как жарить яичницу?
Архитектор:
— Мелко нарезать репчатый лук, посыпать его 15 граммами муки и обжарить на масле. Влить 2 децилитра красного вина и 1 децилитр рыбного отвара. Довести до кипения, добавить 2 мелко нарезанные горячие картофелины, 200 г варенной трески, филе 3 анчоусов, щепотку петрушки и как следует поперчить. Выложить горкой на смазанном маслом противне. Посыпать толченными сухарями, полить топленным маслом и поставить в духовку на сильный огонь. После приготовления выложить вокруг яичницу. Кстати, противня у нас нет, но можно спросить у соседней команды.
Старший разработчик:
— А кто тебе вообще сказал, что надо жарить яичницу? Team leader? Да он ничего в яйцах не понимает. А что тогда делать? Ну есть много вариантов. Можно яйца сварить, пожарить, сделать омлет… Какой вариант выбрать? Да монопенисуально. Я не могу ответить пока у нас нет целей. Кстати, Team leader, где моя зарплата в 200 тысяч?
Разработчик с локальным веб-сервером:
— Чтобы приготовить яичницу нужны яйца. Взять их можно в магазине. В каком? Я не знаю. Я работаю локально, поэтому у меня свои.
Разработчик-линуксоид:
— В линуксе это можно сделать одной командой: «make fried eggs».
Разработчик с плохой памятью:
— Я не знаю как приготовить. Это лучше спросить у старшего разработчика. Он их недавно готовил, а я только один раз картошку жарил и то по инструкции, которую не помню куда дел.
Разработчик с широкими интересами:
— Ой, давай попозже объясню? Зацени лучше мою новую машину, айфон и макбук…
Разработчик, любитель все усложнять:
— Яичница — это просто: для начала нам нужны яйца. Чтобы их получить строим сарай, покупаем цыплят и корм для них. Через месяц появятся первые яйца. Далее нам нужна сковорода. Для этого необходимо купить небольшой сталелитейный завод…
Разработчик, любитель автоматизации:
— Пожарить яйца?
— Старший разработчик, до каких пор мы будем жарить яйца вручную? Надо автоматизировать!
Maintenance разработчик:
— Ой, спроси лучше как живу. Как живу? Ой, и не спрашивай… Кстати, помню у одного нашего кастомера был сайт про яйца. Вот это были яйца! Но с этим лучше к нашему доктору…
Прошло 3 недели…
Девушка-тестировщик:
— Я тащусь от нашей яичницы! Она такая красивая! Дай-ка я ее попробую… Ой! Она же не соленая!
Разработчики хором:
— Про соль ничего не было в спецификации!
Стресс-тестировщик:
— Когда я быстро-быстро бью вилкой по тарелке с яичницей, то почему-то все стены, пол и потолок в яйцах…
Старший тестировщик:
— Между пятью членами семьи очень неудобно делить круглую яичницу. Мы должны предусмотреть механизм деления на пять или запретить эту возможность.
Начальник отдела тестирования:
— Зеленоватый оттенок яичницы — это критический баг. Мы не можем закрыть итерацию пока это не пофиксим.
— Документатор:
— Яичница. Поясните пожалуйста, о чем тут идет речь?
Источник
Алгоритм как приготовить яичницу
Прежде, чем автоматизировать бизнес-процессы, надо эти самые процессы сначала описать. Если у вас есть неделя-две абсолютно свободного времени, вы можете описать все процессы самостоятельно. Удачи:-)
Однако логичнее поручить сотрудникам описать все то ,что они делают.
Что я и попыталась сделать в Веб-студии «Адеон», однако столкнулась с тем, что процессы, которые я бы разбила на сотню шагов, у моих девочек чудесным образом описывались в десяток. Плюс были упущены из вида многие важные детали.
В связи с этим встала задача, как быстро, но эффективно донести до персонала идею описания последовательности действий, которая, собственно, приводит к желаемому результату. К тому же способ донесения должен отвечать определенным принципам: что-то, что известно практически каждому плюс простота формулирования.
И тут я вспомнила мастер-класс Александра Левитаса, на котором мне посчастливилось побывать летом 2010 на Всероссийском молодежном инновационном форуме Селигер.
Кто не в курсе, Александр Левитас — великолепный бизнес-тренер, спец по партизанскому маркетингу, и, кстати, очаровательный мужчина:-) Рекомендую его блог — alex-levitas.livejournal.com).
Итак, Левитас провел мини-игру. Один участник должен был написать инструкцию как налить воду в стакан, а другой, следуя инструкции, налить ее в стакан.
С первого раза миссия оказалась абсолютно невыполнима! То угол наклона бутылки не указали, то забыли о том, что крышку надо вертеть по часовой стрелке!
Мы провели эту игру на одном из собраний в Веб-студии «Адеон» и сотрудники в буквальном смысле расцвели на глазах, приговаривая «Ах вот что эта Ястребова от нас требует»!
Также на habrahabr.ru я нашла отличный пример с яичницей, который решает те же задачи.
Итак, еще один вариант обучения сотрудников описанию бизнес процессов — написание инструкции «Как приготовить яичницу»?
Задание для сотрудника следующее:
1. Напишите, какие ресурсы требуются для приготовления яичницы.
2. Какие «технические» операции необходимо совершить, чтобы на столе стояла «Скворчащая, годная к употреблению яичница».
Причем «зачет» описания процесса приготовления сотрудник получает в том случае, если другой сотрудник выполняет только те действия, которые написаны в инструкции по приготовлению и не делает ничего другого. Таким образом, человек получает обратную связь от своего же сослуживца, что позволяет более критично отнестись к собственному творению.
Ниже привожу сверочный список, кому интересно, составьте свой и сравните. В ресурсах и технических операциях сознательно пропущено несколько пунктов, буду рада, если заметите.
Ресурсы: 1. Два яйца. 2. Столовая ложка подсолнечного масла. 3. Плита. 4. Газ. 5. Соль. 6. Вилка. 7. Столовая ложка. 8. Тарелка для второго блюда. 9. Мусорное ведро.
Технические операции: 1. Зажечь газ. 2. Поставить сковороду на зажженную конфорку и через минуту убавить газ до минимума. 3. Налить подсолнечное масло в столовую ложку и добавить его в сковородку. 4. Распределить масло по всей поверхности сковородки. 5. Достать из холодильника два яйца. 6. Взять нож из кухонного гарнитура. 7. Взять первое яйцо в левую руку, а нож в правую. 8. Ударить тыльной стороной ножа по скорлупе так, чтобы появилась трещина на скорлупе. 9. Положить нож. 10. Разъединить половинки скорлупы над сковородкой на расстоянии примерно 5 – 10 сантиметров над поверхностью. 11. Повторить шаги с 7 по 10 со вторым яйцом. 12. Двумя пальцами правой руки взять «щепотку» соли и посолить яичницу. 13. Выждать семь минут. 14. Выключить газ. 15. Поставить на стол тарелку для второго блюда. 16. Взять сковородку в правую руку. 17. Аккуратно вилкой выложить содержимое на тарелку для второго блюда. 18. Сковородку поставить в мойку. 19. Тарелку с яичницей поставить на стол. 20. Достать из кухонного гарнитура вилку и положить рядом с тарелкой. 21. Скорлупу положить в ведро для мусора. 22. Нож положить в мойку.
Также, хочу привести пример инструкции из собственного бизнеса.
Так как инструкции для сотрудников Веб-студии «Адеон», разумеется, засекречены, привожу отличную инструкцию для наших клиентов (любимых) по системе управления (CMS), на которой Веб-студия «Адеон» создает сайты:
После перехода по данной ссылке, Вы сможете скачать отличный пример инструкции, а также протестировать действительно удобную систему управления, на которой Веб-студия «Адеон» создает сайты.
Источник
Energy
education
сайт для тех, кто хочет изучать энергетику
Информационные технологии
Теория информации
Информация — сведения, воспринимаемые человеком и (или) специальными устройствами как отражение фактов материального или духовного мира в процессе коммуникации (ГОСТ 7.0-99).
2. Теория алгоритмизации
Слово «алгоритм» происходит от имени выдающегося математика средневекового Востока Мухаммеда аль-Хорезми (787 – 850). Около 852 года он написал книгу, в которой им были предложены приёмы выполнения арифметических вычислений с многозначными числами.
В первой половине XII века книга аль-Хорезми в латинском переводе проникла в Европу. Переводчик (имя его неизвестно) дал ей название Algoritmi de numero Indorum («Алгоритми о счёте индийском»). Слово algorism (или algorismus) обрело значение способа выполнения арифметических действий посредством арабских цифр, то есть на бумаге, без использования абака. Именно в таком значении оно вошло во многин европейские языки.
Таким образом, сочинения по искусству счёта стали называться алгоритмати.
В 1684 году Готфрид Лейбниц в сочинении «Nova Methodvs pro maximis et minimis, itemque tangentibus…» впервые использовал слово «алгоритм» (Algorithmo) в ещё более широком смысле: как систематический способ решения проблем дифференциального исчисления.
Пользовался словом «алгоритм» и ещё один выдающийся математик – Леонард Эйлер, одна из работ которого так и называется – «Использование нового алгоритма для решения проблемы Пелля». Здесь видно, что Эйлер уже понимает алгоритм в ещё более широком смысле, а именно: как синоним способа решения задачи.
В 30-е годы XX века возникает научное направление «Теория алгоритмов», предметом исследования которого стала разработка универсальной алгоритмической модели. Наибольший вклад в теорию алгоритмов внесли английский математик Алан Тьюринг и русский математик Андрей Марков.
Алан Тьюринг в 1935-1936 годах создаёт теорию «логических вычисляющих машин». Разработанная им «машина Тьюринга» стала обязательной частью обучения будущих математиков и компьютерщиков. На одной из лондонских гостиниц мемориальная доска гласит: «Здесь родился Алан Тьюринг (1912 — 1954), взломщик кодов и пионер информатики».
Андрей Марков в 1947 году ввёл понятие «нормального алгоритма» и впервые систематически и строго построил общую теорию алгоритмов. Современные языки символьной обработки информации (Пролог) берут своё начало от нормальных алгоритмов Маркова.
Понятие алгоритма так же фундаментально для информатики, как и понятие информации. Поэтому в нём очень важно разобраться. Единого «истинного» определения понятия «алгоритм» не существует. Вот лишь некоторые из предлагаемых определений:
«Алгоритм – это всякая система счислений, выполняемых по строго определённым правилам, которая после какого-либо числа шагов заведомо приводит к решению поставленной задачи». (А. Колмогоров)
«Алгоритм – это точное предписание, определяющее вычислительный процесс, идущий от варьируемых исходных данных к искомому результату». (А. Марков)
«Алгоритм – строго детерминированная последовательность действий, описывающая процесс преобразования объекта из начального состояния в конечное, записанная с помощью понятных исполнителю команд». (Н. Угринович)
При изучении информатики чаще всего используют следующее определение алгоритма:
Алгоритм – понятное и точное предписание исполнителю выполнить конечную последовательность команд, приводящую от исходных данных к искомому результату.
Каждый человек в повседневной жизни выполняет огромное количество алгоритмов.
Пример. Алгоритм «Заварка чая»: | Пример. Алгоритм «Приготовь яичницу»: |
---|---|
|
|
Для разработки алгоритма необходимо иметь исходную информацию (данные) и представлять конечный результат (цель).
Полный набор данных – необходимый и достаточный набор данных для решения поставленной задачи (получения искомого результата).
Исполнитель алгоритма – это объект или субъект, для управления которым составлен алгоритм.
В качестве исполнителей могут быть как живые существа, так и технические устройства. В частности, автоматическим исполнителем алгоритмов по обработке информации является компьютер.
Очень часто исполнителем алгоритмов является сам человек. Мы выполняем алгоритмы, когда переходим улицу, готовим еду, делаем уроки, звоним по телефону и т.д.
Но между человеком и автоматическим устройством есть существенная разница. Если для человека имеют значение не только указания, которые даны в алгоритме, но и большой фактор заложен в степени эмоциональности изложения, то для компьютера или другого устройства имеет значение – понимает он данную команду или нет. Выполнив необходимые действия, алгоритмическое устройство прекращает работу.
Поэтому исполнителя, выполняющего команды определённого алгоритма без анализа действий и ситуаций, называют формальным исполнителем.
Иными словами работа исполнителя состоит в последовательном формальном выполнении команд алгоритма, что не предполагает анализа правильности их построения, а также результата выполнения.
Пример. Исполнители алгоритмов:
| | | | |
Компьютер | Солдат | Телевизор | Дрессированный лев | Автомобиль |
Исполнителя алгоритма характеризует среда его «обитания» и система команд исполнителя (СКИ).
Среда исполнителя – обстановка, в которой функционирует исполнитель.
Система команд исполнителя (СКИ) – это вся совокупность команд, которую может выполнить исполнитель.
СКИ считается полной, если содержит весь минимально-необходимый набор команд, позволяющий построить любой алгоритм в том классе задач, на который ориентирован исполнитель.
Определённая последовательность действий исполнителя всегда применяется к некоторым исходным данным. Например: для приготовления блюда по кулинарному рецепту нужны соответствующие продукты (данные). Для решения математической задачи (решение квадратного уравнения) нужны исходные числовые данные (коэффициенты и уравнения).
Любой алгоритм должен удовлетворять четырём основным свойствам:
- Конечность
- Дискретность
- Понятность
- Точность
Конечность алгоритма означает, что за конечное число шагов должен быть получен результат. Поэтому иногда это свойство называют результативностью.
Пример. Пусть имеется последовательность команд:
- Конечность алгоритма Взять книгу
- Открыть первую страницу
- Пока не конец книги выполнить следующие действия:
-
- Прочитать текст
- Перелистнуть книгу на следующую страницу
- Прочитать текст
- Открыть первую страницу
Легко догадаться, что данная последовательность команд будет выполняться бесконечно и поэтому алгоритмом не является.
Дискретность означает, что алгоритм должен быть разбит на последовательность отдельно выполняемых шагов.
Пример. Пусть необходимо решить следующий пример: (80+10)-5*(3+5)=
Запишем алгоритм решение примера, разбив его на шаги:
- Дискретность алгоритма Вычислить 80+10
- Вычислить 3+5
- Умножить 5 на результат предыдущего действия
- Вычесть из результата 1-го действия результат 3-го действия
В результате выполнения алгоритма получим 50. Алгоритм будет выполняться только при условии одного действия за раз.
Понятность алгоритма означает, что алгоритм должен содержать только те команды, которые входят в СКИ.
Пример. Рассмотрим алгоритм:
- Понятность алгоритма Пойти на кухню
- Вскипятить чайник
- Насыпать в чашку 1 чайную ложку кофе
- Положить в чашку 3 чайных ложки сахара
- Налить полную чашку кипячёной воды
Очевидно, что он легко может быть выполнен 10-летней девочкой, которая понимает все команды, входящие в данный алгоритм. Однако, для 10-месячного малыша данный алгоритм будет непонятен.
Точность алгоритма означает, что любая его команда должна определять однозначное действие исполнителя. Иными словами, алгоритм не должен быть рассчитан на принятие каких-либо самостоятельных решений исполнителем.
Пример. Рассмотрим следующий алгоритм, описывающий, как добраться до стадиона:
- Точность алгоритма Идти прямо
- Повернуть
- Идти прямо
- Сесть на автобус
- Доехать до остановки «Стадион»
Данный алгоритм не уточняет, какое расстояние нужно пройти прямо, в какую сторону повернуть, на какой автобус сесть, поэтому разные исполнители будут выполнять его по-разному и цель вряд ли будет достигнута.
Для успешной работы алгоритма необходимо также, чтобы имелся полный набор исходных данных, необходимый для его выполнения. Если исходные данные неполные, то либо задачу вообще нельзя решить, либо она будет иметь неоднозначное решение.
Пример. Полный набор исходных данных
Пусть вы пришли в магазин самообслуживания и решили подсчитать стоимость предполагаемых покупок, чтобы узнать, хватит ли вам денег. Вам нужно купить 2 кг сахарного песка, 3 кг муки и 2 батона хлеба. Тогда для вычисления общей стоимости вам надо:
- Умножить стоимость 1 кг сахарного песка на 2
- Умножить стоимость 1 кг муки на 3
- Умножить стоимость 1 батона на 2
- Сложить все полученные результаты
Если по какой-либо причине не будет вывешен ценник хотя бы для одного из продуктов, то данная задача не сможет быть решена.
Для представления алгоритмов используют несколько способов:
- словесный
- графический
- программный
Самый простой способ – словесный – это способ записи алгоритма на естественном языке, но с тщательно отработанным набором слов и фраз, не допускающих повторений, синонимов, двусмысленности, лишних слов. Допускается использование математических символов.
Пример. Алгоритмы, записанные словесным способом:
| |
Поваренная книга | Инструкция по эксплуатации телевизионного приёмника |
При графическом способе описания алгоритма осуществляется с помощью блок-схем.
Блок-схема — это графический способ представления алгоритма, каждое действие при этом осуществляется рисованием последовательности геометрических фигур, каждая из которых подразумевает выполнение определенного действия алгоритма. Порядок выполнения действий указывается стрелками.
В таблице приведены наиболее часто употребляемые блоки:
№ | Наименование символа | Символ | Отображаемая функция |
---|---|---|---|
1 | Блок вычислений | | Вычислительное действие или последовательность вычислительных действий |
2 | Логический блок | | Выбор направления выполнения алгоритма в зависимости от некоторых условий |
3 | Блок ввода-вывода | | Общее обозначение ввода или вывода данных |
4 | Начало-конец (вход-выход) | | Начало или конец алгоритма |
Программный способ – это запись алгоритма на языке программирования (в виде компьютерной программы).
Существует три способа организации действий исполнителя: следование, ветвление, циклы.
Следование – это способ организации действий, при котором команды следуют одна за другой, последовательно, образуя, так называемую серию команд.
Порядок выполнения: команды выполняются последовательно; каждая следующая команда выполняется только после выполнения предыдущей.
Особенностью выполнения данной конструкции является тот факт, что следование команд в серии определяется составлением алгоритма и на этапе выполнения не меняется. Это означает, что сначала выполняется, например, команда 2, а потом команда 3.
Алгоритмическая конструкция – линейная.
Словесная форма | Блок-схема |
---|---|
|
Пример. Алгоритм «Окружность»
Словесная форма | Блок-схема |
---|---|
|
Ветвление – это способ организации действий, при котором выполняется та или другая серия команд в зависимости от условия.
Порядок выполнения: на первом шаге проверяется условие. Если оно истинно, то выполняется серия 1, и на этом выполнение команды ветвления заканчивается. Если условие ложно, то выполняется серия команд 2 и на этом выполнение команд ветвления заканчивается.
Особенностью выполнения команды является то, что из двух предложенных серий команд обязательно будет выполнена только одна: либо первая, либо вторая. Ни при каких условиях не могут быть выполнены обе. Серия 2 может отсутствовать и тогда конструкция ветвления является сокращённой. В этом случае, если условие окажется ложным, никакие действия не будут выполнены.
Алгоритмическая конструкция – ветвление.
Запись полной конструкции:
Словесная форма | Блок-схема |
---|---|
|
Запись сокращённой конструкции:
Словесная форма | Блок-схема |
---|---|
|
Пример. Алгоритм «Погода»
Словесная форма | Блок-схема |
---|---|
|
Цикл – это способ организации действий, при котором одна и та же серия команд выполняется неоднократно. Количество повторений зависит от условия.
Алгоритмическая конструкция – цикл.
Цикл с предусловием (цикл «пока»):
Словесная форма | Блок-схема |
---|---|
|
Порядок выполнения: на первом шаге проверяется условие. Если оно истинно, то выполняется серия команд, составляющая тело цикла и далее опять – проверка условия и т.д. Повторение выполнения тела цикла происходит до тех пор, пока условие истинно. Если условие ложно, то происходит выход из цикла.
Особенностью выполнения серия команд, составляющая тело цикла выполняется как единое целое, от первой команды до последней, и только на следующем шаге проверяется условие входа в цикл. Условие определяет количество повторений. Если оно ложно с самого начала исполнения команды цикла, то количество повторений будет равно 0. Условие и серия команд (тело цикла) должны формироваться таким образом, чтобы избежать ситуации зацикливания.
Цикл с постусловием (цикл «до»):
Словесная форма | Блок-схема |
---|---|
|
Порядок выполнения: на первом шаге выполняется серия команд, далее проверяется условие. Если оно ложно, то выполняется серия команд, составляющая тело цикла и далее опять – проверка условия и т.д. Повторение выполнения тела цикла происходит до тех пор, пока условие ложно. Если условие истино, то происходит выход из цикла.
Особенностью выполнения заключается в том, что тело цикла всегда выполняется хотя бы один раз.
Цикл с параметром (цикл со счётчиком):
Словесная форма | Блок-схема |
---|---|
|
Порядок выполнения: данный цикл предусматривает присвоение параметру цикла i последовательных значений от начального 1 до конечного N с определённым шагом и выполнение операторов цикла при каждом из них.
Особенностью выполнения заключается в том, что заранее указывается количество повторений цикла. Однако если заданное конечное значение меньше начального, то тело цикла не выполняется ни разу.
Пример. Алгоритм «Картофель»
Словесная форма | Блок-схема |
---|---|
|
Администратор сайта: Колосов Михаил
email:
Copyright © 2011-2021. All rights reserved.
Источник