HTML информатика 11 класс
Чистый HTML — это разметка структуры данных. Данные и только данные.
А всё, что касается внешнего вида — CSS и только CSS.
Из современного HTML удалили все теги и атрибуты, которые в старых версиях HTML отвечали за внешний вид.
В современных браузерах тег center и атрибут bgcolor всё ещё работают только для того, чтобы можно было зайти на сайты, сделанные более 20 лет назад.
Остальные ответы
Если я правильно понял вопрос
Шаблон сайта на чистом HTML
Вам срочно нужно сделать сайт, используя только HTML, и выложить его в интернет? Тогда вам не составит труда скопировать готовый код и следовать моим инструкциям.
- Создание места для сайта на своём компьютере
- Создание шаблона сайта
- Код сайта
- Создание директории сайта
- Перенос сайта со своего компьютера в интернет
Правда полноценный ресурс, с применением одного языка программирования, сделать затруднительно, но вот сайт-визитку из нескольких страничек, вполне возможно.
Если у кого-то именно он и является целью, и нет желания изучать другие языки, то эта статья для них.
Короче, в самописном исполнении, без использования CMS, проще уже ничего не существует.
А для тех кому требуется что-то по круче, в конце статьи есть ссылки на статьи с кодом блочного шаблона, с использованием CSS, и кодом динамического сайта с использованием PHP.
Сайт на чистом html сделаем прямо на этой странице, так сказать — сайт в сайте, вполне рабочий и готовый к заполнению контентом.
Разделим весь процесс на четыре части.
1. Создание места для сайта на своём компьютере.
2. Создание сайта.
3. Создание директории сайта
4. Перевод сайта с нашего компа на хостинг, то есть в интернет.
Создание места для сайта на своём компьютере
Первый пункт самый простой.
Нужно просто создать отдельную папку, например в разделе Документы и назвать её как вам будет угодно, например site .
Чуть погодя, когда у нас будут готовы файлы сайта, мы будем складывать их в эту папку и это будет уже не просто папка, а директория, или корень сайта.
А что, куда и как положить, я подробно покажу после кода главной страницы, чтоб уже было с чем идти в директорию.
Приступим ко второму пункту, самому творческому.
Создание шаблона сайта
Для создания шаблона потребуется редактор, в который нужно будет вставить приведённый ниже код.
Это может быть как простой виндовский Блокнот, так и любой другой текстовый редактор.
Я рекомендую Notepad++. Он бесплатный, простой в использовании, и в отличие от Блокнота, в нём легко просматривать картинку в браузере, после внесения изменений в код.
За основу шаблона возьмём многослойную таблицу HTML. Раньше, до появления CSS все сайты писались таблицами, теперь же более популярной стала блочная вёрстка.
Но и до сих пор, табличная структура не устарела и с успехом применяется.
Например инвестиционная CMS H-script со сложнейшим функционалом, целиком свёрстана на основе таблиц.
Итак, вот такой сайт, с минимальным оформлением.
Как в дальнейшем оформлять таблицы, очень подробно показано в статье Таблицы HTML.
Описание сайта
Здравствуйте уважаемые будущие веб-мастера! Мне 55 лет и я рад приветствовать Вас на своём сайте.
Этот сайт первый, который я разработал самостоятельно, а до этого умел только входить в интернет.
Почему я решил его сделать? За те 3 месяца, пока разбирался в сайтостроении и создавал этот ресурс обнаружилось, что авторы руководств по созданию сайтов считают многие нюансы само собой разумеющимися и не обращают на них внимания.
А мне, учитывая возраст и отсутствие опыта, было не просто понять как раз эти нюансы, они отнимали больше всего времени.
Меню
Общая информация
Текст общей информации или реклама
< html lang color:seagreen;">ru «>
< head >
< meta charset color:seagreen;">utf-8 » />
< title >Название сайта< /title >
< /head >
< body >
< !--Создаём таблицу контейнер, которой задаём следующее
оформление:
border=»1″ — рамка вокруг контейнера. Увеличив число, можно увеличить толщину рамки.
align=»center» — размещаем контейнер по центру экрана.
rules=»rows» — убираем двойную рамку.
style=»width:60%;» — добавляем стилевое свойства, делающее
контейнер и весь сайт «резиновым».
Сделать полноценный адаптивный дизайн, этим способом невозможно.— >
< table
border color:seagreen;»>1 »
align color:seagreen;»>center »
rules color:seagreen;»>rows »
style color:seagreen;»>width:60%; «>
< !--Создаём строку-- >
< tr >
< !--Создаём ячейку строки-- >
< td >
< !--В ячейке строки создаём ещё одну таблицу для шапки сайта.
Оформление:
border=»1″ — двойная рамка толщиной в 1px
background=»images/168.png» — картинка в шапке сайта, если требуется.
Адрес картинки вы должны вставить свой.
bgcolor=»#7FFFD4″ — фоновый цвет в шапке, если нет картинки.
cellpadding=»10″ — отступ содержимого от рамки не менее 10px.
style=»width:100%; border-radius:5px;» — добавляем «резиновость»
и закругляем уголки рамки— >
< table
border color:seagreen;»>1 »
background color:seagreen;»>images/168.png »
bgcolor color:seagreen;»>#7FFFD4 »
cellpadding color:seagreen;»>10 »
style color:seagreen;»>width:100%; border-radius:5px; «>
< !--Создаём строку таблицы-- >
< tr >
< !--Создаём столбец таблицы-- >
< th >
< !--Содержание ячейки столбца-- >
< h1 >Название сайта (организации)< /h1 >
< h3 >Описание сайта< /h3 >
< !--Закрываем таблицу-- >
< /th >
< /tr >
< /table >
< table
border color:seagreen;»>1 »
bgcolor color:seagreen;»>#e6e6fa »
cellpadding color:seagreen;»>10 »
style color:seagreen;»>width:100%; border-radius:5px; «>
< !--Создаём строку-- >
< tr >
< !--Создаём ячейку
Оформление:
rowspan=»2″ — объединяем две ячейки в одну.
Число объединяемых ячеек по числу ячеек в сайдбаре.
style=»width:80%» — основной контент занимает 80% всей площади,
оставшиеся 20% для сайдбара— >
< td
rowspan color:seagreen;»>2 »
style color:seagreen;»>width:80% «>
< h2 >Страница< /h2 >
< !--Начинаем абзац с красной строки-- >
< p style = "text-indent:20px ">
Здравствуйте уважаемые будущие веб-мастера!
Мне 55 лет и я рад приветствовать Вас на своём сайте.
Этот сайт первый, который я разработал самостоятельно,
а до этого умел только входить в интернет.< /p >
< p style color:seagreen;">text-indent:20px «>Почему я решил его сделать?
За те 3 месяца, пока разбирался в
сайтостроении и создавал этот ресурс обнаружилось,
что авторы руководств по созданию
сайтов считают многие нюансы само собой разумеющимися
и не обращают на них внимание
А мне, учитывая возраст и «опыт», было не просто
понять как раз эти нюансы, они отнимали больше всего
времени.< /p >
< !--Закрываем ячейку-- >
< /td >
Вот такой очень простой код. Без учёта пробелов и комментариев, даже 100 строк не наберётся.
А ведь это уже готовый, рабочий сайт из трёх страниц, который можно выложить в интернет и заполнить контентом.
Между прочим, скорость загрузки будет головокружительной.
Как конструировать таблицу, менять расположение ячеек, добавить в таблицу скрипты Javascript и формы обратной связи, читайте в статье Таблицы HTML.
Готовый код различных наворотов для вашего сайта вы можете найти на странице Бесплатные скрипты и CSS эффекты для сайта
Создание директории сайта
Посмотреть и более подробно ознакомится с тем, что из себя представляет директория сайта, можно в статье Создание директории сайта (все ссылки с этой страницы открываются в отдельном окне, чтоб не потеряться).
Все действия показаны в редакторе Notepad++. Если кто ещё не установил, то вот ссылка на инструкцию по установке: Установка Notepad++
Хотя, как я уже сказал выше, этот сайт можно написать и отредактировать даже в стандартном виндовсовском блокноте.
Так же не помешает ознакомиться с тем, как создать первый файл сайта, в статье Каркас страницы.
Итак, начинаем работать.
Открываем Notepad++, открываем «Новый документ», проверяем и если нужно исправляем кодировку на uft-8 (без БОМ), копируем код сайта с моей страницы, вставляем его в поле редактора.
Затем выбираем «Файл — Сохранить как…» , в открывшемся поисковике находим созданную при создании места для сайта папку «site», в строке «Сохранить»(внизу окна поисковика) меняем название с «nev1» на «index.html», и сохраняем.
Затем заходим в папку «site», в ней уже есть первый файл index.html, и создаём там-же ещё две папки content и images.
В результате директория должна выглядеть следующим образом:
Теперь, чтоб в дальнейшем не писать длинные адреса для изображений, откроем папку content и создадим в ней ещё одну папку для картинок с названием images1.
В неё будем складывать изображения для всех страниц, кроме главной.
Возвращаемся в редактор, выбираем меню Запуск (верхняя строка панели редактора), и в нём Launch in Chrome.
Если конечно у вас другой браузер, то выбрать нужно его. В браузере должен открыться шаблон, который показан в начале статьи.
Если вы пишете сайт в блокноте, то запускать его нужно будет из поисковика, то есть из папки site открыть файл index.html.
Вот теперь можно начинать его править так, как Вам нужно. Все позиции, которые можно изменить, указаны в комментариях к коду.
После изменения какой либо позиции, нужно нажать Сохранить(третья иконка слева), и через Запуск посмотреть как получилось.
Поле для статьи и поля в сайдбаре будут увеличиваться по вертикали, по мере заполнения их текстом, автоматически, причём если высота текста статьи не ограничивается, то высота текста в сайдбаре не должна превышать высоту статьи.
Теперь разберёмся с картинками. Изображения в моём шаблоне загружены через сервис trueimages.
Вы же будете делать свои, и сохранять их в папке images и images1 директории site, значит адреса картинок будут другими.
Как сделать картинку рассказано в статье Как сделать картинку для шапки в Paint(это для тех кто не знаком с фотошопом).
А адреса у Вас буду выглядеть так: Для Главной (index.html) — images/имя рисунка.

А на всех последующих страницах вместо images ставиться images1.
Картинки маркеров на Главной прописываются так

