Обезьяны и пол-ребенка

0 коммент. | добавить комментарий
Обращаю внимание своей молчаливой аудитории, что у меня в блог-ленте появился новый ЖЖ. Петр Бормор пишет туда сказки. Читайте их, они хорошие.

У одного индуса жили три обезьяны: слепая, глухая и немая.
Однажды в дом забрался вор, увидел обезьян и собрался их убить, чтобы не оставлять свидетелей.
-Ничего не вижу!- поспешно сказала слепая обезьяна.
-Ничего не слышу!-добавила глухая.
А немая только руками развела: она, мол, и рада бы что-то сказать, да вот не может.
Вор успокоился, собрал всякое добро в мешок и убежал.
Утром хозяин обнаружил пропажу и вызвал полицию.
-Я всё видела!- сказала глухая обезьяна.
-Я всё слышала!- добавила слепая.
"А я записала номер машины",- показала знаками немая и протянула листок.
--------
Скольких преступников уже погубило слепое следование стереотипам!..

(c) bormor

UPD сразу: ну и безоглядова, как всегда, великолепна:

Поперек Ленинского проспекта висит рекламная перетяжка:

"Мы поможем определить пол Вашего будущего ребенка"
WWW.POLREBENKA.RU

О рынках ПО

0 коммент. | добавить комментарий
А что, все уже знают, как нынче модно пробиваться на рынок программного обеспечения? Сейчас я напишу о двух стратегиях завоевания. Первую все знают. Называется она:

"Написать программу, которую еще никто не написал"

Сначала надо найти слабо занятую рыночную нишу. В идеале – вообще никем не занятую. Чем меньше конкурентов, тем лучше. Например, я утверждаю, что на рынке программ для протирки монитора изнутри и моделирования раскраски крыльев бабочки с возможностью редактирования текстов, выполненных в виде трехмерной бродилки, в настоящее время наблюдается некоторое затишье. Такое затишье, как раз, может (и должно) быть использовано для завоевания данной рыночной ниши. Для этого – само собой – программу надо написать, сделать из нее продукт и, после всего, продавать.

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

Сейчас у меня есть две новости. Плохая состоит в том, что ваш новый продукт, как небезызвестный неуловимый Джо, может оказаться никому не нужным. Другими словами, незанятость рыночной ниши может говорить о её невостребованности. Хорошая новость заключается в том, что у нас есть альтернатива. Другая стратегия, смелость воспользоваться которой имеют далеко не все, называется:

"Написать программу, которую написали все"

В рамках данной стратегии нам надлежит выбрать сегмент программ с невероятно большим количеством конкурентов, например: почтовый клиент, веб-браузер, текстовый процессор, редактор электронных таблиц. Высшая мудрость такого выбора заключается в том, что конкуренцию порождает спрос (и наоборот).

Это значит, что ваша целевая аудитория, во-первых – большая, а во-вторых – многообещающая. Ну, например, напишите мейлер лучше чем TheBAT!, и вы гарантированно найдете своего покупателя. Опять-таки, обилие конкурентов позволяет выделить набор функциональности у конкурирующих продуктов (стырить фичи), добавить что-то свое и выпускать новый продукт.

Еще одно соображение (для колеблющихся): ваш новый мейлер может быть даже хуже, чем TheBAT!. Более того, пусть он будет дико нефункционален и ужасно некрасив, пусть стирает вашу почту, вас об этом не спросив, тормозит пусть как бульдозер, падает как самолет – все равно он, несомненно, покупателя найдет. Просто, как бы по закону больших чисел, обязательно найдутся люди, которые купят вашу программу (из разных побуждений: чисто попробовать, промахнулись мышкой и нажали не на ту ссылку, перепутали название и т.д.)

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

А какой рынок выбираете вы?

Правило

0 коммент. | добавить комментарий
В результате работы над моим Java-проектом я придумал Правило. Применяйте его почаще.

Правило
Всегда, когда вы можете использовать архитектуру Model-View-Controller, используйте ее.

Это окупится. Зуб даю.

Еще раз о собеседовании

2 коммент. | добавить комментарий
Мне довелось на этой неделе неделе на пару с коллегой - тимлидом дружественной команды собеседовать кандидата на должность Java-разработчика. Для меня это был дебют. В Академосе я, правда, проверял тесты - но это совсем другое. Сидеть на собеседовании с Другой Стороны Стола и задавать вопросы - это куда как более сильно.

Собеседование мы проводили техническое - соответственно, нас избавили от необходимости рассказывать кандидату про то, что "в компании Люксофт пишут ахуенный софт", или "Люксофт: пишем разные программы классные".

