Меня забавляют объявления о наборе программистов, все эти бесконечные перечисления языков программирования, технологий, прикладных библиотек. Да, понимаю, что такие критерии позволяют отсеять значительную часть
«мишуры», а дальнейший набор проводить уже по результатам собеседований и тестовых задач.
В последнее время я прихожу ко мнению, что главными, мажорирующими умениями программиста (а также ученого,
исследователя, аналитика и т.п.) являются способность искать информацию и умение самостоятельно учиться, а знания технологий глубоко вторичны. О самообучении поговорим в другой раз, а сейчас речь пойдет о поиске.
90% кода уже написано до нас, задача заключается только в том, чтобы его найти. Понимание этого и способность быстро решить задачу поиска и определяет разницу между студентом программистского факультета и
опытным программистом. А вовсе не скорость печати или виртуозное владение шаблонами C++.
Подход к решению любой программистской задачи должен быть единообразным (я бы назвал его «поиск-внедрение»):
- ищем похожие решения во всех доступных источниках;
- если находим, выясняем, можно ли использовать (проверяем лицензию);
- если да, разрабатываем наиболее удобный вариант повторного использования:
- в виде внешней библиотеки (статической, динамической);
- переделка или адаптации кода (если позволяет лицензия)
- интеграции решений из найденного кода в существующий (это, кстати, наиболее тонкий и неочевидный вариант с точки зрения лицензии на код, нужно быть особенно осторожными);
- если не находим, пишем (собираем) из тех частей, которые удалось найти, также не забываем подумать, как сделать новый код максимально доступным в рамках его лицензии (как минимум это означает доступность в рамках коллектива).
Существуют разные источники информации:
- MSDN, BDN и прочие интегрированные системы помощи;
- интернет в общем (кодерские сайты, форумы, страницы разработчиков)
- другие разработчики (коллеги, авторы используемых библиотек и другие)
При этом технологии поиска для каждого источника разные. Я, например, частенько замечаю у сотрудников полное неумение искать информацию в msdn по связке index-see also или search-see also. Нет нужной команды в индексе — все руки опускаются. А все потому, что не учат поиску.
К сожалению, в настоящее время теория поиска информации (а особенно практика поиска) совершенно не проработана. Вся существующая информация сводится к умению составлять поисковые
запросы. При этом я вообще не видел материалов по поиску с айтишной спецификой, что радовать, конечно, не может. Кроме этого, отечественная система обучения совершенно не развивает навыки поиска и самостоятельной работы.
В таких условиях решающее значение приобретает опыт и, главное, понимание принципа работы программиста. На собеседовании вместо задач по с++ я бы давал задачи на поиск — полезнее выйдет.
Замечу, что описанный подход имеет свои ограничения и спорные моменты. В частности, если к безопасности и надежности кода предъявляются повышенные требования, написание кода «с нуля» позволит обеспечить необходимый уровень безопасности, а код из непроверенных источников всегда содержит элемент риска.
Другой проблемой является стиль, оформление кода, поддержка — все это надо учитывать при принятии решения об использовании существующего кода.
В заключение повторю, что проблема повторного использования кода не нова, однако сейчас она выходит на новый, глобальный, уровень. Я думаю, что умение искать и использовать существующий код может стать, наконец, ключом к ускорению разработки программ и поэтому должно войти в стандартный набор навыков программиста, а соответствующий курсы — появиться в программах университетов.
Статья впервые опубликована в авторской колонке сетевого журнала «Компьютерная графика и мультимедиа» ).
Добавить комментарий