質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

11回答

1716閲覧

C言語を学習するか他の言語を学習するか

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

2グッド

2クリップ

投稿2020/04/01 17:27

編集2020/04/05 12:26

現在大学生で、IoT、自動運転に興味があり2か月ほど前からプログラミングの勉強を始めた初心者です。
人気があり学習環境が整っているという事からJavaを学習しています。
オブジェクト指向がある程度理解でき、簡単なAPIを使えるようになってきたので、プログラミングの基本を押さえられるというC言語をJavaの次に勉強しようと思っていました。
しかし、いろいろ調べてみたところC言語を扱っている方々には申し訳ないのですが、COBOLのように化石になるとか需要が無くなってきているとか言われていてあまりいいイメージがありません。
過去の質問でもC言語を勉強すれば基本を押さえられるという回答がけっこうあるのですが、5,6年前のものが多く情報が古い気がしました。

現在でも基本を押さえるならC言語を勉強するべきでしょうか。
それとも他におすすめの言語があれば教えていただきたいです。

本来このような質問は大学の学生課や教授に質問するべきだとは思うのですが、コロナの影響で学校にも入れない状態になっていて質問ができないためこの場を借りて質問しました。

よろしくお願いします。

######追記
回答してくれた皆さんありがとうございました。
色々悩んだ末、一旦Javaから離れてC言語の勉強をすることに決めました。
行く行くは様々な言語を身に付けたいと考えているので、C言語を学習してコンピュータの基礎理解を深めようと思います。

miyabi_pudding, DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答11

0

ベストアンサー

現代でも主要な OS (Windows, Linux, BSD, そして Linux を基盤とする Android も) のコアは大部分が C か C++ で書かれています。 C はしばしば高級アセンブラと揶揄されることがあります。 その程度に低レイヤのものである、ハードウェアの理屈が透けて見えるような言語だということです。

プログラミングの基礎というよりは更にその基礎であるハードウェアに対する理解を深めるという意味では C はとても有用です。

正直言ってそういった場面で使われる C には代わりになるような言語は現時点ではありません。 各場面において適切な様々な言語が登場しているので全体としてはどうしても C でなければならないような場面は減っているのは間違いありませんが、低レイヤでのプログラミングで C が消え去ることは私には想像できません。 将来的には Rust などが C の牙城を更に削っていくとは思いますが……。

そういうわけで、もちろん目的によっては (たとえばウェブ系) C を全く使わないということは有り得ることですけども、 IoT を指向するなら C を避けられるとは思わないです。

投稿2020/04/01 18:26

SaitoAtsushi

総合スコア5448

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/02 12:29

SaitoAtsushiさん 回答ありがとうございます。 主要なOSがC言語で書かれているということで少し驚いています。 使われる場面は少なくなっているけどまだまだ現役なんですね。 とても参考になりました。
guest

0

C言語は古いです。1970年代あたりの開発。多少手は入っていますが、極端には変化していません。Cぐらいしか実用になる言語がなかったので使われた時代を経ているので、大きくは変化出来ない、という状況と言えるかも知れません。そうすると、70年代のプアなコンピュータ事情を今に伝えています。コンピュータの能力が低かったので、原則として人間側がなんでも面倒を見てやらなきゃいけなかった。そりゃ、コンピュータが何をしているか見通せないとプログラムが出来ないという「修行」向けの言語にもなるでしょう。コンピュータを扱う上で知っていおいたほうがよい知識を否応なく学ばされます。
コンピュータと深く付き合うなら、「やっておいて損はない」と言えるでしょう。

ただし、コンピュータ側の能力が上がってくると「Cしか実用的でないからCを使っていた」という領域がどんどん他の言語に侵食されていきます。「コンピュータを使うこと」が目的ではなく、他に解きたい問題があって、コンピュータは単なる道具なのですから「余計な心配」をせずに使えたほうがいいに決まっています。そういう領域でコンピュータを使いたいのなら、Cを知ることは「損はないけど必須でもない。知っていても直接使う場面はない」ということになってしまうでしょう。

もちろん、「Cしか実用的でない」という領域も少なからずあるのでコンピュータの応用領域のどこに関わるかによって話は変わってきます。
IoTで言えば、エッジより先っちょ?センサー側は、プアなマイコンが大活躍です。こちら側に関わるのなら、やっばり「Cしか実用的でない」場合が多いですからCは必須でしょう。一方、IoTでもエッジよりホスト側は必ずしもCを必要とはしない世界でしょう。(エッジは境界領域ですかね。状況によりいろいろ)