А на следующих страницах так опять вместо images — images1
Вот теперь можно из шаблона сделать свой сайт, со своими изображениями, и своим текстом.
Последующие страницы делаются по тому же шаблону, только сохраняются в папке «content», и называются не «index.html», а по заголовку статьи, только в названии файла он пишется английскими буквами, с окончанием «html».
Изображения для них размещаются соответственно в папке images1. Если и на главной, и на других страницах, есть одни и те-же картинки, то они должны быть в обеих папках.
Адреса этих страниц определяются так. Когда Вы создадите страницу, сохраните её в папке content, выберете в Notepad++ меню Запуск, и откроете в своём браузере, то в адресной строке браузера как раз и будет нужный адрес.
Вставляется он в виде ссылки перед текстом «Другая страница» (как пишутся ссылки читайте в статье Ссылки примерно вот так

На моём сайте можно подобрать ещё несколько красивостей для оформления страницы, как то: красивая прямая линия, рамки, бегущая строка или бегущая картинка, кнопка и ещё кое что.
Когда все доработки будут сделаны, то есть сайт будет готов, можно переходить к третьему пункту — выводу сайта в интернет.
Перенос сайта со своего компьютера на виртуальный хостинг, то есть в интернет
Для этого нужно будет приобрести хостинг и домен. Что такое хостинг, можно посмотреть здесь, а доменное имя сайта — это адрес, по которому Ваш сайт будет определятся в интернете.
Доменов бесплатных не бывает, а вот хостинги есть, но я рекомендую всё же использовать платный хостинг.
Во-первых, 1200 руб. в год — смешная цена, а во вторых гарантия того, что Ваш сайт будет доступен в любое время по всему миру, и оперативное решение возникающих проблем (а это возможно только на платных хостингах), того стоит.
Я рекомендую Вам хостинг Бегет. Это один из, если не самый лучший хостинг провайдер России.
Евгений Попов даже запустил проект «Хостинг-Нинзя», по выявлению лучшего хостера, и заключающийся в опросе пользователей.
В конце концов этот проект стал крупнейшим сервисом по подбору хостинга, и Бегет сразу занял, и твёрдо удерживает в нём первое место.
Цена хостинг + домен = 1620 руб. в год. Первый месяц(целый месяц!) — тестовый, то есть вначале покупается только домен за 120 руб в год, и только через месяц, если Вам понравилось, оплачиваются услуги хостинга.
Можно за год, можно ежемесячно. Но самое главное, я считаю — это постоянная доступность сайта, и круглосуточная моментальная и доброжелательная техподдержка.
А это уже встречается не часто, даже за более солидные деньги.
Расскажу пару запоминающихся случаев. Как то раз я набрав адрес своей админки, в ответ получил, не помню уж какую, ошибку. Представляете моё состояние?
Был сайт, и нет его. Позвонил в техподдержку хостинга, и через час выяснилось, что плагин BulletProf Security, после обновления, возможно и при моём неумелом участии, наштамповал новых файлов .htaccess, и закрыл тем самым всякий доступ на сайт.
Специалисты техподдержки смогли войти на сайт, всё исправили, и сообщили об этом мне, с полным разъяснением причины. Пользуйтесь на здоровье, только поаккуратнее.
В другой раз пытался установить крутую тему, но она никак не хотела устанавливаться. В основном архиве находились ещё архивы, а в них ещё.
Позвонил в техподдержку, и через час тема уже стояла и работала на сайте.
В каком ещё хостинге Вам окажут такую помощь. Да ни в каком. Нет таких больше.
Вот на его то примере, я и покажу процесс появления Вашего сайта в интернете. Подробнее про Бегет и про то, как на нём зарегистрироваться и приобрести хостинг и домен читайте в статье Перевод сайта с Денвера на хостинг.
Читайте там до абзаца «А вот теперь тот способ переноса сайта…». Дальше расписан перевод сайта с Денвера, и Вам это не нужно.
Когда сайт зарегистрирован, проходим в панель управления хостинга.

Здесь нас интересует раздел Файловый менеджер, так как именно при его помощи мы сейчас перенесём всё, что сделано у нас на компьютере, в интернет.
Итак, открываем менеджер, и дважды щёлкаем по строке с доменным именем вашего сайта.
Откроется директория, в которой должна быть папка public.html. Вот в неё и будем переносить файлы с нашего компа.
Открываем папку public.html и щёлкнув по разделу Новая папка, создаём там две папки images и content. В папке content — папку images1. Короче, всё так-же, как на компьютере.
Затем находим Загрузить файлы, и щёлкнув по нему, откроем окно загрузки

Здесь заходим в Выбрать, и, в открывшемся поисковике, находим файлы и папки созданные на нашем компе, в директории site.
Первым делом выбираем файл index.html, и загружаем его на хост, нажав Загрузить в меню окна загрузки.
Затем точно таким-же образом загружаем файлы из папок images, images1, и content в одноимённые, созданные на хостинге.
Адреса страниц при этом изменятся так как в них добавиться доменное имя сайта, примерно так:
Для главной — Доменное имя/index.html
Для страниц — Доменное имя/content/straniza.html
Значит, все адреса в меню нужно будет менять. Для этого щёлкаем правой клавишей мыши по index.html, и в открывшемся меню выбираем Правка.

После чего откроется редактор менеджера в котором старые адреса нужно будет убрать, а новые прописать.
У меня, к сожалению, нет картинки с нашими файлами, но редактор менеджера отличается от Notepad++ только подсветкой синтаксиса, думаю разберётесь без картинки.
Если редактор менеджера кому-то не понравиться, можно скачать файл на компьютер, открыть в Notepad++, отредактировать (изменить адреса), удалить старый фал из менеджера, а отредактированный загрузить обратно.
После того, как адреса переписаны, нужно ещё задать права доступа к папкам. Для этого снова щёлкнув правой клавишей по строке с папкой, выбираем Изменить атрибуты.
В открывшемся окне, в поле Кодовое значение, проставляем 644 и жмём Изменить(что такое 644 и другие права доступа можно узнать в интернете)
Всё, можно закрывать окно загрузок, файловый менеджер, и несколько дней ждать когда ваш сайт проиндексируется и можно будет набрав в адресной строке браузера доменное имя, увидеть его в интернете.
Код блочного шаблона сайта можно изучить прочитав статью Код сайта HTML+CSS. Ссылка на статью чуть ниже в меню.
Да, ещё о том, как сделать этот сайт побольше.
Для этого в директории сайта в папке content создаются несколько папок для рубрик, каждая со своей папкой images.
Папки называются по названию рубрик и в каждую из них помещается несколько файлов со статьями по теме рубрики.
Это конечно-же усложняет структуру сайта и затрудняет работу с контентом, картинками и возможными скриптами, но вполне возможно.
Всё остальное делается так, как описано выше, но я настоятельно рекомендую, для больших сайтов использовать php, о чём я подробно рассказал в статье Код сайта на php. Ссылка на статью чуть ниже в меню.
Ну а если вас устраивает вариант показанный на этой странице, то надеюсь, уже завтра ваш сайт на чистом HTML, можно будет найти в интернете.
А ну-ка, что там ещё интересненького
Критерии качества интерфейса (начало)
ЛЕКЦИЯ №1,2 ТЕМА: Критерии качества интерфейса (начало) Вопросы: 1. Скорость выполнения работы 2. Человеческие ошибки Факторы Существует четыре основных критерия качества любого интерфейса, а именно: скорость работы пользователей, количество человеческих ошибок, скорость обучения и субъективное удовлетворение пользователей (подразумевается, что соответствие интерфейса задачам пользователя является неотъемлемым свойством интерфейса). 1. Скорость выполнения работы
Рекомендуемые материалы
Лекции №2 по Архитектуре (начало информатики)
Информатика
Построение графического интерфейса в системе Matlab
Информатика
Разработка программного обеспечения для организации интерфейса программно-методического комплекса
Информатика
Разработка человеко-машинного интерфейса в GraphWorX32
Информатика
Создание графического интерфейса пользователя
Информатика
Структурное программирование: предпосылки и назначение; основные критерии оценки качества программы для ЭВМ
Информатика
Скорость выполнения работы является важным критерием эффективности интерфейса. В чистом виде этот критерий ценят довольно редко, но почти всегда он является крайне желательной составляющей целого. Любая попытка как-то увеличить производительность труда всегда встречается с восторгом. Длительность выполнения работы пользователем состоит из длительности восприятия исходной информации, длительности интеллектуальной работы (в смысле – пользователь думает, что он должен сделать), длительности физических действий пользователя и длительности реакции системы. Как правило, длительность реакции системы является наименее значимым фактором. Длительность интеллектуальной работы Взаимодействие пользователя с системой (не только компьютерной) состоит из семи шагов: 1 формирование цели действий 2 определение общей направленности действий 3 определение конкретных действий 4 выполнение действий 5 восприятие нового состояния системы 6 интерпретация состояния системы 7 оценка результата. Из этого списка становится видно, что процесс размышления занимает почти все время, в течение которого пользователь работает с компьютером, во всяком случае, шесть из семи этапов полностью заняты умственной деятельностью. Соответственно, повышение скорости этих размышлений приводит к существенному улучшению скорости работы. К сожалению, существенно повысить скорость собственно мышления пользователей невозможно. Тем не менее, уменьшить влияние факторов, усложняющих (и, соответственно, замедляющих) процесс мышления, вполне возможно. Разберем это подробнее. Непосредственное манипулирование Как уже было сказано, перед действием пользователи «проявляют тенденцию думать». В процессе этого думанья им приходится из общего, еще неконкретного замысла формировать четкую последовательность действий. Что нелегко. Предположим, пользователь чайника хочет выпить чаю. Желание выпить чаю есть цель действий. Осознав её, пользователь формирует общий замысел, а именно «А вот неплохо бы поставить чайник и устроить себе чаю». После этого пользователь строит алгоритм своих действий: Подойти к чайнику и открыть крышку. Если воды в чайнике мало или нет вовсе, перенести чайник к раковине и наполнить его водой, после чего поставить его на плиту. Если воды в чайнике достаточно, сразу поставить его на плиту. Закрыть чайник крышкой. Найти спички. Открыть коробок, вытащить одну спичку, закрыть коробок, зажечь спичку. Спичкой зажечь под чайником газ, установив подачу газа на максимум. Потушить спичку и выкинуть её. Подождать, пока чайник не закипит, в это время найти достаточно чистый стакан и налить в него заварки. По желанию, найти сахарницу и добавить сахару в стакан. Выключить газ. Налить кипятка из чайника в стакан. Размешать жидкость мизинцем (время от времени вытаскивая его из жидкости и дуя на него, чтобы не обжечься). Употребить жидкость по назначению. Ах, да. Закрыть кран в раковине. Разумеется, в реальной жизни такую сложную программу пользователь не создает – как-никак, он обустраивал себе чай несколько тысяч раз, действие успело стать автоматическим и создаваемый алгоритм состоит в лучшем случае из элементов высшего порядка (поставить чайник, налить чаю). В случае же компьютерных систем трудно ожидать такого автоматизма, более того, алгоритмы действий всегда получаются слишком абстрактными (а люди плохо справляются с абстракциями). Анализируя пример с чаем, можно выделить определенные требования к человеку, выполняющему работу. Он должен знать: 1 что он хочет получить на выходе (чай) 2 как минимум одну последовательность действий, приводящую к успешному результату (наполнить чайник, поставить его на плиту, дождаться закипания, налить кипяток в стакан с заваркой) 3 где ему найти все объекты, участвующие в процедуре 4 как определять годность объектов к использованию (есть ли вода в чайнике) 5 как управляться с объектами (как включить газ). Список, как видим, довольно внушительный. И если с первым пунктом проблем обычно не возникает, то с остальными приходится повозиться. Плохая новость заключается в том, что остальных пунктов много, хорошая новость – в том, что решение всех этих проблем единое. Оно называется непосредственным манипулированием (direct manipulation). Смысл этого метода очень прост. Пользователь не отдает команды системе, а манипулирует объектами. Когда вы хотите зажечь газ в плите, вы ведь не командуете плите «Зажги газ!». Нет, вы манипулируете спичками и плитой так, чтобы получился огонь. Это значительно более естественный для человека способ (как-никак весь реальный мир устроен таким образом). Первым популярным применением этого метода была корзина для удаления файлов на Macintosh (начиная с Windows 95, такая корзина стала стандартом и в Windows мире, хотя присутствовала она и раньше). Чтобы не пересказывать уже известное, ограничусь констатацией того простого факта, что если перетащить в неё пиктограмму файла, этот файл будет фактически стерт. Чтобы лучше оценить прелесть этого метода, удобно сравнить три варианта действий пользователя на примере этого самого стирания:
Видно, что даже такое простое действие, как стирание файла, на самом деле состоит из многих малых, уже не делимых, действий (атомов). При этом для ускорения мыслительной работы пользователя необходимо не только сокращать количество этих атомов, но и делать эти атомы более простыми. Первые три атома у любого метода одинаковы, тут уж ничего не придумать. Различие между методами только в конце процедуры. Из таблицы сразу видно, что метод выбора команды из меню плох уже тем, что состоит из большого количества атомов. С другой стороны, он имеет то достоинство, что пользователь, вообще ничего не знающий о системе, только лишь благодаря сканированию меню может узнать, что файлы вообще можно стирать (собственно говоря, эта обучающая функция составляет главное достоинство меню как метода взаимодействия пользователя с системой. Но поскольку это достоинство не имеет прямого отношения к скорости работы, можно смело сказать, что метод выбора команд из меню из состязания выбыл. Количество элементов второго метода, использующего горячую клавишу, также велико, но у него есть определенные плюсы. При достаточной степени автоматизма нет ни необходимости искать клавишу на клавиатуре, ни думать, какую клавишу нажать. Таким образом, для опытных пользователей этот метод очень хорош. Третий способ, нажатие на кнопку в панели инструментов, состоит из не столь большого количества элементов, так что формально он хорош. К сожалению, он не слишком универсален. Количество элементов в любой панели инструментов ограничено, так что особенно с этим способом не развернешься. Не говоря уже о том, что для многих действий невозможно подобрать пиктограмму. В то же время способ этот имеет одно существенное достоинство – подсказка к действию постоянно находится на экране, так что пользователю не приходится копаться в своей памяти (что может быть очень долгим). И, наконец, четвертый способ– непосредственное манипулирование. Помимо того, что он сам по себе состоит из небольшого количества атомов, в определенных ситуациях он оказывается еще короче. Дело в том, что когда расположение корзины (пусть даже и в общих чертах) пользователю известно, процесс удаления файла начинает состоять из одного единого действия, т.е. пользователь выбирает файл, высматривает корзину и перетаскивает туда файл одним движением (основной признак единого действия). Более того. Несмотря на то, что пример с корзиной наиболее известен, назвать его оптимальным нельзя. Зачастую задача не так однозначна – пользователь не только может сделать с объектом что-либо одно, но может сделать несколько разных действий. Например, одно и то же действие (перетаскивание) работает и при удалении, и при перемещении файла. Более того, если перетащить файл в окно электронного письма, которое пользователь в данный момент пишет, файл будет вставлен в письмо как вложение. Это значит, что непосредственное манипулирование позволяет серьезно снизить как количество команд в системе, так и длительность обучения. И еще раз более того. Предположим, что пользователь собрался стереть важный системный файл, который стирать нельзя. Методы выбора команды в меню и в панели инструментов, равно как и метод непосредственного манипулирования, здесь сработают – элемент можно будет превентивно заблокировать. Если же пользователь попытается стереть файл, нажав на Delete, система окажется неспособна как-то показать неправомочность его действий (разве что писком или сообщением об ошибке, что нехорошо). А теперь предположим, что пользователь собрался стереть важный файл, который стирать не рекомендуется. Ни один из методов, кроме непосредственного манипулирования (можно будет поменять пиктограмму корзины на время, пока курсор, с зажатым в него файлом, будет находиться над ней), здесь не сработает, т.е. этот метод отличается от остальных своей гибкостью. Важно понимать еще две вещи. Во-первых, для достижения достаточной эффективности не обязательно стараться наиболее реалистично отразить действие, значительно важнее возможно более реалистично отразить объект, над которым это действие совершается. Например, компьютерную панель управления работой осветительных приборов необязательно снабжать точными имитациями выключателей. Главное реалистично отразить на ней план помещения и расположение источников света, равно как и показать прямую (читай – непосредственную) связь между этой информацией и собственно выключателями. Во-вторых, бывают ситуации, когда эффективность непосредственного манипулирования уравновешивается неэффективностью физических действий пользователя. Потеря фокуса внимания Пользователи работают с системой отнюдь не всё время, в течение которого они работают с системой. Это внешне парадоксальное утверждение имеет вполне разумный смысл. Дело в том, что пользователи постоянно отвлекаются. Телефонный звонок, обеденный перерыв, анекдот, рассказанный коллегой. В течение работы происходит множество таких отвлечений. Помимо них пользователя отвлекает множество мелочей: листок бумаги на столе перекрывает другой, нужный; мимо кто-то проходит и нужно бросить на него беглый взгляд. Более того, даже посторонняя мысль также отвлекает от работы. Но это еще не главное: каждый раз, когда пользователь прерывает свою деятельность и начинает думать о том, что ему делать дальше, он отвлекается тоже. И эти раздумья отвлекают пользователя значительно чаще, чем всё остальное. Каждое такое отвлечение занимает определенное время. Хуже того, оно сбивает фокус внимания, т.е. обработку текущего действия. После каждого такого отвлечения пользователь должен либо вспоминать текущую задачу, либо заново её ставить перед собой (занимает это несколько секунд, что много). Дело в том, что у человека есть только один фокус внимания, так что при любом отвлечении (которое есть не что иное, как переключение на другую задачу) старый фокус внимания теряется. Было бы еще ничего, если бы возвращение фокуса требовало только изменения направления взгляда. Но при отвлечении новые стимулы заменяют содержимое кратковременной памяти, так что для возвращения к работе от пользователя требуется заново поместить в свою память нужную информацию. Таким образом, необходимо максимально облегчать возвращение пользователей к работе и проектировать интерфейс так, чтобы пользователи возможно меньше о нем думали. Понятно, что создание «бездумного» интерфейса задача всеобъемлющая. Мы поговорим о том, как сделать максимально легким возвращение пользователей к работе. Итак, для продолжения работы пользователь должен знать: — на каком шаге он остановился — какие команды и параметры он уже дал системе — что именно он должен сделать на текущем шаге — куда было обращено его внимание на момент отвлечения. Предоставлять пользователю всю эту информацию лучше всего визуально. Разберем это на примере. Чтобы показать пользователю, на каком шаге он остановился, традиционно используют конструкцию «Страница N из N». К сожалению, эта конструкция работает не слишком эффективно, поскольку не визуальна. Однако существуют и визуальные способы. Например, когда читатель держит в руках книгу, он может понять, в какой её части он находится, по толщине левой и правой части разворота. Можно воспользоваться этой метафорой и на экране: варьировать толщину левых и правых полей окна.
Рис. 1. Три варианта индикации степени заполнения экранной формы.
Второй и третий варианты значительно визуальнее. Разумеется, эти методы подходят только для экранных форм. В иных случаях нужно просто делать так, чтобы все стадии процесса выглядели по-разному, благодаря чему хотя бы опытные пользователи, знающие облик всех состояний, могли бы сразу определять текущий шаг. Показ пользователю ранее отданных им команд чрезвычайно проблематичен. Размеры экрана ограничены, так что почти всегда просто не хватает места для того, чтобы показать всё необходимое. Зачастую единственным выходом из этого положения является максимальное облегчение перехода к предыдущим экранам, да и то это работает только с экранными формами. Напротив, показывать пользователю, что именно он должен сделать на текущем шаге процедуры, обычно удается легче. С другой стороны, это очень сильно зависит от сущности задачи, так что тут трудно порекомендовать что-либо конкретное. И, наконец, четвертый пункт: показ пользователю, куда было обращено его внимание на момент отвлечения. Тут есть одна тонкость – обычно фокус внимания совпадает с фокусом ввода. Соответственно, нужно делать фокус ввода максимально более заметным. Легче всего добиться этого цветовым кодированием активного элемента. Есть и другой метод – если количество элементов на экране невелико, пользователь быстро находит активный элемент. Таким образом, просто снизив насыщенность экрана элементами, можно значительно облегчить пользователю возвращение к работе. Длительность физических действий Длительность физических действий пользователя, прежде всего, зависит от степени автоматизации работы и степени необходимой точности работы. Об автоматизации что-либо конкретное сказать сложно. Понятно, что чем больше работы делает компьютер, тем лучше. Непонятно только, как это можно универсально описать, поскольку степень автоматизации очень сильно зависит от автоматизируемого процесса. С точностью все гораздо проще. Быстрый или точный Любое физическое действие, совершаемое с помощью мускулатуры, может быть или точным или быстрым. Вместе точность и быстрота встречаются исключительно редко, поскольку для этого нужно выработать существенную степень автоматизма. Объясняется это сугубо физиологическими факторами: при резком движении невозможно быстро остановиться, соответственно, чем точнее должно быть движение, тем более плавным и замедленным оно должно быть. Таким образом, чтобы физическое действие пользователя было быстрым, оно не должно быть точным. Пользователь, как правило, управляет компьютером двумя способами, а именно мышью и клавиатурой. Клавиатура не требует особой точности движений – неважно, быстро нажали клавишу или медленно, равно как сильно или слабо. Мышь, напротив, инерционна – есть разница между медленным её перемещением и быстрым, сильным приложенным усилием и слабым. Именно поэтому оптимизация использования мыши в системе может существенно повысить общую скорость работы. Мышь не является прецизионным инструментом. Проверить это очень легко – попробуйте мышью нарисовать ровный круг. Соответственно, мышь не предназначена для очень точных, в 1 или 2 пикселя, манипуляций, например, в графических программах всегда есть возможность перемещать объекты клавишами со стрелками. Именно поэтому любой маленький интерфейсный элемент будет всегда вызывать проблемы у пользователей. Более того. Еще в 1954 году Поль Фитс (Paul Fitts) сформулировал правило, в наиболее практичной формулировке ставшее известным как Закон Фитса: Время достижения цели обратно пропорционально размеру цели и дистанции до цели Популярно говоря, лучший способ повысить доступность кнопки заключается в том, чтобы делать её большой и располагать ближе к курсору. У этого правила есть два не сразу заметных следствия. Чтобы «бесконечно» ускорить нажатие кнопки, её, во-первых, можно сделать бесконечного размера и, во-вторых, дистанцию до неё можно сделать нулевой. Кнопка бесконечного размера. При подведении курсора к краю экрана он останавливается, даже если движение мыши продолжается. Это значит, что кнопка, расположенная впритык к верхнему или нижнему краю экрана, имеет бесконечную высоту (равно как кнопка у левого или правого края имеет бесконечную ширину). Таким образом, скорость достижения такой кнопки зависит только от расстояния до неё (ну и точности выбора начального направления движения). Понятно, что кнопка, расположенная в углу экрана, имеет «еще более бесконечные» размеры, если так вообще можно сказать (т.е. не важно даже, с какой точностью перемещали мышь). Для достижения такой кнопки от пользователя требуется всего лишь дёрнуть мышь в нужном направлении, не заботясь о её скорости и не делая попыток остановить её в нужном месте. Это делает такие кнопки наиболее доступными для пользователя, жалко даже, что у экрана всего четыре угла. Именно поэтому, например, меню MacOS многократно эффективней меню Windows: если в MacOS меню всегда расположено впритык к верхнему краю экрана, то в Windows меню отделено от края экрана полосой заголовка окна программы (Title Bar).
Рис. 2. Панель задач (Taskbar) в Windows вызывает удивление – оно расположено впритык к краю экрана, но кнопки отделены от края экрана тремя пустыми пикселями. И скорость работы снижается, и место теряется. © Microsoft. Нулевая дистанция до кнопки. Рассмотрим контекстное меню, вызываемое по нажатию правой кнопки мыши. Оно всегда открывается под курсором, соответственно расстояние до любого его элемента всегда минимально. Именно поэтому контекстное меню является чуть ли не самым быстрым и эффективным элементом. Но не надо думать, что уменьшать расстояния до цели можно только с контекстными меню. Есть еще диалоговые окна. Они тоже всегда контекстно-зависимы, не бывает окон, открывающихся самопроизвольно (на самом деле такие окна есть, но это уже другая история). По умолчанию они открываются в центре экрана, но это легко можно изменить. Открывать их под курсором гораздо лучше, именно потому, что дистанция до их кнопок сокращается, что хорошо не только тем, что перемещать курсор нужно меньше, но также тем, что пользователю сразу становится понятна связь между его действиями и появлением диалогового окна. Открывайте новые диалоговые окна не в центре экрана, а в центре текущего действия пользователя (если они не будут перекрывать важную информацию на экране, разумеется) Теперь вернемся к клавиатуре. Как уже было сказано, она не требует особенной точности движений и, как таковая, обеспечивает большую скорость работы. Тем не менее, и она не без проблем. Во-первых, изначально она не предназначена для перемещения фокуса ввода по экрану, что приводит к существенным трудностям (в том смысле, что самопроизвольно клавиатура не позволяет перемещать фокус с достаточной эффективностью – для этого надо специально проектировать экран). Если клавиатура не работает, приходится пользоваться мышью, но перемещение руки с клавиатуры на мышь и потом обратно занимает почти секунду, что слишком много. Во-вторых, работа с клавиатурой подразумевает использование горячих клавиш (именно потому, что перемещение по экрану с клавиатурой затруднено). Но хотя горячие клавиши существенно увеличивают скорость работы, плохо то, что их трудно запомнить. Таким образом, они являются прерогативой опытных пользователей и для многих людей неприемлемы. Более того, их популярность во многом основывается на субъективных критериях: воспринимаемая пользователем скорость работы с клавиатуры выше, чем скорость работы с мышью (хотя секундомер говорит обратное). Это значит, что на клавиатуру особо рассчитывать не стоит: помимо набора текста большинство людей пользуются только клавишами пробела и возврата каретки. Тем не менее, игнорировать возможности клавиатуры не следует. Длительность реакции системы Часто пользователи надолго прерывают свою работу. Помимо потери фокуса внимания, о котором уже сказано, это плохо тем, что лишенная руководства система начинает простаивать. Разумеется, мы ничего не можем сделать с этой ситуацией: странно было бы, если бы, как только пользователь отходил в туалет, система, скажем, начинала бы форматировать жесткий диск. Тем не менее, несомненно, и другое: пользователь нередко отвлекается не потому, что появляются внешние раздражители, а потому, что система не реагирует на внешний раздражитель в лице пользователя. Попросту говоря, система делает что-либо длительное. Ни один же человек в здравом уме не будет упорно смотреть в экран, зная, что система будет готова к приему новых команд не ранее, чем через пять минут. Соответственно, человек отвлекается. Проиллюстрировать это очень удобно на процессе печати. Печать документа в сто страниц даже на быстрых принтерах занимает существенное время, соответственно, большинство людей, отправив такой документ в печать, начинают бездельничать, поскольку, чтобы начать следующее действие в их трудовом процессе, им нужна распечатка, которой ещё нет. Проблема в том, что сразу после того, как человек отвлекается, системе зачастую, во что бы то ни стало, начинает требоваться что-либо от человека. Человек же, уверенный в том, что система работает, уходит в другую комнату. Таким образом, человек и система бездельничают. При этом раздражение человека, вернувшегося с обеденного перерыва и вместо распечатанного документа нашедшего диалоговое окно с вопросом «Вы уверены?», обычно оказывается безмерным. Это делает всегда верным следующее правило: если процесс предположительно будет длительным, система должна убедиться, что она получила всю информацию от пользователя до начала этого процесса. Есть другое решение этой проблемы: система может считать, что если пользователь не ответил на вопрос, скажем, в течение пяти минут, то его ответ положительный. Таким образом, тот же самый сценарий решается по другому: пользователь отправляет документ на печать и уходит, система спрашивает «Вы уверены?» и ждет пять минут, после истечения этого времени она начинает печать. Этот метод вполне работоспособен, так что им стоит пользовать всегда, когда невозможен первый метод (разумеется, за исключением случаев, когда ответ Да может иметь катастрофические последствия). Убирайте с экрана все диалоги с вопросами, на которые в течение пяти минут не был дан ответ Есть и другая причина отвлечения пользователя. Пользователь запускает какой-либо процесс. Система показывает ему индикатор степени выполнения. Процент выполнения за минуту едва доходит до четверти размера индикатора. Пользователь экстраполирует эти данные и резонно решает, что у него есть три минуты, чтобы размяться. Однако, как только он отходит от компьютера, процент выполнения с нечеловеческой скоростью начинает расти и за секунду доходит до максимума. Процесс успешно заканчивается, а пользовать еще три минуты бездельничает. Происходят подобные случаи исключительно потому, что индикаторы степени выполнения обычно рассматриваются программистами не как показатели процента выполнения задачи, но как индикаторы того, что система вообще работает. Для них это очень удобно: поскольку единый с точки зрения пользователя процесс часто состоит из многих принципиально разных системных процессов, выполняющихся с разной скоростью, можно не утруждаться, стараясь так сбалансировать рост индикатора, чтобы он всё время происходил с одинаковой скоростью. Иногда это «неутруждение» принимает довольно комичные формы, так, бывают индикаторы выполнения, которые сначала ростут, потом снижаются, потом опять выростают. Проблема в том, что пользователи рассматривают такие индикаторы именно как способ узнать, когда процесс завершится. Так что врать пользователю тут нехорошо. 2. Человеческие ошибки Важным критерием эффективности интерфейса является количество человеческих ошибок. В некоторых случаях одна или две человеческих ошибки погоды не делают, но только тогда, когда эти ошибки легко исправляются. Однако часто минимальная ошибка приводит к совершенно катастрофическим последствиям, например, за одну секунду операционистка в банке может сделать кого-то богаче, а банк, в свою очередь, беднее (впрочем, обычно беднее становятся все). Классический сюжет из жизни летчика, который после взлета хотел убрать шасси, но вместо этого включил систему аварийного катапультирования, возник отнюдь не на пустом месте. Существование несуществующего Вначале необходимо сказать главное: они не существуют. Как же, воскликнете вы, как же не существуют? Ведь человек при работе с компьютером постоянно совершает ошибки, сами мы, например, делали их не раз и не два! Очень просто. Дело в том, что компьютеры (как и все сложные технические системы) вообще не могут быть используемы человеком без совершения ошибок. Компьютеры требуют от человека точности, логического мышления, способности абстрагироваться от идей реального мира. Человек же практически на это не способен. Человек не цифровая система, неспособная на ошибку, но система аналоговая. Именно благодаря этому он плох в логике, зато имеет интуицию, не приспособлен к точности, зато может подстраиваться к ситуации, слабо абстрагируется, зато хорошо разбирается в реальном мире. Попробуйте вслушаться в любой разговор между людьми. Вы обнаружите, что он полон запинок, пауз, фраз оборванных на середине или даже полностью отмененных последующими словами. С точки зрения компьютера такой разговор подобен смерти, для нас же это естественное положение вещей. Суммируя, можно сказать, совершение ошибок есть естественное занятие человека. А раз ошибки естественны, значит система, неспособная сама их обнаружить и исправить, порочна. Таким образом, человеческих ошибок не бывает. Бывают ошибки в проектировании систем. Сам термин «человеческая ошибка» до сих пор существует только по двум причинам. Во-первых, люди в ошибках системы склонны винить себя, поскольку по собственному эгоцентризму полагают, что подобные вещи происходят только с ними. Во-вторых, существующее положение вещей очень выгодно всякому руководству: гораздо легче уволить кого-либо, нежели признать, что система спроектирована плохо. Под словосочетанием «человеческая ошибка» нужно понимать «действие пользователя, не совпадающее с целью действий этого пользователя» . Типы ошибок Таксономий человеческих ошибок существует великое множество, чуть ли не каждый автор, пишущий на эту тему, создает новую таксономию. Не обошла эта привычка и меня. Итак, наибольшее количество человеческих ошибок при пользовании ПО раскладывается на четыре типа (сильно упрощенно, разумеется): Ошибки, вызванные недостаточным знанием предметной области. Теоретически, эти ошибки методологических проблем не вызывают, сравнительно легко исправляясь обучением пользователей. Практически же, роль этих ошибок чрезвычайно велика – никого не удивляет, когда оператора радарной установки перед началом работы оператором долго учат работать, и в то же время все ожидают должного уровня подготовки от пользователей ПО, которых никто никогда ничему целенаправленно не обучал. Еще хуже ситуация с сайтами, у которых даже справочной системы почти никогда не бывает. Опечатки. «Опечатки» происходят в двух случаях: во-первых, когда не все внимание уделяется выполнению текущего действия (этот тип ошибок характерен, прежде всего, для опытных пользователей, не проверяющих каждый свой шаг) и, во-вторых, когда в мысленный план выполняемого действия вклинивается фрагмент плана из другого действия (происходит преимущественно в случаях, когда пользователь имеет обдуманное текущее действие и уже обдумывает следующее действие). Несчитывание показаний системы. Ошибки, которые одинаково охотно производят как опытные, так и неопытные пользователи. Первые не считывают показаний системы потому, что у них уже сложилось мнение о текущем состоянии, и они считают излишним его проверять, вторые – потому что они либо забывают считывать показания, либо не знают, что это нужно делать и как. Моторные ошибки. Фактически, количество этих ошибок пренебрежимо мало, к сожалению, недостаточно мало, чтобы вовсе их не засчитывать. Сущностью этих ошибок являются ситуации, когда пользователь знает, что он должен сделать, знает, как этого добиться, но не может выполнить действие нормально из-за того, что физические действия, которые нужно выполнить, выполнить трудно. Так, никто не может с первого раза (и со второго тоже) нажать на экранную кнопку размером 1 на 1 пиксель. При увеличении размеров кнопки вероятность ошибки снижается, но почти никогда не достигает нуля. Соответственно, единственным средством избежать этих ошибок является снижение требований к точности движений пользователя. В целом, в отношении человеческих ошибок, ситуация с ПО и сайтами лучше ситуации с управлением динамическими процессами (самолеты, производственные линии, энергетические станции и т.д.), которая и составляла основное приложение усилий инженерной психологии. С одной стороны, фактически отсутствует обучение пользователей перед работой, зато с другой – нет ни постоянно изменяющейся внешней среды, ни лимита времени. Тут уместно упомянуть одно из важных понятий инженерной психологии, а именно бдительность, т.е. способность оператора в течение продолжительного времени направлять существенную часть своего внимания на состояние системы. Как показывает практика, ни один человек не способен долгое время обеспечивать бдительность без существенных потерь: мозг стремится найти себе более интересное занятие, отчего накапливается усталость и стресс. Нечего и говорить, что эти «усталость, раздражение и стресс вообще» никаким образом не приводят к получению удовольствия при работе с системой. Но как только бдительность снижается, количество ошибок возрастает в разы. Таким образом, проблема состоит в том, что для успешного пользования любой системой необходима определенная степень бдительности, но эта же бдительность пользователям неприятна. В условиях невозможности отбора пользователей (есть люди, способные быть бдительными дольше других), эта проблема не решается вообще. Потенциально, в систему можно ввести индикатор опасности текущего состояния, при этом пользователь получает право быть не слишком бдительным большую часть времени, но зато получает и обязанность быть максимально собранным, когда горит «красная лампочка» . С некоторыми оговорками, этот метод может быть использован (и используется) на атомной станции, но совершенно непонятно, как его можно применить, например, в электронной таблице, в которой всего два действия пользователя способны испортить целый документ. Важно также понимать, что крайне ценная возможность последующей отмены (Undo) деструктивных действий сама по себе не служит уменьшению количества человеческих ошибок, но помогает только уменьшить урон от них. В действительности надо стремиться минимизировать количество ошибок, поскольку только это позволяет сберечь время (т.е. повысить производительность) и сделать пользователей более счастливыми за счет отсутствия дискомфорта. Суммируя, при борьбе с ошибками нужно направлять усилия на: — плавное обучение пользователей в процессе работы — снижение требований к бдительности — повышение разборчивости и заметности индикаторов. — снижение чувствительности системы к ошибкам. Для этого есть три основных способа, а именно: — блокировка потенциально опасных действий пользователя до получения подтверждения правильности действия — проверка системой всех действий пользователя перед их принятием — самостоятельный выбор системой необходимых команд или параметров, при котором от пользователя требуется только проверка. При этом самым эффективным является третий способ. К сожалению, этот способ наиболее труден в реализации. Разберем эти три способа подробнее. Блокировка потенциально опасных действий до получения подтверждения Команда удаления файла в любой операционной системе снабжена требованием подтвердить удаление. Эта блокировка приносит пользу только начинающим пользователям, которые проверяют каждый свой шаг. Проиллюстрирую эту проблему на примере. Некто Виктор Х. хочет удалить файл День рождения. Он выделяет этот файл и отдает системе команду Удалить. Появляется диалоговое окно с требованием подтвердить удаление файла. Начинается самое интересное. Виктор Х., не глядя на диалог, знает, зачем он нужен. Он видел его не раз и не два. Он даже дословно помнит, что именно его спрашивают. «Да, хочу» говорит Виктор Х. и нажимает кнопку ОК. После чего рвет и мечет, поскольку вместо файла День рождения он стер файл Пароль от сейфа. Проблема появилась в самом начале, потому что он выбрал не тот файл. Так с Виктором Х. было не всегда. Когда он только учился пользоваться компьютером, каждое открывшееся диалоговое окно наполняло его сердце ужасом. От этого ужаса он читал тексты на всех диалоговых окнах и благодаря этому мог вовремя остановиться и не стереть нужный ему файл. Что всё это значит – для опытных пользователей это диалоговое окно с требованием подтверждения не работает. Во-первых, оно не защищает нужные файлы. Во-вторых, оно без пользы отвлекает пользователя и тратит его время. В то же время некоторую пользу от этого метода получить можно. Для этого только надо требовать подтверждения не после команды пользователя, а до неё. Предположим, чтобы удалить файл, нужно сначала в контекстном меню выбрать команду Разблокировать, после чего выбрать этот же файл и запустить процесс его удаления (неважно, с клавиатуры или из меню). В этом случае от пользователя действительно требуется подтвердить удаление, поскольку эти два действия напрямую не связаны друг с другом – если в одном из них была допущена ошибка, файл удалить не удастся. К сожалению, этот принцип применять довольно тяжело. Дело в том, что ситуации, подобные описанной, встречаются довольно редко. Гораздо чаще приходится защищать не отдельные объекты (файлы, окна и т.п.), но отдельные фрагменты данных (например, текст и числа в полях ввода). Проблема состоит в том, что понятного и удобного элемента управления для этой цели нет. Единственным выходом служит скрытие потенциально опасных данных от пользователя до тех пор, пока он сам не скомандует системе их показать. Выход же этот отнюдь не идеальный, поскольку некоторым пользователям никогда не удастся понять, что, помимо видимых, есть еще и невидимые данные. Не делайте опасные для пользователя кнопки кнопками по умолчанию Также к этому типу блокировки относится снятие фокуса ввода с терминационных кнопок, чтобы пользователь не мог, не разобравшись, нажать на Enter и тем самым начать потенциально опасное действие. Действительно, если пользователям приходится прилагать какие-либо усилия, чтобы запустить действие, есть надежда, что во время совершения этих усилий он заметит вкравшуюся ошибку. Обычно проще всего в опасных случаях не делать главную кнопку кнопкой по умолчанию. Также, важно не делать кнопку Отмена кнопкой по умолчанию (как часто случается). Если это сделать, пользователи будут ошибочно закрывать окно, т.е. одна ошибка заменит другую. Проверка действий пользователя перед их принятием Этот метод гораздо лучше блокировки, но он тоже не без недостатка: трудно проверять команды. Наиболее популярны два универсальных и работающих способа проверки. Во-первых, это меню. В случаях, когда пользователь выбирает команду из списка, система может без труда делать так, чтобы в этот список попадали только корректные команды (это вообще достоинство любого меню). Во-вторых, если действие запускается непосредственным манипулированием объектами, можно индицировать возможные действия изменением поведения этих объектов. Например, если бы форматирование диска запускалось не нажатием кнопки, а перенесением пиктограммы диска в область форматирования, можно было бы показывать пользователю, как с выбранного диска исчезают все файлы и папки. При этом не только снизилась бы вероятность ошибочного форматирования диска, поскольку перенести объект в другую область труднее, чем просто нажать на кнопку, но при этом исчезла бы необходимость предупреждать пользователя о грядущей потере данных с помощью дурацкого сообщения. Проверкой всех действий пользователя перед их принятием можно также успешно защищать вводимые пользователем данные, в особенности данные численные. Дело в том, что большинство численных данных имеют некий диапазон возможных значений, так что даже в ситуациях, когда невозможно проверить корректность данных, можно, по крайней мере, убедиться, что они попадают в нужный диапазон. В большинстве ОС есть специальный элемент управления, именуемый крутилкой. Фактически это обычное поле ввода, снабженное двумя кнопками для модификации его содержимого (в сторону уменьшения и увеличения). Интересен он тем, что пользователь может не пользоваться клавиатурой для ввода нужного значения, взамен клавиатуры установив нужное значение мышью. Этот элемент имеет то существенное достоинство, что при использовании мыши значение в этом элементе всегда находится в нужном диапазоне и обладает нужным форматом. Всегда показывайте границы диапазона во всплывающей подсказке Но что делать, если пользователь ввёл некорректное число с клавиатуры? Ответ прост. Для этого надо индицировать возможную ошибку изменением начертания шрифта на полужирное в обычных программах (иное проблематично), а в случае сайта – заменой цвета фона этого элемента на розовый (благо это нетрудно сделать через таблицу стилей).
Рис. 3. Ползунок. В тех же случаях, когда количество возможных значений невелико, лучше использовать другой элемент управления – ползунок. Мало того, что он позволяет устанавливать только определенные значения (с этим справился бы и выпадающий список или комплект переключателей), но он позволяет пользователю видеть взаимосвязь возможных значений и при этом использование этого элемента понятно даже новичку. Самостоятельный выбор команд И, наконец, самый эффективный способ. Системе, как никак, лучше знать, какие именно команды или параметры для неё пригодны. Соответственно, чем меньше действий требуется совершить пользователю, тем меньше вероятность ошибки (при этом пользователь, которого избавили от рутинной работы, уже радуется). Вопрос состоит в том, как системе узнать, что именно нужно пользователю. Проиллюстрировать сферу применения данного метода удобно на примере печати. MS Windows User Experience заставляет использовать только один способ что-либо напечатать. Существует две команды меню Файл, а именно Печать и Параметры печати. Обе команды вызывают одноименные диалоговые окна. Проблема заключается в том, что обилие элементов управления замедляет восприятие этих окон и увеличивает вероятность ошибки.
Рис. 4. Диалоговое окно печати в MS Word. © Microsoft. Разберём это подробнее. Итак, чем меньше элементов управления, тем меньше вероятность ошибки. Система может уменьшить число элементов, если она знает сама, какими именно параметрами она должна руководствоваться. Главной причиной появления этих диалоговых окон является печать нескольких копий. Причем есть простая зависимость – «количество копий обратно пропорционально частоте печати такого количества», т.е. сто копий печатают примерно в сто раз реже, чем печатают одну копию. Стандартное диалоговое окно печати содержит также область выбора принтера из числа установленных в системе. Большинство же пользователей имеет только один принтер. Так зачем заставлять это большинство каждый раз вдумчиво воспринимать совершенно не нужные им элементы интерфейса? Интересно, что всё это прекрасно понимают в Microsoft. В каждой включенной в комплект MS Office программе на панели инструментов есть кнопка, нажатие на которую вызывает печать одного экземпляра с текущими настройками. Это, впрочем, тоже нехорошо. Во-первых, кнопка называется Печать, каковое название конфликтует с такой же командой в меню (называть кнопку Печать одного экземпляра с текущими настройками неприлично). Сама же по себе идея иметь в программе две кнопки с одинаковыми названиями и разным действием порочна. Во-вторых, нормальная программа должна иметь меню, содержащее полную функциональность, и панель инструментов, представляющую собой выжимку из меню. А здесь получается, что в панели инструментов есть команда, которую нельзя вызвать никаким иным способом. А теперь представьте себе другой вариант. В меню есть те же две команды – Печать и Параметры печати. Выбор первой команды вызывает немедленную печать документа с текущими настройками. Выбор второй вызывает диалог со всеми доступными параметрами печати, т.е. в системе с одним принтером никогда не появится ненужная группа элементов. Если же пользователь начинает проявлять буйную активность и печатать несколько копий разом, включается другой механизм. В первый раз, когда пользователь меняет число копий в окне настроек печати, программа запоминает его действие и при следующем выборе команды Печать выводит диалоговое окно со всего двумя элементами управления – полем ввода, в котором уже стоит число копий (которое было запомнено в предыдущий раз) и кнопкой ОК. Поскольку программа не может быть уверена в правильности числа копий, цифру лучше всего выводить нестандартным цветом, чтобы привлечь внимание пользователя. И так до тех пор, пока пользователь два раза подряд не введет единицу в поле ввода (что переводит его в разряд представителей большинства) или не введет новое число копий (каковое и будет запомнено). Причём такая метода применяется абсолютно ко всем возможным настройкам, а не только к числу копий. Таким образом, большинство пользователей становится счастливо, а количество ошибок сокращается, что хорошо. Суммируя, можно сказать, что система сама может узнать большинство из тех сведений, которые она запрашивает у пользователя. Главными источниками этих сведений являются: — здравый смысл разработчика системы — предыдущие установленные параметры — наиболее часто устанавливаемые параметры. С другой стороны, применяя этот метод, надо всегда помнить о том, что цель этого метода состоит не в том, чтобы провести пользователя за ручку по программе, оберегая его от всего, что может его испугать, но в том, чтобы сделать пользователя более счастливым. Счастье же достигается вовсе не в покое, но в борьбе с невзгодами. Многим людям будет комфортабельней работать со сложной системой, нежели со слишком упрощенной. Единственная проблема этого метода заключается в том, что для его использования к проектированию системы нужно подходить значительно более творчески и тщательно, нежели обычно практикуется. Два уровня ошибок и обратная связь Помимо классификации человеческих ошибок, приведенной в начале главы, существует ещё одна классификация. В этой классификации ошибки расставлены по уровням их негативного эффекта:
Каждый хороший программист, умеющий мыслить системно, знает, что ошибок из четвертого пункта нужно всеми силами избегать, не считаясь с потерями, поскольку каждая такая ошибка обходится гораздо дороже, чем любая ошибка из пункта третьего. Но не каждый хороший дизайнер интерфейса, умеющий мыслить системно, знает, что ошибок из второго пункта нужно всеми силами избегать, поскольку каждая такая ошибка обходится гораздо дороже, чем любая ошибка из первого пункта. Объясняется это просто: дизайн интерфейса гораздо моложе программирования. С ошибками из четвертого пункта всё ясно. Всякий раз, когда мы теряем возможность, по крайней мере, проверить корректность данных или самой системы, мы вступаем на слишком уж скользкий путь. Межпланетные зонды, из-за ошибок в ПО улетающие не туда, коммерческие договоры, в которых обнаруживаются ошибки, ошибочные номера телефонов в записной книжке – всё это примеры неисправляемых ошибок. Разумеется, такие ошибки всегда обнаруживаются, проблема в том, что к моменту их обнаружения становится поздно их исправлять. Именно поэтому такие ошибки гораздо хуже ошибок, которые исправить трудно, но которые, по крайней мере, сразу видны. Единственной индустрией, научившейся получать пользу от необнаруженных ошибок, является производство почтовых марок – марки с опечатками стоят у филателистов многократно дороже марок без оных. Это было знание программистов. Теперь пора перейти к интерфейсу и определить, почему ошибки первого типа («исправляемые во время») гораздо лучше ошибок второго типа («исправляемых после»). Вообще говоря, объяснение этого факта двояко. Объяснение есть как субъективное, так и объективное, при этом сказать, какое сильнее, затруднительно. При этом объяснения еще и складываются. Но, по порядку. Объективное объяснение просто: ошибки, исправляемые после, снижают производительность работы. Как мы уже знаем из предыдущей главы, любое действие пользователя состоит из семи шагов. Всякий раз, когда пользователь обнаруживает, что он совершает ошибку, ему приходится возвращаться назад на несколько этапов. Более того, чтобы исправить совершенную ошибку, от пользователя требуется: — понять, что ошибка совершена — понять, как её исправить Вам также может быть полезна лекция «1.2. Основные физические свойства жидкостей». — потратить время на исправление ошибки. В результате значительный процент времени уходит не на действие (т.е. на продуктивную работу), а на исправление ошибок. Субъективное объяснение ещё проще: ошибки, исправляемые после, воспринимаются пользователем как ошибки. Ошибки же, исправляемые во время, как ошибки не воспринимаются, просто потому, что для пользователей это не ошибки вообще: все человеческие действия до конца не алгоритмизированы, они формируются внешней средой (так не получилось и так не получилось, а вот так получилось). Ошибка же, не воспринимаемая как таковая, пользователей не раздражает, что весьма положительно действует на их субъективное удовлетворение от системы. Наличие человеческих ошибок, которых нельзя обнаружить и исправить до окончательного совершения действия, всегда свидетельствует о недостаточно хорошем дизайне Теперь пора сказать, как избавится от ошибок, исправляемых после. Понятно, что исправить что-либо «во время» можно только тогда, когда во время совершения действия видно, что происходит и как это действие повлияет на изменяемый объект. Соответственно, чтобы дать пользователям исправлять их действия на ходу, этим пользователям надо дать обратную связь. К сожалению, это простое соображение имеет существенный недостаток: вводить в систему обратную связь получается не всегда. Дело в том, что её ненавидят программисты. Мотивируют они своё отношение тем, что она плохо влияет на производительность системы. Обычно они врут. На самом деле им просто лень её реализовывать. Иногда, впрочем, соображения о производительности системы и вправду имеют место. Так что если вы чувствуете, что программисты правы, когда кричат о том, что система «будет безбожно тормозить», вспомните, что производительность связки «система-пользователь» всегда важнее производительности системы просто. Если же и это не помогает, попробуйте спроектировать обратную связь иначе, более скромно. Иногда так получается даже лучше. Например, с помощью ползунков на линейке в MS Word можно менять абзацные отступы, при этом обратная связь есть, но не полная: вместо перманентного переформатирования документа по экрану двигается полоска, показывающая, куда передвинется текст. Благодаря этому изображение на экране особенно не перерисовывается, что хорошо, поскольку такое «дрыганье» раздражает.
Почему я не вошел в IT
Последнее время, и, есть такое подозрение, что не последнее, а это перманентное состояние Хабра, много всяких публикаций на тему «Как я (мой друг\Лена\педиатр-офтальмолог\кошка моей жены) вошли в IT в 45 лет».
И неоднократно замечалось. что такие публикации есть типичная «ошибка выжившего» — потому что те, у кого ни хрена не получилось, ничего подобного не пишут.
Потому я попробую эту тему немножечко копнуть на своем примере и таки написать, почему Я НЕ ВОШЕЛ В IT. Хотя мысли посещают постоянно, регулярно, и все вокруг меня прямо в спину пихают. «Иди в IT», — говорят они. — «Там хорошо получают», — говорят они.
Но я, если честно, совсем не в восторге от этих перспектив. Впрочем, начнем с начала.
Школа. Пока еще не совсем школа жизни
Первый раз я сел за компьютер в 1989 году в 12-летнем возрасте. В НИИ, где работал мой отец, устраивали дни открытых дверей, куда водили детей сотрудников, и можно было поиграть на компьютере. Очень отчетливо помню, что PCшек, за которые можно было посадить детишек, не хватало, и я отирался среди тех, кто смотрел из-за плеча в экран, втайне завидуя игравшим счастливчикам. Когда завидовать наскучивало, я смотрел из-за плеча в экран к взрослым работавшим дядям, которые набивали команды на хорошо знакомом английском языке (школа у меня была английской).
Потом в НИИ в 1992 году, когда режим секретности в НИИ ослаб по причине полной растерянности секретных органов в стремительно поменявшейся обстановке, детишек сотрудников собрали на «курсы операторов ПЭВМ». Никакого помещения курсов не было, нам прочитали лекцию по ТБ и отправили в отделы к родителям постигать науку по учебнику Фигурнова. Фигурнова освоил за месяц, а вожделенный диплом оператора так и не давали. Да и задач для операторов к тому времени уже не было — НИИ грустно сидел на мизерных зарплатах в 16 (!) долларов в месяц и ждал обещанных «коммерческих заказов». Очередь на PCшки резко сократилась до нуля — инженерам играть было неинтересно, половина бегали по заработкам. Так в жизни появилась книга Мак-Кракена «Численное решение задач и программирование на Фортране». Но фортран был заточен под инженерные задачи, и строить простейшие функции на уровне десятиклассника -это был максимум того, что я реально мог, на большее не хватало математического аппарата.
Параллельно в школе началась информатика. Компьютерный класс у нас представлял собой наглухо опечатанное помещение, куда доступа до 9 класса не было никому. Синяя Борода охранял свои тайны куда халатней, чем школа охраняла десяток БК-100 с «Искрой» и матричным принтером.
Те, кто учился в эти годы, помнят, что это были за программы, что это было за оборудование и что за учителя. Так как весь город у нас утопал в НИИ, то преподавали на полставки два инженера (с одним мой отец даже учился и в общаге жил в соседней комнате), преподавали по вдохновению, потому что учебники, полученные в библиотеке, оперировали неким кириллическим языком программирования, которого не видел никто не только в школе, но и во всем городе. И, подозреваю. что и облоно, задай им вопрос — а где взять этот хитрый русскоязычный бейсик, только развело бы руками. На БКшках был установлен нормальный Бейсик, а задачи учителя брали из пособия для поступающий в ГАУ (Государственная Академия Упрвления), где информатика была вступительным. Разбившись попарно мы мучили эти БКшки, сортируя массивы пузырьком и рисуя графики экспоненты. Посидеть вдоволь за компьютером удавалось опять не всем. Мне в пару достался наш золотой медалист, который по совместительству посещал вечернюю физматшколу при физтехе и уже кодил на С (плюсов еще не было). В такой компании я абсолютно был лишен самостоятельного поиска, и максимум, что успевал — это просечь, как в общем плане решается задача.
Но был и луч света в этом темном царстве. Кружок по информатике. Атмосфера там была расслабленная. Счастливые владельцы магнитофонов приносили кассетники и загружали и записывали с них программки и игры для тех же БКшек, увлеченно играли, кто хотел писать программки — писал. Никаких обязательных задач на кружке не было, можно было делать что хочешь. Я бы не сказал, что это правильно, но это было что-то. Дело в том, что в те годы иметь свой компьютер было несказанной роскошью. IBM PC AT стоил в России около 800 долларов. А у отца зарплата в 1993 была 16. Как и всех вокруг. У меня даже 5-дюймового флоппика своего не было — это стоило примерно столько же денег, сколько и 2 аудиокассеты. Я постоянно просил друга сохранить недописанную программку к себе на дискетку.
Но в целом это кое-что в совокупности дало. Я освоил основные понятия, ряд простых алгоритмов, освоил интерфейс и смог даже имитировать одну из простеньких игрушек на бейсике («змейку»). Не столько узнал, сколько освоился в среде. Это все — «курсы» в НИИ и кружок в школе продолжались до конца школы. В 11 классе мне выдали диплом пресловутого оператора ПЭВМ, и, поработав 2 месяца формально этим оператором за зарплату, равную по покупательной способности пяти сникерсам до института (никаких задач я так и не получил за это время), я уволился, проходная для меня закрылась.
Студенчество и безнадега
Хотя информатику на вступительных в ГАУ сдавать я и собирался, до этого дело не дошло — я самым абсурдным образом перепутал даты экзаменов, и пошел туда, куда еще мог подать документы на бюджет, хотя тоже на приблизительно сходную специальность — в то время были очень престижны экономисты и юристы, потому на экономиста.
Информатика в институте меня не порадовала от слова совсем — несмотря на то, что компьютерная лаборатория была гораздо лучше оснащена (на 1995 год — IBM 486), учили нас писать команды в командной строке в такой очень специфичной фигне как DB3, и одним курсом все это и ограничилось — первый семестр Лексикон и DOS c Нортоном, а второй — DB3 и Cells. Спецкурсов не было, даже паскаля не изучали, и никто будущих экономистов не готовил к анализу данных программными средствами.
Самое интересное, что даже уже имеющиеся навыки применить было некуда. Офисный хомячок, который фактически выполняет функцию оператора, в те годы был привилегированным работником. Работников физического труда тоже было навалом и они никому не нужны были — даже в Макдональдсе записывались в очередь в надежде на вакансию. Семья ничем помочь не могла — уже к третьему курсу было ясно, что если не устроиться куда-то, то придется подыхать с голода почти натурально. Но в 96-2000 гг. работы не было даже для специалистов с опытом. Ни найти работу, ни купить компьютер и на нем развивать какие-то навыки и умения в этой ситуации было практически невозможно.
В одни из каникул я устроился в мини-типографию, и там немного наблатыкался в компьютерной верстке, и даже нашел нескольких бедолаг, которые хотели бы опубликоваться, но не имели денег платить фирмам за оригинал-макеты. По ночам в этой типографии, после работы, я набирал тонны текста, и как мог, делал макеты книг и брошюр. Чтобы получить доступ к компьютеру, я стал верстать некоторые оппозиционные издания, но все это приносило фактически только опыт, но совсем ничтожно денег, так как было и нерегулярно, и малооплачиваемо. Я приобретал знания, опыт, но это был достаточно кустарный опыт, и никуда в издательства устроиться даже самым младшим верстальщиком мне не удавалось.
Поворот не туда
И где-то на этом этапе я совершил роковой шаг — мне подвернулась возможность устроиться на склад. Зарплата для того времени была неплоха — целых 250 долларов, а работа была по графику, 2 через 2, воскресенье выходной. «Почему бы нет,» -подумалось мне. «Я накоплю на комп и буду на нем работать». И понеслось.
На компьютер я накопил где-то за полгода. Но очередное повышение курса доллара сожрало накопления, и он получился совсем не такой, какой хотелось. Это, к вопросу, всегда преследовало меня — бюджеты на железо и ПО всегда были очень ограниченные, и что-то бралось строго по необходимости, когда больше терпеть нельзя. Но самое главное — график к тому времени уже отменили, и пришлось грести на этой галере, уже без перспективы параллельно что-то делать.
Сама работа была преимущественно физической, хотя. На складе у нас работали исключительно интеллигентные и образованные люди, все с высшим техническим (я там единственный был без оного) — два инженера-конструктора, инженер-прочнист, инженер-программист, инженер БАО по обслуживанию реактивных двигателей, бывший командир батареи ЗРК ПВО, радиоинженер. Это была принципиальная фишка компании — на работу брали исключительно с ВО, исключительно по рекомендации, даже на должности грузчиков.
И была WMS, писанная умельцем под DOS, и опиравшаяся на костыли в виде макросов под Excel и Access. Так как инженер-программист вскоре после моего прихода уволился (послушать нынешних айтишников вообще неясно, что он там делал, но 90-е для программистов были отнюдь не жирными и куча людей продолжала сидеть в НИИ потому, что в коммерческих структурах для них мест не было), то как человек компьютерно грамотный и компьютера не боявшийся (такая фобия была распространена среди специалистов старшего возраста, потому что кадры фактически никто ничему не учил), в случае ошибок, косяков и просто добавить поле так или иначе занимался этим. Поправить поехавшую базу данных (там БДшка была в текстовом файле, разделителями были запятые, постоянно плыли), заставить сканер штрих-кодов передавать номер в нужную ячейку, автоматически форматировать отчет и пр. Немного и не часто.
А потом была другая организация и другой склад, теперь уже 1Ска, опять с костылями в виде Excel. Приходилось ваять формы в 1С, а потом сводить их в Экселе. Тоже нечасто, и тоже на очень примитивненьком уровне. А потом был еще склад и еще одна организация — и опять-таки для собственно программирования не было задач, и мысли о том, что можно связать жизнь с IT, даже толком не возникало. В принципе, я смотрел на растущие зарплаты в IT, смотрел на удаленку (когда она не была мейнстримом), жалел, что не пошел в свое время по этой стезе, но не более. В принципе, работа у меня была не сильно хуже остальных, как сыр в масле не катался, постоянно от зарплаты до зарплаты, но впрягся, женился — и спрыгнуть с лодки было уже нельзя. Так продолжалось 10 или 12 лет, пока логистика не стала единственным что-нибудь стоящим на рынке труда, что я мог продать.
«Да ты ж ойтишнег»
И в один прекрасный (проклинаемый позже день) я продал свою рабсилу крупной китайческой компании, которая хотела от меня планирования и управления оперативкой своих нескольких складов в России.
И тут я понял, что все предыдущие места работы были солнечным курортом. Общий бардак работы в компании компенсировался «пердячим паром» — сиречь тучей неоплачиваемых переработок. Ну, типично. Например, есть процедура для выдачи — формируется документ на отгрузку через кучу ступеней, потом идет планирование от филдов и отправка на склад. В числе моих задач стоял тот самый план и отправка его на склад. Так как в нужные сроки никто планов не подавал, и добиться от другого отдела какого-то подобия дисциплины надежды не было, то ожидая, пока проектная команда разродится нужными документами на отгрузку, приходилось до 20-21 часов вечера, и все время вокруг меня водили хоровод тимлиды и начальниики с плохо выговариваемыми именами с речитативом, что логистика для проекта, и я должен все для него делать.
Кто знает — не будь на проектах бардака, я бы обошелся одним вручную заполняемым Excelевским файлом и одним отчетом, в котором тупо копировал бы список и обновлял сводную таблицу. Но я более года не уходил домой вовремя, сводя все эти планы актуальные на процентов 20-30, постоянно изменяющиеся дорожные карты, различные требования многих начлаьников,на меня навешивались еще проекты в духе: «там маленький проект и отгрузки редкие» — и вот я уже сутки сижу, чтобы оформить одну редкую, но еженедельную отгрузку в 600 наклепанных заявок.
Несмотря на то, что компания имела собственную WMS интегрированную с ERP, тем не менее бардачное планирование требовало всю информацию так или иначе дублировать в огромную кучу табличек и отчетов. Шаблоны прогрузок в WMS не работали, или были настолько кривые, что для того, чтобы прогрузить один шаблон, в некоторых случаях требовалось вручную прошерстить все списки.
Когда я из-за очередного митинга, затянувшегося до 10 вечера, не смог встретить жену из аэропорта, я понял, что мне надо либо увольняться, либо как-то менять систему. Менять систему я не мог — песчинка в большой корпорации, увольняться тоже — к тому времени я уже взял в кредит машину, чтобы ездить на склад.
Пришлось делать ход вбок — автоматизировать рутинные операции хотя бы в том же Экселе. Был зачитан Уокенбах. Первые макросы были писаны дома среди ночи, в такси в командировках, в период январского затишья, пока ключевые клиенты инвентаризировали склады и поставок практически не было. В течение месяца-двух я автоматизировал заполнение своих учетных файликов и отчетов. Из-за бардака я все равно не мог уйти с работы вовремя, но по крайней мере, у меня появилось время, чтобы дальнейшую автоматизацию проводить в рабочее время.
Что меня поразило — в компании никто «малой автоматизацией» не интересовался от слова «совсем». Для того, чтобы поменять хотя бы поле вывода в WMS и ERP требовалось почти полгода согласований с штаб-квартирой, и потому ответом на все изменяющиеся требования бизнеса по анализу данных и оформлению документов было наращивание густоты того самого «пердячего пара», то есть, экстенсивное расширение объема людского труда. Доходило до полного идиотизма — я сижу на конференции с техподдержкой, они показывают экран, дерево алгоритма проверки шаблона, и я им говорю, что вот этот критерий надо поднять вверх, а этот опустить вниз, и тогда ошибка уйдет, а мне говорят, что это сделать нельзя, потому что запрещено. Они соглашаются, что да, это решит проблему, но нет. То есть, проверяй вручную шаблон перед прогрузкой. Ладно, что глобальные системы реагируют медленно и тяжело, но и настройки локальных были ничем не лучше. Не доплачешься. А про то, чтобы автоматизировать совсем локально на уровне отдельных пользователей не задумывался вообще никто. Все виденные мной в компании макросы и тулзы были написаны энтузиастами (в том числе и китайцами), непрофессионально и ситуативно.
Сведя рутину к выкачиванию выгрузок и нажатию нескольких кнопок я думал, что все, справился. И даже успел чуть менее месяца, развалившись в кресле, пить чай под песню «вкалывают роботы, а не человек». Но грянул демонтаж. Нет, компания была на месте. склады были на месте, я был на месте и цел, но на меня навесили учет возвращаемого на склад демонтированного оборуования. В компании ходила даже поговорка, что проект, в котором есть демонтаж, не может быть успешным. Так оно, в общем, и было.
Нюанс был в том, что компания не имела никакого инструмента для учета демонтажа. От слова «совсем». В WMS запихнуть его было нельзя — это оборудование клиентов и не новое, потому компания за него ответственность нести не могла. Но хранить его при этом надо было и как-то учитывать. Руководитель прислал образец учетной таблички и образцы приходных-расходных документов в формате Excel. И ничем более помочь не мог. Оставшись один с этим монстром — на склад валились тонны неоприходованного бу-шного барахла, причем в массе своей неопознанного, а я элементарно не успевал даже просмотреть все акты. с которыми они приходили. Взывать к штаб-квартире было бессмысленно, покупать WMS локально для этого процесса штаб-квартира строго-настрого запретила. Остался Excel. В режиме ошпаренной кошки я ваял один макрос за другим, затыкая дырки в проверке и анализе входящих\исходящих, постепенно собирая все это в один имитирующий WMS тул. Получилось в итоге, что на этих макросах работает вообще вся система приемки и учета демонтажа. Параллельно компания «диверсифицировала расходы» и уволила людей, которые осуществляли анализ и поддержку стоков по складам, операции по возвратам и приходам. Эта вся лавина обрушилась на меня, и я отчаянно барахтался, пытаясь автоматизировать все, что повторялось более одного раза. Так продолжалось месяца четыре, пока новый руководитель логистики по Евразии не сообразил, что такую работу один человек не вывезет даже если автоматизирует все.
И нанял мне еще одного начальника.
К валу оперативки прибавились еще и отчеты. Красивые отчеты — это единственное, что новый начальник мог делать вдохновенно и бесконечно. Зарплата при этом не росла. Росли скиллы в VBA, я уже писал макрос на каждый чих, и не только себе, но и девочкам, которым давали бессмысленные обезьяньи задачи в духе Золушки — вручную в Экселе наклепать за вечер 1000 актов приема работ из учетной таблички (реальный случай, я от такой дурости начальства офигел и даже не взял с нее пиццы, которую она хотела мне удаленно заказать, когда я после работы написал ей макрос). Вот тогда от следующей девочки, которой надо было автоматизировать очередной отчет, я услышал фразу «говорят, что ты айтишник».
К тому времени меня кормили обещаниям увеличить зарплату в следующем месяце уже 8 месяцев. Были приведены в ход все аргументы, что инфляция, что я работаю за четверых (это моя+3 сокращенные ставки, с которых на меня легли обязанности), был приведен аргумент, что я 2 года работаю, я показывал китайцам зарплаты таксистов в Москве и на митингах с 3PL операторами внаглую спрашивал гендиров, не возьмут ли они меня к себе на работу (у них был договор не переманивать взаимно кадры). Одним из доводов в пользу повышения была распечатка с хедхантера результатов поиска по тегу «VBA-разработчик», хотя субъективно я себя оным не считал. Меня только загнали в угол и под руку подвернулся ржавый и кривой инструмент VBA, которым я пытался отбиться от превратностей не очень удачного трудоустройства.
Кошкины слезы фриланса
Зарплату мне повысили. Как и положено в рыночной экономике, это повышение только подтянуло жизненный уровень на уровень момента трудоустройства, то есть, зарплата была фактически лишь проиндексирована. Часть обязанностей с меня сняли, и унылый залип в офисе после рабочего дня превратился в радостный побег на маршрутку в 18 часов, правда, от новых людей, которых наняли, было много вопросов, и им требовалась с меня поддержка. Причем среди этих людей была текучка, они приходили, уходили, а я сидел (логистов в принципе как грязи, вход в профессию — копейка), и в итоге обнаружил, что чуть ли не единственный знаю досконально все процессы. Но повышения зарплаты я требовать уже не мог.
К тому же к этому времени я уже автоматизировал все, до чего дотянулся, и на рабочем месте было не так уж много задач. У меня макросы и по почте собирали данные, и отправляли рассылки, и формировали отчеты, и вносили данные, и выносили, и формировали шаблоны, и анализировали сток. Я брался писать макросы смежным отделам. Не без анекдотов — как-то написал сбор подписей с автокадовских чертежей для инженеров (там подписывали артикулы оборудования) для сравнения с отгрузочными требованиями — выяснилось, что проектная команда в этих требованиях пишет очень часто совсем не то, что запроектировано. За это меня не похвалили, а просто спрятали этот макрос подальше и дали указание своим просматривать внимательней техническую часть перед отгрузкой.
С появлением свободного времени хотелось новых задач, где можно было поискать неизвестные методы и алгоритмы, потому что заполнять шаблоны данными из таблички уже приелось.
На этом этапе появилось объявление на Авито, что так и так, «пишу макросы почти бесплатно». Почти бесплатно — потому что писать что-то. за что я мог иметь серьезные деньги, мне было просто некогда. Это фактически вторая работа, может, это и классно в 20 лет, но мне уже подходило 40, и нужно было заниматься семьей, хотелось не лишать себя отдыха, чтения, а не разделить время между работой одной и работой второй.
Потихоньку. негусто, но потекли заказы. Некоторые были просто завиральные, некоторые я не тянул сам (я до сих пор, например, не умею работать с XML — никогда не требовалось), некоторые я просто выполнял на коленке.
Попадались люди, которые по ходу дела усложняли и усложняли задачи — взялся, например, собрать с счетов-фактур данные в список, в конечном итоге там родился целый макротул с расчетом неповторяющихся рационов для сети кафе. За те же деньги. Заказчик шел малоденежный, часто скандальный, но были и постоянные клиенты.
Например, одна конторка, занимавшаяся рассылкой баз данных, имевшихся у них почему-то в Excel, последовательно заказывала макросы для категоризации данных, для поиска, для автоматизации рассылки, для автоматизации обложек для рассылаемых ими физически DVD (! — это в 2020 году) и еще для чего-то, уже забыл. Другая настойчиво заказывала переформатирование различных шаблонов для загрузки поставщику, потому что им проще и быстрей было заплатить за изменение шаблона в Экселе, чем менять что-то в 1С.
Основными клиентами были либо ИПшники, либо мелкие конторки, от ИПшников малоотличимые, либо «офисный планктон», которому навесили неподъемные операции в Экселе. Последних было больше всего — бухгалтерши, у которых не считался какой-то отчет по серой бухгалтерии, операторы, которые сообразили, что не обязательно копипастить ручками сто миллионов позиций из заказа в накладную, очень часто обращались коллеги-логисты, которым надо было подготовить те или иные документы из мутных списков и даже PDFов. Были веселые азербайджанцы, которые додумались автоматизировать создание пакета документов для таксистов (путевые листы, результаты медобследований и пр.), которых нанимали разово на день-два.
Одним словом, это все были люди, облегчение труда которых совершенно неинтересно IT-бизнесу, которых их родная компания посадила на отупляющую обезьянью работу, которых бросили в водоворот, ничему не научив, не заботясь о том, выплывут ли они в груде задач, которые можно было бы вообще не иметь, если подумать по-хорошему. Малая автоматизация не интересна ни вне офиса, ни внутри никому из начальников. Энтузиасты, автоматизировавшие частные процессы, не получали внутри компании никаких бонусов, кроме некоторого облегчения труда. Там, же, где энтузиастов не было, платили свои кровные 1-2 тысячи (больше брать с людей мне совесть не позволяла) за то, что им решат проблему.
Денег, несмотря на то, что я надеялся, что это позволит добавить к зарплате хотя бы десятку, не принесло. Даже планируемой десятки. В основном я покупал дочке что-то вкусненькое на эти копеечки, временами они выручали, когда в семье был голяк с деньгами (как сейчас помню, в осенние каникулы отправил дочку на последние деньги в лагерь, почти неделю жили на 1,5 тысячи, которые я получил за один из макросов). Этот так называемый «фриланс» давал только опыт и развивал представления о том, что такое за инструмент — VBA, а также позволял надеяться, что если вдруг меня резко уволят, кинув через все, через что можно кидать, я смогу иметь хоть что-то, пока ищу работу, если займусь этим всерьез.
Войти ли мне в айти или тварь я дрожащая?
Итак, на пороге 45-летия я оказался в роли человека, который заглядывает в дверь, глядя на пирующих. Пустят ли меня за стол? Вряд ли, в лучшем случае при попытке войти меня ждет несколько лет жесткого самообучения и конкуренции с теми, кто этому реально учился, и кусок пирога будет не настолько большой, как тот, что поедают пирующие. Есть ли вообще в этом смысл?
Но с другой стороны, и из коридора я тоже вроде как вышел — я вполне свободно читаю литературу по программированию, решаю некоторые задачи вполне профессионально, есть опыт разработки прикладных программ, пусть и на VBA. Причем активно применял свои навыки в работе, и последний год на последней работе в основном занимался как раз тем, что писал код.
И на работе, и родственники временами меня пихают в спину — иди, давай, ты же умеешь, ты же можешь, ты будешь работать из дома, сможешь быть с семьей, будешь иметь денег, сможешь все лето проводить на море, не отрываясь от работы. Тебе же нравится — не так ли?
То, что нравится — да, нравится. Но это только до тех пор, пока я пишу в своем режиме, а не в том, в котором хочет начальник или заказчик. И это все портит. Я не могу работать, как показала практика, в таком режиме. Когда под требование начальника я пятый раз переписал оптимальный подбор грузов на паллеты (каждый раз с разным алгоритмом), я понял, что шестого не напишу даже за деньги — я не смогу себя заставить. Иногда думаешь — вот работал бы как все. Копипаст, копипаст, кнопочку нажал, заказ закрыл. Нафига эти оптимизации, этот зуд написать что-нибудь, чтобы потом, развалясь в кресле и попивая чай, приговаривать, что «вкалывают роботы, а не человек». Денег за это получать не очень-то и удавалось. К тому же труд этот лишь относительно благодарный и в моральном смысле — через месяц после того, как я ушел с одной работы, где написал несколько сотен всяких макросов и тулзов, и почти все честно передал тем, кто меня заменил, выяснилось, что ими пользуются только 2 (два, Карл!) человека. Остальные даже не потрудились прочитать мануал, который я им оставил, и тем более установить и работать.
И все-таки, с другой стороны, вряд ли я смогу далее работать вот так, без попыток автоматизировать всю рутину. Да я уже и не могу. Ну можно же автоматизировать проверку ошибок складских операторов, чтобы они могли проверить, что там в системе наваяли. Можно же вместо обезьянки, которая будет часами жать на кнопку печати этикеток, запустить макрос, который все отправит на принтер за 10 минут. Можно же написать приложение для терминала, чтобы упаковщики могли отмечать, на какой паллет что упаковали. Можно. И нельзя иначе. Опыт, книги, статьи — все это кардинально изменило мышление, подходы. Но вот знаний и умений в программировании маловато для того, чтобы идти в IT нет, да и делать из под-палки не прет.
Когда вижу людей, которые рвутся в IT из других профессий, я очень остро понимаю, что я не хочу в IT, в школьной юности хотел, но сейчас — нет. Меня устраивает ситуация. Я допускаю, что мне придется все-таки войти в пиршественный чертог и схватиться там за место за столом хотя бы с краю. Но это будет именно вынужденное действие — либо с работой будет напряг, и ничего на скорую руку не подвернется, либо из страны придется резко валить, и ничего более я за рубежом конвертировать в деньги не смогу, или же одна из работ перетечет в преимущественно разработку.
Потому улыбаемся и машем этим веселым историям, когда клерк, зачуханный нелюбимой работой, осваивает Питон на курсах и, пройдя через тернии к звездам, становится разработчиком чего-то замудренного.
- карьера программиста
- исповедь
