10 6月

プログラム言語の種類

プログラミングキッズでは、小学生向けのブロックプログラミングを学ぶためのカリキュラムを提供しています。系列校のコードオブジーニアスでは、中学生、高校生対象のテキストプログラミングを学ぶためのカリキュラムになっています。

代表的なブロックプログラミングはスクラッチです。多くの小学生対象のプログラミング言語としては、スクラッチが利用されています。実は、スクラッチ以外にもブロックプログラミングは存在します。というよりも、プログラミング言語はものすごくたくさん存在します。用途や目的によってさまざまな言語を利用します。

同時に、テキストプログラミングにおいても、たくさんの言語が存在します。実際には、すべての言語を紹介することはほぼ困難なほどに多くの言語が存在します。今回は、代表的なプログラミング言語に的を絞って、特徴と用途などを簡単に紹介します。

それぞれのプログラミング言語の用途
プログラミング言語で行うことは、コンピュータに命令をすることです。これにつきます。しかし、一口に目入れをするといっても、何を命令するのかは用途により大きく異なります。

科学計算、ハードウェアの制御、ウェブアプリケーション、OSの作成、AI系、ゲーム、業務系の処理、通信処理、組み込み系、この他にも異なる用途はあるでしょう。プログラミング言語によって、得手不得手はあるでしょうが、多くの言語は、様々な用途に対応できるようになっています。また、外部ライブラリを利用することでプログラミング言語単体では実現できないことを、実現可能にすることも可能です。

この言語はこれが得意、逆にこの言語はこれをするのは苦手という傾向はあるでしょうが、実際には、多くの言語は、様々な用途に利用可能です。それぞれの言語に特徴はありますが、流行や印象に流されることなく、プログラミング言語の習得に向き合うことが大切です。

C言語

汎用的な言語です。単純に「C」と呼ばれることが多いです。子どもたちの学習の観点から言うと、小学生、中学生、高校生向けのスクールで最初に学習する言語になることはあまりないでしょう。一方、大学でのプログラミングコースでは、最初に最初する言語になっていることが多いでしょう。最近は、大学で最初に楽手する言語としてPythonが利用されることもあるでしょうが、やはり大学で最初に楽手する言語としてはC言語が多いでしょう。

文法自体は決して複雑というわけではなく、プログラミングの基本的な考え方に基づいている言語です。とはいえ、習得のハードルは決して簡単とは言えないです。なんといっても、ポインタ、構造体などの概念が難解です。ポインタに関連して、C言語ではメモリの管理を適切に行う必要があります。最近の多くの言語では、メモリの管理は言語の実行エンジンが適切に行うため、プログラマがそれほど細かく意識する必要がありません。一方、C言語の場合、ポインタの利用を中心として、メモリに関する適切な処理が要求されます。誤ったメモリ処理は、エラーが発生するだけでなく、深刻な脆弱性を生み出すことがあるため、注意が必要です。

C言語は、コンパイルと実行という2段階を経て動作します。コンパイルして動作する言語の場合、実行速度が速い傾向があります。また、コンパイル後のファイルサイズがコンパクトになるため、電子機器などへの組み込みにも適しています。このような、高速な動作、様々な機器への組み込み可能という点が大きな特徴です。また、OS、ウェブサーバー、データベース、IOT機器などの基幹的なソフトウェアを支えているプログラミング言語でもあります。

基幹的なソフトウェアを支える言語でありながら、同時にC言語でゲームを開発することも当然可能です。とはいえ、初心者がゲーム開発をする際に向いているのかというと、決して向いているとはいえないかもしれません。

C言語は大学で最初に学習する言語ではありますが、一方、小学生、中学生が最初に学習する言語としては、ハードルが高いかもしれません。子どもたちがC言語でゲーム開発をすることも可能ですが、その他の言語でもっと簡単にゲーム開発の環境を構築できるため、ファーストチョイスにはならないでしょう。

