タイトル通り、次に学習すべき言語など、どれが良いか、どれをやるべきか、などを皆さまの経験や知識などから教えてください。
C言語は入門書の範囲を終え、ポインタやmallocなどをある程度扱えるレベルです。
オブジェクト指向にも触れてみるべき、という記事などをよく見かけるので、オブジェクト指向言語を何かやろうと調べてみると、オススメされてる言語がたくさんあり、色々な事が書かれていますが、どれも完璧な初心者or言語を2つ以上できるレベルの人向けに書かれており、私のような中途半端な初心者にはどれが良いかという記事を見かけなかったので質問させていただきました。
また、オブジェクト指向をやる前にCをここまでできるようにするとよい、などもありましたらお願いします。
ちなみに、プログラミングを学ぼうと思った動機ですが、何か目的があるというよりは、この分野の知識が必要な目的ができたときに、予備知識があると不自由なくできるかな、と思ったものです。
追記
皆さまのたくさんの回答ありがとうございます!
ベストアンサーが一つしか選べなく、大変迷ったのですが、今回は2つの言語を熱心に詳しく解説してくれた方にしたいと思います。
が、他の方の回答もすごく良く書かれており、とても勉強になりました。ありがとうございます
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答11件
0
ベストアンサー
独断と偏見で次に学ぶべき言語をこの私が決めてあげましょう。ええ、独断と偏見で。
**まず、C言語のことはすっかりさっぱり忘れてください。**何言ってんだこいつと思うかも知れませんが、今から紹介する言語ではこれまで学んだことが一切役に立ちません。いや、今の表現は正確じゃ無かったです。C言語で学んだことが__最初の内は__一切役に立ちません__が後から大いに役に立ちます__。
さて、mallocとfreeのペアで大いに苦労してきたかと思います。やつらはほっとくとすぐにメモリリーク起こしますからね。でも、次に行く世界にはGCがあります。そう、ガベージコレクション(GC)というやつ、略してガベコレです。DMMのゲームじゃありません。ましてや車庫集め(ガレージコレクション)でもありません。注意してください。このガベコレってやつは、メモリを勝手に管理してくれます。楽です。楽すぎて、もうこれでいいやって思うぐらい楽です。この楽さはC言語を学んだあなただけが体験できる素晴らしく幸福なことです。幸福は義務です。
話がそれました。艦これ以上に楽しいガベコレの素晴らしさを理解したと思います。理解していなくても先に進みます。C言語は命令型で手続き型です。これの逆を行けばいいのです。命令型の逆は何か?そう、それは宣言型です。宣言型というと関数型/論理型/制約型といろいろあるのでここは**純粋関数型言語(pure functional language)で行きたいと思います。では、手続き型の逆は何か?そう、それはオブジェクト指向です。ここもやっぱり純粋オブジェクト指向言語(pure object-oriented language)**で行ってみましょう。
つまり、次に学ぶのはガベコレが搭載された「純粋関数型言語」と「純粋オブジェクト指向言語」の二つです。これとC言語の知識を組み合わせるとほとんどの言語はマスターしているといっても過言ではありません。では、その中でもお勧めの言語をそれぞれ紹介していきましょう。
純粋関数型への誘い、Haskell
Haskellは純粋関数型言語の一つです。その特徴は何と言っても純粋関数型と言うことです。裏技を使わない限り、どうやっても関数型プログラミングを強制させられます。ここが重要です。テストに出ます。
関数型プログラミングはC言語の時とは全く考え方から異なります。まず、代入は一度きりです。一度初期化した変数は二度と変わることはありません。そんでもって全てのデータは変更不可です。配列の中身が変わることはありません。そして、関数を引数に関数を評価します。こんなんでどうやるんだと思うかも知れませんが、モナドとか色々頑張るとなんとかなるものです。
Haskell自体で実用的なアプリを作れないことも無いのですが、どちらかというと関数型プログラミングを学ぶのに一番適していることがお勧めする理由です。この関数型プログラミングの考え方は極めて重要です。将来、C++なりC#なりJavaなりScalaなりJavaScriptなりPerl6なりPythonなりPHPなりRubyなりLISPなり、その他諸々を学んだときに必ず役に立ちます。2〜3年後に、あ、Haskellやっててよかった、と思う日が必ず来ます。
趣味で作った純粋オブジェクト指向、Ruby
はっきりいいます。C++とかJavaとかのオブジェクト指向はまがい物です。あれらは、構造体を拡張したにすぎません。オブジェクト指向っぽい構造体です。なので、最初は本物から学びましょう。
島根県松江市に一人の言語オタクが住んでおりました。彼は純粋オブジェクト指向な言語が欲しいと思っていました。彼はPerlが大好きです。彼が尊敬する人はLarryです。でも、Perlにはぶっちゃけ不満ばりばりでした。なぜなら、本物のオブジェクト指向では無かったからです。そして、世の中のオブジェクト指向を見たとき、Perlのように楽しく使える本物のオブジェクト指向言語が無かったのです。なので、彼は作りました、趣味で。
そうやって出来たのがRubyです。Rubyの恐ろしいところは、何でもオブジェクト指向で書くように洗脳することです。いつのまにか、オブジェクト指向万歳!オブジェクト指向大好き!オブジェクト指向以外が許されるのは小○生までだよね!キャハハっていうようになります。恐怖の言語です。私は、一時期、どんな簡単なコードでも"class"と書くところから始めていて、これはやばいと感じました。
最初に本物さえ学んでおけば、偽物は簡単です。構造体に毛が生えた程度の言語など、苦でも無いです。それ以外にも、Rubyではダックタイピングが身に付きます。型なんて飾りです。偉い人にはそれが分からんのです!
いかがだったでしょうか?ええ、上のは独断と偏見です。ただ、50%ぐらいは本気が混ざっているのは事実です。Cだからそれを生かしたものを!ではなく、全く異なる物を学んでみるのも一つの手段だと思っています。でも、プログラミングって実は裏で繋がっている物で、結局C言語で学んだことに舞い戻るのです。そういうのに気付いてくれたらなんて思ってもいます。そんな思いで書いてみましたが、読み物として楽しんでいただけたら幸いです。
投稿2016/01/18 14:29
編集2016/01/24 02:30総合スコア21733
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/19 00:22
2016/01/19 09:51
2016/01/19 10:33
0
こんにちは。
もし、nisukoさんが学生さんなら折角C言語をされているのですから、C++をお勧めします。
C++は学ぶべき点が非常に多く難易度が高いのですが、その分学べることも多いです。
もし、既に社会人になられていて、仕事で使うことを考えているのであれば、最もシェアが多いと聞くJavaが良いかも知れません。学習難易度も低いですのでコストパフォーマンスに優れます。
投稿2016/01/18 11:58
総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/18 12:03
2016/01/18 12:25
2016/01/18 12:52
2016/01/18 13:05 編集
2016/01/19 00:02
0
ポインタやmallocなどをある程度扱えるレベルです。
では次は「完璧に扱える」レベルを目指しましょう!
というのはこの際おいておくとして、私のおすすめはC++です。まず単純にCを覚えたのにC++をやらないのはもったいないです。Cを理解しているならC++を覚えるハードルは低いと思います。
また、候補に挙がっているJavaや候補には挙がっていませんがC#などは、C++を参考にして作られているため似通っている部分が多く、いずれ覚えるとしてもC++を習得していれば理解が早まります。
投稿2016/01/18 13:49
総合スコア5938
0
次の言語というのはだいたい今使っている言語に不満が生じているときに自然に、
「これだ!」という言語が見つかるものです。
C言語に不満がみつけられないのなら、今はC言語を極める時期だと考えた方がいいんじゃないでしょうか。
一つの言語をきちんと学んでいると、新しい言語の理解も早いです。
逆にうわべだけかじっていると、新しい言語に移るたびに苦労することになります。
プログラミング言語にはいろいろ違いがありますが、
共通する問題も多いですから、一つの言語をきちんと学習していると、
そういう点で困らなくて済みます。(「それは Cの○○だよ」という説明でわかってしまいます)
また、最初に戻りますが、「不満を持ったら…」という点では、
現代の言語の大半は C言語への不満からスタートしています。
C++ は C言語にオブジェクト指向の機能を追加したものですし、
Perl などももっと手軽に実行できる言語を・・・という動機で開発されています。
そういう意味では、C言語を理解し、その問題点(みんなが不満に感じる点)を理解するのは、
他の言語を理解する際に大きな助けになります。
投稿2016/01/18 11:36
総合スコア1193
0
どのくらいで極めたことになるのでしょう
~
それとも作ろうと思ったものをCで思い通り完璧に作れるようになってからなのか。
それは裏を返すと、あなたがその言語に何を求めているかという話でしょう。
趣味のプログラムが書けるようになればいいのか、
一人前のプロとしてバリバリ稼ぎたいのか・・・。
あるいは、他人から「あの人は極めている」と認められたいのか・・・。
それによって変わってくる事柄のような気がします。
その目的を極められるレベルにまでなることがイコールその人にとって、
その言語を極めたということじゃないでしょうか。
私の回答では「極める」という言葉を
「自分が納得できるまでやってみなさい」程度の意味で言っています。
普通は、「極める」前に、その言語に不満がでてくるなり、
業務その他の必要に迫られたりして他の言語に移ることも多いと思います。
「その言語では物足りなくなること」も一つの指標かもしれません。
Cは古い言語ですので、そのうちに必ず他の言語に目移りすることは
目に見えています。
今、「Cをやめてこの言語がやりたい」という動機が発生しないのは、
プログラミングや自分のやりたいことについての理解がそこまで
達していないせいでしょう。
であれば、そういう判断ができるようになるまで現在ある程度理解が進んでいる
C言語で、その二つについての理解を深めたらどうかという話です。
最後に、もしkozushiさんがCを学習したことがあり、かつCの後に別の言語を学習し有利になった点などあればそれも教えてほしいです。
C言語は今の大多数の言語のひな形になった言語なので、
たいていの言語に移行するのに違和感がないです。
あと、実は極めるのが比較的容易な言語でもあります。
「バイブル」と呼ばれている言語開発者が書いた「プログラミング言語~」
という本の厚さを比べてみてください。
K&R(C言語のバイブル本)はびっくりするほど薄いです。
それでいて、プログラミングに必要な基本的な事柄はだいたい網羅されています。
つまり、Java学習者がリスト型の違いを理解するのに四苦八苦しているころには、
自分でツールが作れるようになっているということです。
つまり、C言語ではプログラミングについて広く薄く短い時間で学べます。
あと、Cは比較的低水準(コンピュータの生の動作に記述が近い)の言語なので、
コンピュータ自体の動作への理解が深まるということです。
最近の言語から入った人は、メモリがどのように確保され使用されるかということについて
明確なイメージは持ちにくいでしょう。
速度面でもメモリの面でも効率のいいプログラムを組もうとしたとき、そういうイメージは必要になってきます。
投稿2016/01/18 14:41
総合スコア1193
0
オブジェクト指向を学びたいなら、Javaが良いかと思います。
書籍が出そろっていますので、学習しやすいかと。
手っ取り早くスキルアップするなら、今やっている言語となるべく遠いものを選ぶというのも一つの戦略です。
たとえば、LispやSchemeなどの関数型言語を触ってみると、これまでCで培ってきた常識が通用しないので、大変苦労します。でもSchemeを習うとプログラミング全般の筋が良くなるといわれています。
私は飽き性なので節操なく色々手を出してましたが、そのおかげで知識面では色んな言語の良いとこどりができていると思います。結局、仕事で使ってるのはVBAですけどね。
まあ、入門レベルの書籍なら、1週間程度で終わりますし、どれと決めずに色々やってみてはいかがでしょうか。
取り急ぎ次の…ということなら、今一番気になっている言語。
つまりC++を、さっさと始めてしまうのが良いと思います。
ひとつ後悔してるのは、技術書を毎回新品で買ってたことです。Amazonの中古で送料込みでも数百円で色々売ってますし、ブックオフで買う手もありました。時間はたっぷりあってもお金が苦しいかと思うので、安い本で色々試してみると良いです。
投稿2016/01/18 12:47
総合スコア686
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/18 12:57
2016/01/18 13:06
2016/01/19 00:32
0
C言語をほぼマスターしたのならC++が取っ付き易いですが、オブジェクト指向でつまずく人が多いのも事実です。一応C++で書いてはあるけど、C言語の記述になっていてクラスの作り方も単なる関数の集まりみたいで全然オブジェクト指向になってない書き方しかできない人もいます。こういう人はオブジェクトがイメージ出来ないんだと思います。
オブジェクト指向は習得して損なことはありません。ぜひ身につけるべきと思います。プログラミングというより、物事の考え方にも役に立ちます。そういう意味では、C++だとC言語の癖を引きずってしまう可能性があるので、Javaでオブジェクト指向を身につけたほうがいいかもしれません。JavaはC/C++に近い言語ですから、とっつきやすいと思います。
投稿2016/01/19 09:41
総合スコア3579
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/19 10:18
2016/01/19 14:20
2016/01/19 23:40
0
みなさん各言語にそれぞれの思いがあるようで見ていて楽しいです。
僕は、2番めの言語はどれでも良いと思います。というのも多分ここに書かれている方で、書いた経験がある言語が5つを下る人はいなくて、10個以上はすぐに出てくるのでは無いでしょうか?
確かに最初に憶えた言語と似た言語は憶えてもしょうが無いでしょうけれど、そういう言語は得てして学習コストが低い(習得にかかる時間が短い)ので、損する時間が少ないです。また、LISPが代表格でしょうけれども、あまりに違う言語の場合、学ぶべきことが多く学習コスト高く付きます。また、挫折する可能性も高まります。
学ぶべき言語についての話は度々上がってきますが、”無人島に持っていく10冊の本”的に盛り上がる話題です。nisukoさんがこの話題に参加出来る日を楽しみにしています。
LL言語から手をつけるのに並行して、低レベル(=深いレベル)の言語や関数言語について学ぶことをおすすめします。
投稿2016/01/18 17:49
総合スコア2883
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/19 00:30
2016/01/19 03:29
2016/01/19 04:49
2016/01/19 07:04
2016/01/19 10:20
0
こんにちは。
僕はC言語を学生時代に勉強し、会社に入ってからjavaを勉強しました。
学生自体にHTMLやPHP、CSS等もやりましたが。
C言語をやられたのであれば、おそらくjavaも手を付けやすいと思います。
書き振りが似ているところが多いですからね。
C言語が中途半端であると、おっしゃっていますが、
pointerやmallocまで学習できているのでしたら、javaも難なくいけることでしょう。
是非、java仲間になりませう!
あ、余談ですが、
HTMLやjavascriptなんかを覚えておくと、
ホームページを作りたくなります。
そのうちPHPで動的ページも作りたくなって、
データベースを絡めようとしてSQLを覚えたりもします。
WEBページのデザイン面に興味が出てきたら、
上記組み合わせでお試しあれ!
投稿2016/01/18 12:09
総合スコア94
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/18 12:23
2016/01/18 15:53
2016/01/19 00:04
0
予備知識として広い知識を得るのであればJavaを学ぶ事をお勧めします。
理由は下記です。
・書籍やネット情報も豊富
・Javaを使ったオブェクト指向の実践方法が安定している。
また、予備知識だけではもったいないので実践もしてみてはどうでしょうか。
・C言語:マイコンボードで遊ぶ。
・Java:Androidでアプリを作る。(厳密にはJavaではないんですけどね。)、または、Javaを使ったGUIアプリを作る。
投稿2016/01/18 11:47
総合スコア18155
0
すみません。なぜか二重に送信されてしまったので、こちらは削除します。
投稿2016/01/18 13:52
編集2016/01/18 13:54総合スコア5938
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。