現在大学生で、IoT、自動運転に興味があり2か月ほど前からプログラミングの勉強を始めた初心者です。
人気があり学習環境が整っているという事からJavaを学習しています。
オブジェクト指向がある程度理解でき、簡単なAPIを使えるようになってきたので、プログラミングの基本を押さえられるというC言語をJavaの次に勉強しようと思っていました。
しかし、いろいろ調べてみたところC言語を扱っている方々には申し訳ないのですが、COBOLのように化石になるとか需要が無くなってきているとか言われていてあまりいいイメージがありません。
過去の質問でもC言語を勉強すれば基本を押さえられるという回答がけっこうあるのですが、5,6年前のものが多く情報が古い気がしました。
現在でも基本を押さえるならC言語を勉強するべきでしょうか。
それとも他におすすめの言語があれば教えていただきたいです。
本来このような質問は大学の学生課や教授に質問するべきだとは思うのですが、コロナの影響で学校にも入れない状態になっていて質問ができないためこの場を借りて質問しました。
よろしくお願いします。
######追記
回答してくれた皆さんありがとうございました。
色々悩んだ末、一旦Javaから離れてC言語の勉強をすることに決めました。
行く行くは様々な言語を身に付けたいと考えているので、C言語を学習してコンピュータの基礎理解を深めようと思います。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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
総合スコア5448
0
C言語は古いです。1970年代あたりの開発。多少手は入っていますが、極端には変化していません。Cぐらいしか実用になる言語がなかったので使われた時代を経ているので、大きくは変化出来ない、という状況と言えるかも知れません。そうすると、70年代のプアなコンピュータ事情を今に伝えています。コンピュータの能力が低かったので、原則として人間側がなんでも面倒を見てやらなきゃいけなかった。そりゃ、コンピュータが何をしているか見通せないとプログラムが出来ないという「修行」向けの言語にもなるでしょう。コンピュータを扱う上で知っていおいたほうがよい知識を否応なく学ばされます。
コンピュータと深く付き合うなら、「やっておいて損はない」と言えるでしょう。
ただし、コンピュータ側の能力が上がってくると「Cしか実用的でないからCを使っていた」という領域がどんどん他の言語に侵食されていきます。「コンピュータを使うこと」が目的ではなく、他に解きたい問題があって、コンピュータは単なる道具なのですから「余計な心配」をせずに使えたほうがいいに決まっています。そういう領域でコンピュータを使いたいのなら、Cを知ることは「損はないけど必須でもない。知っていても直接使う場面はない」ということになってしまうでしょう。
もちろん、「Cしか実用的でない」という領域も少なからずあるのでコンピュータの応用領域のどこに関わるかによって話は変わってきます。
IoTで言えば、エッジより先っちょ?センサー側は、プアなマイコンが大活躍です。こちら側に関わるのなら、やっばり「Cしか実用的でない」場合が多いですからCは必須でしょう。一方、IoTでもエッジよりホスト側は必ずしもCを必要とはしない世界でしょう。(エッジは境界領域ですかね。状況によりいろいろ)
さらには、コンピュータの応用領域が広がって、自動運転だとかAIだとかそういう領域になってくると、コンピュータが頑張って(Cより)抽象的な概念を処理する言語でないと非効率ということにもなってくるでしょう。同じ動作をCで再現出来るか出来ないかという話ではなく、人間がプログラムを書いてある概念を実現するのに、Cのように「コンピュータべったりの動作を人間が指示してやる」では非効率になってくる、ということです。それでも、コンピュータを扱う以上Cを学んでおくことにデメリットはないでしょうが...
投稿2020/04/02 00:04
総合スコア7643
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/02 12:19
退会済みユーザー
2020/04/02 14:57
0
過去の質問でもC言語を勉強すれば基本を押さえられるという回答がけっこうあるのですが、5,6年前のものが多く情報が古い気がしました。
5,6年前と現在を比較しても、C言語の立ち位置はほぼ変わっていません。
現在でも低レイヤに特化した言語としては、最も普及しています。
選択肢としては、Rust や Go などもありますが、C言語の方が初心者にとって学びやすいと思います。
それとも他におすすめの言語があれば教えていただきたいです。
IoT、自動運転の分野に興味があるということなので、そちらの分野で使われている言語を学習するのはどうでしょうか。
C言語を学習するのも悪いことではないと思いますが、モチベーションが上がらない状態で学習しても続かないような気がします。
投稿2020/04/01 21:20
総合スコア6500
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/02 14:25 編集
0
COBOL にせよ C にせよ、需要がなくなることはまずありません。それまでに築き上げてきた膨大な資産とノウハウが、失われることを許さないからです。
特に C は、非常にハードウェアに密着したプログラムもかける高級言語として、新しいハードウェアに対して真っ先に開発環境が整えられる言語でもあります。(というか、環境を整えるためのブートストラップとして必要)
つまりは C がなくなるなんてことはあり得ないといってもいいのです。
※一般的なソフトウェア開発に使用されるかどうか、という意味では別かも知れませんが
基礎教養として C を覚えておくのは有益かと思います。
投稿2020/04/02 00:07
総合スコア13703
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/02 14:35
0
C言語による開発から離れて15年程経ちますが、実感として他のプログラム言語を使用していてもCで得られたスキルは今でも活きています。
習得して損のない言語だと思います。
投稿2020/04/01 23:09
総合スコア1095
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/02 12:36
0
言語でなく、 コンピューターサイエンスを勉強することを検討してみてください。
大学の教科書 としては pythone を使ったものがいくつかあります。
世界標準MIT教科書 Python言語によるプログラミングイントロダクション 第2版:データサイエンスとアプリケーション
Pythonによるプログラミング入門 東京大学教養学部テキスト: アルゴリズムと情報科学の基礎を学ぶ
アルゴリズムとプログラミング (放送大学教材)
投稿2020/04/01 23:07
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/02 12:35
0
IoT、自動運転に興味がおありとのことですが、Windowsのカーネルモードで動作しているドライバなんかは大体Cで書いてあったりします(ディスクドライブとかグラフィック周りなんかは違うかもしれませんが)
皆さん回答でもたくさん述べられていますが、ハードウェアと密接に関連している部分はまだまだCが現役です。(ハードウェアとアプリケーションの橋渡しをするだけの部分だったりするので、そんなに難しいことをする必要がないのかもしれませんね)
投稿2020/04/02 02:44
総合スコア64
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/02 11:52
2020/04/02 15:03
退会済みユーザー
2020/04/02 15:04
2020/04/03 12:13
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総合スコア97
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/02 02:14
2020/04/02 02:21
退会済みユーザー
2020/04/02 14:15
0
しかし、いろいろ調べてみたところC言語を扱っている方々には申し訳ないのですが、COBOLのように化石になるとか需要が無くなってきているとか言われていてあまりいいイメージがありません。
まだ組み込み系ではC言語の需要は高いですよ。最近はオブジェクト指向型言語であるC++の需要が高まってきましたが、C++を理解するには確実にCの知識が要ります。IoT、自動運転に興味があるなら避けては通れない道となっております。
オブジェクト指向がある程度理解でき、簡単なAPIを使えるようになってきたので、プログラミングの基本を押さえられるというC言語をJavaの次に勉強しようと思っていました。
それでいいと思います。C言語はポインターまで理解すればいいと言われております。他の言語で出てくる様々な専門用語に苦戦することなくすんなり頭の中に入ってくるようにもなります。
その後はJavaなりC++なりPythonなり好きな言語を学ぶといいでしょう。
コロナの影響で学校に行けず、ストレスが溜まるのは分かりますが、これからも頑張って下さい。
投稿2020/04/02 00:54
総合スコア3307
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/02 14:34
2020/04/06 02:20
0
IoT、自動運転に興味があり2か月ほど前からプログラミングの勉強を始めた初心者です。
IoTや自動運転に関する内容で、どのレベルの作業に興味があるか次第だと思います。
ある程度開発環境が揃っている上、周辺機器へのアクセスを低レベル(CPUの何番ピンにどのセンサがつながっているか、といったハードウェアに近いレベル)で行う必要はなく全てAPIがカバーしてくれるような内容であれば、C言語は必ずしも必須ではないですし、もっと環境が整った言語でいいと思います。
逆に、CPUモジュールとセンサを自分で組み合わせて何かを開発したい、ということであればC言語の知識は必要だとおもいます。最近は Python もよく使われてきていますが、やはりまだC言語の方がよく使われている印象はあります(趣味レベルだと以外にScratchも多いですが)。
現在でも基本を押さえるならC言語を勉強するべきでしょうか。
基本を抑えたいのであれば、むしろ Java を徹底的にマスターすべきだと思います。
中途半端な知識のまま他言語を学ぶよりも、ます Java で不自由なくプログラムをかける程度まで頑張って、それでも足りなければ C 言語なり他の言語をやってみるというのがいいのではないでしょうか。
そもそも、JavaはIoTという言葉すらなかった時代に、組み込み向けの言語として開発された経緯もありますし、C 言語にはないオブジェクト指向という要素もあり、これは現在メジャーといわれているような言語にはほぼ備わっている考え方ですから、理解を深めておいて損はないと思います。
投稿2020/04/01 23:52
総合スコア5086
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/02 12:38
2020/04/02 12:41
退会済みユーザー
2020/04/02 13:05
2020/04/02 13:08
退会済みユーザー
2020/04/02 13:28
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/04/02 12:29