アカウント名:
パスワード:
そうかしら?他のメジャーな言語と比べて変わらないと思うし、ちゃんとしたコードが書けるようになるまでが他と比べて険しい言語と思うんですけどねCやC++って。
GUIやら何やらが面倒だからね。
Hello Worldする難易度は他と変わらないけど、その次のマイルストーンが見つからない。少なくとも現状では、最初に覚えるべき言語ではなく、3番目ぐらいに習得するのが良さそうな印象。
最近のプログラマってのは「Hello,world」の次がGUIなのか見た目で結果が出てくるのが楽しいということでしょうか
そんなん他の言語に任せておけばええやんC言語使う意義ってそんなところにはない
「Hello,world」の次がGUIじゃなくて、GUIで「Hello,world」が最初なんだよ
> だから「最初の言語としてCを学ぶ意味が少ない(他の言語から入るべき)」って話でしょ。> プログラミング言語より先に、日本語を勉強してよ。
C言語が理解できない人はこういう事を言いますね。
実際はCを学ぶ意味が少ないのではなくてあなたがC言語を理解できてないだけです。
C言語を勉強してから出直しましょう。
では現状で、プログラミングを過去に経験していない人が最初にC言語を学ぶ意味って何だろう。たとえばC#とかPython、あるいはJavaScript等、試しやすい環境がいくらでもある言語に比べて、C言語
憲法学者のよく言う「勉強が足りない」みたいなもんかね必要だから必要なんだ、っていう循環論法
低級な部分がよく見えるので、コンピューターの基礎を学ぶ人にはちょうど良いのでは?コンピューターの基礎を、別途身につけているなら不要だと思いますけれども。
最初に学ぶ言語としてPythonとCだったら、Pythonのほうがいいよ。楽だし覚えること少な目ではじめられて、段階的に覚えてけばいい要素が多い。
でも、C#Cだったら圧倒的に Cがいい。Cのループや条件分岐、あるいはその組合せとか、勉強したことが、ほとんど無駄にならず、そのまま読み書きに使える。C#の場合、そういう「基礎」の組合せで書けるようになっても、一般的なコードでは、そういうのが表われことが非常に稀。単純なループだけでもLINQやらラムダも覚えなきゃ普通のコードを読むことすら出来ない。必要最低限度に到達するまでの敷居が高すぎる。ポインタ関連の概念もJavaやC#では不要になるわけじゃないしね。
まぁ、Cとかアセンブリとかの低レベルなところを、いずれやらなきゃいけないなら、早い時期にやっといたほうがいいとは思う。高級言語ばかりやった後で、低レベルなところで頑張るのは辛い。低レベルを先に体験しとくと、たいていの言語で、あれよりは楽と思えるとかはメリット(?)になる。やらなくていい人生なら一生やる必要はない。
C# が裏で malloc() (≒new) をガンガンやっているのがもったいなく感じるのですが(もっとスタックを使おうよ!)、こういう感覚ってC言語でメモリを使った経験があればこそですよね。
# malloc() を避けるために unsafe コードやら static クラスを多用しだすと老害プログラマなんでしょうけど、# C# はそういった要求にも応えられる懐の深い言語なのですね。
プログラミングを学ぶのとコンピューターの基礎を学ぶのは別でしょ。
そしてプログラミングを学ぶ上では、コンピューターの低いレイヤーの部分に関する知識よりも、まずロジックの組み方やデバッグのやり方などを教える必要がある。そういう点ではC言語は機能が少なすぎてメリットがありません。
低レベルなコンピューターの基礎動作を学ぶのは、ある程度、プログラミングの技術が身についてからのほうが良いです。そうでなければ中途半端にC言語とか平行でやるより、座学で理論として教えたほうがいい。
でも、C#Cだったら圧倒的に Cがいい。
C#の場合、そういう「基礎」の組合せで書けるようになっても、一般的なコードでは、そういうのが表われことが非常に稀。
別に基礎学習レベルの人がLINQだラムダだを読む必要はないでしょ。言語仕様としては使わなくても使えるようになってるから。(async・awaitあたりは微妙かもしれないけど)
そういう上級者が書いたコードを写経・読解する学習法が前提、というなら、Cでも最初からポインタやらバッファやら理解してないといけない。読解難易度ではそっちのほうが遥かに高いよ。
現実問題として「言語仕様としては使わなくても使えるようになってる」けど、上級者のコードではなく、底辺レベルのコーダの物であっても、それが使われないコードなんてのは、現実にはありえないわけですよ。C#の場合はラムダやLINQの理解は、超初心者レベルでも必須ですよ。
ポインタやらバッファなんてのは、それらと比べれば、はるかに簡単な概念ですから、文系の新卒に教えても(そちらと比べれば)簡単に理解してくれますよ。
# malloc() を避けるために unsafe コードやら static クラスを多用しだすと老害プログラマなんでしょうけど、
老害というより、メンテコストを増大させるだけなので有害。GCに頼れない分、逆にメモリ問題を把握しにくくなる。しいて言うなら、Microsoftの.NET Frameworkを設計・実装した人より有能だという自信があるプログラマーだけだと思うよ、そんなことやっていいのは。
こういう感覚ってC言語でメモリを使った経験があればこそですよね。
そんなアホなこと言いだすぐらいならC言語なんざ若い人に触らせちゃダメだよ。基礎を理解するのと、基礎がわかった気になってエンジニアとして使えない方向に拗らすのは全然違う。
BASIC->ASM->C->C++とプログラム言語を進めたオレからすると、C/C++は基本のその他のPC系言語を知ったうえで習得した方が間違いなく簡単に習得できると思うから、最初にC言語を学ぶ意味が少ないってのは同意。
BASICやってたから、ASMやってたからC/C++の構文や宣言や規則、ポインタも違和感なく習得できたってのがある。80年代のBASICはホントに基本の言語でインタプリタ言語だったからテストも習得も容易だったし、その知識の有無はC/C++に進むにはかなり有用だった。ASMはまぁ、言語を覚えただけでそれで何ができるかってのはPCのシステムコールとかを知る必要があ
GUIなんてポトペタでコントロール配置して、コントロールをダブルクリックして生成されたイベントハンドラに処理書いて終わりじゃん
そんな「ううままうままううまううままうって避け方分かってんじゃん、簡単だよそんなの」みたいなこと言われましてもですね。
で、「どうやって実機と同期するんだ?」ってところで悩む。「ボタンの背景色を赤にしたら、このLEDが光るんだけどできるよね?」とか言ってくる。
#「デバイスドライバ?ナニ?ソレ?いるの?」ぐらいは平常運転。
現在の主要なアプリ開発ではほとんど求められないんだろうけど、それでも駆け出しの頃にCのポインタ操作を習得して学んだ知識(メモリ操作に対する全般的な概念とか、アライメントに関するあれこれとか)は、その後のデバッグ作業をだいぶ捗らせてくれたなぁと思います。
いや、普段は全然縁がないんですけど、でも例えば、ある時AIXのC++コンパイラの最適化のバグでSTLの挙動が変になったことがあって、あれをデバッグする時に大いに役立った。最初はまったく原因不明で胃が痛くなったものの、ふと最適化オプションを外してリコンパイルしてみたら正しく動作するようになって、
昔、コマンドラインが基本だったころならCからでもよかったのかもしれないですが、(それでもBASICとアセンブラの知識があった方が良かったですが)今は、下位層が複雑すぎるので前者の方がつまずきにくいように思います。
もとのコードがよろしくないのもあるのだろうけど、参照渡しや構造体あたりでやらかしたり理解できなかったりする人をたまに見かけるので第二言語としてやっておいて損はないかもね。
ちゃんとしたコードを書く に関してはフレームのもとになるから触れるな、ってばっちゃが言ってた
学習が容易ってマシン語とかアセンブラとかと比べてでしょ。
Linux環境だとほぼデフォルトで使えるって意味では学習は容易じゃないかな。
Linux環境という時点で、初心者の視点から離れてるのに気付こう?
どこでも動くという意味ではjavascriptとかが入門によかったりするんですかね※自分はBASIC爺
アセンブラの知識なしでまともなCのプログラム組めるのか? という気はするな。
マシン語やアセンブラって、言語としては簡単ですよ。そもそもハード命令ってひとつひとつはそんなに複雑な機能を持ってないし。
問題は、OSのシステムコールの種類と機能や、他の高級な言語からの呼び出し形式を把握するのが大変なこととかかな。当然ながらOSや他の言語によってこれらは違ってきますしね。
同じように、最近の言語でも、どんなライブラリがあってどんな機能があるかを理解するほうが大切。素のプログラミング言語だけでできることはあまり多くないと思います。
ArduinoでLチカするのに適してるから。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond
Cは学習が容易 (スコア:0)
そうかしら?
他のメジャーな言語と比べて変わらないと思うし、ちゃんとしたコードが書けるようになるまでが他と比べて険しい言語と思うんですけどねCやC++って。
Re:Cは学習が容易 (スコア:1)
GUIやら何やらが面倒だからね。
Hello Worldする難易度は他と変わらないけど、その次のマイルストーンが見つからない。
少なくとも現状では、最初に覚えるべき言語ではなく、3番目ぐらいに習得するのが良さそうな印象。
Re:Cは学習が容易 (スコア:1)
最近のプログラマってのは「Hello,world」の次がGUIなのか
見た目で結果が出てくるのが楽しいということでしょうか
そんなん他の言語に任せておけばええやん
C言語使う意義ってそんなところにはない
Re:Cは学習が容易 (スコア:1)
「Hello,world」の次がGUI
じゃなくて、GUIで「Hello,world」が最初なんだよ
Re: (スコア:0)
> だから「最初の言語としてCを学ぶ意味が少ない(他の言語から入るべき)」って話でしょ。
> プログラミング言語より先に、日本語を勉強してよ。
C言語が理解できない人はこういう事を言いますね。
実際はCを学ぶ意味が少ないのではなくて
あなたがC言語を理解できてないだけです。
C言語を勉強してから出直しましょう。
Re: (スコア:0)
> だから「最初の言語としてCを学ぶ意味が少ない(他の言語から入るべき)」って話でしょ。
> プログラミング言語より先に、日本語を勉強してよ。
C言語が理解できない人はこういう事を言いますね。
実際はCを学ぶ意味が少ないのではなくて
あなたがC言語を理解できてないだけです。
C言語を勉強してから出直しましょう。
では現状で、プログラミングを過去に経験していない人が最初にC言語を学ぶ意味って何だろう。
たとえばC#とかPython、あるいはJavaScript等、試しやすい環境がいくらでもある言語に比べて、C言語
Re: (スコア:0)
憲法学者のよく言う「勉強が足りない」みたいなもんかね
必要だから必要なんだ、っていう循環論法
Re: (スコア:0)
低級な部分がよく見えるので、コンピューターの基礎を学ぶ人にはちょうど良いのでは?
コンピューターの基礎を、別途身につけているなら不要だと思いますけれども。
Re: (スコア:0)
最初に学ぶ言語としてPythonとCだったら、Pythonのほうがいいよ。
楽だし覚えること少な目ではじめられて、段階的に覚えてけばいい要素が多い。
でも、C#Cだったら圧倒的に Cがいい。
Cのループや条件分岐、あるいはその組合せとか、勉強したことが、ほとんど無駄にならず、そのまま読み書きに使える。
C#の場合、そういう「基礎」の組合せで書けるようになっても、一般的なコードでは、そういうのが表われことが非常に稀。単純なループだけでもLINQやらラムダも覚えなきゃ普通のコードを読むことすら出来ない。必要最低限度に到達するまでの敷居が高すぎる。
ポインタ関連の概念もJavaやC#では不要になるわけじゃないしね。
まぁ、Cとかアセンブリとかの低レベルなところを、いずれやらなきゃいけないなら、早い時期にやっといたほうがいいとは思う。
高級言語ばかりやった後で、低レベルなところで頑張るのは辛い。
低レベルを先に体験しとくと、たいていの言語で、あれよりは楽と思えるとかはメリット(?)になる。やらなくていい人生なら一生やる必要はない。
Re: (スコア:0)
C# が裏で malloc() (≒new) をガンガンやっているのがもったいなく感じるのですが(もっとスタックを使おうよ!)、
こういう感覚ってC言語でメモリを使った経験があればこそですよね。
# malloc() を避けるために unsafe コードやら static クラスを多用しだすと老害プログラマなんでしょうけど、
# C# はそういった要求にも応えられる懐の深い言語なのですね。
Re: (スコア:0)
プログラミングを学ぶのとコンピューターの基礎を学ぶのは別でしょ。
そしてプログラミングを学ぶ上では、コンピューターの低いレイヤーの部分に関する知識よりも、まずロジックの組み方やデバッグのやり方などを教える必要がある。そういう点ではC言語は機能が少なすぎてメリットがありません。
低レベルなコンピューターの基礎動作を学ぶのは、ある程度、プログラミングの技術が身についてからのほうが良いです。
そうでなければ中途半端にC言語とか平行でやるより、座学で理論として教えたほうがいい。
Re: (スコア:0)
でも、C#Cだったら圧倒的に Cがいい。
C#の場合、そういう「基礎」の組合せで書けるようになっても、一般的なコードでは、そういうのが表われことが非常に稀。
別に基礎学習レベルの人がLINQだラムダだを読む必要はないでしょ。言語仕様としては使わなくても使えるようになってるから。
(async・awaitあたりは微妙かもしれないけど)
そういう上級者が書いたコードを写経・読解する学習法が前提、というなら、Cでも最初からポインタやらバッファやら理解してないといけない。読解難易度ではそっちのほうが遥かに高いよ。
Re: (スコア:0)
現実問題として「言語仕様としては使わなくても使えるようになってる」けど、上級者のコードではなく、底辺レベルのコーダの物であっても、それが使われないコードなんてのは、現実にはありえないわけですよ。
C#の場合はラムダやLINQの理解は、超初心者レベルでも必須ですよ。
ポインタやらバッファなんてのは、それらと比べれば、はるかに簡単な概念ですから、文系の新卒に教えても(そちらと比べれば)簡単に理解してくれますよ。
Re: (スコア:0)
# malloc() を避けるために unsafe コードやら static クラスを多用しだすと老害プログラマなんでしょうけど、
老害というより、メンテコストを増大させるだけなので有害。
GCに頼れない分、逆にメモリ問題を把握しにくくなる。
しいて言うなら、Microsoftの.NET Frameworkを設計・実装した人より有能だという自信があるプログラマーだけだと思うよ、そんなことやっていいのは。
こういう感覚ってC言語でメモリを使った経験があればこそですよね。
そんなアホなこと言いだすぐらいならC言語なんざ若い人に触らせちゃダメだよ。
基礎を理解するのと、基礎がわかった気になってエンジニアとして使えない方向に拗らすのは全然違う。
Re: (スコア:0)
BASIC->ASM->C->C++とプログラム言語を進めたオレからすると、C/C++は基本のその他のPC系言語
を知ったうえで習得した方が間違いなく簡単に習得できると思うから、最初にC言語を学ぶ意味が少ないってのは同意。
BASICやってたから、ASMやってたからC/C++の構文や宣言や規則、ポインタも違和感なく習得できたってのがある。
80年代のBASICはホントに基本の言語でインタプリタ言語だったからテストも習得も容易だったし、
その知識の有無はC/C++に進むにはかなり有用だった。
ASMはまぁ、言語を覚えただけでそれで何ができるかってのはPCのシステムコールとかを知る必要があ
Re: (スコア:0)
GUIなんてポトペタでコントロール配置して、コントロールをダブルクリックして生成されたイベントハンドラに処理書いて終わりじゃん
Re: (スコア:0)
そんな「ううままうままううまううままうって避け方分かってんじゃん、簡単だよそんなの」みたいなこと言われましてもですね。
Re: (スコア:0)
で、「どうやって実機と同期するんだ?」ってところで悩む。
「ボタンの背景色を赤にしたら、このLEDが光るんだけどできるよね?」とか言ってくる。
#「デバイスドライバ?ナニ?ソレ?いるの?」ぐらいは平常運転。
Re: (スコア:0)
現在の主要なアプリ開発ではほとんど求められないんだろうけど、それでも駆け出しの頃にCのポインタ操作を習得して学んだ知識(メモリ操作に対する全般的な概念とか、アライメントに関するあれこれとか)は、その後のデバッグ作業をだいぶ捗らせてくれたなぁと思います。
いや、普段は全然縁がないんですけど、でも例えば、ある時AIXのC++コンパイラの最適化のバグでSTLの挙動が変になったことがあって、あれをデバッグする時に大いに役立った。最初はまったく原因不明で胃が痛くなったものの、ふと最適化オプションを外してリコンパイルしてみたら正しく動作するようになって、
Re: (スコア:0)
昔、コマンドラインが基本だったころならCからでもよかったのかもしれないですが、(それでもBASICとアセンブラの知識があった方が良かったですが)今は、下位層が複雑すぎるので前者の方がつまずきにくいように思います。
Re: (スコア:0)
もとのコードがよろしくないのもあるのだろうけど、参照渡しや構造体あたりでやらかしたり理解できなかったりする人をたまに見かけるので第二言語としてやっておいて損はないかもね。
Re:Cは学習が容易 (スコア:1)
ちゃんとしたコードを書く に関してはフレームのもとになるから触れるな、ってばっちゃが言ってた
Re: (スコア:0)
学習が容易ってマシン語とかアセンブラとかと比べてでしょ。
Re: (スコア:0)
Linux環境だとほぼデフォルトで使えるって意味では学習は容易じゃないかな。
Re:Cは学習が容易 (スコア:1)
Linux環境という時点で、初心者の視点から離れてるのに気付こう?
Re: (スコア:0)
どこでも動くという意味ではjavascriptとかが入門によかったりするんですかね
※自分はBASIC爺
Re: (スコア:0)
アセンブラの知識なしでまともなCのプログラム組めるのか? という気はするな。
Re: (スコア:0)
マシン語やアセンブラって、言語としては簡単ですよ。
そもそもハード命令ってひとつひとつはそんなに複雑な機能を持って
ないし。
問題は、OSのシステムコールの種類と機能や、他の高級な言語からの
呼び出し形式を把握するのが大変なこととかかな。
当然ながらOSや他の言語によってこれらは違ってきますしね。
同じように、最近の言語でも、どんなライブラリがあってどんな機能が
あるかを理解するほうが大切。
素のプログラミング言語だけでできることはあまり多くないと思います。
Re: (スコア:0)
ArduinoでLチカするのに適してるから。