понедельник, 14 июня 2010 г.

[prog.thoughts] По следам разговоров о важности ошибок в программах

В конце прошлой недели довелось встрять в несколько споров, в которых ряд товарищей-лисперов (уж не знаю, случайно это или нет) высказывались в том плане, что борьбе с ошибками уделяется незаслуженно много внимания. Началось все в ЖЖ Сергея Зефирова (aka thesz), откуда я выцепил замечательную цитату. Продолжение последовало в блоге Андрея Москвитина (aka archimag).

Сразу хочу сказать, что удовольствия общение с лисперами не доставило. Неприятно, когда люди отмахиваются от мнений оппонентов аргументами вида “у меня таких проблем нет” и “я не помню, когда в продакшен попадали какие-нибудь мои серьезные ошибки”. Но об этом подробнее в другой раз.

Пока же меня поразили две вещи:

1. Программисты, которые не придают борьбе с ошибками важного значения. Этого я вообще понять не могу. Ведь работа программиста это что? Придумать, реализовать, отладить. Всего три основных занятия, одно из которых полностью посвящено поиску и устранению ошибок. И вот профессиональные программисты вдруг заявляют – ну и что, что ошибки, ну есть ошибки и что в этом страшного? Ну найдут ошибку, ну так исправим…

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

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

Что остается? Какой-нибудь бесплатное для пользователей ПО. Вроде интернет-браузеров. Когда сбоит GMail или в очередной раз падает Opera – это неприятно. Но тут уж ничего не поделать – бесплатный сыр он и есть бесплатный.

Может быть это какой-то внутрикорпоративный софт? Пишет себе контора какой-нибудь складской учет. Ну будет подглючивать время от времени АРМ у зав.сладом. Ну пожалуется, ну исправят. Главное, что он данные вводить в БД может. А то ведь требования постоянно меняются, новые типы товаров, новые виды отчетности. Программа должна успевать за ними. Если успевает, то глюки можно потерпеть. Вероятно, речь идет именно о таких проектах (косвенным подтверждением я считаю рассказ о разработке софта для сети гипермаркетов).

Как бы то ни было, мне повезло заниматься задачами, где ошибки череваты. Не жертвами, к счастью. Но вот потерей имиджа и, как следствие, уходом клиентов – наверняка. Посему мне очень неприятно читать разговоры о том, что ошибки в программах не являются чем-то страшным. Имхо, это плохой симптом. Программистов нужно воспитывать правильно. Чтобы борьба с ошибками была у них в крови. На уровне рефлексов.

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

4 комментария:

fragment комментирует...

Не сочтите за флейм, но некий программист не нашел времени на исправление ошибки в течении 5 месяцев
http://sourceforge.net/tracker/?func=detail&aid=2917149&group_id=162441&atid=823799

Может не все ошибки настолько страшны, что требуют немедленного исправления?

Евгений Охотников комментирует...

Любые ошибки страшны. В частности эта ошибка потребовала что-то около двух дней на свое диагностирование и создание workaround-а. А потом еще не помню уже сколько времени на несколько подходов к ее решению. А ее первое исправление потом привело к возникновению еще одной ошибки.

Конкретно эта ошибка не была show stopper-ом, поэтому время на ее устранение приходилось изыскивать в свободное от других более важных проектов время. Но, как мелкая заноза, нервы она мне трепала.

Так что ошибки -- это плохо. Еще хуже, что на их поиск и устранение требуется много времени. Чем меньше на это будет уходить времени, тем лучше.

Quaker комментирует...

Правильно считают разработчики OpenBSD, что большинство ошибок безопасности - это следствие ошибок при проектировании программной системы (вот соответствующая презентация: http://quigon.bsws.de/papers/2010/bsdcan/index.html). Многие не хотят признавать собственные ошибки, пытаясь найти соответствующие оправдания, - отсюда и наплевательское отношение к багам ПО.

Евгений Охотников комментирует...

2Quaker: за ссылку на презентацию спасибо. Однако, OpenBSD-шники, имхо, находятся в весьма специфических условиях. У них нет конкретных сроков, нет заказчиков, которые готовы хавать сырой продукт, лишь бы он появился побыстрее.

То, о чем говорят OpenBSD-шники, больше подходит к embedded. Когда тратить время на отладку нужно до запуска, потом это будет уже просто невозможно.

А вот для какого-нибудь интернет проекта более важным может быть выпуск первой, пусть даже сырой версии. Например, начался ЧМ по футболу, на сайте должен появиться соответствующий раздел. Пусть даже 10% посетителей сталкиваются с ошибками в работе сайта, но новый раздел должен быть.

Имхо, суммарное время на устранение ошибок в подобном интернет-проекте все равно окажется весьма значительным. Но, что может быть важно для владельцев ресурса -- оно будет "размазано" по всему времени жизни проекта. И будет обеспечен его быстрый старт.

Однако, если бы разработчики постоянно снабжались новыми средствами борьбы с ошибками, количество ошибок изначально было бы меньше. Имхо. Что положительно сказалось бы и на проектах, где важна скорость выдачи первой работающей версии.