Мы спросили про опыт работы и готовые проекты. Узнав, что человек занимался системой учета персонала, я зацепился за слово "персонал" и стал выяснять, как бы он сохранил список персонала на диске или передавал бы его по сети. Соответственно, обсудили Serializable (знал) и Externalizable (плавал). Поговорили о паттернах - попутно выяснив, что кандидат не знает UML, хоть в резюме и обещал. Потрепались об MVC на примере компонента JTable, который рисует табличку. Говорили также о многопоточности в Java и особенностях ее в Swing (человек хвастал знаниями Swing'а, но о его вопиющей не-потоко-безопасности - опять ни сном ни духом).

Дал я ему потом задачку, которую сам придумал. Идею дарю. Итак, надо спроектировать Стол. Стол имеет ножки и столешницу. На столешницу в первой версии Стола можно класть листы бумаги и стакан, куда кладут ручки и карандаши. Если б кандидат знал UML - рисовал бы у меня диаграмму классов, а так ему пришлось это все выражать в коде на бумажке. Потом мы обсуждали реализацию, вносили изменения в требования, и смотрели как он с ними справляется. Например, у него было два списка - один список для стаканов, другой - для бумаги. На запрос "поддержать в новой версии Стола возможность класть на него книги" кандидат предложил ввести еще один список - для книг... Ну, короче, такая задачка, на мой взгляд, позволяет немного судить о том, как человек думает и проектирует.

Потом еще про алгоритмы спрашивали (сам виноват - зачем писал в резюме про "знание алгоритмов сортировки, поиска, и т.д."). Про сложность алгоритмов он никогда не слышал, ни один алгоритм сортировки даже не назвал, про binary search не рассказал...

Еще о многом говорили - зацепили Exception'ы, особенности Java 1.5, Eclipse, SWT... Короче, промурыжили мы его около часа, и не взяли. Хочу теперь проводить много собеседований. Как мне кажется, решение "не взять" - гораздо менее ответственное, чем "взять". Поэтому хочу теперь кого-то "взять". Джависты, ау! У нас правильный настрой!!!

UPD 13.02.07: вчера еще одного собеседовал! Этому давал уже две задачки - одну на простой алгоритм, и другую - на простое проектирование, но уже не про стол, а про автобус. Дела идут...

Vista и распознавание голоса в ей

0 коммент. | добавить комментарий
Вот здесь прочел об обнаруженной уязвимости в Windows Vista. Эти спецы из Microsoft расширили механизм управления компьютером с помощью голоса - теперь, отдавая голосовые команды, можно, например, копировать и удалять файлы, запускать программы, и совершать много других потенциально деструктивных действий.

Теперь злой пользователь Вася может написать песенку со словами, например, такими:

Ай-ай-ай, вот бы здорово
Стереть каталог C:\WINDOWS,
И при свете полной луны
Очистить корзину, да-да!


Если у жертвы злого пользователя Васи в момент прослушивания этой песенки будет включен микрофон, то ей типа будет плохо. Ну, так себе уязвимость на самом деле, хотя может причинить и зло. А вот кому будет классно - так это вирусописателям. Я помню те времена, когда вирусы писались на ассемблере, и было это типа сложно. С новой версией Windows все меняется! Рекламный ход Microsoft заключается в следующем:

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

  • РАЗ: напишите словами, что бы вы хотели от вашего вируса
  • ДВА: передайте полученную строку в Windows Speech API
  • ТРИ: робот Сэм произнесет, а новая Windows Vista автоматически выполнит все ваши команды! Наша система позволит Вам стать более успешными! Откиньтесь на спинку кресла и наслаждайтесь!

Вот такие-то пироги. Теперь им придется учить систему реагировать только на голос ее хозяина. Багов-то будет :) Ну, Forza Vista!

Lonewolf on CMMI

1 коммент. | добавить комментарий
CMMI (Capability Maturity Model Integration) - это модель улучшения процесса разработки продуктов и служб. Сегодня я буду говорить о CMMI-DEV - CMMI для разработки ПО. Эта модель имеет 5 уровней (чем выше уровень - тем круче). Любая компания может за несколько десятков тыщ вызвать к себе бравую команду оценщиков и пройти сертификацию на определенный уровень.

Зачем это нужно? Ну, например, вы возглавляете аутсорсинговую компанию "Швайнске" и как раз окучиваете нового клиента. Заклинание "Наш процесс разработки сертифицирован на CMMI Level N" - это хороший способ как минимум привлечь к себе внимание, а как максимум - вполне может повлечь за собой подписание контракта на Q сладких лет.