他方、子どもたちがC言語に接する場合、圧倒的に考えられるのが、競技プログラミングです。プログラミング技能の優劣、アルゴリズム、数学的な処理、科学計算、省メモリでのプログラミング、複雑なアルゴリズムの優劣を競うのが競技プログラミングです。この分野では、C言語、C++という言語が利用されいます。実際には、C言語というよりもC++を利用することが多いでしょうが、入り口としてはC言語で競技プログラミングを始めることが多いでしょう。競技プログラミングを目指すならC言語の学習に挑戦してみましょう

Java

オブジェクト指向言語のJavaです。JavaScriptと混同されることが多いですが、JavaとJavaScriptは全くの別物です。関係性も特にないです。ちなみに、JavaScriptのことをJavaと略すると、Java言語と被るので、JavaScriptを略す場合、「JS」と呼びます。

JavaがSun Microsystemsにより開発された言語ですが、現在はOracleにより管理されています。

コンパイル言語であるため、コンパイル、実行という2段階を経て、動作します。コンパイルしたクラスファイルがあれば、Java VMが存在するあらゆるプラットフォームで動作する仕組みになっています。初期のJavaでは、「write once run anywhere」というキャッチコピーでアピールしていました。つまり、プログラムを作成して、コンパイルさえすれば、Java VMが動作するあらゆるプラットフォームで動作可能ということが大きなポイントでした。

オブジェクト指向言語になっており、基礎文法と同等に大切なことがオブジェクト指向の概念を理解することです。クラス、インスタンス、継承、多態性などの考え方を理解することが大切です。

Java VMは様々な環境で動作するものが用意されていますが、様々な時代を経て、現在では、デスクトップアプリケーション開発、サーバーサイドアプリケーション開発での用途が主流になっています。

Javaを利用してゲーム開発することは十分可能ですが、あまり主要な流れではないかもしれません。Androidアプリを開発するためにもJavaを利用していましたが、現在はAndroidアプリ開発にはKotlinを利用することが主要になっています。また、以前は、携帯電話のアプリ開発にも利用されていました。携帯電話のアプリではゲーム開発にも利用されていました。現在では、ウェブアプリケーションのサーバーサイドでシステムの基幹部分を支えたり、業務系アプリケーションの構築に利用することが主な用途になっています。

Go

Go言語(golang)はGoogleにより開発された言語です。「Go」という言語名ですが、表記する際に、わかりにくいため、「golang」というふうに表記されることが多いです。

Go言語(golang)の特徴は、比較的に新しい言語であるため、シンプルな文法、効率的なソフトウェア開発に利用可能であると紹介されることが多いです。比較的に簡単な文法、記述で効率的なプグラムラムを構成することが可能です。C言語と同様の処理の高速さと同時に、C言語にはないシンプルな記述が特徴だと言われています。

Go言語(golang)はウェブアプリケーションのサーバーサイド、基幹系のアプリケーション、サーバーアプリケーション、クラウドサーバーでのアプリケーション、組み込み系、Androidアプリ、IOT機器など幅広い領域で利用されています。

処理の高速さ、シンプルな文法、処理新車でも理解しやすい文法体系、安全性、高速な並列処理などが特徴です

Python

近年大人気の言語です。AI、機械学習、ディープラーニングという分野の成長に伴って大人気になっている言語です。とはいえ、Python自体は1990年度に登場した言語です。Pythonの文法の大きな特徴は、カッコを利用しないで、インデントを利用して、プログラムの構造を表す記述方法です。カッコを利用しなくてもよいため、記号が少なくなり、初心者にとっては学習しやすく、プログラムの見た目も明瞭になります。カッコを利用しないでインデントを利用するという仕組みが代表的な特徴ですが、要するに、これは、読みやすく、わかりやすく、なるべく簡単にプログラムを作成することを目指すというPython言語の根底になる思想があります。

Pythonの言語自体、読みやすく、効率的なコードを比較的簡単に記述することを目指す思想をもとに作られています。単純で簡潔なプログラムを良しとする慣習があります。

