パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

やる夫と学ぶプログラミング言語 C」記事へのコメント

  • >> 初心者に変数がグローバル変数だけと思わせるような筋、stdio.hをインクルードする理由を解説しない点についてはタレこみ人はどうかと思うが

    これね、教えたことがない人のセリフ。教えると、こうするしか無いのよ(main()の外にint宣言おいてあるのはいただけないが)。

    関数の概念の前にmain()関数があって、メモリの概念の前に"やscanfの&があったり、プリプロセッサの前に#includeがあったり、とどめ、printf()なんて可変長引数をとる、どう考えても最初に教えちゃいけない関数だったり。

    ある程度目をつぶって教えるしかない場所なんですよ。で、ポインタやってから戻って「実はscanfの&は・・・」というように教えるしかない。main()の引数char** argvなんて・・・じゃん。

    --
    -- gonta --
    "May Macintosh be with you"
    • Re: (スコア:2, すばらしい洞察)

      by Anonymous Coward

      >> 初心者に変数がグローバル変数だけと思わせるような筋、stdio.hをインクルードする理由を解説しない点についてはタレこみ人はどうかと思うが

      (main()の外にint宣言おいてあるのはいただけないが)。

      それがまさに「初心者に変数がグローバル変数だけと思わせるような」ジャマイカ。
      このソースならローカル変数で書けるし、後々main()以外の関数を導入した際に説明が容易だと思う。

      • Re: (スコア:4, 興味深い)

        ここは、グローバル変数でよいと思いますよ。
        初心者なんですから、グローバルもローカルもわからないでしょ。
        おそらく、初心者にはローカルの概念が難しいと思われ、
        関数を教えるにせよ、最初はグローバルで教え、
        そのあと、ローカル変数を教えつつ、
        それぞれのスコープの違いなどの特徴を学ぶのがスムーズかと。

        最初は、問題を単純化して覚えやすくするために、
        正しくないことでも、あえて正しいと教えることも多々ありますからね。

        • Re: (スコア:3, すばらしい洞察)

          初心者はmain()以外の関数なんて分からない(少なくとも自分から作ろうとはしない)から, グローバルとローカルのいずれか一つで話を進めるならローカル変数だけにした方が後での実害は少ないです.

          おそらくプログラマと称している人の半分程度は, 関数を作ることができないと考えておいた方が安全です.

          • おそらくプログラマと称している人の半分程度は, 関数を作ることができないと考えておいた方が安全です.

            マジすか?!
            じゃいったいそういう彼らは関数作らないで何を作るんで?

            • 基本的にはmain()関数, あるいは仕様書に提示されているエントリ関数(これもstubは事前に提供されることが多い)だけで, 内部的にはのべたんで記述します. それが1万行を越えたとしても, 決して複数の関数に分割することはありません.

              関数とは彼らにとっては既存の機能を呼び出すために存在するもので, 自分で作成するものではないのです.

              • Re:とは言うけどね (スコア:2, すばらしい洞察)

                main()も関数…って茶々は他のコメントで入れたので置いておくとして。

                それ書いてる本人は辛くないんですかね?
                main()に全部書いてねって言われたら、それは普通に書ける人にとってはむしろ拷問ですよねぇ?
                (関数がダメってことは多分関数型マクロはもっとダメですよね?)

                かの史上初のプログラマブルな計算機である解析機関(機械式、残念ながら完成しなかった)にさえ
                Ada女史がサブルーチン・コールの仕掛けを入れようとしたという歴史もありますし、
                1万行にもなる場合、「必要は発明の母」的に関数書きたくなったりしませんかね?
                #高校生の頃(1980年代前半)、FORTRAN入門でズラズラ変数並べる代わりに配列を習った記憶があるけどそんな感じに。>「必要は発明の母」
                必要性・動機があれば学習は速そうなものですが…。

                親コメント
              • by Anonymous Coward
                Cプログラミング診断室で紹介されていた最長不倒関数みたいなのは
                さすがに見たことがですけど、同じような処理をコピペで複数の関数に
                撒き散らすってのは普通にあります。
                おまえ、それ関数にしようよ、もしバグってたら全部直すの大変だよ、
                と言うと、「あ、そうか!」という顔をします。
                でも言われないと関数化しないんですよね。
              • by Anonymous Coward

                大昔のBASICしか知らないような人がlabelとgotoがあって良かったって言ってたのを思い出してアタマがまた痛くなった

              • Re:とは言うけどね (スコア:2, すばらしい洞察)

                by SteppingWind (2654) on 2009年12月31日 13時23分 (#1696276)

                main()に全部書いてねって言われたら、それは普通に書ける人にとってはむしろ拷問ですよねぇ?

                私にとっても拷問です. でもここで気をつけなくてはならないのは, それが「普通」であるという認識が間違っている(かもしれない)ということです. 自称プログラマの内のかなりの割合が, 問題を論理的に分割して対応するよりも, 既存の処理パターンを高機能エディタやIDEで集積して一つの物にすることの方が簡単と思っている(らしい)ことです. 前者を解析型, 後者を集積型と呼ぶとすると, 解析型ではプログラミングに際して常に考えることを要求されるのですが, 集積型では仕様書に従ってパターンを並べていくだけなので考えなくてもよいということみたいです. ですからそんなプログラムを書く当人は, 苦労はするけど決して拷問とは考えていないみたいです.

                ちなみに, さらに酷い拷問は, こうして作られたプログラムをメンテナンスさせられることです.

                親コメント
              • by Anonymous Coward
                修正するのも拷問だから普通に書ける人はそんな環境に何時までも居ないでしょう。

                # 世の中(職場)に不満があるなら自分を変えろ。それが嫌なら耳と目を閉じ口をつぐんで孤独に暮らせ。それも嫌なら…
                ## 世の中(職場)からドロップアウト、ですかね。その後普通に書ける環境を探して転職する、と。

                ## 職場環境の改善に自ら乗り出すって手もありだけれど…
              • by Anonymous Coward

                集積型というのは、単に恐い物しらずなだけだと思う。
                そういう集積型で作られたものはスパゲッティプログラムになりやすく、作った本人にも
                デバッグできなくなる。

                解析型は将来を予測しながらコードを書くので、必要があれば解析型だけでなく集積型の
                スタイルを取ることもできる。しかし現実的にみて集積型のスタイルが望ましいことが
                滅多にないため、ほぼ全ての場合で解析型/分割統治型のスタイルを取ることになる。

              • 名大、東工大、九大の学生さんたちや、某F社の研究所の同僚、先輩などプログラミングする人々を眺めてきましたが、本当に「main()に全部」をやった人を実地で見たことは(「笑い話」としては出てきても)なかったんですが、これは実はあんまり普通でない環境なんでしょうか?

                親コメント
              • ## 職場環境の改善に自ら乗り出すって手もありだけれど…

                以前、乗り出しました。
                プロジェクトのメインツールの作り直しの機会に。

                といってもさすがに「main()に全部」な人は居なかったので
                そこの改善ではなく「Unitテスト書きましょう運動」。
                「原理主義的だ!」とブツつかれつつも、結果として若干改善。

                しかし今ひとつうまくモジュール化がなされた設計になってなかったので、結果としてテストしにくく、今ひとつテストが不十分なモジュールが発生・・・。現在担当者の異動によりそこを引き継いだのでリファクタリング中。

                親コメント

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

処理中...