Лучше быть первым, чем правым?

24 янв. 2010 г. | | |

Еще одна моя заметка о разработке ПО, опубликованная в блоге http://www.ht.ua/blog/making_soft/
С повсеместным распространением интернета перед нами открылось море новых возможностей, начиная от развлечений до новых возможностей для бизнеса. Для разработчиков открылось не только новое поле деятельности, но и новый способ распространения своих продуктов. Доставка продукта конечному пользователю через интернет - быстро, удобно, дешево. К тому же интернет позволяет программисту более легко исправить версию продукта с ошибкой на версию продукта без ошибки - всего лишь обновить файл на сервере и все! Не надо думать о том, что на складе лежат коробки с CD-дисками программы, на которых эта дурацкая ошибка! В случае распространения продукта через интернет пользователь всегда получит самую свежую версию.
В условиях экономической конкуренции целью компаний, выпускающих продукты в одной нише, является завоевание большего количества клиентов. Как это сделать? От чего это зависит? Правильный маркетинг? Не только. Представьте, что ваш конкурент месяц назад выпустил продукт, разрекламировал его, занял какую-то долю клиентов. Вы знаете, что его продукт не идеален, содержит ошибки, а ваша программа - без единой ошибки (конечно, это из ряда фантастики :) ). И вот вы готовите к выпуску свой продукт, а ваш конкурент - выпускает исправления своей программы. Вы организуете маркетинговую компанию, но... Но рынок-то уже занят конкурирующим продуктом. Как вы думаете, что пользователю будет легче - скачать и установить обновления или полностью перейти на новый продукт?
И вот тут замечается плохая тенденция.

... разработчики утверждают, что пользователи просто хотят скорее получить ПО, нежели обрести его безукоризненную версию. ... Лучше быть первым, чем правым.[1]
А так ли это? Насколько лучше быть первым, чем правым? Ведь преспокойно можно заработать репутацию компании, выпускающей некачественный продукт. С другой стороны, есть возможность заполучить больше ни о чем не подозревающих пользователей. На мой взгляд, такая тактика выпуска "неидеального ПО" уместна только в том случает, если ошибка не значительна, если ее себестоимость не велика по сравнению с задержкой выпуска продукта. Под себестоимостью ошибки я понимаю сумму неудобств, которые предоставит эта ошибка пользователю, и время, которое будет потрачено на исправление этой ошибки. Самые легкие ошибки - это опечатки :) Порой на них можно закрыть глаза (только тссс!). Примером некритичной ошибки так же может служить возникновение сбоя в программе, если у пользователя установлено какое-то редко встречающееся приложение, которое чудным образом конфликтует с вашим. Вы потратите гораздо больше сил и времени на поиск и устранение проблемы, чем выиграете от этого. Сколько процентов ваших клиентов пользуются этим редко встречающимся приложением? 1%? или 2%? Только не подумайте, что я призываю оставить этого пользователя на произвол судьбы. Нет, нет и нет. Просто такую ошибку вы можете исправить позже, когда у вас не будет более приоритетных задач. Конечно, выпуск продукта, в котором возникает fatal error при нажатии на кнопку сохранить, если у клиента драйвер видеокарты не от компании ATI - это большой грех :). Такого нельзя допускать ни в коем случае. Эту ошибку следует исправить.
Таким образом, все решает цена вопроса - не всегда оказывается уместной поговорка "семь раз отмерь, один раз отрежь", иногда "лучше быть первым, чем правым".

[1] С.Макконнелл. "Профессиональная разработка программного обеспечения"

Библиотека

21 янв. 2010 г. | | |

Джон Роббинс. Отладка приложений для Microsoft .NET и Microsoft Windows (скачать)
В книге описаны тонкости отладки всех видов приложений .NET и Win32: от Web-сервисов XML до служб Windows. Каждая глава снабжена примерами, которые позволят увеличить продуктивность отладки управляемого и неуправляемого кода.







Майкл Ховард, Дэвид Лебланк, Джон Виега. 19 смертных грехов, угрожающих безопасности программ. Как не допустить типичных ошибок (скачать)
Сделайте свои программы безопасными, исключив с самого начала причины возможных уязвимостей. Эта книга необходима всем разработчикам программного обеспечения, независимо от платформы, языка или вида приложений. В ней рассмотрены 19 грехов, угрожающих безопасности программ, и показано как от них избавиться. Рассмотрены уязвимости на языках C/C++, C#, Java, Visual Basic, Visual Basic .NET, Perl, Python в операционных системах Windows, Unix, Linux, Mac OS, Novell Netware. Авторы бестселлеров Майкл Ховард и Дэвид Лебланк, обучающие программистов в Microsoft, как писать безопасный код, объединили усилия с Джоном Виега, человеком, который сформулировал 19 смертных грехов программиста, и решили написать это руководство. На различных примерах продемонстрированы как сами ошибки, так и способы их исправления и защиты от них.

