お世話になります。
プログラミングの勉強を始めて、数か月です。
PHPはさらっと一通り勉強して、
次はC系の何かを勉強したいと思っています。
現在、社会的な需要は何が一番ありますでしょうか。
とりあえずC#でストアアプリを作りながら、VisualStudioを使用し勉強していますが、
C系を学び始めるなら、C#、C++、Cなどなど何から始めるのが良いでしょうか。
アンチの方も、ご意見いただけると助かります。
また、他に望ましいorおすすめの言語があれば、
簡単な理由と何の言語かを教えていただけると助かります。
宜しくお願い致します。
追記
C押しが多いみたいです
実際にCやっててよかった(^^♪★
って思った経験などあればご教示いただけると嬉しいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答11件
0
CがつくからC系というのはちょっと誤解があります。
プログラミング言語の関係図について、下記のサイトが参考になるかと思います。
http://www.levenez.com/lang/
http://exploringdata.github.io/vis/programming-languages-influence-network/
以下、私見が混じっていますが、C系といわれる各言語の特徴です。
C
BCPL→B→Cの流れを組んだ初めて実用的な高級言語です。高級言語といいますが、アセンブリより高級なだけで、メモリなどは自分で管理する必要があります。この頃にはオブジェクト指向やガベージコレクションなどの最近の言語にあるようなものはありません。逆に言うと、アセンブリに近いレベルで実用的なプログラミングができる言語と言えます。言語仕様が単純であり、機能も少ないため、言語自体の学習コストは低いです。ただ、いざ実装する段階でポインタやメモリ管理等をきちんと理解していないと、動くコードは書けません。
C++
Cにオブジェクト指向とか、テンプレートとか、スマートポインタとか、型推論とかとりあえず何でも突っ込んだ言語です。ポインタや配列、メモリの管理方法などはCを基礎にして発展していますので、Cが使えない人は、C++を使いこなすことはできません。Cの知識が前提であり、追加の機能も豊富ですので、学習コストは高いです。私は未だに全ての機能を使いこなす自信はありません。なお、C++でのオブジェクト指向におけるクラスは構造体の拡張でできあがっています。
Java
C++からオブジェクト指向の部分だけ抜き出したような言語です。ガベージコレクションを採用し、Cのように直接メモリ管理する必要はありません。オブジェクト指向に特化しているため、オブジェクト指向としてプログラミングする場合は使いやすくなっています。Cの知識はいりませんが、C++を知っている人からすると、機能が少なくて不満になります。オブジェクト指向さえわかれば学習コストは低いです。C++系オブジェクト指向の入門としてお勧めです。
C#
DelphiをC++風にして、MSが考える最強のJavaを実現した言語です。C++の後継のような顔をしてますが、先祖はDelphiです。ですので、かつて一世を風靡したDelphiのように使いやすいのが売りになっています。Javaよりも最新の流行を取り入れており、LINQやデリゲートなど機能が豊富です。アンセーフコードではメモリ管理までできます。機能を全部覚えようとするといつの間にかC++並の学習コストがかかりますが、基礎部分だけであれば、Java並です。私はアンセーフの部分はあえて学習していません。
D
自称Cの後継です(Cの由来はBCPLであり、Bの次がCだったから、Cの次はPじゃないかって反論があります)。目指しているところはC++と被っています。被りすぎていて、Dで採用された機能が、いつの間にかC++でも採用されて、どんどんいらない子になっている気がします(私の偏見です)。実はあまりよく知らないんですけど、C++やってたら、そのうちDもできるような気がします。
Objective-C
CにSmalltalk風のオブジェクト指向を付け加えた言語です。Cを知らなくても追加構文の部分だけできるらしいですが、Cができることが前提です。C++も使えるObjective-C++というのもあります。AppleがSwiftへシフトしたので、今から覚える必要はありません。忘れてください。
Perl
文の終わりに;
や{}
でブロックを考えると、たぶんC系です。Cをシェルスクリプトみたいにしたら、たぶんPerlになるんだと思います。でも、Perlをやるぐらいなら、PythonかRubyを学んでください。Perl6の能力は未知数です。
JavaScript
C系だと思います。Cに、Selfのプロトタイプベースオブジェクト指向と、Schemeの関数型を足したらJavaScriptになるんだと思います。名前の由来であるJavaは全く関係ありません。これからの時代、Web関係では必須でしょうが、実際書くとなるとなんらかのAltJSになると思います。
オススメコースは
- Cの基礎を学ぶ(ポインタとmallocの使い方が理解できるようになればOK)。
- Javaでオブジェクト指向を学ぶ。
- C++をがっつりする。
- 関数型言語(F#やHaskellとか)を何か一つ学ぶ。
- そして、C#をするとなぜかするする理解できる!
がいいんでないでしょうか。
なお、Web系ではJavaScriptは必須なので、別途勉強しておくように!
投稿2015/09/02 14:48
編集2015/09/02 14:53総合スコア21737
0
C#というと、今はIDEなども提供されていて、Windows以外でも使えますが、やはりWindows専用というイメージが根強く、実際にWindows以外で使ってる人は多くはないと思います。
「現在においても未来においても、私はWindowsユーザーだ」という場合はC#でいいと思います。
ですが、今Windowsユーザーではない、あるいはこの先Windowsユーザーでなくなるは予定があるなら、CやC++の方が使う機会があるのでは、と思います。
上記で書いた様に、Windows以外でもC#は使えるので、C#を勉強したからといって無駄になるというわけではありません。
どちらにしろ、他の方が仰ってるように、Cは比較的古い言語で、多くのシステムや後発言語に多大な影響を与えてきた、基本的な言語の一つです。難解ですが、それでも勉強する価値は十二分にあると思います。
私は票を投じるとしたらCです。
投稿2015/09/02 13:18
総合スコア1156
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
社会的な需要で言ったらC言語は組み込み系で使われているので強いです。
プログラミング言語でよく使われているランキングをだしているTIOBE Indexによると、C言語は2位です。
が、C言語はメモリ管理など色々知らないといけない事があり大変です。C#を続けられて学んでからでも遅くないですよ。
投稿2015/09/02 07:50
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/07 09:59 編集
退会済みユーザー
2015/09/07 17:34
2015/09/09 03:54
0
プログラミング言語(学ぶ対象)の観点からは既に様々な観点からご回答頂いているので、ちょっと別の観点(学ぶ側、つまりプログラマー自身)の観点から少し。
要するに色々なアプローチの仕方があり、結局は b1ackc0ffeeさんご自身が何をしたいか、どの様な方向に進みたいかがより具体的になって行くと、選択肢は自ずと徐々に絞られて来るものだと思います。
ですから
とりあえずC#でストアアプリを作りながら…
という事であれば、当面はC#に取り組んでみるというのは、決して無計画なのではなくて、むしろ現実的なアプローチであると思います。
なぜそう言えるかと言えば…
IT関連の知識や技術は余りにも幅広くかつ奥深いので、しかも常に変化(進化?)しているので、一人で全てを極めることは一生掛かっても不可能です。
そこで重要になって来るのが課題解決能力です。どんなに優れたプログラマーやSEだって、いいえむしろ優秀な技術者ほど、日々困難な課題に直面し、都度悩み、調べ、考え、そして乗り越えてまた一回り成長して行きます。直面するかもしれないあらゆる課題に事前に備える事は無理なので、何とか解決する能力が重要な訳です。
その為に役立つのがT
字型の学習法であると一般に良く言われています。つまり、仮に浅くても良いので出来るだけ幅広い知識を貪欲に取り入れる事と、一つで良いので武器となる得意分野を持つ事を目指す学習方法です。(最近ではπ
字型でないと太刀打ちできないという人もいますが…)
そのように考えれば、次はコレでその次はアレ、というように決めつける必要性は必ずしもなく、ちょうど螺旋階段を登るように、C系(系とグループ化するからには類似点が少なからずあるはず)を大まかに眺めながらとりあえず一つに取り組み、必要に応じて行きつ戻りつしながら得意分野を見つけて掘り下げて行けば良いのです。
そして興味深い事に、得意分野というのは自分の好みで主体的に選ぶというよりも、必要に迫られて使っているうちに大きな課題に直面し、大きな壁を苦労して乗り越えたとう経験を通して、知識やスキルや自信を獲得する事によって結果的に得意分野になるという場合が多いようです。
以上、幾らかでもご参考になれば何よりです。
投稿2015/09/03 13:34
総合スコア5936
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/08 05:57
2015/09/08 05:57
2015/09/08 13:05
2015/09/09 03:50
2015/09/09 06:58
2015/09/09 07:11
0
昔と比べて選択肢が多くていいなあと思う反面、何から手を付けていいか、という新しい悩みがあるんですね。
Cから勉強するのが本筋だという意見は私も賛成なのですが、時間は有限なので、実際に使う場面を考えて選択するのも手だと思います。またC系の言語はそれだけでは作ることができるアプリケーションが限られているので、ライブラリを覚える時間も必要になってくると思います。
今どきのWindowsのアプリケーションを作るのであればC#と.NETを覚えればたいていのことはできるので、いまさらCとSDKで作る場面は少ないでしょう(C++とMFC使って、とかはちょこちょこあったりしますが)
ただ、どんどん道を究めて行って、デバイスドライバを書くだとか、ライブラリを書くとかになってくると、いやでもC++やCを使う場面が出てくると思います。その時になって勉強しても遅くはないのではないかと思います。
投稿2015/09/02 12:23
編集2015/09/02 12:24総合スコア3041
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/07 10:14
0
C++/C#は、オブジェクト指向言語ですが、Cは手続き型なので、全然別ものです。
C++はあまり使われませんが、Cは組み込みの世界で、C#はWindowsで開発するなら最も使われている言語です。
Cは歴史が古いので、極端な話Cさえ使えれば、たいていのプラットフォームで動かすことができます。ただし後発言語に比べて機能が少ないので、プログラマーにとっては大変な手間がかかります。
それでもCは基本ともいえる言語なので、時間が許せば挑戦した方が良い言語です。
投稿2015/09/02 11:06
総合スコア1040
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/02 11:23
2015/09/07 10:02
2020/07/06 02:10
0
たしかに、あれやこれや沢山選択肢があると悩みますよね。
気持ちわかります。
私は組み込みの現場での経験が多かったので、C言語案件からスタートでしたが、WindowsならC#の案件が多いですよ。
Javaですと、技術的にすでに枯れ切っている安心の「SAStruts」なども選択肢に上がっています。
※枯れ切っているとは今後修正変更の可能性が無い、完成されているプロジェクトのことです。
枯れ切っている技術で実績があるなら安心して使うことが出来ます。
C#やJava、Perlやrubyについては、皆さんが詳しく書き込んでくださっているので、私は少し違ったアプローチで面白いと思う言語を紹介しようと思います。
私がおすすめするのは
「Common Lisp」
です。
現存するプログラミング言語の中でも最古の部類に含まれるプログラミング言語なのですが、
・オブジェクト指向
・ガベージコレクション
・関数プログラミング
・無名関数
・ジェネリック
・マクロ(これに関しては他のどんなプログラミング言語のマクロよりも強力)
・自己改造(マクロにより独自のCommonLisp言語を構築可能)
...etc
などなど、現在のプログラミング言語が「新機能」とうたっている機能を何十年も前に実現し実装しているのです。
※当時の非力なマシンでは使えるレベルではなかったそうですが
世界に名だたるプログラマーのあいだでまことしやかに囁かれる噂があるそうです
「Lispを会得すると何かを悟れるらしい」
「プログラミング言語最強はLispらしい」
「仕事で使わなくてもLispは勉強しといたほうがいいらしい」
などなど、よくある(*´∀`)アハハン♪と笑みが溢れる話が話題に上がるような言語です。
Google検索で「ポール・グレアム」と検索すると興味のある記事が出てくるかもしれません。
私は出版業者の回し者ではありませんが、「Land of Lisp」はとてもよいCommonLispの教科書です。
投稿2015/09/03 04:44
編集2015/09/03 04:46総合スコア135
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/07 10:30
2015/09/09 01:30
2015/09/09 03:24
2015/09/09 03:32 編集
2015/09/09 03:35 編集
2015/09/09 03:38
2015/09/09 03:43
0
C言語,C#の経験者です。結論から申し上げますと、「プログラミングで何を作りたいか」によります。
この二つでなら、応用が利く・組み込み制御や他言語にも手を出したいならC言語、とっつきやすいのはC#だと個人的には思います。
C#がとっつきやすいと述べた一番の理由はメモリの管理が不要なことです。C#では不要になったメモリは勝手に開放する機能がありますが、C言語にはそれが無いため明示的にメモリを開放する必要があります。私がエンジニアとして仕事をしてきた中で一番多く、重大な不具合の原因はメモリの開放漏れでした。また、オブジェクト指向の概念も身につく為、他のオブジェクト指向の言語(Rubyなど)を学習する際に「オブジェクト指向って何ぞや」と困ることもなくなります。
一方C言語はJavaなど多くの他の言語のベースになっている言語なので、C言語が出来ると他言語の読み書きがしやすくなります。また、組み込み制御はPCで使用するプログラムと違ってメモリ容量との闘いになるため、メモリ管理(必要以上のメモリ量を確保しない、必ず開放する、など)の習慣を身につける必要があります。
この二つしか経験が無いためあまり参考にはならないかもしれませんが、個人的な見解としてとらえて下さい。
投稿2020/07/06 01:46
総合スコア8
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私が高校生の時、1番最初に習った言語はC言語でした。
どこの情報系の工業高校でもたぶん最初に習うのはC言語だと思います。(大学でもC言語の勉強からします。)
理由は、一連の流れがそのままプログラムになっているので理解しやすいからだと思います。
それとC言語の後にC++やJavaを勉強していますが、Cと同じ部分が多くやりやすかったです。
私の理由は単に「学校教育がそうだから」というだけで楽観的な考え方かもしれませんが、参考になれば幸いです。
投稿2015/09/07 06:55
編集2015/09/08 08:56総合スコア100
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/03 04:06 編集
2015/09/03 04:26
2015/09/03 05:05
退会済みユーザー
2020/07/06 05:47
2020/07/06 10:06 編集
2020/07/06 12:17
2020/07/06 23:32