Помощи помощникам? Да что вы знаете про глюки, что вы знаете про боль и страдания? Кому приходилось поддерживать и разбирать чужой код, меня поймёт. Хотя и не знаю этого наверняка, но всеми библиотеками своей души пытаюсь на это надеяться.
Один класс (имя не отражает сущность — кого это волнует?) и сотня функций. Казалось бы, нормально. Нормально?! Ни хрена это не нормально, когда поля класса расположены случайным образом между функциями. Именование переменных, бизнес-правила? Да ну их в большой сочный болт! Метод, внутри которого переменные
t
,
p
,
x
, а некоторые и глобальные — вот что здесь норма.
Вы думаете, это всё? Да я молился, чтоб этом было «всем». Это творение подключалось к базе Аксесса. Банально через датасеты. Банально? Ну да, слишком банально. Один датагрид, пять таблиц, поэтому что? Правильно: надо пять датасетов! Имена… А что имена? Имя как имя: 50 символов, начинается латиницей, продолжается русским капсом (тысяча блудниц!) и заканчивается цифролатиницей. И их пять. Пять таких датасетов в одной форме. На один датагрид. А знаете, какой запрос в каждом из пяти датасетов? Глаза вытекают:
SELECT * FROM [dataTableName];
.
Про форматирование кода после предыдущего даже писать как-то мелочно.
Функция. Да-да, именно так: Функция. Особая примета: входной параметр —
y
, выходной —
x
. 150 строк. Шта? Ладно. Следующая. 230. Шта-а-а? А дальше скромная ФУНКЦИЯ. 320 строк. Мои глаза невозможно было представить, пока я не увидел следующую (правда, всю закомментированную однострочными комментариями) на 400 строк. Я не знаю, как про это говорить.
Похоже, я должен требовать ящик валерьянки в неделю как расходные материалы.
Начинал я свою службу на заводе, работал прогером. Отдел был не очень большой: пять-шесть разрабов, четыре механика и сисадмин. Находились мы все в соседнем здании от основного, но наш Великий и Ленивый Админ решил, что он будет сидеть в головном здании и всех местных юзверей заберёт к себе на обслуживание, а механики пущай бегают по складам. Но со временем он очень обленился и заявил: «Идите все лесом! Я админ и буду следить только за серверами, а мышки и клавы пусть меняют механики!» Так и получилось: бедные механики бегали по складам и по всей территории (а она, я вам скажу, была весьма внушительных размеров), а тётки из головного здания были очень капризные. То у них мышка не так двигается, то ей свет в мониторе не нравится.
Дык вот, так как мы сидели в разных кабинетах, то и телефоны у нас были разные, но механиков никогда не было на месте (трудились, бедные). И тогда все эти разъярённые тётки звонили нам, прогерам, и вечно жаловались, требовали, чтоб именно я пришёл и посмотрел, что у них не так. Порой доходило до абсурда.
— Алло, здравствуйте, а придите к нам, у нас свет не работает.
— Дык звоните электрикам, я здесь при чём?
— Ну-у-у… Компьютер же тоже не работает! Придите и почините!
— У нас нужно сделать перестановку, придите, передвиньте шкаф и стол.
— Эм, уважаемая, а почему вы звоните мне, а не грузчикам?
— Ну, у вас там много мальчишек работает, а грузчиков всего двое и они устают, бедненькие. Да и вообще! Нам нужно передвинуть стол, а на нем стоит кампутар, так что это ваша работа!
И вот мне надоело каждый раз на зов прийти и поменять картридж объяснять разницу между программистом и эникеем. Когда у меня горели сроки, а телефон разрывался, я поднял трубку, и случился такой диалог:
— Здрасте, у меня мышь не двигается, придите и посмотрите.
— Девушка, звоните механикам, мы программисты.
— У меня же мышка в программе не работает, так что почините.
— Я пишу программы и обслуживаю только те, которые я сам написал. Если же это не моя программа, то я не буду к вам идти, тем более если у вас не работает не программа, а мышь.
— А вам сложно, что ли?
— Девушка! Если у вас болит глаз, вы же не идёте к гинекологу и не говорите ему: «Посмотрите, пожалуйста, вы же врач!», а ждёте окулиста, даже если его нет.
Дама бросила трубку. Через двадцать минут ко мне пришёл начальник отдела. А мужик он из тех, кто понимает юмор, так что залетел он со смехом, но по поручению главного инженера (та девочка сразу побежала жаловаться начальству) сделал мне устный выговор за неумение общаться с персоналом. Попросил, чтоб я острил немного повежливее.
Нынче популярны тенденции сравнивать девайсы с инструментами, притом с самыми разнообразными, начиная от высокоточных и заканчивая игрушками для самоудовлетворения. Но любой инструмент наиболее эффективен, когда применяется по назначению. Нет, конечно, и гвозди можно забивать микроскопом, но как-то молотком сподручнее. Да и молоток лучше держать за рукоять, а не пытаться забивать шурупы, схватившись за голову.
Если уж так, то мне милее сравнение устройства не с отдельным инструментом, а скорее с набором в красивом чемодане с вкладками.
Вот автору надо было забить гвоздь (выставить планшет в режиме киоска), а нужного молотка не оказалось на виду. Конечно, для порядку покопавшись в верхнем слое, легче бежать искать молотки в стороне, а не спросить, как найти нужный молоток, и приподнять прокладку. Можно было просто включить Guided Access — и вовсе не обязательно бежать к соседней полке с неизвестным инструментарием.
В связи с этим хочу поделиться и своим случаем.
Гуляя по одному из торговых комплексов одной из европейских столиц в поисках нужного мне заведения, я подошёл к стойке с информацией. Ни одной живой души там не было, да и местным языком я не владею. К счастью, на стойке была пара «яблочных» планшетов, упакованных в пластик, чтоб исключить нажатия аппаратных кнопок. На планшетах запущено приложение для навигации по торговому центру с многоязычным интерфейсом. Отыскав нужный мне пункт, я решил проверить, а вдруг и почту можно глянуть тут же, не отходя от стойки. Щипок по экрану — и вуаля: home screen со всеми плюшками. Сафари, Баш — есть контакт! Быстро пролистнув свежие цитаты, решил не привлекать внимания охраны, вернул приложение обратно. Это, конечно, не интернет на круизном лайнере, но тоже неплохой вариант. Всяко дешевле, чем в роуминге.
Так что, господа, не ленитесь изучать содержимое своего тулбокса. Кто знает, когда может понадобиться то или иное хитрое свёрлышко или бит в форме девятиконечной звёздочки… И не спешите обкладывать его силиконовыми розовыми прибамбасами.
В среде «настоящих программистов» бытует мнение, что одна известная операционная система ввиду особенностей своей архитектуры склонна к багам и глюкам, а вот другая — ого-го! Надёжная, как танк, хоть и не особо распространённая среди рядовых пользователей. Ну, в общем, что-то в этом есть; во всяком случае, сам я пользуюсь исключительно второй, мне так удобнее. Но история эта будет о том, как непродуманность в деталях может испортить даже надёжную систему.
Сижу, пишу код, отлаживаю. В очередной раз баг: система уходит в бесконечную рекурсию, бодренько выжирая оперативную память и своп. Как должна себя повести программа в таком случае? Выжрав всю память, она должна упасть в «корку» и больше не подняться. Ну, так обычно кривые программы ведут себя на серверах.
Но так будет скучно, неинтересно и без всякой интриги. Ведь в нашей ОС, слегка заточенной для удобства юзера, есть замечательная система, предназначенная для перехвата подобных событий и информирования разработчиков о проблеме!
Программа выкушала всю память, собралась тихо умереть — и вот тут-то на помощь спешит наша система помощи разработчикам. Поскольку написана она на модном нынче змеевидном интерпретируемом языке, просто так запуститься она не может: поднимается интерпретатор, начинают обрабатываться скрипты с кучей библиотек. Но что-то идёт не так: памяти-то нет.
Бида-бида! Мало того, что упала какая-то там программа — теперь падает и наша система помощи. Ей срочно нужно помочь!
Запускается вторая копия: поднимается интерпретатор, начинают обрабатываться скрипты… Удивительно, но памяти опять не хватает.
Несчастная глючная программа уже давно убита, но бой за память продолжается: один за другим стартуют экземпляры системы и погибают в неравной борьбе за ресурсы.
Прекратить это безобразие удалось лишь путём прицельного убийства всех подозрительных процессов. Отправить отчёт об ошибке разработчикам они так и не смогли, но зато хоть работоспособность компьютера восстановилась.
А всё потому, что чрезмерная инициативность железяки — зло!
Есть ОС реального времени, а есть остальные. Виды человеческой деятельности тоже делятся по этому критерию. Одни требуют молниеносной реакции (водитель, лётчик). Кто этим качеством не наделён, тому они противопоказаны. Другие таковой не требуют (программист, переводчик, телемастер). Они даже могут быть опасными, как в случае с телемастером, но избежать опасности в них можно и без быстрой реакции.
Смартфон — не самолёт. Ваш К. О. От его интерфейса требуется обеспечение не быстроты реакции пользователя, а его длительной неутомляемости. Но причём здесь лаунчер? Сколько процентов времени пользователь любой мобильной ОС проводит за ним? Согласно старому анекдоту, IE — полезный инструмент для скачивания браузеров. И лаунчер — полезный инструмент для запуска приложений.
Вот и эргономику обеспечивать — задача разработчиков не лаунчеров, а приложений. А на лаунчере могут оторваться художники. Как хотят, не задумываясь особо об эргономике. Главное — сделать хорошо заметной кнопку экстренного вызова, о чём почему-то не позаботился никто из трёх лидеров рынка мобильных ОС. В остальном — хоть Дали передразнивайте!
А вот тем, кто пишет приложения, стоит попробовать попользоваться своими разработками самим. И станет ясно, где и что лучше сделать удобнее.
Дерево выросло и местами обросло киянками, как спелыми плодами. Достаточно слегка пнуть — и готовый молоток падает тебе в руки. В варианте же с Apple нередки случаи, когда они самопроизвольно превращаются в елду, и хорошо если в резиновую.
Вы говорите о решении задачи? Извольте.
В связи не помню с чем — в общем, по приказу Очень Главных Людей нужно было поставить планшет в количестве двух штук в холле для использования клиентами. Задача была поставлена предельно просто: на планшетах, кроме браузера, клиент ничего не запускает и может лазить только по сайту компании. Для экспериментов тут же были выданы два андроид-планшета, на которых в течение получаса (из которых 20 минут ушло на заведение гугловской учётки и базовую настройку аппаратов) я всё настроил. Пользователь до ввода пароля браузер даже закрыть не может, а перемещаться по нему может только в пределах нашего сайта. Тулза, к слову, совершенно бесплатная, легковесная и простая, как… молоток.
Однако не всё было так радужно, как хотелось бы: андроидовские планшеты кому-то не понравились, были забракованы и заменены на яблочные. Казалось бы, что может быть проще: встроенный родительский контроль позволит заблокировать всё, кроме того, что можно. И действительно, с этим проблем не возникло, а вот с ограничением запуска приложений возникла проблема. Нашли одно-единственное решение, которое требовало джейлбрейка, который мы сделать не могли по причине слишком свежего обновления. Возникло ощущение, что заказал молоток, а тебе подсунули в красивой строгой упаковке облепленное сертификатами соответствия молотку то самое резиновое изделие, да ещё и с моторчиком.
Не хочу утверждать, что Android круче iOS. Вроде бы и так понятно: нам нужно «ехать, а не шашечки». Просто бывают случаи, когда «включил — и работает, как устраивает», а бывает — «включил, настроил — работает так, как надо».
После роутера, плеера и этой вашей «семёрки» решил подруге поставить кошерную систему с бубном на логотипе, тем более что у неё новенький ноут. Поставить поставил, но настроить всё не успел: время поджимало.
Звонит подруга и жалуется: мол, не хватает места на файлы со старой машинки. Копирует банально на рабочий стол (админы, молчать!) более 50 гиг, тогда как под систему отведено лишь 20.
Прошу дать трансляцию экрана скайпом, объясняю, где найти примонтированный раздел с красноречивым названием
/userdata
, как вытащить ярлычок на рабочий стол, как выставить права на папку для определённой учетки. Вроде всё, начинается копирование с внешнего жёсткого — валятся ошибки на отсутствие доступа, отсутствие файлов и отсутствие отсутствия. WTF?!
Прошу переподключить винт — те же яйца, только в профиль. Грешу на USB, но опознается же! Тупо смотрю на свой ноут той же серии, только постарше — конфигурация USB почти идентична.
Идея! Уточняю — оказывается, да, жёсткий умеет данные по одному кабелю, питание — по другому. Подруга делает несложную рокировку — voilà! Копирование идёт без ошибок.
Ауру на всякий случай не гашу, а то мало ли… Ну, и кто теперь скажет, что филологи ни рожна понимают в этих наших линуксах?
Работаю в большом IT-отделе большой компании. Месяц назад руководство отдела заметило необычную сетевую активность с одного из ПК во внерабочее время. Полетели теории заговора, крики о взломе и краже конфиденциальной информации. Начали внутреннее расследование.
Во внерабочее время к корпоративной сети по внутреннему VPN подключался некий пользователь и активно использовал определённый ПК. Проверили логи машины — подключение происходило по RDP. У пользователей во внерабочее время есть доступ к своим ПК по этому протоколу. Начали отслеживать источник VPN; адрес оказался в списке доверенных, там же нашлось имя владельца. Разыскали сотрудника (оказался один из сотрудников IT-отдела), начали расспрос.
Сотрудник принципиально не хотел иметь дома Windows и разбираться с эмулятором, но любил играть в старые Windows-only игрушки (типа Fallout). Выбрав в жертвы ничем не примечательный комп, он создал на нём локальную учётную запись и играл в любимые игры, подключаясь по RDP.
Конечно, в этом не было ничего криминального, но сотрудника уволили за установку и использование игрового ПО на рабочем ПК.
Сравниваем «плиточный» интерфейс и эргономику кабины пилота? Отлично! Тогда я расскажу, как будет выглядеть кабина в современном «плиточном» стиле.
Во-первых, кнопки и тумблеры вы больше не нащупаете. Вероятность задымления кабины? Тактильный контакт с кнопкой? Нет, не слышали. И пылинку смахнуть больше не сможете, не нажав какую-нибудь пиктограмму. Взглянув на «доплиточную» кабину, дизайнер интерфейсов придёт в священный ужас и закричит: «Упрощать! Слишком много визуального мусора!» Одновременно должно быть видно от 5 до 15 кнопок, не больше. Но крупных! И с большими полями между ними. Нажали «Автопилот» — попали на экран настройки автопилота. Хотите посмотреть режим двигателя? Нажмите «Главное меню» или «Назад», потом плитку «Двигатели», затем подержите пять секунд палец на плитке нужного двигателя. Обороты и давление масла вам покажут бегунками белого цвета на светло-сером фоне. Никаких цифр, цифры — визуальный шум! Но радара с грозовым фронтом при этом опять не видно, на него нужно специально переключаться. Хотя и в режиме радара, и при просмотре двигателей на приборной панели много свободного места. Но большие поля по краям — хорошо, а много приборов одновременно — плохо.
Хотите оценить состояние нескольких приборов и не лазать по меню? Вот специальная анимированная плитка. Показывает одно-два значения за раз, через секунду переключается на следующий прибор. Полный цикл за 20 секунд. Вот ещё одна анимированная плитка, показывает двигающиеся разноцветные квадратики и лампочки. Это управление освещением салона. Если отвлекает, плитку можно спрятать. Но тогда, чтобы включить табло «Пристегните ремни», придётся прокрутить длинный-длинный список всех возможных плиток. Или полазать по многоэтажному меню. Ещё пару крупных и заметных плиток спрятать не получится. Одна, с прыгающим жёлтым колобком, позволяет отправлять в пассажирский салон на специальное табло смайлики. Все любят смайлики! Вторая — «Поиск по соцсетям», тоже анимированная, поочерёдно показывает ребёнка в солнечных очках, негра в бейсболке и даму в деловом костюме.
Шрифт тоже будет крупным. Если название опции или пункта прибытия не поместилось, увидите первые две буквы и многоточие. Да, на кнопке диагональю 10 см.
В произвольные моменты времени система начинает изрядно подлагивать: ставятся обновления. Иногда на взлёте или посадке, как повезёт. А кнопки сразу после обновления могут поменять форму и цвет. В следующем сезоне в моде будут кругленькие.
Вспомним Windows 9x/ME/2000 — серые кнопочки с 16/32/64/256-цветными значками, у которых иллюзия нажатия воссоздавалась с помощью контуров чёрного и белого цвета. При этом интерфейс для глаза был нейтральным и зрение не напрягал. Не блистает красотой он и сейчас, но тем не менее требует графическую систему не слабее, чем для прорисовки интерфейса Windows Vista и 7.
Скромно промолчим, что цвета стали просто ужасными (кислотно-розовый, ядовито-зелёный, вырвиглазно-оранжевый, и всё это на пронзительно-синем фоне)… Но насколько же воспалённый мозг надо иметь, чтобы в настольную и (о ужас!) в серверную систему, где всё управление осуществляется с помощью мыши и клавиатуры, воткнуть эти уродливые плитки на пол-экрана, уместные разве что на экране планшета? Аналогично — единственно подходящий для настольной машины мыше-клавиатурный способ управления совершенно не подходит для планшета. Следовательно, имеем монстра Франкенштейна, толком не подходящего ни для чего.
И, кстати, эргономика рабочего места программиста и эргономика рабочего места водителя/машиниста/лётчика абсолютно отличаются. Вот, например, пульт управления современного трамвая или электровоза: огромная ЖК-панель, на которой выводятся изображения привычных же стрелочных индикаторов, как было в течение нескольких десятков лет до этого, при этом фон панели чёрный, а изображения белого, синего, зелёного и красного цветов. В общем, всё продумано для того, чтобы панель как можно меньше отвлекала от управления.
Или, например, цифровая микшерная консоль. Сенсорный экран, на который выводятся изображения привычных регуляторов, кнопочек и т. д. (опять-таки на тёмном фоне, чтобы не напрягалось зрение, потому что звукооператору порой приходится работать в полной темноте), потому что конструкция и эргономика микшеров прорабатывалась годами. Даже на фотоаппарате у меня есть тёмная тема оформления.
Представьте, что бы было, если бы фон панели управления электровозом был белым. Белый цвет бьёт по глазам, особенно в темноте, зрачки от яркого света сужаются, и водитель видит намного хуже (думаю, каждый хоть раз пользовался мобильным телефоном в кромешной темноте и понимает, о чем я говорю). При этом, если происходит нештатная ситуация, срабатывает оповещение. И тут стоит на самом деле тоже нетривиальная задача. Если сделать оповещение слишком резким (например, вырвиглазный огромный месседжбокс, сопровождаемый резким звуком), оператор может растеряться и сделать только хуже, например, перепутать тормоз и ускоритель.
К эргономике относится не только визуальная часть, но и звуковая. Стоит вспомнить звук старых версий антивируса Касперского, от которого отложило кирпичей не одно поколение юзверей (автор истории лично был свидетелем, когда на городском этапе «Учителя года» Касперский обнаружил на подключённой флешке вирус и оповестил об этом актовый зал на три сотни мест во всю глотку двух 500-ваттных колонок, включённых на полную мощность). Впрочем, в последних версиях звуки заменили.
Оператор ПК, будь то программист, инженер или секретарша, сидит за монитором в течение восьми часов. Следовательно, для них цвета должны быть наименее раздражающими, и этому способствует как раз интерфейс с наиболее спокойными оттенками цветов. Взять тот же AutoCAD: недаром по умолчанию фон рабочего пространства у него чёрный, а всё по той же причине: белые линии на чёрном фоне напрягают зрение куда слабее, чем чёрные на белом. Если поставить в качестве фона некий цвет, то уже после часа работы белый будет восприниматься как дополнительный к фоновому (например, если в качестве фона был выбран зелёный, то белый в течение некоторого времени будет казаться розовым).
Своя эргономика должна быть и у обычных вещей. Вот, например, почему бы производителям бездушных обмылков (за исключением некоторых моделей) не добавить третью кнопку специально для фотосъёмки? Очевидно же, что фотографировать тапом по сенсорному экрану совершенно неудобно, особенно когда снимаешь сам себя на заднюю камеру (далеко не все аппараты оснащены передней камерой, а если и оснащены, то качество её, мягко говоря, отвратительно). Почему бы не добавить зеркальце под объективом, как это на старых мобильниках было обычным явлением, чтобы не наводить камеру вслепую?
Вот интерфейс системы поиска ЖД-рейсов, где буквы на экранной клавиатуре вместо привычной раскладки «ЙЦУКЕН» расположены в алфавитном порядке. Тот, кто раскладку клавиатуры не знает, будет выискивать буквы на любой раскладке одинаково долго, а в данном случае алфавитная раскладка вгонит в прочный ступор даже того, кто на обычной клавиатуре делает 120 знаков в минуту. Кстати, общепринятая раскладка тоже вырабатывалась десятилетиями.