さらには、コンピュータの応用領域が広がって、自動運転だとかAIだとかそういう領域になってくると、コンピュータが頑張って(Cより)抽象的な概念を処理する言語でないと非効率ということにもなってくるでしょう。同じ動作をCで再現出来るか出来ないかという話ではなく、人間がプログラムを書いてある概念を実現するのに、Cのように「コンピュータべったりの動作を人間が指示してやる」では非効率になってくる、ということです。それでも、コンピュータを扱う以上Cを学んでおくことにデメリットはないでしょうが...

投稿2020/04/02 00:04

thkana

総合スコア7643

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2020/04/02 11:55

> コンピュータを扱う以上Cを学んでおくことにデメリットはないでしょうが... そこに時間を割く価値があるかどうか? ハードウェアとの界面を中心に考えるならありですが、 > 自動運転だとかAIだとかそういう領域になってくると、 この辺、メインと考えると、別のところに時間を割くべきじゃないかと。
thkana

2020/04/02 12:19

といい切れるほどにまだコンピュータは仕上がって?ないとも思うんですよね。ひょこひょこと「使いこなし」が顔を出して、そのときにはCをやっていたことが役に立つような。まぁ、「気がする」レベルですけれど。
退会済みユーザー

退会済みユーザー

2020/04/02 14:57

thkanaさん 回答ありがとうございます。 コンピュータの能力が上昇するにつれてC言語が使われなくなってきたんですね。 IoTならセンサー側などのマイコンにC言語が使われているためまだ需要があるが、自動運転とかになってくるとC言語を勉強するメリットがあまりなくなってくると、、 C言語は学習するのが大変そうなので、もっと慎重に勉強する言語を選んだ方がいいですね。
guest

0

過去の質問でもC言語を勉強すれば基本を押さえられるという回答がけっこうあるのですが、5,6年前のものが多く情報が古い気がしました。

5,6年前と現在を比較しても、C言語の立ち位置はほぼ変わっていません。
現在でも低レイヤに特化した言語としては、最も普及しています。
選択肢としては、Rust や Go などもありますが、C言語の方が初心者にとって学びやすいと思います。

それとも他におすすめの言語があれば教えていただきたいです。

IoT、自動運転の分野に興味があるということなので、そちらの分野で使われている言語を学習するのはどうでしょうか。

C言語を学習するのも悪いことではないと思いますが、モチベーションが上がらない状態で学習しても続かないような気がします。

投稿2020/04/01 21:20

nskydiving

総合スコア6500

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/02 14:25 編集

nskydivingさん 回答ありがとうございます。 Goにも少し興味があったのですが、やはりC言語から基本を学ぶのが良さそうですね。 Pytonにも興味があるのでそちらも考えてみます。
guest

0

COBOL にせよ C にせよ、需要がなくなることはまずありません。それまでに築き上げてきた膨大な資産とノウハウが、失われることを許さないからです。

特に C は、非常にハードウェアに密着したプログラムもかける高級言語として、新しいハードウェアに対して真っ先に開発環境が整えられる言語でもあります。(というか、環境を整えるためのブートストラップとして必要)
つまりは C がなくなるなんてことはあり得ないといってもいいのです。
※一般的なソフトウェア開発に使用されるかどうか、という意味では別かも知れませんが

基礎教養として C を覚えておくのは有益かと思います。

投稿2020/04/02 00:07

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/02 14:35

tacsheavenさん 回答ありがとうございます。 人気の無くなった言語はいつかは使う人もいなくなり需要が無くなってしまうだろうと考えていたのですが、需要がなくなることは無いんですね。 とても勉強になります。
guest

0

C言語による開発から離れて15年程経ちますが、実感として他のプログラム言語を使用していてもCで得られたスキルは今でも活きています。
習得して損のない言語だと思います。

投稿2020/04/01 23:09

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/02 12:36

DreamTheaterさん 回答ありがとうございます。 15年ですか。。 C言語を学ぶことで他の言語にも通ずる何かを得ることができるんですね。
guest

0

C言語の立ち位置というのは他の回答のとおりですが、意欲と根気があるなら、時間のある学生のうちにC言語を学んでおくのは無駄にはならないと思います。

必要になってから学び始めて、難しくて心が折れる、というのが悲惨なので。

投稿2020/04/01 21:50

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/02 12:34

gentaroさん 回答ありがとうございます。 勉強する時間が潤沢にあるうちに学んでおいたほうが良さそうですね。 社会人になってから挫折したら立ち直れなさそうです。
guest

0

言語でなく、 コンピューターサイエンスを勉強することを検討してみてください。
大学の教科書 としては pythone を使ったものがいくつかあります。

世界標準MIT教科書 Python言語によるプログラミングイントロダクション 第2版:データサイエンスとアプリケーション

Pythonによるプログラミング入門 東京大学教養学部テキスト: アルゴリズムと情報科学の基礎を学ぶ

アルゴリズムとプログラミング (放送大学教材)

投稿2020/04/01 23:07

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/02 12:35

katoyさん 回答ありがとうございます。 コンピューターサイエンスについて軽く調べてみたのですが、プログラミング言語はコンピューターサイエンスの一部なんですね。 他にもアルゴリズムや人工知能があったり、、 以前にソートアルゴリズムを勉強したときにアルゴリズムも意外と面白いなと思っていたので考えてみます。 また、本の紹介ありがとうございます。
guest

0

IoT、自動運転に興味がおありとのことですが、Windowsのカーネルモードで動作しているドライバなんかは大体Cで書いてあったりします(ディスクドライブとかグラフィック周りなんかは違うかもしれませんが)

皆さん回答でもたくさん述べられていますが、ハードウェアと密接に関連している部分はまだまだCが現役です。(ハードウェアとアプリケーションの橋渡しをするだけの部分だったりするので、そんなに難しいことをする必要がないのかもしれませんね)

投稿2020/04/02 02:44

shin1845

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2020/04/02 11:52

> ハードウェアと密接に関連している部分はまだまだCが現役です。 とは思いますが、実際のIOTの現場の仕事ってどれだけ、Cが必要かは疑問。一度、作ると触る必要がないので、一部の方がメンテするだけで十分だったりします。
shin1845

2020/04/02 15:03

開発部門なので現場については詳しく知りませんが、少なくとも開発では一部のメンテナンス要員として食いっぱぐれがないので、それだけでも人並みにCが書けることは有用かと思います…(うちの会社だけですかね…?)
退会済みユーザー

退会済みユーザー

2020/04/02 15:04

shin1845さん C言語がどのような分野で活躍しているか分かりやすい具体例をあげていただきありがとうございます。 とても参考になります。
pepperleaf

2020/04/03 12:13

shin1845 さん、 今やってる産業用機器だと、組み込みボードメーカ提供のライブラリ使ってます。改めて見たら、Cのサポートは無かった。C#, C++, VB...でした。Cサポートは必要ないってことなのかと。 まあ、どのレベルで対応するかにも依りますが。
guest

0

どういった情報で、C言語がレガシーまたは廃れるという風にお考えでしょうか。様々な情報はあるとは思いますが、一概にはそうは言えません。
例えば、
https://www.tiobe.com/tiobe-index/
上記のサイトですとjavaに続きC言語は2位となります。
また、推移は
https://www.tiobe.com/tiobe-index/c/
なかんじです。

作りたいものに倣って好きなものを勉強してください。
まずは、どこをせめるか、何を作りたいかが最も重要だと思います。

IoT、自動運転といっても様々なものがありますよね。
自動運転で目の役割を作るのであれば、OpenCVなどC++が必要そうです。
また、IoTで底層のセンサーなどであれば、Cまたはアセンブリ言語などが必要でしょう。

今は、1つの知識のみではIoTまたは自動運転の技術者としては役不足です。
メカトロニクスの分野となるでしょう。

ライントレーサーでもなんでもいいから作りたいものを作るうえで必要なものを勉強してください。

投稿2020/04/02 01:41

編集2020/04/02 02:20
kgreenjp

総合スコア97

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kgreenjp

2020/04/02 02:21

ご指摘ありがとうございます。 修正させて頂きました。
退会済みユーザー

退会済みユーザー

2020/04/02 14:15

kgreenjpさん 回答ありがとうございます。 いろいろ調べていたところC言語はまだ需要は高いものの徐々に需要が減ってきているという説明が多かったのと、 C言語は今活躍しているプログラミング言語の中でもかなり古いほうで最近はGoなどの新しい言語やPythonのような機械学習に向いている言語の人気が出始めているのでそろそろ世代交代のようなことが起こるのでは無いかと考えたからです。 しかし、実際はそうでもないことが今回質問して分かりました。 kgreenjpさんが示してくれたURLも確認しました。 アドバイスありがとうございます。 今までは漠然とした目標だったのでもう少し具体的な目標を決めて勉強しようと思います。
guest

0

しかし、いろいろ調べてみたところC言語を扱っている方々には申し訳ないのですが、COBOLのように化石になるとか需要が無くなってきているとか言われていてあまりいいイメージがありません。

まだ組み込み系ではC言語の需要は高いですよ。最近はオブジェクト指向型言語であるC++の需要が高まってきましたが、C++を理解するには確実にCの知識が要ります。IoT、自動運転に興味があるなら避けては通れない道となっております。

オブジェクト指向がある程度理解でき、簡単なAPIを使えるようになってきたので、プログラミングの基本を押さえられるというC言語をJavaの次に勉強しようと思っていました。

