パスワードを忘れた? アカウント作成
11421670 story
教育

コンピューターサイエンスのカリキュラムに不足しているものは? 198

ストーリー by headless
補完 部門より
本家/.「Ask Slashdot: "Real" Computer Scientists vs. Modern Curriculum?」より

職場で昨日、あるプログラマーが最近のコンピューターサイエンス学部卒業生の品質について話しているのを聞いた。彼の意見では、主にJavaを学習している学生はCを使用するときに必要なメモリー管理が身についていないので、特にひどいという。IT業界での経験を10年積んだ後でコンピューターサイエンスの学位を取得しようとしている身としては、スラッシュドットの皆さんにお尋ねしたい。これはコンピューターサイエンスの新卒者に共通する問題なのだろうか。そうだとすれば、Java中心の学習を補完するには何をすればよいのだろうか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 計算機がどのように動いているのか、データと命令とか、値としての 20h と スペース文字の区別がつかないとか、そういう事をまずは一旦理解してから高級言語へと移行するべきだと思うんだ。別に長大なプログラムをアセンブラで組めるようになれ、という意味じゃなく。

    最初から高級言語だと、その高級言語が何に依存しているのか判らないんで、「床を踏み抜く」的な間違いをしでかしてしまう。

    --
    fjの教祖様
    • by plauda (46850) on 2014年08月10日 22時17分 (#2654456)

      どんな未来に最適化するかで、機械語の教育の必要性は変わっていきそうですね。
      直接使用する業種があれば言うに及ばずですが、ほとんどの場合は「必要ない」のが現状。

      機械語は、必要な人はハード制御、コンパイラ、仮想化分野、ハイパフォーマンス分野あたりで、
      それ以外は、一部のコーダーがデバッグの為に知っておいたほうが良い程度。
      つまり、大量雇用される末端のコーダーには不要で、そのためにわざわざ時間を割くのか……という話で、
      コンパイラだけ見ても、Microsoft、Intelなどほぼ米国に主要な技術が集中している以上は、
      日本は作る側というより、それに乗っかる側というのがトレンドなのも、必要性を感じさせない一因でしょう。

      個人的には、歴史では「137億年の物語」みたいのが流行っていますが、
      チューリングマシンから機械語へのつながり、TRONプロジェクトや、
      CPU周りの黒歴史、OSSがビジネスに取り入れられた経緯とか、
      まとめて講義できないものかなと。

      歴史とか、なぜそれ(例えば機械語)が必要になったのか?
      といった理念が大事に思い始めているのは年寄りになった証拠なのだろうか。

      親コメント
    • 頭が悪かったので、コンピュータ業界をあきらめた爺の寝言です。

      8086が世に出たころ、医学生だった爺はバイトでPC作ってました。当時は

      1. 基板をおこして、プロセッサ、メモリ、周辺の石を乗せる
      2. ハンドラを書いて、ROMに焼く(アセンブラないしはCでコーディング)
      3. 画面に文字が出るまで四苦八苦(文字化けしていても何か表示されたら後は何とかなる)

      当時の私は、「出来そこないのハードウェアを蘇らせるのがプログラマの仕事」と信じていました。

      しかし、386が普及してから、ハードウェアを扱うことはほとんどなくなりました。 (システムプログラマは別として)アプリケーションプログラマはハードウェアの呪縛から解放された訳です。 しかし、今でもコンピュータはハードウェア基盤の上に成り立っているんですよね。

      本題に戻ります。私 javaは大嫌いです(と言いつつ、使ってますが・・・)。

      • 下層(ネイティブIOインタフェースあるいはBIOS呼び出し)で何が起こっているのかわからない
      • ハードウェアにアクセスする場合、ライブラリを信じるしかない(抜け道がない)
      • クラスファインダの癖で、ときどきドツボにはまる(eclipse使わないのがいけない?)
      • プログラマは肉体労働者、java VMが神って関係が気にいらない(おいら vi以外信じない)

      javaが目指したもの(ハードウェア非依存)は間違っていないけど、その対価は小さくない。

      頭の固い爺は「PCは道具」だと信じて疑いません。 時間がたつと画面が変わるUIは、とても不愉快(UXなんて糞くらえ。余計なことするな)。 今どきのプログラマは労力をつぎこむ先が間違っているようにも感じています。

      386以降(ARM含む)のプログラミングは、「ハードエウェアは壁(OS)の向こう」です。 問題はC信仰か java信仰かじゃなく、ハードウェア依存か処理系依存か?じゃないですか?。 ハードウェア依存の時代は、泥くさかったけど、今より夢があった。

      以上、爺のたわごと。時計の針は元に戻せない。今でもOSハック(sys call改造)すれば穴開けれるけど・・・。

      親コメント
  • コンピューターサイエンス教育では、 C も Java も教えないよ。 C なり Java なりを道具にして、アルゴリズムの設計と実装という、 500 年後にも意味のある (と期待される) 概念を教えるんだよ。

    もちろん、コンピューターサイエンスの中でも専門とする内容によっては Linux カーネルを改造することが必要になったり Haskell コンパイラーを書くことが必要になったりするから、そういう人は必要な技術を学ぶけれど、「コンピューターサイエンス学科の卒業生なんだから C 言語でプログラムが書けるはず」みたいな先入観はやめた方がいいと思う。

    •  そのような技術者の需要は日本では極めて少ない。CなりJavaなりが自由に書けるようになってからにしてほしい。
      日本の情報産業は日本語や日本の商習慣の壁に守られているから存在している、農業より世界に輸出できていない産業ということを自覚するべき。

      親コメント
      • いや、だから「コンピューターサイエンス学科の卒業生ならソフトウェア技術者として必要な知識や技術を持っている」という先入観をやめた方がいいと思うんだ。大学は専門学校じゃない。

        親コメント
        •  需要がないものを生み出してどうします。まして、学生はそれを知っているですか?
          「いまから勉強することは、日本の情報産業とは関係がないサイエンスです」ときちんと説明していますか。
          説明しているならば学生の自己責任ともいえますが、そうでなければ学生に対する詐欺ですよ。

          親コメント
          • vaxさんの記述には様々な点で問題があります。

            第一に、fcp氏の記述では「コンピューターサイエンス学科の卒業生」に対してvax氏は「そのような技術者」と言っていますが、fcp氏は「卒業生=技術者」とは言っていません。従って、「そのような技術者」という記述には仮定の誤りがあります。

            第二に、たしかにそのような卒業生「の需要は日本では極めて少ない」かもしれませんが、
            需要があるかどうかと本当に必要なのかどうかは別の話です。
            企業がそういう「技術」面の必要性しか認識していないだけかもしれません。
            そもそも、大学で行うことは「まだ広くその需要すら知られていない最先端の研究内容」を行う可能性があります。
            例えば一昔前、一般に知られる以前の画像認識やニューラルネットはそういう扱いだったでしょう。

            第三に、『「いまから勉強することは、日本の情報産業とは関係がないサイエンスです」ときちんと説明』すべきという主張について、それを説明するのならば『今から勉強することは、真に大規模かつ困難な問題を解くために必要不可欠な手段であって、この内容を学ぶことはあなたに他の学部では得られない真の専門性を与える』ということも同時に説明すべきです。fcp氏の言うとおり、この種の知識は500年経っても使える知識であり、と同時に日本だけにとどまらず世界のどの地域でも有効な知識です。そして、そういった「他の方法では得られない技術的な強み」こそが大学で得るべきものです。

            メモリ管理は、もしそれが本当の問題なのなら、在野のあまたのCプログラマから引っ張ってくればよい。凄腕Cプログラマなら、多大な工数をかけて、既存のGCより効率的にメモリを管理するコードを書けるかもしれません。しかし、Cが将来長きにわたって常に有効なプログラミング言語かどうかはわかりません。メモリ管理自体についても、近年のCコンパイラvs手書きアセンブラのように、何らかのブレークスルーによってGCが人間の手作業malloc/freeに対してほとんど常に上回る事になるかもしれません。どちらの場合も、その知識への需要が長続きしないことを意味します。

            一方、いくら優秀なCプログラマでも、「アルゴリズム的に開放できない必要なメモリ」は解放できません。そして、どうやればその「真に必要なメモリ=空間計算量」を減らせるかという問題は、計算機科学のバックグラウンドがなくては解決できません。

            確かに、日本の企業が常に「計算機科学的に最先端の」研究を行っているとは言えません。
            webサービスを作る程度の技術力しか必要がない企業では、計算機科学の知見は必要ないでしょう
            (それらが使っているコンパイラには計算機科学がふんだんに使われていますが)。
            しかし、そのことと、「では日本の計算機科学科で今教えられていることは不必要か」という話は別です。
            重要な点は、計算機科学の知見は「汎用」ですから、「未知の問題」に対しても適用できるということです。
            日本の情報産業の未来は、もしかしたら大量生産のようにしょうもないwebサイトを作ることにしかないのかもしれませんが、もし情報産業が新たなサービスや技術を目指すべきだと考えるなら、現在大学で教えられていることには十分に意義があるでしょう。

            長文失礼。アセンブリ言語で書いてみる経験は必要だと思います :b

            --
            新人。プログラマレベルをポケモンで言うと、コラッタぐらい
            親コメント
            • by vax730 (32985) on 2014年08月11日 7時57分 (#2654561)

               卒業生をみれば、大半が情報系の技術者か情報システムの管理技術社をやっているのではないでしょうか。
              会社も基礎研究をしている余裕はなくなって来ていますし。(大半でもイコールでないから論理としておかしいと言いたいのでしょうけれど。)
               ビッグデータで機械学習は博士課程の学生でも需要が出てきています。DeepNetでニューラルネットワークは復権中です。
              画像処理系は昔から博士の学生に需要はあります。
              ただ、大学院しかないところの画像処理の先生が、情報工学科の先生に「画像処理は情報工学ではない」と言われたと言って怒っていました。
              情報工学科の先生はなんか了見がが狭いように思います。
               500年先のことを教えることも良いですが、現在のことを教えるべきと思います。
              博士課程で深く勉強することはかまいませんが、学部の情報工学科を出たならば、malloc()やfree()ぐらい知っていて欲しいです。
              また、エイトクイーン、クイックソート、ヒープソートぐらいは自分でプログラミングできるようにして欲しいと思います。
              (単なるちゃちゃですが、500年先も必要ということは、500年経っても人工知能はできないということですね。情報系の人間としては安心しました。)
               画像処理とか、メモリーの利用が最初から計算できて。まとめて使ってすぐにフリーするような場合は、最初にmalloc()で大きく確保してから、
              自分で割り当てとフリーしたほうが速い場合もあります。その場合は、アラインメントについては知っているだけで良いので知ってて欲しいです。

               最先端の技術を大学院で教えることは問題ないと思いますが、学部とは分けて考えて欲しいと思います。

              親コメント
              • > 500年先のことを教えることも良いですが、現在のことを教えるべきと思います。

                いえ、そこの論理がおかしくて。
                500年先使えるんですから、今も使えるでしょう。
                で、それを活かせるような職を選ばなかったのは、その学生が戦略的な失敗を犯しているだけです。

                ちゃちゃについてですが、500年後には人工知能はできているかもしれません。
                量子コンピュータができればNP-complete以上の問題が簡単に解けるようになっているかもしれませんし、
                PSPACE-hardも解けるかもしれません。
                しかしそのかわり、そのころには既に人工知能以上に困難な問題が生まれているかもしれません。

                malloc/freeという固有名詞自体についてはどうかと思いますが、そういうメモリ管理が行われているということについては知るべきだと思います。

                > 最初にmalloc()で大きく確保してから、自分で割り当てとフリーしたほうが速い

                それはGC付きの言語でも同じです。ヒープの確保は高コスト、ということがmalloc/freeを習う上で理解されていればよいわけですから、同じく配列生成時に気を使えば良いということが理解されればよいと思います。

                > 情報工学科の先生に「画像処理は情報工学ではない」

                情報工学と計算機科学というのもまた微妙な問題ですね、同じではない気がします。はっきりとどう違うかわかりませんが。
                画像認識には困難さがありますが、画像処理というのはどうなんでしょうね?
                絵の画素を加工するぐらいのことであったら、計算量的困難さは無いはずです。
                この点はどこまで賢い加工を行うかにもよると思います。
                画像圧縮アルゴリズムとかになれば計算機科学でしょう。

                --
                新人。プログラマレベルをポケモンで言うと、コラッタぐらい
                親コメント
          • by Anonymous Coward on 2014年08月10日 23時56分 (#2654491)

            >> 需要がないものを生み出してどうします。

            それはネットでよく見かける

            「企業が本当に必要としているような能力を持った人材を日本の大学は輩出してくれない」
             vs
            「米国では博士号を持っているような人材がどんどん有効活用されているのに,そういう人材を使いこなせず,採用すらしない日本企業の能力の問題」
             
            の押し問答ですよ.
            #少なくともCS分野では米国と日本にこれだけ技術力でもビジネスでも差が付いているわけで,上記のどちらの言い分の方が筋が通ってるかは明らかだとは思いますし,本当にそういう目先の即戦力が重要ならば,国を挙げて専門学校にもっと注力するべきだと思いますけどね.

            親コメント
          • 私は大学でコンピュータサイエンスが副専攻でしたが、
            大学で学ぶのは当然サイエンスだと思っていました。
            情報産業に就職して役にたつような訓練がしたければ、職業訓練校にでもいけばいいんじゃないですかね。
            大学は学問の場であって、少なくとも「就職して役にたつようなことを学ぶため」のところではありません。
            企業が大学で学んだ学問や教養を期待して学生を採用するのは勝手ですが、
            学生や大学が「企業で役に立つかどうか」を考えるのは本末転倒です。

            >需要がないものを生み出してどうします。まして、学生はそれを知っているですか?

            需要がないかどうか決めるのは、たかだか一産業じゃないですよ。
            私の同期は金融機関とメーカーの研究所が多かったです。

            親コメント
  • 独学する方法 (スコア:3, すばらしい洞察)

    by Anonymous Coward on 2014年08月10日 18時08分 (#2654339)

    これさえ身に付ければ大抵の言語は習得できる。
    順番は関係ない。
    Javaから入ってパフォーマンス不足に悩まされたらCを覚える流れでも全然いいと思う。

  • デスマのしのぎ方とか (スコア:2, おもしろおかしい)

    by Anonymous Coward on 2014年08月10日 17時42分 (#2654319)

    栄養ドリンクはどれが効くとか、ゲーム業界はやばいからやめとけとか、給料がいいのは金融系だとか・・・・・・

    • 今日本で電機メーカーが惨状をさらしているのは、バブルの頃に優秀な学生がみんな金融系に
      就職したからだと思う。
      そういう意味では、日本では古くから教育が行き届いています。
      親コメント
      • >今日本で電機メーカーが惨状をさらしているのは、バブルの頃に優秀な学生がみんな金融系に
        >就職したからだと思う。

        外注管理ばかりやらされて、ソフトウェアの開発力が身につかなかったことだと思います。
        日本ではプログラマーといえばシステムエンジニアの下級職として区別しますが、
        これは、日本ならではのプログラミング軽視の文化の現れとも見なせます。

        SC卒業生と言えども、エンジニア自らプログラミングも行わないことには、
        魅力的なソフトは作れないのです。
        また、まともな仕様書も作れないのです。

        親コメント
  • Java中心の学習とかイミフメ杉。
    『Cを使用するときに必要なメモリー管理』っていうのもよく分からないけど、学校で教えるような事ではないね。

  • 「CS 専攻修了した若造が C でメモリ操作する方法も知らなかった。」という個人的経験の一例を取り上げて「CS 専攻では何を習得させるべきか」というお話に飛躍させていることが、本家タレコミ主の悲劇なわけですよ。

    本当に彼が欲しかったものは、彼のプライドを逆撫でしない程度の学歴の持ち主で C のポインタを理解できて、なおかつ彼に刃向かわず従順に仕事をする奴隷です。

    --
    Hiroki (REO) Kashiwazaki
  • Scienceではなく、Engineering

  • http://www.scj.go.jp/ja/member/iinkai/daigakuhosyo/daigakuhosyo.html [scj.go.jp]

    残念ながらまだできていなかった。

  • なんでCに特有のテクニックを、
    コンピュータサイエンスで教えないといけないのか。

    自社の業務に必要な知識は自社で教えればいいだろう。

    メモリ管理とか十把一絡げに言うが、
    じゃあ関数呼び出し時に変数をスタックに積むロジックとかは、
    Cをやっている人に書けるのだろうか?
    これも重要なメモリ管理の一つだと思うが。

    と考えると、「メモリ管理」というのはCに特有なテクニックにすぎない。
    単にC以外を知らない人がCの常識は世界の常識だと思って、
    新人を常識知らず扱いしているだけだろう。

    単にその職場の職員の質の問題であって、
    職場での教育に力を入れればいいだけの話。

    コンピュータサイエンス教育が何かをやる必要はない。

  • ほぼ漏れなくC言語だぞ。 そりゃ標準Cライブラリも、動的メモリ管理も無いが。
typodupeerror

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

読み込み中...