スキップしてメイン コンテンツに移動

プログラミング言語の選択

はじめに

今現在、多くのプログラミング言語が存在します。
古いものだとよく次の3つが挙げられます。
機械語やアセンブリ言語を除いても数多くのプログラミング言語があります。
この為、「どの言語を学ぶのか」 ということは悩むことではあります。
ここでは、プログラミング言語を選択する考え方を説明します。
ここでは次の4つの視点について考えます。
  • 実装性(作りやすさ)
  • 保守性(修正しやすさ)
  • 移植性(他の機器での動作させやすさ)
  • 継続性(長い期間でも変わらず動作させやすさ)
まず、最も大切なことですが、あるプログラミング言語で作ることが出来る処理は他の言語でも作ることが出来ます。特定の言語でしか行えない処理は存在しません。これは、構造化定理 (または 構造化プログラム定理)から証明出来ます。

実装性

本来、学ぶプログラミング言語を選ぶ基準としては作りたいプログラムにより選ぶ必要はありません。ただし、行いたい処理に対し作りやすい言語と作りにくい言語はあります。この為、行いたい処理により言語を選ぶことはあります。
この事をここでは実装性と呼びます。実装性は、「行いたい処理」と「動作させる環境」、「開発環境」等を考慮します。

保守性

また、プログラムのソースコードは利用している状況に応じてメンテナンスを行いします。原則として全てのプログラムは不具合バグと言います)が存在していると考えます。この為、何か問題があると修正を行う必要があります。この修正のしやすさを保守性と言います。

移植性

異なるコンピュータで動作させることはよくあります。
この時、コンピュータは同じハードウェアで異なるOSの事もあれば、異なるハードウェアで同じOSの場合等もあります。この様な場合、ほかのコンピュータで動作させる為の労力が少なければ移植性が高いと言います。

継続性

今は動作するプログラムがこの先いつまでそのまま動作するかはかなり重要な問題です。動作環境をアップデートすることにより開発したプログラムが動作しなくなることはよくあります。
本来、互換性を考えてOSやプログラムのインタープリタ等の開発を行うべきですが、様々な理由から互換性が切り捨てられることがよくあります。これにより開発したプログラムが動作しなくなり修正を余儀なくされることが発生します。
こういう事があまり起きず、継続してプログラムが動作させ続けることをここでは継続性と呼びます。
継続性はこれから先の事を指す為、考慮されることは少なく重要視されていません。しかし、継続性が低いと新しい機器へ移植する必要があり、開発したプログラム資産が廃棄される事も起こります。

どんなプログラム言語を選ぶか

上記の4つの観点(実装性、保守性、移植性、継続性)を十分に考慮し言語を選択する必要があります。その為に「どんな理由で言語が作られたか」や「どんな考え方で言語の開発が行われているか」を知っておくことは言語選択に重要となります。
エンジニアの能力が十分高ければ4つの観点は次のような重要度になります。
重要度低        重要度高
実装性 < 保守性 < (移植性、継続性)
実装性は一人で作るだけだと自身の能力に依存しますが、保守性は他人が開発したプログラムを読む作業が必要な為、難易度が上がります。
移植性、継続性はプログラム以外の要因も大きく、対処が難しくなりがちで重要度は高くなります。
実際、現代でもCOBOLが動作しているシステムは存在しており、これを現代のコンピュータで動作させる為に右往左往することがあります。この場合、新しい環境にCOBOLの動作環境を構築するか、別の言語で新しく書き直すかを迫られます。
COBOLは実装性が高かった為、多くの処理を書かれましたが、移植性や継続性は低かった為にその資産をいかに使うかを考える必要が発生しています。
この様なこともある為、移植性や継続性はとても重要で出来るだけ考慮するべきことであります。

C言語

コンピュータの歴史の中で長く使われている言語としてC言語が挙げられます。
C言語は1972年にデニス・リッチーが開発し、 半世紀後の現代でも主要な言語に数えられています。
これほどまで長い期間において使われているのは移植性、継続性がとても高い言語であるからです。
開発された頃、様々な種類のコンピュータが乱立していました。そんな中で開発されたこともありプログラムの移植性が高く、OS開発に使われました。
また、規格が国際標準化機構 (ISO) と国際電気標準会議 (IEC)で定められる為、特定の企業の決定に左右されることもなく継続的に利用が出来る状況であることも長く利用される原因になっています。
また、この言語の影響を受けた言語は多くある為、この言語を学ぶのは他の言語を学ぶ上でメリットとなりえます。