Пара строк о собаках и корме

| | |

У Джоэла Спольски есть замечательная статья «А какую работу делают собаки в вашей стране?», рассказывающая об идиоме «to eat one’s dog food» в компьютерной индустрии. Идея использовать собственное программное обеспечение не нова, но почему-то ей уделяется мало внимания. Гораздо более раздута тема «юзабилити» и «программ с человеческим лицом». А ведь корни этой проблемы именно в «to eat one’s dog food». И делать это надо не для того, чтобы находить ошибки в программном обеспечении – для этого есть отряд бравых тестеров – а для того, чтобы находить ошибки в этом модном «юзабилити». Ведь так часто встречаются программы с нужным функционалом, но ими совершенно невозможно пользоваться! Или красочные, расфуференные веб-сайты, на которых невозможно что-либо найти! И приходится искать альтернативы, пользователь тратит время, а компания (программист) теряет клиента. У Дж. Спольски есть замечательный пример (по моим словам все у него замечательное ) на эту тему – когда в компании Juno (где он работал некоторое время), разрабатывавшей кроме всего прочего почтовый клиент, 90% персонала использовала Microsoft Outlook, и

...многие из нас считали, что если бы нас вынудили использовать свой продукт, нам пришлось бы его усовершенствовать хотя бы для того, чтобы уменьшить свои мучения.
Из своего личного опыта вспоминается случай, когда в качестве тестового задания мне дали написать маленькую программулинку, смысл которой – считать время, потраченное человеком на выполнение какого-то задания. И вот, когда результат был готов и предоставлен строгому жюри, у меня спросили «Как этим пользоваться?» Программа работала, выполняла нужные функции, но была жутко неудобная – была полностью неправильная с точки зрения юзабельности, и мне это стало отлично ясно после непродолжительного постоянно использования в своей работе. И эта была главная ошибка, гораздо страшнее той, если б программа ошибалась на пару секунд при подсчете общего времени, ведь
ВЫИГРЫВАЕТ ТОТ, КТО ПРЕДОСТАВЛЯЕТ ПОЛЬЗОВАТЕЛЮ БОЛЕЕ КОМФОРТНЫЕ УСЛОВИЯ РАБОТЫ
И теперь вы видите, что на самом деле дает нам удобная, а не просто функциональная, программа – экономическую выгоду Лимпопо, лимпопо…

Конечно, тут можно найти много возражений типа «пользователи это осьминоги... восемь кривых шаловливых рук, которые растут из ж*пы» и им не угодишь – одним это хорошо, другим именно это плохо, и во многом это дело привычки… Но вы попробуйте ежедневно использовать свой продукт, и, надеюсь, вам это поможет сделать его качественнее.
В конце этой маленькой заметки хочу выразить восхищение своим начальником, который давно использует принцип «to eat one’s dog food» в своей практике и который так старательно приучает использовать его и нас. Все задачи, которые можно решить с помощью продуктов, выпущенных нашей фирмой, мой начальник решает с помощью наших программ.
Пы.Сы. После написания сей заметки мне стало даже немного стыдно, что до сих пор использую не все наши продукты, которые могла б…

Библиотека

20 янв. 2010 г. | | |

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







Э. Троелсен. Язык программирования C# 2005 и платформа NET 2.0. (скачать)
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования С# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL.





Э. Троелсен. C# и платформа. NET. Библиотека программиста. (скачать)
Основная цель этой книги дает читателю прочные знания синтаксиса и семантики C#, а также разобрать особенности архитектуры .NET. После ее прочтения вы познакомитесь со всеми основными областями, охваченными библиотекой базовых классов C#. Для приобретения практических навыков книга содержит множество примеров, иллюстрирующих излагаемый материал. Для работы с книгой не нужен какой-либо предварительный опыт работы с C# и платформой .NET, однако при ее написании авторы ориентировались на тех разработчиков, которые уже имеют опыт работы с одним из современных языков программирования (C++, Visual Basic, Java или каким-либо другим).


