- ベストアンサー
プログラミング全般について勉強したいのですが
今春に高校を卒業いたしまして、理工系の大学に進学を考えている者です。 それに先立ちまして、計算機科学に興味があることもあり、独学でプログラミングの勉強を始めてみたいと思いました。 そこで少し調べてみたのですが、使用される言語や理論が細分化されていて、現時点で知識のない私にとっては何から始めたらよいかわからなくなってしまいました。 それぞれの言語やパラダイムの特徴なども含めて、体系的に勉強することは可能なのでしょうか。 あるいは、まずなにか1つの言語が使えるようになった方が良いのでしょうか? それから、もしあれば初学者向けで役に立つ書籍も紹介していただけると幸いです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>そこで少し調べてみたのですが、使用される言語や理論が細分化されていて、現時点で知識のない私にとっては何から始めたらよいかわからなくなってしまいました。 これは簡単です。 「使用される言語や理論が細分化」されている事を無視すれば、単に「初心者でも扱いやすい」言語を選べば良いだけ、です。 現時点では、言語としてはRubyが一番良い、と思っています。 Ruby: http://www.ruby-lang.org/ja/ それは何故か、と言うと初心者向けの簡易な(かつ日本語で読める)「プログラミング入門」がWebで公開されているから、に他なりません。 プログラミング入門 - Rubyを使って - http://www1.tf.chiba-u.jp/~shin/tutorial/index.rb 分量も1日1章進めても2週間以内に終わる計算ですし、春休みの時間つぶしにももってこい、でしょう(笑)。これである程度「プログラミングの概要」は分かるとは思います。 また、このチュートリアルは実際、千葉大学の方で「全くの初心者用のプログラミング入門」としてのテキストとして使われていた実績もあるようなんで、まあ、無難でしょう。 一方、理論面に真面目に興味がある、と仰るのでしたら、書籍 計算機プログラムの構造と解釈: http://sicp.ipl.t.u-tokyo.ac.jp/ と言う、「MITの初心者向けプログラミング入門コース」のテキストと言うのがある、と言えばあるんですが、超難解です(笑)。シャレになりません(笑)。 まあ、本当に「理論面に一番興味がある」と言うのでなければ手を出さないのに越したこと無いんですが、本当に「心の底から興味がある」と言う場合に応じて一応名前だけ、は紹介しておきます。 >それぞれの言語やパラダイムの特徴なども含めて、体系的に勉強することは可能なのでしょうか。 この場合「体系的」ってのは二つの意味があると思います。一つは単に「歴史的」って事でしょうね。それなら概要だけは「トリビア」程度では押さえられるのでは? 反面、「ハードウェアレベルから」と言うのなら難かしいですよ。恐らく。 基本、いわゆる「高級言語」ってのは所詮人間がデザインするものですから、「理論的な」体系、ってあるようでないようであるようで……ってのが本当のところじゃないか、って思うんですけどね。あるデザイン方法がメインストリームになるかならないか、と言うのも偶然が作用するような気がしますし、誰かのマーケティング力のお陰、と言う気もしますし(笑)、それは「良い/悪い」と言うのともまた別な気がしますし。 大体、「良い/悪い」と関係なく、人間側がトレーニングを受けて「使えるようになる」と言うのも事実ですしね。 >まずなにか1つの言語が使えるようになった方が良いのでしょうか? それはそう言うケースも多いでしょう。 あるいは「つまみ食い」が好きならそうすれば良いでしょうし。 目的次第、でしょうね。プロにでもなる、ってんじゃなければ「つまみ食い」もそれなりに有用な気もします。
その他の回答 (3)
結論から言えば、私はあえてC言語をまず理解されることをお勧めします。 なぜ、オブジェクト指向言語でなくC言語なのかと言えば、こうです。 残念ながら日本では、過渡期において間違った考えがまことしやかに語り継がれます。 たとえば、 「日本語で記述ができるから日本人にもわかりやすい」 と日本語COBOLや日本語で書けるプログラミング言語が存在しました。 しかし、プログラミングするのに必要なのは英語か日本語かではなく論理的に組み立てる力が必要なのです。 また、 「関数とサブルーチンは違う」 確かに違う言語も存在しました。 しかし、それもさほど大きな問題でもなく、関数にするかサブルーチンにするかよりも機能分けの仕方のほうが重要であったのです。 このように現在でも、オブジェクト指向と構造化プログラミングは大きな違いがあるかのように騒いでいる人がいますが、構造化プログラミングの基礎である「単一機能」という考えは、すべてのメソッドやサブルーチンでも同じです。 このような余計なことに流されるよりも、まずは構造化プログラミングの基礎を学ばれてからでも、いいのかと思います。 但し、私はひねくれ者ですので、これは少数派の意見として捉えてください。 それから、今はオブジェクト指向全盛期ですので、C言語(構造化プログラミング)の書籍がどれだけあるか、わかりません。
お礼
実はC言語に関しては先日、ろくに下調べもせずに「K&R」を購入してしまったのですが、初心者の私には難しすぎて最初から詰まってしまいました(笑) それだけで諦めてしまうわけにはいきませんので、ひとまず簡単なことから始めてみます。 ご回答ありがとうございました。
- KI401
- ベストアンサー率53% (44/82)
計算機科学に興味があるならば、間違いなくSchemeのような関数型言語をやるべき。 C言語を先にやってもいいかもしれないが、どうせ大学でSchemeもCも両方学ぶだろう。 それなら、より計算機科学と関係の深いSchemeに先に手を出しておく方がいい。 C言語はより実践向きだが、Schemeの方が理論向きだ。 それに、一度手続き型言語の考え方に囚われると、計算機科学の理論に適応できないかもしれない。 (事実、Basic畑の友人は計算機科学・Schemeになかなか馴染めていない。) あるいは、どっちでもないとこを取ってJavaScriptもアリだと思う。 というのは、JavaScriptはオブジェクト指向でありながら関数型言語でもある。 # いわゆるマルチパラダイムってやつだ。この事実を認識している人は少ないが。 ブラウザさえあればいつでもできるし、重要なパラダイムである オブジェクト指向と関数型言語の両方を学べるのは大きいと思う。 ただし、下手すればどっちも身につけられない。 (ひどいサンプルや決まり事など、何かとノイズが多いので。) また、最初に手をつけるという意味では最適かもしれないのがRuby。 Rubyも同じようにオブジェクト指向だし、関数型言語と言い切るには少し抵抗があるが、 それに近いことも一応できる。 > まずなにか1つの言語が使えるようになった方が良いのでしょうか? マスターするなんて考えなくていい。必要最小限さえ身につければ、 むしろ他の言語の学習へ移行していくべきだと思う。その方が視野や考え方がずっと広がる。 まぁはっきり言って、初学者に重要なのは何を学ぶかとかではなくて、やる気だから。 何人も友人にプログラミングを教えているが、彼らのプログラミング力は、 単純に努力・やる気・勉強時間といった分かりやすい要素に比例している。 質問者さんも計算機科学に興味があるようだし、そのやる気さえあればすぐに伸びると思う。 是非とも頑張ってほしい。 まぁ、そんなこんなで、計算機科学に特化するならSchemeをオススメしておく。参考になれば幸い。
お礼
計算機科学に対応する言語があったのですね!知りませんでした。 ただ、入門しやすいとのことなので、ひとまずRubyからやってみようかと思います。 時間はありますし、順次Schemeのことも勉強します。 ご回答ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
>それぞれの言語やパラダイムの特徴なども含めて、体系的に勉強することは可能なのでしょうか。 可能は可能でしょうが実用的というよりプログラミング言語学の様な学術的方向に向かってしまいますので、長い目で取り組むべきものかと思います。 私の認識する限りプログラム言語は、手続き型プログラミング、オブジェクト指向プログラミング、関数型プログラミングのパラダイムに分かれている思います。一部クロスオーバーしている言語もありますがそれぞれに違いが大きくあるため、一度に手を付けれるのはよほどの天才かと。 ●手続き型プログラミングの代表言語は、 COBOL,FORTRAN,BASIC,C言語などですね。 ●オブジェクト指向プログラミングの代表言語は、 Smalltalk,Java,C++です。 ●関数型プログラミングの代表言語は、 Haskellです。SchemeとCommon Lispは関数型寄りですが純粋な関数型ではありません。 代用的な言語を挙げましたが、現在の主流はオブジェクト指向プログラミング言語だと思いますので、JavaかC++をお勧めします。特に0から始めるならJavaが良いかも知れません。 それとパラダイムとは別に、用途別にプログラミン言語は選ばれている状況がありますので、そちらも説明しておきます。 ●WEBサイト用。ユーザーの入力に反応するWEBサイト構築用。 C/C++言語、ASP.NET、Java、Perl、PHPなど。開発規模や必要反応速度などで言語が選ばれます。例えば「はてな」だとPerlが使われているらしいです。それと楽天の一部はPHPで書かれています。 ●OSやプログラミング言語自体の開発用。 C/C++言語。 ●ゲームの開発用。 C/C++言語。C#を使った開発もアマチュアでは可能。 ●市販パッケージソフトなどの一般アプリ。 C/C++言語が多いかと。ただ、端末など業務用だとVisualBasicも多く使われているみたいです。 ●メインフレーム。銀行のシステムなど。 COBOLを始めC言語とか色々です。 ●大学などの研究用。 FORTRANが結構使われているらしいです。 参考になれば幸いです。
お礼
やはり初めから網羅しようとするのは困難なのですね。実用性という見方も大きいようですし、手のつけられるところから調べてみようと思います。 大変ありがとうございました。
お礼
Rubyですね。早速少しかじってみようと思います。 理論については絶対的なものはない、ということでしょうか。確かにそう言われてみれば数学や物理を勉強するのとは違うような気もします。 私は時間には余裕があるので(笑)、できることから試してみようかと思います。 わかりやすい回答をありがとうございました。