構造化プログラミングと複数のプログラミング言語習得

構造化プログラミングと複数のプログラミング言語習得についてです。どういうことかというと構造化プログラミングという前提でフローが出来ていれば違うプログラミング言語でもある程度同じように記述出来るのではということです。

もちろんそんな簡単なことではないだろということになりますので、ここではごく簡単なプログラムをいろいろなプログラミング言語で書いてみてそれらの特徴等を簡単に整理してみたいと思います。

何かを開発する場合には最適なプログラミング言語がある

何かを開発する場合の何かとはWebサービス、スマートフォンアプリ、ゲームなどです。これらを開発する場合には最適なプログラミング言語はある程度絞られてくるということです。

まあよくあるシステムエンジニア、プログラマ募集の要件で○○の経験が3年以上で○○設計から出来る方を募集しますということです。

何が言いたいかといいますと開発実務では一つではなくて複数のプログラミング言語が出来る方が仕事があるということです。(※いちいち書かなくてもいいですが、まともにプログラミングが出来ない人もピラミッド構造のSier業界ではたくさんいます。私は今はピラミッド構造のSier業界には関わっていません。)

構造化プログラミング言語という意味では同じでは

そこで複数のプログラミング言語を習得するための方向性として構造化プログラミングという考え方をベースにすれば言語が違っても似たような書き方になるのではということです。if、while、forでの記述や関数という単位についてです。またオブジェクト指向プログラミングという視点では言語(C++、Java、C#など)が違っても同じような書き方になるのではということです。

はい、もちろんそんな簡単な訳ないだろということになります。PythonとC言語をぱっと見で全然違うだろということは分かります。

簡単な処理をいろいろなプログラミング言語で書いてみる

前置きが長くなったのでとにかくいろいろなプログラミング言語でごく簡単な処理を書いてみます。ここでの簡単な処理とは1から10までは足して合計を計算する処理とします。

まずはScratchで書きます。なぜScratchかというとフローが視覚的に見えて実際に動作するからです。

実行結果の55が以下のように表示されました。(※猫のキャラクターも表示されていますが使っていません。)

VBScript
VBScriptです。Windows環境で簡単に実行出来ます。
以下のような記述です。単純にWindows上でテキストファイルに以下の内容をvbsの拡張子で保存します。

dim a
a = 0

for i = 1 to 10
	a = a + i
next

msgbox a

以下のようなアイコンになっていれば実行出来ます。

実行結果のメッセージボックスです。

VB(Visual Basic)関連はマイクロソフトの伝統的な言語です。今でもExcelVBAでの利用者は大変多いと思います。上の例でわかるのは宣言はDimを使って、繰り返しはfor nextの構文を使うということです。

JavaScript
JavaScriptで書きます。以下がソースです。htmlファイルの中に書き込んでいますが、JavaScript自体はscriptタグの中です。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Hello JavaScript</title>
    </head>
    <body>
     	<script>
        	<!--
        		var a;
        		a = 0;
        		
        		for(i=1; i<=10; i++)
        		{
        		  a = a + i;
        		}
        		
          		document.writeln("sum = " + a);
          	-->
      	</script>
    </body>
</html>

このJavaScriptはブラウザだけで実行が出来るのでhtmlファイルに保存してfirefoxで起動出来ます。もちろんWebサーバ上に置いて実行してもいいです。

firefoxでは保存したhtmlファイルをブラウザにドラッグアンドドロップすれば実行出来ます。以下はfirefoxでの結果です。URLにローカルファイルが指定されています。(※この方法ではMicrosoft Edgeでは開けません。Google Chromeでは開けました。IEでは警告が表示されて許可すれば開けました。)

繰り返しやセミコロン、中かっこでの書き方はC言語に似ています。書き方はC言語に似ていますがJavaScriptは名前の通りでスクリプト系言語(書いた人が自分でコンパイルしない)です。サーバサイドでも稼働しますが、主な利用シーンはクライアントサイド(ブラウザ側)でしょう。非同期処理等で今現在ではWeb系ではなくてはならない言語だと思いますが、歴史的には一時期嫌われていた時期もあります。(※気になったら歴史を調べて下さい。もちろん今でも好き嫌いがあるとは思いますが。)

ここからはWindows10のWSL環境です
以下のリンクから始まる記事のWindows10のWSL環境(Debian)を使います。取り上げる言語は、Python、C言語、PHPです。
Windows10でWSLを利用してLinuxを利用する
各言語の開発環境、実行環境をパッケージ管理でインストールして単純にテキストファイルでプログラムを書いて実行するという流れです。

Python
Pythonで書いてみます。開発環境は以下です。
Windows10でWSLを利用してLinuxを利用する(python3の導入)
以下がプログラムです。繰り返しはwhile文で書きました。条件を満たす間繰り返します。

x = 0
i = 1

while( i<=10 ):
    x = x + i
    i = i + 1

print(x)

pythonでは構造を字下げ(インデント)で構成します。これがずれると動きません。上の例では繰り返しの処理はi = i + 1までです。この繰り返しを抜けてから最後に1回xを表示しています。

以下のように結果が出ました。

pythonは今現在ではかなり人気のある言語です。もし、何のプログラミング言語から勉強するかといったらまずpythonだと思います。しかし、最初に書いた通り何でもpythonで開発すればいいという訳ではないので、他の言語も同時に勉強するぐらいがいいと思います。

C言語
C言語で書きます。開発環境は以下です。
Windows10でWSLを利用してLinuxを利用する(C言語開発環境の導入)
以下がプログラムです。

#include <stdio.h>

int main(int argc, char **argv)
{
        int a = 0;
        int i = 0;

        for(i=1; i<=10; i++)
        {
                a = a + i;
        }

        printf("sum = %d\n", a);
}

以下がコンパイルと実行です。sum10.cというファイルに保存して-oで実行ファイルsum10を指定しています。その生成されたカレントディレクトリのsum10を実行しています。

今までに比べて何だかとっつきにくいでしょうか。C言語では必ずmain関数から実行されるのでmain関数を書きます。また各種定義を取り込むためにインクルードファイルと呼ばれるファイルを取り込みます。

pythonと違って字下げは見やすくするためのものです。セミコロンが文の終わりで、中かっこがブロックです。

変数は必ず型を指定して定義します。

C言語の課題の一つにポインタがあります。このポインタとデータ構造を記述するのはプログラミングの学習としては今でも非常に有意義だと思います。実施にC言語で開発するかどうかは別として個人的にはお勧めです。

PHP
最後にPHPです。開発環境は以下です。
Windows10でWSLを利用してLinuxを利用する(PHPの導入)
ソースは以下です。

<?php
$n=0;
for($i=1; $i<=10; $i++)
{
        $n = $n + $i;
}
echo("sum10 = " . $n);
?>

PHPはWebサーバ上で稼働するシステム、サービス等が開発出来る言語です。Javaと共にサーバサイドでよく利用されている言語です。ぱっと見たところまたC言語にに似ています。$は変数を定義しています。Web系の技術として、HTML、CSS、JavaScriptと共に習得出来れば幅が広がると思います。

実行結果は以下です。

複数のプログラミング言語習得
ここまでいくつかのプログラミング言語で簡単な処理を書きました。その上で複数のプログラミング言語習得ということであれば、これらのプログラミング言語について1から10まで完璧に習得する必要があるなどということは一切言いません。各言語の共通に見える要素や違いに見える要素などを考えながら必要に応じて実務レベルのプログラミングを行っていけばいいのではということです。

私の場合ですが、C言語からC++に進んで、それからC言語系の記述のJava、C#等での実績があります。その他VB系もそれなりにありました。今現在はpythonでも実務のプログラムを書いています。やはり何か一つ得意なものや好きなものから軸にしていけばいいのではないでしょうか。

(補足的に)複数のプログラミング言語習得のための分類の例
上記で書いた複数のプログラミング言語習得のためのプログラミング言語の分類を考えます。但し、単純にこの言語はこの分類という形で分類出来ることはないので特徴的な要素で分けてみます。

手続き型言語とオブジェクト指向言語
オブジェクト指向が出てくる以前の書き方(便宜上手続き型)かオブジェクト指向で書けるかの分類です。

手続き型言語
C言語
COBOL85
FORTRAN77
BASIC(初期の)
など

オブジェクト指向言語
C++
Java
C#
Objective-C
など

C++やObjective-Cは通常オブジェクト指向言語に分類されますが、C言語的な手続き型でも書けます。
PythonやPHPはどちらの書き方も出来るのでどちらにも入れなかったです。

COBOL85やFORTRAN等はレガシーな分かりやすい手続き型だと思ったので書きました。

何回か書いていますが、最初はオブジェクト指向より手続き型の考え方から始めた方が分かりやすいと思います。さらに手続き型で構造化プログラミングを習得するのがいいと思います。

コンパイラ言語とスクリプト言語
プログラムを書いた人が自分でコンパイル(翻訳)するかどうかです。

コンパイラ言語
C言語、C++
Java
C#、VB.net
COBOL、FORTRAN系
swift

スクリプト言語
Python
PHP
JavaScript
VBScript、VBA系
(swift)

個人的に気になったのでswiftを入れてみました。調べるとswiftはスクリプト言語のようにとかスクリプト言語の感覚で書けるとか表現されています。(※実際はコンパイラ言語だということ。)今後どこかで使ってみたいと思いました。

今回は以上です。