Вот Люксофт на своем сайте заявляет о том, что имеет CMMI 5 уровня. Врут. На самом деле, пятый уровень имеет только филиал в Москве, и то не весь. У нас, как я считаю, сейчас уровень 2 (но сертификации нет никакой, так что можно мне не верить). А вообще уровни зрелости бывают такими:

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

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

Уровень 3. Определенный. Процессы понимаются всеми и описываются в терминах стандартов, процедур, инструментов и методов - гораздо более строго, чем на уровне 2. Документы теперь стандартизованы на уровне всей организации, и никак иначе. А главное - на уровне 3 происходит следующее: конкретные личности перестают определять процесс разработки.

Теперь стоп. Дальше пока не рассказываю.

Ведь посмотрите: что происходит в мире разработки ПО последние лет дцать? Мы изо всех сил стараемся снизить влияние человеческого фактора на процесс разработки и на конечный продукт. Началось с программной инженерии, сейчас вот CMMI-DEV и аналогичные модели, имя коим - легион... Уровни 3, 4 и 5 предполагают, что если, например, команду в ответственный момент покинет ключевой разработчик, то ничего страшного не произойдет. Мы попросту заменим его другим человеком близкой по уровню квалификации, и он волшебным образом втыкнет во все сразу - потому что у нас классный процесс, документирование, процедуры и метрики.

Более того, достигнув 3 уровня, можно снижать требования к набираемому персоналу. Даже команда середнячков с правильно поставленными процессами вполне может быть успешной. А вот более низкие уровни не могут себе такого позволить - им важны конкретные личности с золотыми головами. Вот, например, Джоэль пару лет назад хвастался, как он тщательно подбирает людей в свою компанию FogCreek - и теперь вы знаете почему: у FogCreek уровень CMMI ниже нижнего.

Ставлю интересный вопрос: хорошо это или плохо? Нужно ли стремиться к получению 5 уровня? Или можно остановиться на третьем?

По мнению многих, процессы уровней 4 и 5 являются самодостаточными. Легко можно представить себе крупную компанию, сертифицированную на CMMI ML4 или ML5, в которой дни напролет работа просто кипит: пишутся отчеты, проводятся собрания, выпускаются руководящие инструкции, выполняется расчет разнообразных метрик... Только вот разработка программ как-то не очень укладывается в эту картину. Нет времени на разработку, потому как поддерживать хороший процесс - это вам не хухры-мухры, на это время нужно!

Но многие также думают, что стремиться нужно к CMMI ML3, что это хорошо, а я говорю - не очень хорошо. Почему?
  1. Потому что вполне можно смириться с тем, что соседняя команда не понимает процессов в моей команде - им это и так ни к чему, у них есть свои.
  2. Пусть каждая команда имеет свой набор документов - лишь бы им удобно работалось.
  3. Потому что мне хочется работать с квалифицированными коллегами, а не с безликим персоналом.
  4. Потому что я предпочту уменьшить текучку, тем самым снизив риск ухода ключевых специалистов.
  5. И еще потому, что люди - это самое важное, что может быть в разработке софта, что бы там не втирали нам эксперты из Carnegie Mellon Software Engineering Institute. Им надо свой CMMI продавать, а нам надо работать и делать мир лучше.
Таким образом, если мы не ставим своей целью пробиться к наивысшему уровню 5, то остановиться вполне можно на втором. Третий - это не очень круто, и преимущества от него не столь значимы.

Итого: как по мне, так на сертификации можно и сэкономить (если вы не директор аутсорсинга "Швайнске"). Гораздо важнее то, что в действительности происходит внутри вашей организации. И если вы часто опаздываете со сроками, оказываетесь перед необходимостью внесения изменений в последние минуты, ваши расходы растут и вы не можете точно сказать, чем занимается сотрудник вон за тем столом - попробуйте пересмотреть ваши взгляды на процесс разработки. Я смею утверждать:
  1. Процесс не ограничивает свободу вашего творчества
  2. Процесс - не то же самое, что бюрократия
  3. Внедрение процесса оправдано в равной степени как для больших, так и для маленьких команд.
  4. Процессы хороши даже для очень маленьких команд.
  5. Даже если вы одиночка - вам все равно нужен процесс.
  6. CMMI-DEV уровня 3 не так хорош, как его малюют. Часто имеет смысл остановиться на уровне 2.

Диплом

0 коммент. | добавить комментарий
Завтра защищаю диплом. Тема - "Методика и программные средства для автоматизированного составления учебного расписания".

Потом, когда страсти улягутся, напишу о чем хотел давно написать. Про CMMI третьего уровня и графы зависимостей программных систем.

Да, если кто вдруг ищет работу программистом в Одессе - обращайтесь, могу порекомендовать. Нужны C++, Java, QA engineer / QA team lead. Luxoft и Techinsight.