0
2
テーマ、知りたいこと
C言語先に学ぶ必要性
###背景、状況
プログラミング言語の勉強で一番最初はC言語を先にやった方がいい、と言う人や最初からC言語をやると難易度が高いから挫折する。と言う人たちがいるのですが極論どっちが良いのでしょう?CS50などは先にC言語をやるのでどっちがいいのか気になっちゃいました。ぜひみなさんのご意見を聞かせていただきたいです---
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答18件
#1
総合スコア1579
投稿2023/10/31 08:04
編集2023/10/31 08:05CS50などは先にC言語をやる
そりゃCSなら避けられない言語ですから,当然のように思います.
対してスマホやWebのアプリを作ったりしたい人にとっては,先にC言語を学ぶよりもオブジェクト指向言語をやった方が良い.みたいな感じになるのと一緒で目的に応じて土台作りのために学ぶ言語を変えるべきだと思います.
#2
退会済みユーザー
総合スコア0
投稿2023/10/31 08:22
編集2023/11/01 00:06意見交換はアンケートのためにあるのではありません。
自身の考えもなくぽんぽんと意見交換を投稿するのはお止めなさい。
他人の投稿を読むだけではなく自分の意見を持ち議論に参加しなさい。
こちらの回答が複数のユーザーから「質問内容に関係のない回答」という指摘を受けました。
→意見交換自体に関係する回答なので問題ない。
こちらの回答が複数のユーザーから「攻撃的な表現などを含む不快な回答」という指摘を受けました。
→至極真っ当な考えと発言なので問題ない。正当な指摘を攻撃的と捉えるとは、打たれ弱すぎる。
こちらの回答が他のユーザーから「意図的に内容が抹消されている回答」という指摘を受けました。
→意見交換を円滑に進めるための発言なので質問自体への回答でなくても問題ない。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#3
総合スコア11954
投稿2023/10/31 08:25
編集2023/10/31 08:29目的が他の言語を使うことにあるのだという前提があるうえで
一番最初はC言語を先にやった方がいい
とか言われる場合,それは果たして「どのくらいまでやっとくと良い」という意味合いなのか?
なんとなく,反対意見側で述べられている
難易度が高い
ところまで深くやれとは言っていないような気がしないでもないです.
実際,そこらへんどういう話なのでしょうか?
と言う人や (中略) と言う人たちがいる
その人たちがどこに いる のか知りませんが,その人たちが実在するのであれば彼らに意見や理由等をもっと深く尋ねてみてはどうですか?
で,ご自身の状況と照らし合わせて必要性を判断すればよいでしょう.
個人的な意見を言えば,
気になるならとりあえずやってみれば良いのでは? という感じです.
実際にちょっとやってみて「これいらなくね?」とか思ったならば,そこでやめれば良いのでしょうし.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#6
総合スコア145930
投稿2023/10/31 23:27
編集2023/11/02 22:49背景、状況
そもそも、「何を目的として」あるいは「どういったところに興味関心があって」プログラミングを学びたいのでしょうか?
すでにいくつか回答がついていますが、そこがはっきりしないと結論は出ません。
「スパムの可能性がある」と指摘をいただいたのですが、質問の前提条件を確認することのどこがスパムに該当するのでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#7
総合スコア38339
投稿2023/11/01 01:15
Claudeの回答
いまのあなたの状況を表すのに適したことわざは「詮索先行」だと思います。
「詮索」とは事の次第をくわしく調べることを意味します。「先行」とは行動する前のことを指します。
したがって、「詮索先行」は、実際に行動する前に無駄に事の次第を調べ過ぎて時間を無駄に使うことを表していると考えられます。必要な行動を起こす前に方法を調べ過ぎるという意味合いが含まれていることわざだと思います。
「詮索先行」と同じような意味を表す別のことわざとしては、以下のようなものが考えられます。
-「杓子定規」
杓子(しゃくし)で定規のように物事をはかろうとする、つまり型どおりに考え過ぎること。
-「首尾よく飼うより始めよ」
事を始めることが大切で、最初からすべてを調べ尽くそうとする必要はない、という意味。
-「切羽詰まらぬうちの空論」
切羽詰まった状況にないのに無駄話をすること。
-「後先転倒」
本来の順序が逆になっていること。
このように、無駄な調査や空論に時間を費やすことを批判するニュアンスのことわざが、「詮索先行」と似た意味を表していると言えそうです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#8
総合スコア7
投稿2023/11/03 10:02
プログラミングをして何をしたいか、作りたいかによると思います。
C言語は昔からある言語ですので、導入として捉えられていた部分はあると思いますし、それ以外に導入がなかったとも言えます。ですが、"ポインタのポインタ"みたいなC言語独特の考え方やメモリ領域を考えてプログラミングを組むことに興味を持ち、触れていきたいのであれば、C言語は有効のように思います。
既に出ている意見かもしれませんが、学んで何をしたいかによるような気がします。
まず、何でもいいからプログラムを動かしてみたいなどであれば、RubyやPythonで1行で書けますので、やはりやりたいことによるのかなと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#10
総合スコア17
投稿2023/11/06 09:41
質問者さんはどういったお立場なのでしょうか。
まだ学生でその手の企業に就職したいのか、もしくは社会人で転職したいのか、はたまた仕事でプログラミングをしなくてはいけなくなったのか などなど。
学生でプログラミングをほとんどやったことがないのであれば、cも悪くはないと思います。私が学生時代(40年くらい前)は「データ構造+アルゴリズム=(Pascal)プログラム」という本で授業があって、これでかなり知識を得た記憶があります。これに加えて研究室で LISP が必須言語だったことで、関数の概念を理解しました。その上で LISP Interpreter を C で作らざるを得なくなり、ポインターや構造体などをかなり理解したと思っています。
社会人として「仕事でプログラミングを勉強しなくてはならない」状況であれば、そんな悠長なことは言ってられないとも思います。その場合は現場で使っている言語で、いろんなプログラムを見て、試して・・・になるのかなとも思います。
とは言え、プログラミングは最終段階であり、アルゴリズムがきちんとしていれば、どの言語でもある程度のものは出来る(と思っている)ので、プログラミングの勉強として C が向いているかと言われても、状況によって向いている/向いていない の答えが違ってくるのではないでしょうか。
引退間近のロートルからの回答で、的はずれなことを書いているのかもしれませんが。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#12
総合スコア85
投稿2023/11/07 17:46
「一番最初は C がいい」、「最初から C をやると挫折する」……
私の記憶では1990年代頃から、幾度となく繰り返されてきた議論です。 そして万能の答えは未だ見たことがありません。
ある意味で、これは「どの言語が最高に素晴らしいか」論争と似ています。 回答しようとする方々は、自分の学んだ道筋を最良に近いものと暗黙のうちに仮定して意見を言いがちだからです。 加えて人間である以上、好みの偏りも避けられません。
私自身の勝手な考えを言えば、「一番最初」は論理回路から学ぶのが良いのです(電気や電子回路それ自体について知る必要はない)。 すると、どのようにしてコンピューターは high と low の2値で動くのか、コンピューターはプログラムをどのように実行しているのか、という基礎中の基礎、すなわち「コンピューターは論理機械である」という事が理解できます。
その次は機械語です。 今時の x86 とかではなく、もっともっと昔の、単純なものが良いです。 すると、CPU の機能はハードウェアによって規定される、という当たり前の事が、きちんと理解できます。 ここまで学ぶと、コンピューターに出来る事と出来ない事が、はっきりと峻別できるようになります。
その次はアセンブリー言語で簡単なプログラムをいくつか作ってみます。 この時、「昔の単純な CPU」を使っていると、たとえば加減算しか出来ないハードウェアであっても、プログラムで乗除算が作れる、という事が理解できます。 これは、「ハードウェアが論理機械であると同時に、ソフトェアもまた論理機械である」ことの証明体験です。
加減算しか出来ない CPU に、乗除算のライブラリーを加えれば、そのコンピューターは「ハードウェアとソフトウェアの組み合わせによって四則演算が出来るシステム」に拡張されるのです。 CPU を直に使う人から見れば、その CPU は加減算しか出来ませんが、乗除算ライブラリーを与えられた人にとっては、そのコンピューターは乗除算もできるものだと見えます。 つまり、ソフトウェアとハードウェアは、実装の実態や速度性能に違いはあれど、機能という面から見れば「どちらも同じ」です(だからエミュレーターや仮想化が成立する)。
その次は簡単なコンパイラーをアセンブリー言語で作ってみます。 できれば変数を持ち、算術演算を式の形で書ける言語が良いです。 さらに可能であれば、C のように関数呼び出しをサポートする言語だったりすると、なお良いです。
ここまで学べば、次に学ぶコンパイラー言語は、 C でも Java でも C# でも COBOL でも、何でも構わないと思います。 もはやその人にとって、コンパイラー言語は「どれも同じ」と思えるでしょうから。
なお、「自ら malloc( ) して構造体をポインターでつないでいき、様々なデータを扱う」プログラムを C で自作出来ると、スクリプト言語の学習コストがかなり低くなるので、スクリプト言語を学ぶ前に C をひととおり学んでおくのは「有り」だと思います。
<附記>
C で挫折する最大の原因は「ポインター」だとしばしば言われますが、ポインターという概念自体は単純なものです。 問題は「C のポインター(と配列と文字列)」の「変な文法」です。 そこをきちんと理解できれば(面倒臭いですが)、「C の」ポインターで挫折することはほとんど無いと思います。
むしろ C で難しいのは、「記憶クラス(オブジェクト指向の「クラス」とは関係無い)」、「分割コンパイル」と「結合」と「定義と宣言」、「規格合致うんぬん」と「移植性」と「環境依存」、「プリプロセッサー」、「文字列というものは実は無い」、「C++ との違い」、そして「セキュアな実装」などなど……だと私は思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#13
総合スコア13692
投稿2023/11/14 20:27
質問のラベルにHTML5やJavaScriptが挙げられていることを考慮すれば、Cを学ぶ意義は「一般教養」としてのそれだけじゃないのかなあと思います。
計算機のハードウェアについて学びたいとか、OSやデバイスドライバの開発をやりたいとか、Cudaを使いたいとか、そういうのがあればCが必要かもしれませんが、大半の人間には無縁でしょう。JavaScriptを使った事業に挑戦したいなら、JavaScriptをいきなりやればよろしい。テレビタレントになりたいのに光の三原色やら走査線やらについてまず最初に勉強しようってのは些か回り道が過ぎるというものでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#15
総合スコア504
投稿2023/11/17 12:59
[香車]東上☆あらし☆海美「
『CS50』って何だ ?
https://edu.watch.impress.co.jp/docs/serial/progedu2/1449601.html
ハーバード大の「CS50」日本語版を試してみた!わかりやすく魅せるコンピュータサイエンス講座に脱帽 - Impress(ja)
今、使われているコンピュータ言語のほとんどが、C 言語を改良したものです。
他の言語を習得することは、結局、C 言語を、遠回りで習得することです。
なので、『初めに C 言語を学ぶ』は、悪くないと考えます。
」
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#16
総合スコア13703
投稿2023/11/21 02:25
C言語は
「高級言語の皮を被った低級言語」
「アーキテクチャに密着する高級言語」
なので、コンピュータの仕組み(なぜプログラムは動作するのか)を理解している人にとっては理解しやすい言語です。
逆に言えば、仕組みを理解できないとなぜ動くのか分からないし、仕組みを深く操作しなければならないのでなければ不要とも言える。
さらに言うと、
「プログラミングの勉強」≠「プログラミング言語の勉強」です。
プログラミングの勉強であれば極端な話、excel (の VBA)でいいんです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#17
総合スコア11954
投稿2023/11/21 03:03
編集2023/11/21 03:14ある程度身近な相手(一緒に作業をすることになるかもしれない人とか)に対して
一番最初はC言語を先にやった方がいい
とか言う場合,おそらくそこには「この辺までのことは最低限知っておいて欲しい」みたいなところがあって,C言語の
「高級言語の皮を被った低級言語」
という感じの塩梅(?)が,その辺の事情に対して丁度いい感じだったりするのかもしれません.
例えば,#12 に書かれているような深さ(?)のところまでは まずは/直近では 抑えていなくても良いけれども,でもこのくらいの抽象化された話はわかっててほしい…… みたいな.何かそんな.「ちょうどいい浅さ」というでもいうか.
【C言語を勧める = 「C言語で実務できます」とかいうのを求めている】とかいうわけではなくて.
あと,ちょっと嫌な言い方(?)をするならば,
適正がありそうか/使い物になりそうかどうか みたいなのを見る手段として やらせてみる のに丁度いいのかもしれません.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。