アカウント名:
パスワード:
>> 初心者に変数がグローバル変数だけと思わせるような筋、stdio.hをインクルードする理由を解説しない点についてはタレこみ人はどうかと思うが
これね、教えたことがない人のセリフ。教えると、こうするしか無いのよ(main()の外にint宣言おいてあるのはいただけないが)。
関数の概念の前にmain()関数があって、メモリの概念の前に"やscanfの&があったり、プリプロセッサの前に#includeがあったり、とどめ、printf()なんて可変長引数をとる、どう考えても最初に教えちゃいけない関数だったり。
ある程度目をつぶって教えるしかない場所なんですよ。で、ポインタやってから戻って「実はscanfの&は・・・」というように教えるしかない。main()の引数char** argvなんて・・・じゃん。
新入社員にCを教える講座を持ったことがあります。プログラミング初心者対象で。「プログラミング初心者にC言語を教えるのは間違ってる」と再三にわたり進言したのですが「業務で使用する言語を最初に教えないと」と却下。なんとか講義時間を8時間(1時間を週2で全8回)確保して、以下の流れで教えました。
1コマ目:コンピュータの構造。CPU毎に機械語が異なる。コンパイラ。宿題は「C言語以外のプログラミング言語を調べてくること」2コマ目:なぜ複数の言語があるのか。同じソースから異なる機械語にするには。コンパイラの移植。宿題は「クロスコンパイラとはどんなものか調べてくること」
「プログラミング初心者にC言語を教えるのは間違ってる」と再三にわたり進言したのですが「業務で使用する言語を最初に教えないと」と却下。
これはどちらも一理あるとは思いますが、教える内容のレベルにもよるでしょうね。 例えば「やる夫の~」も読みましたが、プログラミングの基礎であってC言語である必要が全くありません。 この場合はC以外で教える方がいいかも。
kousokubusさんも書かれているように
Cを教えるのに、コンパイラの説明から入らないのは無謀ですし、プリプロセッサの説明をせずに標準ライブラリは使えません。
この辺の解説(ソースファイルの分割/リンカの役割とか関数プロトタイプの必要性とか)をして初めてC言語の基礎と呼べるのではないかと。 他の一般的な言語で学びにくい概念としては、メモリ操作/文字列操作(ポインタも絡めて)、関数ポインタ辺りでしょうか。 この辺を全て教える時間があり、学習者が理解出来るならCから初めるメリットがあると思います。
学習者に応用力があれば、一般的な高級言語なら何から学んでもいいとは思うんですけどね。 たとえば関数ポインタの概念だって、JavaのListenerやC#のdelegateを知っている人の方が理解は早いと思います。
JavaもC#もある程度クラス(オブジェクト)の概念が身についてないと初めは呪文になってしまいますし、プログラミングの入門に向いた言語ってなんでしょうね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
とは言うけどね (スコア:4, 興味深い)
>> 初心者に変数がグローバル変数だけと思わせるような筋、stdio.hをインクルードする理由を解説しない点についてはタレこみ人はどうかと思うが
これね、教えたことがない人のセリフ。教えると、こうするしか無いのよ(main()の外にint宣言おいてあるのはいただけないが)。
関数の概念の前にmain()関数があって、メモリの概念の前に"やscanfの&があったり、プリプロセッサの前に#includeがあったり、とどめ、printf()なんて可変長引数をとる、どう考えても最初に教えちゃいけない関数だったり。
ある程度目をつぶって教えるしかない場所なんですよ。で、ポインタやってから戻って「実はscanfの&は・・・」というように教えるしかない。main()の引数char** argvなんて・・・じゃん。
-- gonta --
"May Macintosh be with you"
プログラミング初心者にCを教えるのが間違ってる(Re:とは言うけどね (スコア:5, 参考になる)
新入社員にCを教える講座を持ったことがあります。プログラミング初心者対象で。
「プログラミング初心者にC言語を教えるのは間違ってる」と再三にわたり進言したのですが「業務で使用する言語を最初に教えないと」と却下。
なんとか講義時間を8時間(1時間を週2で全8回)確保して、以下の流れで教えました。
1コマ目:コンピュータの構造。CPU毎に機械語が異なる。コンパイラ。宿題は「C言語以外のプログラミング言語を調べてくること」
2コマ目:なぜ複数の言語があるのか。同じソースから異なる機械語にするには。コンパイラの移植。宿題は「クロスコンパイラとはどんなものか調べてくること」
Re:プログラミング初心者にCを教えるのが間違ってる(Re:とは言うけどね (スコア:0)
これはどちらも一理あるとは思いますが、教える内容のレベルにもよるでしょうね。
例えば「やる夫の~」も読みましたが、プログラミングの基礎であってC言語である必要が全くありません。
この場合はC以外で教える方がいいかも。
kousokubusさんも書かれているように
この辺の解説(ソースファイルの分割/リンカの役割とか関数プロトタイプの必要性とか)をして初めてC言語の基礎と呼べるのではないかと。
他の一般的な言語で学びにくい概念としては、メモリ操作/文字列操作(ポインタも絡めて)、関数ポインタ辺りでしょうか。
この辺を全て教える時間があり、学習者が理解出来るならCから初めるメリットがあると思います。
学習者に応用力があれば、一般的な高級言語なら何から学んでもいいとは思うんですけどね。
たとえば関数ポインタの概念だって、JavaのListenerやC#のdelegateを知っている人の方が理解は早いと思います。
JavaもC#もある程度クラス(オブジェクト)の概念が身についてないと初めは呪文になってしまいますし、プログラミングの入門に向いた言語ってなんでしょうね。