Программирование на основе примеров — это подход к разработке программного обеспечения , который помогает пользователю создавать программное обеспечение, находя и изменяя небольшие примеры в более крупное целое. Такой подход может быть подкреплен инструментами, которые позволяют интегрированной среде разработки (IDE) показывать примеры кода или документацию API , связанную с поведением кодирования, происходящим в IDE. Тактика «заимствования» часто применяется из онлайн-источников программистами, покидающими IDE для устранения неполадок. [1] Целью программирования на основе примеров является сокращение времени, затрачиваемого разработчиками на поиск в Интернете. В идеале в программировании на основе примеров пользовательский интерфейс интегрируется с примерами модулей справки для оказания помощи без выхода программистов из IDE. Идея этого типа «мгновенной документации» заключается в сокращении перерывов в программировании. [2] Использование этой функции не ограничивается экспертами, так как некоторые новички пожинают плоды интегрированной базы знаний, не прибегая к частому поиску в Интернете или просмотру. [1]
Рост Интернета в корне изменил способ создания программного обеспечения. Огромное увеличение информационных ресурсов и демократизация доступа и распространения являются основными факторами в развитии программирования, ориентированного на примеры, для разработки конечных пользователей . Учебники доступны в Интернете за считанные секунды, тем самым расширяя пространство для тех, кто их пишет: дизайнеры, ученые или любители. К 2012 году 13 миллионов программируют как часть своей работы, но только три миллиона из них являются настоящими профессиональными программистами. Распространенность онлайн-репозиториев кода, документации, блогов и форумов позволяет программистам создавать приложения, итеративно ища, изменяя и комбинируя примеры.
Использование сети является неотъемлемой частью оппортунистического подхода к программированию, когда внимание уделяется скорости и простоте разработки, а не надежности и поддерживаемости кода. Широко распространено использование сети программистами, как новичками, так и экспертами, для создания прототипов , создания идей и открытий. [3]
Для быстрой разработки программного обеспечения программисты часто смешивают различные существующие системы. В рамках этого процесса программисты часто должны искать подходящие компоненты и осваивать новые навыки, поэтому они начали использовать Интернет для этой цели.
При разработке программного обеспечения программисты тратят 19% своего времени на программирование в Интернете. [3] Люди используют Интернет для выполнения различных видов деятельности. Намерения, стоящие за использованием Интернета, различаются по форме и затраченному времени. Программисты тратят большую часть времени на изучение новой концепции, меньше всего времени тратят на напоминание себе деталей концепции, которую они уже знают, а в промежутках они используют Интернет для уточнения своих существующих знаний. [3]
Ориентированное на примеры программирование пытается решить проблему необходимости выходить из среды разработки для поиска ссылок и примеров во время программирования. Например, традиционно, чтобы найти документацию по API и пример кода, программисты либо посещают сайт справочного языка, либо обращаются к поисковым системам и делают запросы, специфичные для API. [2] Пытаясь изучить что-то новое, программисты используют веб-уроки для оперативного обучения. Кроме того, программисты намеренно предпочитают не запоминать сложный синтаксис и вместо этого используют Интернет как внешнюю память, к которой можно получить доступ при необходимости. [3]
Некоторые из преимуществ программирования, ориентированного на примеры, включают в себя:
Возникновение можно определить как процесс, в ходе которого более крупные сущности, шаблоны и закономерности возникают посредством взаимодействия между более мелкими или простыми сущностями, которые сами по себе не проявляют таких свойств. Обширный объем кода, публично доступного в сети, может быть использован для поиска такого типа шаблонов и закономерностей. Путем моделирования того, как разработчики используют языки программирования на практике, могут быть созданы алгоритмы для поиска общих идиом и обнаружения маловероятного кода. [5]
Этот процесс ограничен объемом кода, которым программисты готовы и могут поделиться. Поскольку люди пишут больше кода, чем делятся в сети, возникает много дублирующих усилий. Чтобы в полной мере использовать силу толпы, усилия, необходимые для публикации кода в сети, должны быть сокращены. [6]
Blueprint — это плагин для Adobe Flash Builder , который автоматически дополняет запросы контекстом кода, представляет кодоцентричный вид результатов поиска, встраивает поисковый опыт в редактор и сохраняет связь между скопированным кодом и его источником. Он разработан, чтобы помочь программистам с веб-поиском и позволяет им легко вспомнить забытые детали и уточнить имеющиеся знания.
Он отображает результаты с разнообразного набора веб-страниц, позволяя пользователям быстро просматривать и оценивать результаты поиска.
Blueprint ориентирован на задачу, то есть он будет искать примеры именно на этом языке программирования.
Redprint — это браузерная среда разработки для PHP , которая интегрирует интерфейсы отображения «мгновенных примеров» и «мгновенной документации» API. Прототип IDE был разработан Анантом Бхардваджем , тогда работавшим в Стэнфордском университете, исходя из того, что интерфейсы примеров, специфичные для задач, оставляют программистам необходимость понимать найденный пример кода, и поэтому Redprint также включает интерфейс поиска, специфичный для API. [2] Интерфейс поиска, специфичный для API, ищет соответствующие примеры и документацию, специфичные для API.
Codex — это база знаний, которая записывает общие практики для Ruby . Использует краудсорсинговые данные разработчиков и просматривает весь код, ища шаблоны, таким образом, если кто-то кодирует странным образом, Codex дает ему знать, что он делает что-то неправильно.
Codex использует статистический анализ для обнаружения плохо написанного кода или кода, который синтаксически отличается от хорошо написанного кода, и предупреждает пользователя, аннотацию шаблонов для автоматического обнаружения общих идиом программирования и аннотирования их метаданными с использованием краудсорсинга, а также генерацию библиотек для создания пакета утилит, который инкапсулирует появляющуюся практику разработки программного обеспечения.
Кодлет — это блок примера кода, интерактивный вспомогательный виджет, который помогает пользователю понять и интегрировать пример.
Bing Code Search — это расширение для Microsoft Visual Studio, разработанное командой, состоящей из людей из Visual Studio, Bing и Microsoft Research, которое позволяет разработчикам искать примеры кода и документацию из Bing непосредственно из IntelliSense .
Поиск кода Bing собирает образцы кода из MSDN, StackOverflow, Dotnetperls и CSharp411.
Codota помогает разработчикам находить типичные примеры кода Java , анализируя миллионы фрагментов кода, доступных на таких сайтах, как GitHub и StackOverflow . Codota ранжирует эти примеры по таким критериям, как общность шаблонов кодирования, достоверность источника и ясность кода. Плагин Codota для IDE IntelliJ IDEA и Android Studio позволяет разработчикам получать примеры кода для использования API Java и Android, не покидая редактор.
UpCodeIn — это поисковая система исходного кода, которая позволяет разработчикам находить и повторно использовать компоненты программного обеспечения из Интернета. Уникальной особенностью UpCodeIn по сравнению с другими поисковыми системами исходного кода является ее способность находить код для элемента синтаксиса, например, вы можете найти методы с определенным типом параметра, аннотации, переменные. UpCodeIn понимает синтаксис многих языков программирования, таких как Java, JavaScript, Python и C#.