プログラミング技術

本ブログでは、プログラミング技術に対して以下のマップで示される領域の情報について述べている。

以下それぞれの詳細について述べる。

プログミング技術について

プログラミング言語は、コンピューターと人間を結ぶ情報手段となる。コンピューターが誕生してから様々な言語が考案されてきた。本ブログでは、まずそれらの歴史を外観し、プログミング言語の効率化の流れである構造化プログラミング、オブジェクト指向言語、関数型言語のコンセプトと活用について述べた後、web技術を作り上げてきたフロントエンド言語(JavaScript系)とバックエンド言語について述べた。 バックエンド言語では、機械学習に用いられせるPython、Rについて述べ、更にAI系の関数型言語であるClojureについても述べている。 以下それらの詳細情報について述べる。

    プログラミング技術概要

    本ブログでは 以下のページにて、プログラミング言語の概要としてプログラミング言語とは何か?から始まり、機械言語から始まる様々な言語の概要と歴史について述べた後、プログラミング言語の歴史の中でも重要なパラダイムである「構造化言語」「オブジェクト言語」「関数型言語」の概要と歴史について述べ、さらに数学とアルゴリズムを結ぶジェネリックプログラミング、ウェブ技術の根幹にあるフロントエンド用プログラミング言語の概要について述べる。

    Clojureと関数型プログラミング

    Clojureは、Rich Hickeyにより作られ2007年に登場した比較的新しい言語である。新しいとは言っても、言語自体は1958年に登場したLISP言語の方言の一つであり、またJVMの上で動作してレガシーなプログラミング言語であるJAVAのコードをそのまま利用できるという古い顔と新しい顔を併せ持つ言語となっている。

    Clojureの特徴の一つとして関数型言語であるというものがある。これはpythonやjavascript等の通常の言語が手続きを書き並べていく言語であるのに対して、関数という機能ブロックで全てのプログラムを構成するというプログラミング言語の歴史の中では最新のトレンドに部類されるものとなる。

    プログラミング言語の開発の視点の一つに再利用性の向上がある。関数型言語の前に一世を風靡したオブジェクト指向型言語もそのような観点で開発されたものだが、関数というブロックで構成するというアイデアは更なる再利用性の向上を実現している。

    本ブログでは 以下のページにて、このClojureに対して、言語概要、一般的な実装例の紹介、webアプリケーションや機械学習での実装例とさらにAI技術への応用について述べている。

    Pythonと機械学習

    Pythonは、簡単に学べること、読みやすいコードを書けること、広範囲にわたるアプリケーションに使えることなどの、多くの優れた特徴を持つ汎用プログラミング言語となる。Pythonは、1991年にGuido van Rossumによって開発されている。

    Pythonは、比較的新しい言語であるため、オブジェクト指向プログラミング、手続き型プログラミング、関数型プログラミング等の様々な効果的なプログラミング手法を利用することができる。また、多くのライブラリやフレームワークが用意されているため、Webアプリケーション、デスクトップアプリケーション、科学技術計算、機械学習、人工知能などの分野に広く使われている。さらに、クロスプラットフォームであり、Windows、Mac、Linuxなどの多くのオペレーティングシステムで動作するという特徴を持つ。Pythonは、インタープリタ言語であるため、コンパイルの必要がなく、REPL的な仕組みを持つため、開発サイクルが早くなる。

    本ブログでは 以下のページにて、このPythonに関して、言語概要、参考図書、一般的な機械学習への適用、深層学習等の具体的な実装について述べている。

    汎用アプリケーション構築環境であるJavaとScalaとKoltlin

    JVMはJava仮想マシン(Java virtual mchine)の略となる。JVMの上で動作するJavaは、1996年にサンマイクロシステムズによってリリースされ、2010年に同社がオラクルに吸収合併された時に版権がオラクルに移り、以降オラクルにより開発が続行され、クライアント/サーバーモデルのwebアプリケーションで最も多く利用されている言語となる。

    JVMが登場するまでのプログラミング言語は、コンパイラーを通してCPUが理解できる命令に変換し実行していた。この手法で複雑な言語を構築した場合、ハードウェアのバリエーションに対する対応が困難であるという課題があった。これに対してJVMでは、Javaバイトコードと呼ばれるコンパイルファイルを一旦形成し、それを受け取ったJVMがホストが理解できる機械語に翻訳するという形式をとることで、よりフレキシブルに高度なプログラミングが可能とした。

    このJVM環境を用いることで、同じJVM上で動作するScala、JRuby、JavaとClojureは高度な互換性を保つことが可能となっている。

    本ブログでは 以下のページにて、このJavaおよびJVM環境上で動作するScala、Koltlinに関しての詳細な技術にいて述べている。

        PHPとウェブフレームワーク

        PHPは、サーバーサイドで動作するスクリプト言語であり、主にWebアプリケーションの開発に使用されるものとなる。PHPは、1995年にRasmus Lerdorfによって開発され、現在はオープンソースのコミュニティによって開発、保守されている。

        PHPは、動的なWebページの生成やデータベースの操作、ファイルのアップロードやダウンロードなどの機能を実現するために広く使用されており、HTMLに埋め込むことができるので、Webページ内でPHPスクリプトを直接実行するという使い方もできる。また、WordPress、Joomla、Drupalなどのような人気のあるWebアプリケーションのフレームワークとしても広く使用されており、多くのオペレーティングシステムで動作することができ、かつ多くのデータベースやWebサーバーとの統合が容易であるため、Webアプリケーション開発に適している言語として認織されている。

        PHPでは、さらにWebアプリケーション開発を効率化するために、Laravel、Symfony、CodeIgniter、CakePHP等のアプリケーションフレームワークと呼ばれるWebアプリケーション用のツールや機能を提供するソフトウェアを持つ。

        本ブログでは 以下のページにてこのPHPについて、言語概要、Composer、Laravel等のフレームワークを使ったweb構築の実際について述べている。

        Prologと知識情報処理

        Prologは、Lispと並ぶシンボリック人工知能プログラミング用の2つの古典言語の1つとなる。言語の特徴としては宣言型言語であることで、この「宣言型プログラミング言語」とは、対象の定義 =「何(What)を得たいか」を宣言してプログラムを構成し、逆に一般的な手続き型言語が持つ、それを得る過程・手続き・アルゴリズム =「どうやって(How)得るか」を記述しない[1][2]ものとなる。ここで「何を得たいか」という宣言は、出力を得る方法ではなく出力の性質・あるべき状態に対する記述となり、最終的な実現手続きはそれらが別途持つ処理系・ランタイム・フレームワーク等に委譲する形となる。

        本ブログでは 以下のページにて、このPrologの言語概要と参考図書及びエキスパートシステム等の知識情報処理への応用について述べる。

        LISPと人工知能技術

        1956年に作られた初期の関数型プログラミングであるIPL(Information Processing Language)は、1930年代にチャーチとクリーニによって提案された「ラムダ計算」や再帰関数(帰納関数)をベースとして作られている。それらを受けて、1958年にジョン・マッカーシーによる研究からLISPが生まれている。このLISPは「list processor」に由来して命名されたもので、プログラムそのものがリストで構成され、データもコードもリストとして操作されることに因んでいる。LISPはその後多くの言語として生まれ変わりながら、現在でも利用されている。

        LISPは関数型言語の始まりであるとともに抽象度が高い言語であり、LISPを使うことで様々な初期の人工知能技術が構築されてきた。

        本ブログでは 以下のページにて、このLISPに対して言語の概要と初期の人工知能技術(ELIZAやGeneral Problem Solver、自動証明器等)の具体的な実装について述べている。

        R言語と機械学習

        Rは、ベル研究所のJohm Chambersが発明したS言語をオークランド大学のRobert GentlemanとRoss Ihakaが1933年に改良し、発明したものとなる。R言語は高級言語で、最初からユーザーがコマンドを入力、結果を得て、他のコマンドを実行できる様に、インタラクティブ性を目的としていた。その後、システムに組み込まれることもできて、複雑な問題にも取り組む言語に発展している。

        Rは、データの変換、分析に咥えてグラフィクスとレポーティングが生み出せる機能も追加され、データの抽出や変換、モデルの適用、推論と予測、結果の作図とレポートなど、データ解析における振るスタックに使われる様になった。

        Rの人気は2000年台後半に急上昇し、学術界だけではなく、銀行、マーケティング、医療、政治、遺伝子やその他の業界に広がり、多くのアドオンパッケージ(Rの機能を拡張するライブラリ)が公開されてきた。

         本ブログでは 以下のページにて、このR言語を用いた様々な機械学習の実装について述べている。

        C/C++とRust

        C/C++言語は、マイクロコンピューターから大型コンピューターまで、多くのプラットフォームのアプリケーションで利用されているプログラミング言語となる。Cは構造化プログラミングをベースとした非常にシンプルで自由度が高く、実行速度が高いプログラミング言語であり、C++はC言語にオブジェクト指向プログラミングの考え方を追加したものとなる。

        このC++は各種アルゴリズムを記述するためのジェネリックプログラムとしても利用される。ジェネリックプログラミングは1980年台に登場したプログラミングの手法であり、1990年代にC++のTL(Standard Template Library)が開発された。ここで、ジェネリックプログラミングとは、アルゴリズムとデータ構造を設計することに焦点を合わせ、効率を低下させることなく、それらを最も一般的な環境で動作させるためのプログラミング手法となる。

        本ブログでは 以下のページにて、このC/C++言語の概要、ジェネリックプログラミング、更に具体的な例としてMCMCやグラフデータ等の各種アルゴリズムの実装について述べる。

        JavascriptとReactによるフロントエンド開発

        JavaScriptは、Webページの動的な動作を実現するために使用されるプログラミング言語で、1995年にNetscapeで最初に開発され、現在ではWebアプリケーションやモバイルアプリケーション、デスクトップアプリケーション、サーバーサイドの開発など、幅広い用途で使用されているものとなる。

        JavaScriptの動作の基本は、WebページのDOM(Document Object Model)を変更し、ユーザーとのインタラクションやWebサイト上でのデータ処理、アニメーション、画像のスライドショー、フォームのバリデーションなどを実現するものとなる。JavaScriptはまた、Webページの外部ファイルを読み込んだり、サーバーとの通信を行ったり、データベースにアクセスすることもできる。

        JavaScriptにはjQuery、Underscore.js、Lodash、Moment.js、D3.js、Three.js等ののライブラリや、React.js、Angular.js、Vue.js、Ember.js、Backbone.js等のフレームワーク、またTypeScript、CoffeeScript、Dart、Elm、ClojureScript等のAltJSと呼ばれるJavaScriptの代替として開発されたプログラミング言語がある。

        本ブログでは 以下のページにて、このJavascriptに対して言語概要とフロントエンド開発に用いられる具体的な実装、またReact等のフレームワークについて述べている。

        CSSによるウェブデザイン

        CSS(Cascading Style Sheets)は、HTMLやXMLなどの文書の見た目やレイアウトを設定するための言語であり、CSSを使用することで、ウェブサイトやアプリケーションのスタイルやレイアウトを一元的に管理することができるようになる。また、CSS開発の効率を改善するために、Bootstrap、Foundation、Materialize、Bulma等のCSSフレームワークや、Sass、Less、Stylus等のプリプロセッサなどのツールが提供されている。

        本ブログでは 以下のページにて、このCSSの概要と具体的な実装例、さらに人気のあるフレームワークでBootstrapの紹介を行なっている。

            タイトルとURLをコピーしました