back
□■最初にどのプログラミング言語を学べばよいのか(最終更新2005/2/24)
学んでおいたほうが良いプログラミング言語として、以下の3種類があります。
とりあえず必要性を鑑みて、それぞれ1つ程度押さえておくのが無難です。
・C言語
プログラミング言語学習での伝統的な入門言語です。
・主要なオブジェクト指向言語(Java、C#、VB.NET、C++など)
オブジェクト指向は、現代的なプログラミング言語のほとんどが採用しており、いずれかの言語で習得しておくことが望まれます。
・スクリプト言語(Perl、Python、PHP、Rubyなど)
スクリプト言語は近年注目を集めているほか、元々実用度の高い言語が豊富です。
役に立つのならば、PowerShellや、あるいはMATLABのような専用ソフトのスクリプトでも問題ありません。
ただ具体的にどのプログラミング言語を学べば良いのか、という問題に対する答えは、やはり目的や用途によります。
そこで、この問題に関してネットでよく聞かれる目的別に、学習が推奨される言語を列挙してみました。
またそれに関連して、プログラミング言語を学ぶ際の指針も付記しています。本テキストでは「これら複数の言語から選んで下さい」という記述が多いので、その際の参考にしていただけると幸いです。
■プログラミング言語を学ぶ際の指針
いろいろなものを一度に学ぼうとする散漫な勉強方法は、プログラミング言語の勉強に限らず、非効率的なものです。
そのため、まずきちんとした言語を1つ選んで、それを十分なレベルまで習得するのが理想的です。
特にプログラミング言語というものは、極端な言語を除けばどれも似たり寄ったりのものなので、1つの言語を習得すれば、他の言語の学習も大分楽になります。
なお過剰評価している方が多いので触れておきますが、基本的に「~~の言語を理解している」というスキルはあまり評価されません。言語のスキルは、派遣会
社が2週間程度の研修を受けさせた素人のキャリアを「C言語暦3年」などと誇張して派遣先に採用させる程度の扱いです。
言語を理解しているのは最低限のラインであり、重要なのは何ができるか、何を開発したのか、です。
例えばC++熟練者に大きな需要があるといっても、それは一般的にC++を使ったライブラリの設計スキルや、C++を使った開発の工程管理のスキルといった付加価値に対してのものであり、言語の文法や使い方を覚えていることが評価されているわけではないのです。
個人レベルでの活動ならば、Haskellなどの言語を学んで知的好奇心を満足させるより、オープンソースに参加したり、評価されるプログラムを作ったりするほうが、評価に結びつきやすい点、留意が必要です。
なおこの何をするか、何を作るかという、その言語を使った目的や用途は、学習のモチベーションの面でも非常に重要です。
目的や用途を持たず、漠然と学ぶスタンスでの学習は大抵長続きしません。
例えば後で入門者にはC言語が無難と述べていますが、とりあえずC言語を勉強する、で終わるだけでなく、学習の中で自分が何をしたいのか明確にしていくのが勉強を継続させていくコツです。
■目的別の推奨言語
○入門者
目的もよくわからない、とりあえずプログラミングについて漠然と学びたいというのなら、C言語が無難である。
C言語は、開発用のツールや環境が充実しているほか、本やウェブサイトなどの情報量が多言語に比べて圧倒的に多い。特に基本的なデータ型やアルゴリズムのほとんどは、サンプルにC言語を用いて説明されている。
またC言語の文法を取り入れた言語も多数存在するため(Java、C++、C#など)、C言語の文法を憶えれば他の言語への移行も比較的スムーズになる。
一方で個人的な推薦となるが、マイクロソフトのVisual Studioを用意できるならC#も入門者にとって有望である。
Windowsアプリケーションを簡単に作れるほか、例外処理やオブジェクト指向などといった現代的なプログラミング技術を、比較的楽に学習できる。C言語の学習に挫折した人は、触れてみてほしい。
職業としてのプログラマ:
○業務系プログラマ
業務系プログラマとは、ここでは情報システムやアプリケーションを開発する、最も一般的なプログラマのことを指す。
一般的なプログラマといっても様々な職種があるので、必要な言語は一概に定義できないが、現在最も求人数が多い言語はJavaであり、次いでC++、C#
である。そのため、Java、C++、C#のどれか1つを習熟しておくのが無難といえる。参考として、サーバ側を指向するならJava、クライアント(ア
プリケーション)側を指向するならC#が将来性が高いと感じる。
また雑用(テキスト操作など)やプロセス管理をこなすためのスクリプト言語も習得しておくと便利である。これに関しては、Unix/LinuxならPerlが定番で、WindowsならPowerShellが有望である。
○ウェブ系プログラマ
ウェブ系プログラマとは、ここでは]ウェブベースのシステム(主にブラウザを通して操作するソフトウェア)を書くプログラマを想定している。
ウェブ系プログラマを目指すならば、PerlかPHPのどちらかと、JavaScriptを習得しておくと無難である。
また余力があるならば、以下に詳しくなっていると視野が広がる。
・現代的なスクリプト言語
具体的にはPythonとRuby。PerlやPHPと競合関係にある。日本は微妙な立ち位置(Ruby発祥の国)にあるので、国内では両者とも主流だといえない状況だが、今後普及が見込めると思われる。
・Java+JSP
サーバ側でウェブベースのプログラムを動作させる際の定番の組み合わせの1つ。職種によってはPerlやPHPより重要かもしれない。
・リッチコンテンツ系
言語に区分できるかわからないが、定番はFLASH。またリリースされていないが将来有望なものとしてSilverLightがある。
○低レイヤープログラマ、組み込みエンジニア
OS技術者やデバイスドライバ開発者などハードウェア寄りの低レイヤープログラマと、機械や家電製品などを制御するプログラムを書く組み込みエンジニアにとっては、C言語とアセンブラが必須である。
この分野ではC++やJavaといったオブジェクト指向言語の導入も増えているが、まだまだ職を得られるほどではない。
なお低レイヤープログラマ、組み込みエンジニアは、使う言語の種類は少ないものの、予備知識として学んでおいた方が良い言語が少なからずある。それに関しては、後述する「低レイヤープログラマ、組み込みエンジニア向けの予備知識としての言語」を参照してほしい。
アマチュアプログラマ:
○ウェブサイト製作
ウェブサイト制作にすぐに活かせる言語としては、JavaScriptと、サーバサイドスクリプト言語(Perl、PHP、Ruby、Python)の2種類がある。
趣味と割り切るならばPerl、PHP、Ruby、Pythonはどれを選んでも問題ない。参考として、PHPが初心者や入門者の支持を集めているようで
ある。またRubyはまだ発展途上の言語(キラーアプリが少ない)であり、アマチュアが名を上げられる開拓分野が大きく残っている。
○フリーウェア開発者
Windowsユーザー向けのフリーウェアを作るならば、C#、VB.NET、C++の3つが定番である。
選択の基準としては、初心者ならC#、BASICを学んだことがあるならVB.NETである。
C++は他の言語と比べて高速で、サイズが小さく、より高度なWindowsの機能を使うプログラムを作ることができるが、GUIを組む言語としては複雑・難解なので注意が必要である。
○ゲーム開発者
高速な処理が必要で、配布する際の移植性などの制限が少ないものを作りたいのなら、CとC++が定番である。
しかし両者ともプログラムが難解になりがちなので、パズルゲーム程度ならC#やVB.NETを使ったほうが簡単に開発が進められる。
なお多くの人に遊んでもらって、効率的にレスポンスを得たいという人は、まじめに上記の言語を勉強するより、FLASHを学んだほうが良い。
○研究者
研究の補助として言語を学ぶ場合は、環境が整っている学術計算ソフトのスクリプト言語(MATLAB、MathCADなど)を習得するのが無難である。
また、ExcelのVBAも計算プログラムとして用いるのに十分実用に足る。
あとは研究で利用するコードの言語に従う。研究分野によってはFortrunも十分現役である。
教養として:
○プログラマ以外
GUIアプリケーションを作れるようになると、補助ツールを作る社内の便利屋になれる。GUIアプリケーションを組む初心者向け言語としてはC#、VB.NETがある。
またExcelのVBAも、テキスト操作や計算、データ管理で強力な機能を発揮する。
○プログラマ向けの予備知識としての言語
予備知識のために学ぶ言語としては、他業種の仕事で一般的に用いられているものを選ぶのが無難である。
例えばWindows向けのプログラムばかり書いているならばPerlやJavaが、逆にPerlやPHPばかり扱っているのならば、JavaやCなどが挙げられる。
あくまで教養と割り切るならば、日頃使わないプログラミングパラダイムを持つ言語を学ぶのが良いと一般的にいわれている。
有名なパラダイムとそれを体現する言語を以下に示す。
・オブジェクト指向
現在主流のパラダイム。データと操作からなるオブジェクト(機能のまとまり)でプログラムを組み立てる。
Smalltalkが理想的なオブジェクト指向言語として有名である。
・アスペクト指向
オブジェクト指向を拡張すると期待されている先進的なパラダイム。コードを追加することなく、処理や機能を埋め込む手段を提供する。
AspectJが最も有名である。
・契約プログラミング
現在注目を浴びているテスト指向と親和性が高いパラダイム。関数やモジュールの動作をチェックするコードを用意する。契約プログラミングの実用性については「達人プログラマー」に詳しい。
Eiffelが有名である。
・メタプログラミング
コードの最適化と抽象化を両立させるパラダイム。コードを生成するコードを書く。
C++のテンプレートが有名である。
・関数型プログラミング
強力なコードの最適化を実現するパラダイム。状態を持たない数学的な関数でプログラムを組み立てる。
最近はHaskellが有名である。
○低レイヤープログラマ、組み込みエンジニア向けの予備知識としての言語
低レイヤープログラマ、組み込みエンジニアにとって予備知識としてして習得しておいた方が良い言語として、以下が挙げられる。
・ハードウェア記述言語
ハードウェア記述言語の知識は、ハード/ソフトのインターフェースの開発や、抽象化されたシステムの設計の役に立つ。特に画像処理機器の制御プログラムに携わる際に重要となる。
言語としてはVerilog、VHDLが主流である。
・システム記述言語
システム記述言語は、ハードも含んだ上位システムの設計やテストベンチの整備などの役に立つ。
代表的なものとしてSystemC、SystemVerilogがある。
・オブジェクト指向言語
オブジェクト指向を採用している現場は少ないが、オブジェクト指向を理解していることは今後有望なスキルとなりえる。
組み込みで導入が進んでいるオブジェクト指向言語としては、C++、Java、Objective-Cがある。
back