Поиск-внедрение

Меня забавляют объявления о наборе программистов, все эти бесконечные перечисления языков программирования, технологий, прикладных библиотек. Да,  понимаю, что такие критерии позволяют отсеять значительную часть "мишуры", а дальнейший набор проводить уже по результатам собеседований и тестовых задач.

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

90% кода уже написано до нас, задача заключается только в том, чтобы его найти. Понимание этого и способность быстро решить  задачу поиска и определяет разницу между студентом программистского факультета и опытным программистом. А вовсе не скорость печати или виртуозное владение шаблонами C++.

Подход к решению любой программистской задачи должен быть единообразным (я бы назвал его "поиск-внедрение"):

  1. ищем похожие решения во всех доступных источниках;
  2. если находим, выясняем, можно ли использовать (проверяем лицензию);
  3. если да, разрабатываем наиболее удобный вариант повторного использования:
      • в виде внешней библиотеки (статической, динамической);
      • переделка или адаптации кода (если позволяет лицензия)
      • интеграции решений из найденного кода в существующий (это, кстати, наиболее тонкий и неочевидный вариант с точки зрения лицензии на код, нужно быть особенно осторожными);
  4. если не находим, пишем (собираем) из тех частей, которые удалось найти, также не забываем подумать, как сделать новый код максимально доступным в рамках его лицензии (как минимум это означает доступность в рамках коллектива).

 Существуют разные источники информации:

  • MSDN, BDN и прочие интегрированные системы помощи;
  • интернет в общем (кодерские сайты, форумы, страницы разработчиков)
  • другие разработчики (коллеги, авторы используемых библиотек и другие)

При этом технологии поиска для каждого источника разные. Я, например, частенько замечаю у сотрудников полное неумение  искать информацию в msdn по связке index-see also или search-see also. Нет нужной команды в индексе - все руки опускаются. А все потому, что не учат поиску.

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

В таких условиях решающее значение приобретает опыт и, главное, понимание принципа работы программиста. На собеседовании вместо задач по с++ я бы давал задачи на поиск - полезнее выйдет.

Замечу, что описанный подход имеет свои ограничения и спорные моменты. В частности, если к безопасности и надежности кода предъявляются повышенные требования, написание кода "с нуля" позволит обеспечить необходимый уровень безопасности, а код из непроверенных источников всегда содержит элемент риска.

Другой проблемой является стиль, оформление кода, поддержка - все это надо учитывать при принятии решения об использовании существующего кода.

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

Комментарии

Не могу

Не могу полностью согласиться с автором статьи. Так как зачастую при создании нового проекта, приходится либо начинать программирование с нуля (если совершенно новый проект на рынке), либо организовывать перенос части решения (программного кода) на более новую платформу и адаптация для решения конкретной задачи.
Вот к примеру, http://www.nmsoft.narod.ru/source.htm
Там ссылка на http://www.koders.com/ но и есть примеры исходников.

Если нужно к проекту добавить системную dll, то вот ресурс http://www.dll.ru

и вообще

продолжая мысль, скажу что по отношению к императивным языкам программирования уже нет такого понятия, как "выучить язык". их уже не учишь, а просто берёшь и пишешь, т.к вся информация есть в руководствах/книжках/интернете.
дело просто в философии "собрать из кирпичиков". конструктор :)

Кстати, активно поддерживая идею об умении самостоятельно учиться, я бы процитировал мысль Брайана Хольца о будущем: “…technology change and information growth will make meta-knowledge increasingly important: knowing what to know, knowing what one does and does not know, knowing what one can and cannot know, knowing how to find and evaluate knowledge, and knowing how to express, store, and classify knowledge.” (http://humanknowledge.net/Thoughts.html#TechnologicalDevelopments) По-моему, сказано неплохо.

... и я не знал

Найти фильтр sepia в нём гораздо проще! Год назад мне для этого пришлось придумать запрос «sepia && исходники».

Статья очень правильная. За 4 года обучения на факультете ВМиК, только на одном курсе лекция (Р.Л.Смелянский "Компьютерные сети") такая идея упоминалась. Все остальные курсы сводились к тому, что повторно код использовать не рекомендуется, лучше всё писать с нуля (хотя на начальных курсах, думаю, это было правильно, поскольку нас учили программировать можно сказать с нуля).

Хотелось ещё добавить (вернее уточнить), что, кроме перечисленных мест, где можно найти информацию есть и специально предназначенные для поиска исходников, например: http://www.koders.com/ К сожалению, пока технология поиска кода таким образом не слишком удобна и не всегда приносит результаты.

koders.com я не знал. Это интересно.

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