`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

О нашей профессии замолвите слово…

Статья опубликована в №33 (743) от 21 сентября

0 
 

Встреча с членами подразделения Microsoft Patterns & Practices в Украине проводится уже второй год подряд и, что примечательно, снова в непосредственной близости от двух неформальных профессиональных праздников – Дня тестировщика (9-е сентября) и Дня программиста (256-й день в году, т. е. 12-е или 13-е сентября, в зависимости от того, является год високосным или нет). Случайностей, как известно, не бывает. В самый раз связать эти события и поговорить о чем-то важном.

За последние два-три десятилетия окружающий нас мир достаточно сильно изменился, его неотъемлемой частью стали ПК, Интернет, мобильная связь, а также множест-во других, пусть не столько находящихся на слуху, но оттого не менее важных технических инноваций, прочно вошедших в наш быт и работу. И если для рядового обывателя это не так уж очевидно, то любой близкий к ИТ человек прекрасно понимает, что функциональные возможности, а следовательно, недостатки и ограничения всего перечисленного в наибольшей степени обусловлены управляющим ПО.

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

К сожалению, чем больше проходит времени, тем меньше оптимизма возникает по поводу того, что в области разработки ПО произойдет какая-нибудь революция сродни внедрению конвейера на сборочном производстве. Еще в 1970-х у некоторых специалистов в этой сфере существовала убежденность в том, что к 2000-м годам будут созданы настолько «умные» компьютеры, что для их использования никакие программисты не понадобятся, достаточно лишь сформулировать запросы, которые те станут исполнять.

С другой стороны, если говорить о положительных аспектах разработки ПО (которые вследствие философского закона борьбы и единства противоположностей неотъемлемы от отрицательных), само осознание того, что программа является не чем иным, как воплощенной в код мыслью людей, ее создавших, позволяет с трепетом размышлять о перспективах нашей профессии.

Впрочем, между тем, чтобы научиться правильно ставить задачу, изучить язык программирования, алгоритмы, библиотеки классов и начать создавать качественные решения, существует невероятно большая пропасть. Наглядным примером послужит один из простейших алгоритмов, знакомый любому программисту, – алгоритм бинарного поиска. Его суть заключается в том, что в упорядоченной последовательности элементов найти нужный (или убедиться в его отсутствии) можно путем разбиения последовательности пополам и выполнения поиска только в той части, которая должна содержать элемент (при условии, разумеется, корректного упорядочения). Это кажется невероятным, но Джон Бентли, автор популярной книги «Жемчужины программирования», утверждает, что между появлением первой публикации данного алгоритма в 1946 г. и первой безошибочной программы прошло целых 16 лет. И это для простейшего алгоритма, описываемого несколькими строками кода! Более того, у вышеприведенной истории есть продолжение. Реализация алгоритма, которую Бентли преподнес в своей книге как безошибочную и которая вошла в популярные библиотеки кода, в том числе и в JDK, на самом деле... содержала ошибку, и выявить ее удалось только в 2006 г. (спустя полвека), когда разработчики JDK получили соответствующий отчет от одного из пользователей. Джошуа Блох (Joshua Bloch), автор реализации алгоритма в JDK и известный как автор книги «Java. Эффективное программирование», опубликовал в исследовательском блоге Google шокирующую статью (bit.ly/FMKax), где под сомнение ставились практически все существующие воплощения алгоритма бинарного поиска, а также предложил исправление ошибки для некоторых популярных языков. Но все это не было бы столь смешно и грустно одновременно, если бы через два года уже в предложенной Джошуа реализации для C++ не обнаружили очередную ошибку.

Будем надеяться, что в истории с бинарным поиском все-таки поставлена точка, хотя утверждать на 100% не беремся. Но если все так неоднозначно с элементарными и досконально изученными алгоритмами, запрограммированными миллионы раз (в том числе преподавателями на классных досках и студентами в конспектах), то что уж говорить о других, более сложных и менее популярных? Логично предположить, что их реализации просто кишат ошибками! В любом мало-мальски сложном ПО затаились и дожидаются своего часа дефекты, способные преподнести неприятные сюрпризы со всевозможными последствиями. Осведомленному человеку, окруженному всеми этими современными электронными благами цивилизации, должно быть весьма не по себе. И это еще цветочки, если, например, в самый неподходящий момент перегружается смартфон. Ведь вероятны ситуации, когда ошибка может вызвать сбой в системе, от которой зависят жизни людей. Скажем, если из-за нее не сработает управляемая электроникой тормозная система автомобиля. А прецеденты уже есть, один из наиболее наглядных – недавняя демонстрация такой системы компанией Volvo (достаточно в любом поисковике ввести запрос «Volvo brake test fail»).

Что же делать, уважаемые коллеги? Оставить все как есть и дожидаться, пока найдут пресловутую «серебряную пулю»? Но если это и случится, то совсем не скоро, да и хорошего для нас в том будет мало – по аналогии с тем, что врачи просто перестанут быть нужными, если когда-то появится лекарство от всех болезней. Выход, пожалуй, единственный – не уподобляться герою популярного анекдота и быть не только «писателем», но и «читателем». Следует помнить, что один из самых эффективных способов не допускать ошибок в коде состоит в том, чтобы вообще не писать его. Необходимо приучиться сполна использовать самую ценную особенность нашей профессии – возможность делиться не только собственным опытом, но и готовыми наработками. Как сказал Григорий Мельник, один из руководителей и идейных вдохновителей группы P&P, «мы не можем сегодня позволить себе не использовать код повторно». И он прав, хотя это, вероятно, и ударяет по чьему-то самолюбию.

Сайт автора: koldovsky.com

0 
 

Напечатать Отправить другу

Читайте также

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT