サンプル中心型プログラミングは、小さなサンプルを見つけて修正することで、より大きな全体を作成するソフトウェア開発のアプローチです。このアプローチは、統合開発環境(IDE)でコード例や、IDE内で発生するコーディング動作に関連するAPIドキュメントを表示できるツールによって支援されます。プログラマーは、トラブルシューティングのためにIDEを離れる際に、オンラインソースから「借用」戦術をよく用います。[ 1 ] サンプル中心型プログラミングの目的は、開発者がオンラインで検索する時間を短縮することです。理想的には、サンプル中心型プログラミングでは、プログラマーがIDEを離れることなく、ユーザーインターフェイスがヘルプモジュールの例と統合され、支援を提供します。この種の「即時ドキュメント」の考え方は、プログラミングの中断を減らすことです。[ 2 ]この機能の使用は専門家に限られません。初心者の中には、頻繁なWeb検索やブラウジングに頼ることなく、統合された知識ベースの恩恵を受ける人もいます。[ 1 ]
ウェブの普及は、ソフトウェアの構築方法を根本的に変えました。情報リソースの大幅な増加と、アクセスおよび配布の民主化は、エンドユーザー開発のための事例中心型プログラミングの発展における主要な要因です。チュートリアルはウェブ上で数秒で入手できるため、開発者、科学者、趣味家など、誰が作成するかという選択肢が広がります。2012年までに1300万人が仕事の一部としてプログラミングを行いましたが、そのうち実際にプロのプログラマーであるのはわずか300万人でした。オンラインのコードリポジトリ、ドキュメント、ブログ、フォーラムの普及により、プログラマーは事例を検索、修正、組み合わせることで、反復的にアプリケーションを構築できるようになりました。
コードの堅牢性や保守性よりも開発のスピードと容易さを重視する場合、Web の利用はプログラミングの機会主義的なアプローチに不可欠です。Web は、初心者からエキスパートまで、プロトタイプの作成、アイデア出し、発見のために広く利用されています。[ 3 ]
ソフトウェアを迅速に開発するために、プログラマーは既存の様々なシステムを組み合わせることがよくあります。このプロセスの一環として、プログラマーは適切なコンポーネントを探したり、新しいスキルを習得したりする必要があるため、ウェブをその目的で利用するようになりました。
ソフトウェア開発において、プログラマーはプログラミング時間の19%をウェブ上で費やしています。[ 3 ]個人はさまざまな活動を行うためにウェブを利用します。ウェブ利用の意図は、形式や費やす時間において多様です。プログラマーはほとんどの時間を新しい概念の学習に費やし、最も少ない時間は既に知っている概念の詳細を思い出すためにウェブを利用し、その合間に既存の知識を明確にするためにウェブを利用します。[ 3 ]
例中心型プログラミングは、プログラミング中に参照や例を探すために開発環境から離れなければならないという問題を解決しようとします。たとえば、従来、プログラマーは、API ドキュメントやサンプル コードを探すために、言語のリファレンス Web サイトにアクセスするか、検索エンジンで API 固有のクエリを実行します。[ 2 ]プログラマーは、新しいことを学ぼうとするときに、Web チュートリアルを使用して必要なときに学習します。さらに、プログラマーは、複雑な構文を意図的に記憶せず、代わりに Web を必要なときにアクセスできる外部メモリとして使用します。[ 3 ]
事例中心型プログラミングの利点には、以下のようなものがあります。
創発とは、それ自体はそのような特性を示さない、より小さく単純な実体間の相互作用を通じて、より大きな実体、パターン、規則性が生じるプロセスと定義できます。ウェブ上で公開されている膨大な量のコードは、この種のパターンや規則性を見つけるために使用できます。開発者がプログラミング言語を実際にどのように使用するかをモデル化することで、一般的な慣用表現を見つけたり、ありそうもないコードを検出したりするアルゴリズムを作成できます。[ 5 ]
このプロセスは、プログラマーが共有したい、または共有できるコードの量に制限されます。人々はオンラインで共有するよりも多くのコードを書いているため、多くの重複作業が発生します。クラウドの力を最大限に活用するには、オンラインでコードを公開するために必要な労力を削減する必要があります。[ 6 ]
BlueprintはAdobe Flash Builder用のプラグインで、クエリにコードコンテキストを自動的に追加し、検索結果をコード中心のビューで表示し、検索機能をエディタに組み込み、コピーしたコードとそのソースコード間のリンクを保持します。プログラマーがWeb検索を容易に行えるように設計されており、忘れがちな詳細を簡単に思い出したり、既存の知識を明確にしたりすることができます。
さまざまなウェブページからの検索結果を表示することで、ユーザーは検索結果を迅速に閲覧・評価できます。
Blueprintはタスク特化型であり、つまり、特定のプログラミング言語における例を具体的に検索します。
Redprint は、 PHP用のブラウザベースの開発環境で、API 固有の「インスタント サンプル」と「インスタント ドキュメント」の表示インターフェースを統合しています。プロトタイプ IDE は、当時スタンフォード大学に在籍していたAnant Bhardwajによって開発されました。タスク固有のサンプル インターフェースでは、プログラマーが見つかったサンプル コードを理解する必要があるという前提に基づいており、そのため Redprint には API 固有の検索インターフェースも含まれています。[ 2 ] API 固有の検索インターフェースは、関連する API 固有のサンプルとドキュメントを検索します。
Codexは、 Rubyの一般的なコーディング手法を記録した知識ベースです。開発者からのクラウドソーシングデータを利用し、すべてのコードを検索してパターンを探します。そのため、もし誰かが奇妙な方法でコーディングしていた場合、Codexはそれが間違っていることを知らせてくれます。
Codexは、統計的リンティングを使用して、不適切なコードや構文的に適切なコードと異なるコードを検出し、ユーザーに警告します。また、パターン注釈を使用して、一般的なプログラミングの慣用表現を自動的に検出し、クラウドソーシングを使用してメタデータで注釈を付けます。さらに、ライブラリ生成を使用して、新しいソフトウェア開発手法をカプセル化したユーティリティパッケージを構築します。
コードレットとは、サンプルコードのブロックであり、ユーザーがサンプルを理解し、統合するのを支援するインタラクティブなヘルパーウィジェットです。
Bingコード検索は、Visual Studio、Bing、 Microsoft Researchのメンバーで構成されたチームによって開発されたMicrosoft Visual Studioの拡張機能で、開発者はIntelliSenseから直接Bingのコード例やドキュメントを検索できます。
Bingコード検索は、MSDN、StackOverflow、Dotnetperls、CSharp411からコードサンプルを収集しています。
Codotaは、 GitHubやStackOverflowなどのサイトで入手可能な数百万ものコードスニペットを分析することで、開発者が典型的なJavaコード例を見つけるのを支援します。Codotaは、コーディングパターンの共通性、出所の信頼性、コードの明瞭さといった基準に基づいて、これらの例をランク付けします。IntelliJ IDEAおよびAndroid Studio IDE用のCodotaプラグインを使用すると、開発者はエディタを離れることなく、JavaおよびAndroid APIを使用するためのコード例を取得できます。
UpCodeInは、開発者がインターネットからソフトウェアコンポーネントを見つけて再利用できるソースコード検索エンジンです。他のソースコード検索エンジンと比較したUpCodeInのユニークな特徴は、構文要素に基づいてコードを検索できることです。例えば、特定のパラメータ型を持つメソッド、アノテーション、変数などを検索できます。UpCodeInは、Java、JavaScript、Python、C#など、多くのプログラミング言語の構文を理解します。