AWK

AWK(オーク)は1979年にUNIX上で動作するプログラムとして作られました。
テキストファイルを処理するのに向いており、csvファイル等に様々な処理をかけられます。UNIXを使う上で必要となるプログラムですが、大規模なシステム開発に使われることはほぼ無いでしょう。
ただ、POSIX準拠したシステムには必ず入っている為、作ったプログラムは容易に移植が可能であり、仕様が今後変更される見込みが少ない為に今後もそのプログラムが動作し続けると考えられます。
移植性、継続性は非常に高いですし、ちょっとした処理をさせるのはとても便利なので学んでおく価値はあるでしょう。

Perl

Perl(パール)は1987年にラリー・ウォールによって開発されました。日本では積極的に利用している企業などは少ないですが、世界規模では現役で使われています。
Perlの開発者が自然言語の言語学者でもあることもあり、Perlは自然言語の性質が含まれています。例えば、同じ処理でも様々な書き方があり、色んな部分が省略して描くことも出来ます。この様なことから、自然言語の易しさや難しさ、便利さや不便さも持つこともあり日本では避けられる事が多いようです。
しかし、Perlは移植性と継続性は比較的高い言語です。PerlはAWKの様にPOSIXに含まれてはいませんが、多くのUNIX系OSに初期状態から導入されていることが多く、開発が概ね終わっている為に大きな仕様変更が無いです。これにより今開発したPerlプログラムは今後も様々な機器で動作させるのが容易である事が見込まれます。
Perlはこれ以降のプログラム言語に大きな影響を与えていることも、最初に学んでおくことのメリットとなりえます。
Perlの為の様々なモジュールがCPANと呼ばれるサーバから自由にダウンロードできることもPerlを選択する大きなメリットとなっています。

Python

Python(パイソン)は1991年に登場した言語です。
Perlの後に出来て言語であり、Perlの影響を受けています。
Perlは自由度が高いがゆえ、実装性は高いが保守性は低くなっていましたが、Pythonは記述の仕方に制限をかけ、これにより読みやすいソースコードが作られます。これにより保守性が高く保たれます。
日本ではAIの開発ブームに乗ってPythonが積極的に使われる様になりました。様々な統計処理等のライブラリが多く揃っていることがAI開発の現場でよく使われる理由になっています。
ただ、Pythonのバージョンは2系と3系で互換性がなく、2系のプログラムは書き換えないと3系では動作しません。今は2系の開発は終わり、3系に移っている状況ですが、今後3系からまた互換性がない形でバージョンが上がることがあれば、またプログラム資産が引き継がれないことになるかもしれません。

Java

Java(ジャバ)は 1995年に Sun Microsystems が開発したプログラミング言語です。Javaランタイムがインストール出来れば、どの様な機器でも同じ動作をさせられることもあり比較的使われてきました。スマートフォンのAndroidアプリを開発する言語となった頃に急激に開発者が増えていきました。今でもJavaプログラマの求人は多い状況にあります。
Sun Microsystems を Oracle が買収したことにより今はOracleが権利を持っています。Oracleの都合で仕様が変更になる可能性があり、継続的に使えるかどうかは怪しくあります。実際、OracleはAndroidがJavaの著作権を侵害しているとしてGoogleと裁判を起こしOracleが勝訴しています。この裁判においてプログラムのAPIの扱いについてOracleの権利を認めるようなことになった為、著作権の及ぶ範囲についてまだ議論が続いています。
Androidアプリ開発では需要があるようですが、この先使い続けるかどうかはよく見極める必要があります。
裁判の詳細は以下のサイトから
Google v. Oracle America
https://en.wikipedia.org/wiki/Google_v._Oracle_America

Javascript

Javascript(ジャバスクリプト)は 1995年 にNetscapeに登場しました。今はEcmaインターナショナルが標準化を行っています。Javaから名前をとってJavascriptと付けたが名前以外に関連はありません。
WebブラウザがJavascriptを実行する為、今や多くの環境で動かすことが出来ます。また、ライブラリやフレームワーク等があり、今後も多くの場所で利用されることが多いと思われます。
最大のメリットはブラウザ上で動かす為、ブラウザさえあればOSやハードウェアに影響を受けません。ただし、ブラウザにより動作が異なることもあり注意が必要となります。

注意するべきこと