それでいいと思います。C言語はポインターまで理解すればいいと言われております。他の言語で出てくる様々な専門用語に苦戦することなくすんなり頭の中に入ってくるようにもなります。
その後はJavaなりC++なりPythonなり好きな言語を学ぶといいでしょう。

コロナの影響で学校に行けず、ストレスが溜まるのは分かりますが、これからも頑張って下さい。

投稿2020/04/02 00:54

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/02 14:34

stdioさん 回答ありがとうございます。 やはりC言語はまだまだ需要が高いんですね。 よくあるプログラミング言語のランキングを載せているサイトは胡散臭くて信用してなかったのですが、割とあってるのかもしれないですね。 過去の質問でもポインターまでは理解したほうがいいというのをよく見かけたので、C言語を始めるならとりあえずそこを目標に勉強してみようと思います。 ありがとうございます。 部活もできずかなりストレスが溜まってます。
stdio

2020/04/06 02:20

私はプログラマーとして働いているが、その手のサイトからはプログラムを全く知らない人の意見まで色濃く反映されてしまっているので、胡散臭いより腐敗臭がする。
guest

0

IoT、自動運転に興味があり2か月ほど前からプログラミングの勉強を始めた初心者です。

IoTや自動運転に関する内容で、どのレベルの作業に興味があるか次第だと思います。

ある程度開発環境が揃っている上、周辺機器へのアクセスを低レベル(CPUの何番ピンにどのセンサがつながっているか、といったハードウェアに近いレベル)で行う必要はなく全てAPIがカバーしてくれるような内容であれば、C言語は必ずしも必須ではないですし、もっと環境が整った言語でいいと思います。

逆に、CPUモジュールとセンサを自分で組み合わせて何かを開発したい、ということであればC言語の知識は必要だとおもいます。最近は Python もよく使われてきていますが、やはりまだC言語の方がよく使われている印象はあります(趣味レベルだと以外にScratchも多いですが)。

現在でも基本を押さえるならC言語を勉強するべきでしょうか。

基本を抑えたいのであれば、むしろ Java を徹底的にマスターすべきだと思います。

中途半端な知識のまま他言語を学ぶよりも、ます Java で不自由なくプログラムをかける程度まで頑張って、それでも足りなければ C 言語なり他の言語をやってみるというのがいいのではないでしょうか。

そもそも、JavaはIoTという言葉すらなかった時代に、組み込み向けの言語として開発された経緯もありますし、C 言語にはないオブジェクト指向という要素もあり、これは現在メジャーといわれているような言語にはほぼ備わっている考え方ですから、理解を深めておいて損はないと思います。

投稿2020/04/01 23:52

TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/02 12:38

TsukubaDepotさん 回答ありがとうございます。 IoTや自動運転といっても何を開発するかで使う言語は変わってきますよね。 もっと詳しく調べて自分がどのような開発がしたいのかを探そうと思います。 自分も他の言語に手を出すのはまだ早いのではないかと内心考えていました。 JavaはAPIがいろいろ使えるようになってきていて楽しくなっているので、ここでC言語の勉強を始めて挫折して、プログラミング自体のモチベーションが下がるというのが怖いです。
TsukubaDepot

2020/04/02 12:41

逆に、いまJavaが楽しくて仕方がないというのであれば、Javaを一通りやり尽くした方がいいと思います。 幸いにも、自分が好きなだけ言語に没頭できる時間ができたわけなので、この機会を使って集中的にやってみてはいかがでしょうか。 たしかに、Cはポインタやメモリ管理など考えなければいけないことがたくさんあるのも事実ですが、なにか一つの言語を達成していれば、新しく覚えることはそれほど多くないと思います。
退会済みユーザー

退会済みユーザー

2020/04/02 13:05

中途半端なまま他の言語を学習して、その言語も中途半端に終わってしまう可能性があるなら、1つずつしっかりと潰していった方がいいですよね。 ただ、大学では機械系を専攻していて、C言語を使う機会も割と多そうなのでどちらも並行で進めて行きたいという気持ちもあります。
TsukubaDepot

2020/04/02 13:08

なるほど。そういう背景もあるんですね。 ただ、質問者さんが4年間で習うカリキュラムの内容や、質問者さんの学年にもよるでしょうから、いつCをやった方がいいのかは何とも言えないですね。 ちょっとさっきの発言とは路線が異なりますが、もしどうしてもやりたい、というのであれば並列でやってしまうのもアリかもしれません。 寝ても覚めてもプログラムのことを考えたい、というくらいやる気があれば、それも現実的だと思います。
退会済みユーザー

退会済みユーザー

2020/04/02 13:28

もっと自分の背景も質問で書くべきでしたね。すみません。 夢の中でもですか、、今のモチベーションならできそうですが、学校が始まったら難しい気がします。 大人しくJavaに絞ったほうがいいかもしれませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問