Дж. Рихтер. CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#. (скачать)
Эта книга - подробное описание внутреннего устройства и функционирования общеязыковой исполняющей среды (CLR) Microsoft .NET Framework версии 2.0. В ней раскрыта система типов .NET Framework и разъяснены способы управления ими. Представлены концепции программирования с широким использованием библиотеки FCL, относящиеся ко всем языкам, ориентированным на работу с .NET Framework. Особое внимание уделено обобщениям, управлению асинхронными операциями и синхронизации потоков. Книга ориентирована на разработчиков любых видов приложений на платформе с .NET Framework: Windows Forms, Web Forms, Web-сервисов, консольных приложений и пр.


Трей Нэш. C# 2008: ускоренный курс для профессионалов. (скачать)
Книга "C# 2008: ускоренный курс для профессионалов" ведущего специалиста в области технологий .NET представляет собой интенсивный курс по новейшей версии языка C#, воплотившей в себе важные дополнения и предлагающей среду, в которой функциональное программирование может органично переплетаться с обычным стилем императивного программирования на C#. Подробно рассматриваются такие темы, как фундаментальные принципы объектно-ориентированного проектирования, основные структуры данных, обработка исключений, делегаты, анонимные функции, контракты и интерфейсы, события, обобщения и многопоточность, а также нововведения наподобие лямбда-выражений, расширяющих методов и языка LINQ.


Агуров. C#. Сборник рецептов. (+CD) (скачать)
При написании программ особенно важно не тратить время на поиск стандартных решений, а сосредоточиться на решении конкретной задачи, используя готовый эффективный код, разработанный и проверенный коллегой-программистом. В этой книге собраны лучшие рецепты и решения, которые пригодятся вам при разработке программ любой сложности и помогут создать действительно качественный и быстрый код.







Агуров. C#. Разработка компонентов в MS Visual Studio 2005/2008 (скачать)
Книга содержит всю необходимую информацию для создания полноценных компонентов Win Forms на языке C# в MS Visual Studio 2005/2008, начиная с разработки и отладки и заканчивая лицензированием и распространением. Рассмотрены дизайнеры, конвертеры типа, сервисы, редакторы типов и многое другое. Информация о каждом классе, описанном в книге, сопровождается примером его использования. Весь программмный код является авторской разработкой и проверен на практике. На компакт-диске приведены примеры из книги.

Библиотека

18 янв. 2010 г. | | |

Дэвид Соломон, Марк Руссинович "Внутреннее устройство Windows 2000" (скачать)
Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов MS Windows2000 (в т. ч. серверных версий) и файловой системы NTFS 5. Детально рассмотрены и системные механизмы: деспетчеризация ловушек и прерываний, DPC, APC, LPC, RPC, синхронизация, системные рабочие потоки, глобальные флаги и др. Также описываются все этапы загрузки операционной системы и завершения её работы. Книга предоставлена системным администраторам, разработчикам серьёзных приложений и всем, кто хочет понять, как устроена операционная система Windows2000.



Свен Шрайбер.Недокументированные возможности Windows 2000 (скачать)
Данная книга предназначена для системных программистов, желающих максимально эффективно использовать возможности операционной системы, для которой они разрабатывают программное обеспечение. В книге содержится огромный объем информации, к которой можно применить атрибут `не документировано`, кроме того, многие сведения ранее нигде не публиковались.

Библиотека

| | |

Джесси Торрес. Скрипты для администратора Windows. Специальный справочник. (скачать)
Книга содержит базовые сведения, описания и примеры скриптов, используемых для администрирования Windows. Рассматриваются основные команды и ключевые слова, используемые в интерпретаторах .bat файлов, KiXtart и Windows Script Host. В книге приведены рабочие примеры скриптов, выполняющих самые разнообразные задачи по автоматизации работы в среде Windows.




Командные файлы и сценарии Windows Script Host (скачать)
Приводятся сведения об основных командах Windows 9x/NT/2000, а также об утилитах пакета Windows NT Resource Kit, необходимых при написании командных файлов. Описывается сервер сценариев Windows Script Host (WSH), в котором для автоматизации задач администрирования операционной системы и управления работой приложений могут применяться объекты ActiveX. Даны примеры командных файлов и сценариев WSH, написанных на языке JScript и осуществляющих доступ к файловой системе компьютера, базам данных и службам каталогов.

Египта!

17 янв. 2010 г. | | |

Вот и закончились чудесные выходные в Египте.... После солнечной Хургады Киев встретил нас снегом и 11-градусным морозом, а родной город - серым холодным дождем...
Неделя на Красном море оставила массу впечатлений - начиная от соприкосновения с чужой культурой и заканчивая историей. Конечно, перед поездкой я была наслышана о диких нравах арабов, но слушать чужие рассказы - это одно, а прочувствовать их на своей шкуре - это другое :)