よくプログラミング言語の人気ランキングなるものがWeb上で目にします。多くは求人情報から集計したもののようですがこの手の情報には注意して見る必要があります。
求人は特定のシステム上で動かしたいプログラムがあって、その開発言語のランキングとなっている為、このページで言うところの実装性と保守性は重要視しているが移植性や継続性は重要視していません。
このランキングを鵜呑みにしてプログラミング言語を学ぶのはよく考える必要があります。今すぐ必要な言語があるのならそれを学べばいいですが、そうでないのでしたら10年後20年後も開発で使える言語を見極めて勉強するほうがいいでしょう。
学校教育でプログラミングを行うという話ですが、実際はアルゴリズムを学ぶ話のようです。
プログラミング言語を学ぶ上で難しいのは、オブジェクト指向や参照、ハードウェアに関する知識に関わる部分が引っかかりやすいので早い段階でこれらに触れられる言語を学ぶほうがいいでしょう。


[元記事]

コメント

このブログの人気の投稿

Ubuntu で RAIDディスクをマウントする

謎のHDDが見つかった。 データを確認するためWindowsにつなぐもマウントされず。 これは extとかffsの辺りかなと思い、Linux(Ubuntu)に繋ぐ。 しかし、自動マウントされない。 取り敢えずマウントする。 # mount /dev/sdb1 /mnt/disk すると'linux_raid_member'とエラー表示された。 ということで、まずファイルシステムを確認。 # parted -l このコマンドでファイルシステムが表示される。 また、Gparted でも表示される。 そこでRAIDディスクを扱うためにmdadmパッケージをインストール。 # apt install mdadm ネットでは mountコマンドの -t オプションで明示的にファイルシステムを指定するとマウントできると書いてあったのでそれを試すとマウントできた。 # mount -t ext3 /dev/sdb1 /mnt/disk 内容を確認すると不要なデータだったのでデータを削除する。 # shred -v /deb/sdb この処理はとても時間がかかるので普段使わないコンピュータで処理をした。

自動ログイン on Lubuntu

Lubuntu 19.04 の 自動ログインを設定してみた。 グラフィカルログインを自動で行うようにしたいが、 ユーザー設定 の中に自動ログインの設定がない。 そこでコマンドラインから設定してみた。 まず、ログインをするときに使用しているディスプレイマネージャを確認する。 $ cat /etc/X11/default-display-manager /usr/bin/sddm sddm を使っているので、sddm の自動ログインを設定する。 OSは systemd で動いていると設定ファイルがないようなので作成する。 # sddm --example-config > /etc/sddm.conf.d/sddm.conf この設定ファイルに Autologin について書いてあるのでここにユーザ名を入力。 $ head /etc/sddm.conf.d/sddm.conf [Autologin] # Whether sddm should automatically log back into sessions when they exit Relogin=false # Name of session file for autologin session (if empty try last logged in) Session= # Username for autologin session User= ここの User= にユーザ名を書き込み保存後、再起動すると自動でログインされる。

TVに繋いでいた録画用HDDが認識しなくなった

ポロポロとものが壊れていく。 年数もそれなりに経っているので仕方がないと思うが、  Panasonic VIERA TH-L32X3  メーカーページ http://panasonic.jp/viera/p-db/TH-L32X3.html 上記VIERAに繋いでいた録画用のHDDが急に認識しなくなった。 実はこれで二回目のトラブルである。 一回目は買って1年ほどでこの症状が出た。 この時はHDDが物理的な障害で故障したと思い、ダメ元で再接続再フォーマットした。 このHDDはそのあと5年以上正常に動作していた。 結局この時の障害は論理障害だったのだと思う。 今回も同様の症状だったので、復旧を試みることにした。 こちらのサイトに Panasonic製のセットトップボックスへ繋いでいたHDDの修復について書いてあった。 Panasonic CATV STBの外付けHDDのファイルシステム修復 おぼえ書き http://qiita.com/a_saitoh/items/93a9983b988b541d2cb1 これを参考にして、FreeBSD11.0( https://www.freebsd.org/ja/ ) に外付けHDDを繋いで、fsck_ffs -n を実行するも復旧せず。 仕方がないので、fsck_ffs -y や fsck_ufs -n 、 fsck_ufs -y などをかけてからTVにつなぐと認識した。 録画データは諦めていたので、いろんなコマンドをかけてしまったので、 どのコマンドが良かったかはっきりとしないが、 無事にデータが参照できるようになった。