近年の人工知能関連に利用されることが多いPythonですが、長年のコミュニティによりライブラリの蓄積により、幅広いライブラリが提供されています。そのライブラリ群により、人工知能から、ゲーム、科学計算、ウェブアプリケーション開発、大学での科学研究、工学研究、複雑なグラフの記述など幅広い分野に対応可能です。

このような言語の仕組みのため、ヨーロッパ、アメリカでは、Pythonは学校現場でのプログラミング学習では、長らく用いられてきました。日本においても、学校現場では、最初に学習するプログラミング言語としてPythonを採用することが多く見受けられます。

Pythonの文法はとても簡単なので、習得のハードルは高くありません。ただし、基礎文法を習得後、言語を利用して何を作るのか、どのような分野でPythonを活かすのかはケースバイケースで考える必要があります。

AI系である機械学習、ディープラーニングを行うことも可能です。簡単なコードを作成して、実行することは可能ですが、仕組みを理解して、自由に使いこなすためには、数学的な知識、統計解析などの高度な数学知識が欠かせません。また、それを応用してアプリケーションに組み込む場合、そもそもアプリケーションを構築するためのAI系以外の知識も必要になります。

Pythonを利用してゲーム開発をすることも可能です。Pythonでのゲーム開発を行うためのライブラリもいくつか提供されています。ライブラリを利用すれば、高度なゲームを作成することも可能です。とはいえ、ゲーム開発においてPythonは決して主要な選択肢ではありません。ゲームプログラミングを学ぶこと自体は可能ですが、Unityなどに比べると、ゲームプログラミングの基礎的な部分を含めて開発する必要があるため、決して簡単とは言えません。逆に言えば、しっかりと基礎的な考え方を習得することを目指すのであれば、(Unityなどに頼らずに)Pythonでゲームプログラミングを行うことで、基礎的な考え方をしっかりと身につく得ることができるとは言えます

JavaScript

近年ウェブアプリケーションのフロントエンドで利用されることにより人気になっている言語です。JavaScript自体は、長らくウェブブラウザで動作する言語として利用されてきました。ちなみに、前述したように、JavaScriptとJavaは全く関係のない言語です。JavaScriptのことをJavaと略すのは誤解につながります。JavaScriptはJS(ジェイエス)と略すことが一般的です。

JavaScriptは、ウェブブラウザで動作する言語として長らく利用されてきましたが、NodeJSの登場により、ブラウザだけでなく、様々な環境で動作可能な言語として利用可能になりました。また、2015年に言語使用が大幅にアップデートされました。これにより、プログラミング言語として大きな発展をしていくことになりました。ウェブブラウザでの動作だけでなく、サーバーサイドなど様々な環境での動作可能になりました。

ウェブアプリケーションのフロントエンドアプリケーションの開発では、JavaScriptや、JavaScriptに関連するライブラリを利用した開発ななくてはならない存在になっています。モダンなウェブアプリケーションのフリントエンド開発は、JavaScriptとそのサブセットであるTypeScriptなくしては成り立たないほどです。

まとめ

今回は、5個の言語を紹介しました。その他にも有名な言語は多数存在します。ここに紹介した言語が優れているとか、大人気だというわけではなく、あくまでも記事にしただけです。言語に優劣があるわけでなく、あらゆる言語にはそれぞれ特徴があります。ほとんどの言語では、あらゆることに対応していますが、とはいえ、得意分野があるのも事実です。基本分野の学習に加えて、なにをやることが向いているのか、この言語で何をやりたいのかなどを考えたうえで取り組むことが大切ですね。逆に、得意分野ではなくても、しっかりと基礎的な部分を含めて自分で構築することにより、プログラムの理解力を上げることを目指すこともありかもしれません。

繰り返しますが、それぞれの言語に特徴はありますが、流行や印象に流されることなく、プログラミング言語の習得に向き合うことが大切です