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

プログラマーの卵を育てる 139

ストーリー by yoosee
プログラマの力はプラットフォームの力 部門より

MJ 曰く、 "マイクロソフトが今月からGotDotNet(GDN)の学生向けバージョンであるGotDotNet Japan Studentをオープンした。GDNは米国では以前から存在していたが、日本では今年から始まった、.NETに関する開発者のコミュニティーだ。GDNJapan Studentはその学生版で、なんでも初心者から経験者まで、情報交換したり課題を解決しながらプログラミングやコンピュータを学ぶことができるという。しかし当然のことながら学べるのは.NETを中心としたWindowsプラットフォームのことである。

最近この手のサイトやプログラムはRedHatSunも行っていて、以前本家でもネタになっていた。ビジネス市場で熾烈なシェア争いをしている陣営同士、将来の開発者となる学生に対してそれぞれのプラットフォームの優位性をPRしているとも言える。
プログラミングを学びやすい環境が整備されることはいいことかもしれないが、果たしてプラットフォームに依存したプログラミングを学ぶことが本当によいことかどうかは、意見が分かれる所だと思う。学生時代にプログラミングを学ばれた経験をお持ちの方も多いと思われる/.読者諸兄はどう思われるだろうか。"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • プラットフォーム依存 (スコア:3, すばらしい洞察)

    by Anonymous Coward on 2003年04月06日 11時04分 (#293601)
    別に悪いことではないでしょう。目の前にあるPC、多くの人はWindowsになるわけですが、これがどのように動いていて、どのようにプログラミングすればいいのか、ということを知るということは意味のあることです。一つの考えを知り、その中で終わるか更なる学習をするかは個々人の資質に負うところが大きいでしょう。

    私はBASIC or アセンブラ主流時代にパソコンをはじめたのですが、現在も色々と役に立つ基本的な知識も多いです。プログラミングの肝の部分はプラットフォームが大きく変わるわけではないですし、変にプラットフォーム依存を避けて抽象的な学習に終始するよりはよいと思います。

    • by paprika (5024) on 2003年04月06日 11時48分 (#293629) 日記
      プラットフォーム非依存ってのは現実的に難しいというのは皆さん書かれているので,プラットフォーム依存環境をなるべくたくさん経験するのが良いかもですね。GotDotNetがすべてって事ではなく,単なる選択肢の一つってとこでしょうか。

      私が最初に学んだBASICも (C) Microsoft だったけど,それが無駄になったわけではないんだよな。

      # あぁ,ベーマガ。
      親コメント
    • 私もBASICの知識だけでcgiの修正してますし、賛成。
      完全に非依存にこだわると、CASLも駄目でしょうし
      入り口が無くなってしまいます。
      M$の囲い込みが問題なんじゃなくて、
      他のプラットフォームももっと初心者を取り込む事にも
      力を注がないといけないと言うことなのでしょう。
      --
      AMIGA4000T(60/50)使い
      親コメント
    • プラットフォーム依存部分の利点と欠点、プラットフォームの特徴とアーキテクチャの特徴の関連性。特にプラットフォームの選択において、この2点は必須です。

      この2点を実感するべく、プラットフォーム依存環境を、それなりの数こなしたほうがよいと、自分は思ってます。もちろん、教育時には「欠点」「短所」も教えるという前提で。

      特徴ある (っていうか変な) プラットフォームって、何某か理由や目的があるものです。できれば、その理由や目的を理解した上で、プラットフォームを使っていきたいなぁと。
      親コメント
  • 今のPC、何と言うか、売れるためにというか、
    大人が持っている常識(≒ある程度固定されてしまった世界観)の
    範囲で解りやすいユーザーインタフェース
    に収束しているので、それをそのまま子供に押し付けるのは
    よろしくないと思う。
    エンピツの持ち方を覚える前のチビは、空っぽかもしれない
    けれど、大人が「とんでもない」と思うユーザーインタフェース
    も許容できる力を持っていると思います。

    「大きなお世話的ユーザーインタフェースに触れさせる」=「過保護で育てる」
    というような気がします。
    最初はできるだけ素材だけにしといたほうがいいんじゃないでしょうか?

    #マウスを近づけるだけでクラスの中身が
    #見えるUIとか、おじさんには楽でいいんですが。。^^;
    • >「大きなお世話的ユーザーインタフェースに触れさせる」=「過保護で育てる」 >というような気がします。

      その「大きなお世話的UI」を彼らに実装させてみるというのも、 逆説的な意味で教育効果があるかもしれませんよ。

      環境依存性、お約束の多すぎるAPI、ユーザのきまぐれな操作、 OSのバージョン間の振る舞いの違い…
      といったものに対応することの大変さを分かって貰えれば、
      環境/プラットフォームからの独立性、シンプルなI/F、 リッチなUIの落とし穴、互換性維持の重要性…
      に思い至ってくれる人もいるかもしれません。
      親コメント
    • > 「大きなお世話的ユーザーインタフェースに触れさせる」=「過保護で育てる」
      >というような気がします。
      >最初はできるだけ素材だけにしといたほうがいいんじゃないでしょうか?

      で、大きなお世話ではなく素材といえるモノはどれか?という問いに対して、答えに窮するわけですね(^^;

      いやほんと、GUIやってりゃむしろCUIのほうが大きなお世話と思うかも知れないじゃん。

      つまり、「自分にとってNativeじゃないUI」かどうかという問題に落とし込まれてしまわないか?というのが
      心配なんです。

      >#マウスを近づけるだけでクラスの中身が
      >#見えるUIとか、おじさんには楽でいいんですが。。^^;

      オジサンでなくても、それは重要なことだと思います。
      今作ったものを今見る手段が無いなんて、本来ナンセンスなのですから。

      ま、その見せ方の形態は、色々考えないとならないでしょうけど。

      プログラムやってて感じる最大の「問題」の1つは、隔靴掻痒、ですね。
      今作ったものを「直接」見る方法が乏しすぎる、って奴。
      GUIも(今の主流のじゃ)何の貢献もしてないし、デバッガだってまだまだ弱いし。
      今メモリ上に浮かんでるオブジェクトが全部見えて、最低限のレベルをクリアしたと言えると思うんですが、
      それですらなかなかねえ…

      #もう1つの問題は、逆に書くときに、書きたいように書けない、という問題ですね。
      #だから最近は最低でもRubyくらい柔軟な言語じゃないとムカついて駄目だし、もっと柔軟性欲しいこともあるし。
      親コメント
    • >「大きなお世話的ユーザーインタフェースに触れさせる」=「過保護で育てる」

      ある特定の環境に慣れてそこからでてこれない奴もそりゃ
      いると思いますよ。そうでない奴はそっから出てくればえ
      えわけです。まずはとっかかりで何かしらの手がかりに
      触らせてやればよいと思う。

      あとは、そいつがその手がかりを基点にしてどこにいくか?
      ということでしかないわけです。手がかりを見せても「俺
      はもっと違う手がかりを探す」ってのもありでしょ?

      大きなお世話な「らくちん山登り」でケーブルカーのチケッ
      トを手に入れたやつでも、山にいくわけです。ちょこっと
      機転がきけば山のよさをわかり、山の楽しみ方をあーだこー
      だと試すわけです。そういった機転が利かない奴はずっと
      そこにいるわけですね。で、機転が利かない人を閉じ込め
      て(本人にとっては居心地よくて居るだけなんだけどね)お
      けるってことで、「大きなお世話的ユーザーインタフェー
      ス」は、それなりに有用だと思います。
      親コメント
  • by ryouga (2286) on 2003年04月06日 18時03分 (#293774) ホームページ 日記
    大事なのは「何を使うか」ではなくて、「何をしたいか」ではないかと思います。何をしたいか分かっている人には何も言うことは無いし、何をしたいか分からない人は、とにかく経験を積むことが必要という気がします。なんでもいいからやってみろ、と。それで、他人から課題を与えられなくても、自分で自分の課題を見付けられるようになってほしいです。
  • by mishima (737) on 2003年04月06日 22時33分 (#293908) ホームページ 日記
    AoE (ゲーム売るのも商売なので、AoMとは言わない)あたりの
    人気(のあった)ゲームの .NET 版を出してもらって、
    そのコードを好き勝手書き換えさせてもらえるなら、
    がんばって勉強するやつはたくさん出てくると思う。

    書き換え元になるゲームが面白ければ面白いほど、
    書き換える意欲も出てくるものでない?

    アルゴリズムやらデータ構造やら計算量やらオブジェクト指向やらを
    勉強するのはその後でも十分だろ。
    --
    # mishimaは本田透先生を熱烈に応援しています
  • by kondou (7687) on 2003年04月06日 11時13分 (#293605) ホームページ 日記
    学生がプログラムを勉強するならば、プラットホーム非依存で、アルゴリズムやなんかを、まず学んで欲しいと思う。

    それに、MS-Windows 以外の環境もあるということも知って、独善的なプログラマにはならないでほしいのだ。

    学生以前のプログラミング原始体験ならば、ガチガチにプラットホーム依存で、アルゴリズム無視でも、とにかく動く、という環境の方がむしろ大切でしょうが。
    • Re:環境依存 (スコア:3, 興味深い)

      by moonbear (4602) on 2003年04月06日 12時37分 (#293658)
      今の学生さんくらいの年齢の人にとってはGUIはあたりまえなので,初級レベルのプログラミング教育で標準入出力しかないモデルを使ってもピンと来ないようです.おそらく私の教え方が悪かったのでしょうが,(ウィンドウなどが出ないので)あまりプログラムらしいプログラムを作ったという気がしなかったと言われたこともあります.興味を持たせつつ,本質的なところを理解できるようなプログラミング教育をどうすべきかはどこの教育機関でも悩みどころみたいで,学会の懇親会などでもよくそういう話がでます.

      .NET はそれ以前のMSのフレームワークよりはだいぶすっきりした気がして,教育にも使ってみてもいいかなと考えています.アカデミックアライアンスプログラムを使えば低コストで導入できますしね.C#も悪い言語じゃないし.ただしこれでも現状のGUIフレームワークはまだ「お約束」ごとが多くて,初級レベルの教育に向いているかどうかは疑問です.

      個人的には本当に最初のプログラミング「経験」は Squeak がよさそうで,その後に .NET 上で手続き型や関数型のプログラミングも悪くないと思います.電気・情報系の学科ならどっかで(仮想マシン上じゃない)機械語プログラミングの経験をしてもらいたいところですが.
      親コメント
      • Re:環境依存 (スコア:2, 興味深い)

        by Anonymous Coward on 2003年04月06日 13時47分 (#293698)
        最近の若者というか、職業ソフト屋さんにとっては、「C/C++言語+クラスライブラリ+統合開発環境+贅沢なハードウェアリソース」というのがベースのようで、これがないとまともにデバッグができない人が増えているように思います。
        機械語とC言語ソースの関係(ポインタや静的/動的変数の使い分けがどのように機械語に落ちるのかとか・・・)を概念すら理解しないでコーディングされちゃうので、大変です。
        まあ、Windowsなんかのソフト屋さんとしてならいいんでしょうけど、組み込みでPCのような環境を前提にされちゃうと困ります。(普通、仮想記憶/メモリ保護機構もない、スタック領域も限られる、なんかの制約が多いです。また、マルチタスク環境でmalloc/freeを繰り返されちゃうと・・・(^^;;;;)

        moonbearさんは教育関係の方のようですが、ぜひとも学生さんにC言語+アセンブラの混在プログラムを経験させてやってくださいな。(できればソフトウェアがどうやってハードウェアにアクセスするのかも含めて・・・)

        『メモリが化けるっ!』とクレームを受けて結局ソフトのポインタ関連バグとかタイプミスを追い回させられている組み込みハード屋の切実なお願いでした。

        #まあ、必要は発明の母ともいうように、学生さんが必要性も感じない状況で教育されるのもすごく難しいことだと思いますが・・・。
        親コメント
        • Re:環境依存 (スコア:1, 余計なもの)

          by G7 (3009) on 2003年04月06日 15時52分 (#293742)
          >「C/C++言語+クラスライブラリ+統合開発環境+贅沢なハードウェアリソース」という

          便利な道具が「何も」ない環境での開発もまたナンセンスなので、問題は、
          便利な道具が、GUI(笑)の世界「にしかない」などという残念な状況が
          生じてしまっていないか?という点にあるように思います。

          言ってしまえば、例えばテキスト端末用のSqueak(笑)みたいなものが有ればいいのかな、と。
          つまりOOPばりばりを自分でも書けるし恩恵にも与れるような、テキスト環境、ってこと。

          #elispでいいじゃん、と言えるのは達人の証かも(笑)。
          #OOPとLispとはそんなに遠くない世界なんだけど、それに気付くまでが遠い道だったりしませんかね?

          うーん。というわけで、Eclips(だっけ)はどうなんだろう?と最近気になってるところ。
          GUIなんざはっきり言って(GUIアプリのビルダーが欲しい時以外は)要らないんだけど、
          なんか色々なプラグインが開発効率を上げるうえで便利だそうじゃないですか。
          しかもそれらの中の幾つかはきっと、単にテキスト環境でも既に出来てることのラッパ(or再実装)だけじゃなくて
          あの世界の中で初めて生まれたものだって、幾つかあるわけですよね。

          >機械語とC言語ソースの関係(ポインタや静的/動的変数の使い分けがどのように機械語に落ちるのかとか・・・)を概念すら理解しないで

          そりゃそうと、こっちとしては、静的/動的変数の違いと、それらが機械語に落ちるときの違いと、もまた
          区別して理解して欲しいと切実に思っています。

          だって、静的と動的の変数の差って、機械語に縁が無ければ無視できるもの、では決してナイんだもの。

          両者は抽象概念である「寿命」が違う、ってのが話の発端であって、機械語への落ちかたの問題は
          いわば副作用でしかない(笑)わけです。
          だから、機械語に縁のない人でも、「寿命」という概念はきちんと把握していて貰わないとね。

          逆に言えば、機械語に縁の有る人でも、「寿命」と「落ちかた」という二段構えの理解の仕方
          をしておくことは、きっと重要だと思います。
          まさかCPU乗り換えるたびに静的/動的変数の理解のしかたまで変化するわけじゃないですよね?
          変化するのは落ち方の理解のほうですよね?

          >学生さんにC言語+アセンブラの混在プログラムを経験させてやってくださいな

          というわけで、俺が教育者諸兄お願いしたいことはちょっと違うようです(^^;
          アセンブラとかの超実装よりの部分よりもむしろ抽象概念のほうで
          駄目な奴らに悩まされてますんで…
          親コメント
      • by moonbear (4602) on 2003年04月06日 12時55分 (#293673)
        いろいろなプラットフォームで動いてGUIで遊べて教育に使えるものとしてはLEDA [sse.co.jp]やMathematicaもありますね.どっちもそれなりに値段は高いけど.
        親コメント
      • by goubu (3245) on 2003年04月06日 13時42分 (#293695)
        GUI ハックに走らないというのも理由のひとつな Brown University [trolltech.com] とか LEDA [sse.co.jp]。 共に Qt。UNIX、Linux、Mac OS X、Windows のどれでも動きます。
        親コメント
    • Re:環境依存 (スコア:3, 参考になる)

      by tt (2867) on 2003年04月06日 13時33分 (#293691) 日記
      しかし、アルゴリズムだけ習っても実際には全然生かせないのが世の常。

      小学生の算数は非常に具象的なものから始まり、大学の数学では非常に抽象的なものに進みます。

      それと一緒で、最初はアルゴリズム論のような抽象論より、もう少し環境依存でもいいから具体的なものからはじめたほうが知識が身につくのではないかと思います。

      プログラミングのノウハウ [namazu.org]の最後のほうにある、高林さんの友人のコメント、「大学では 1(普遍的なノウハウ)や 2(システムのノウハウ)の「奥義」を教えられるが、中国拳法と 同じで、いきなり奥義を教えられても何もできない」には唸らされました。

      大学でてても全然使えないプログラマばかりな理由の一端はこの辺にあるんだと思ってます。

      --
      -- Takehiro TOMINAGA // may the source be with you!
      親コメント
      • Re:環境依存 (スコア:2, 興味深い)

        by USH (8040) on 2003年04月06日 17時45分 (#293768) 日記

        小学生の算数は非常に具象的なものから始まり、大学の数学では非常に抽象的なものに進みます。

        それと一緒で、最初はアルゴリズム論のような抽象論より、もう少し環境依存でもいいから具体的なものからはじめたほうが知識が身につくのではないかと思います。

        確かに算数は「りんごが3つとミカンが2つ」から入りますが、すぐにそれが「男の子が3人と女の子が2人」というように、個別の事例にとどまらないように注意深くカリキュラムされています。

        プログラミングも同じように具体例からはいってもらってかまわないのですが、環境に依存しないよう、初期から複数の環境を経験すべきように思います。

        自分の経験でも、ある言語・環境から別の言語・環境に移行したときに、元の言語や環境の理解が深まったことが多々あるので。
        親コメント
      • by tanimachi (4564) on 2003年04月06日 14時55分 (#293717) 日記
        同意。どんな環境でもいいから、基本的なプログラムが書けることが前提なんではないかと。

        実際に組んだ上で、方法を思いつかないこと、遅いこと、特定条件下で動作が安定しないことを体験した上でないと、アルゴリズム、オーダー、仕様考察のありがたさって、判らんと思うんです。

        喩えるなら、自国語くらいは自由に扱えないと、文学も哲学もできないでしょう。そんな関係じゃないのかな。
        親コメント
        • by int20 (12391) on 2003年04月06日 15時33分 (#293730) 日記
          どこの大学でもソフトウェア実験はあります。アルゴリズムの実装だけでなく、そこそこのプログラムも作らされます。
          自分でソースを書けない人が多いから問題なのでは。

          main() {
          }

          だけ書いて、あとは参考書のコピーじゃだめなんです。
          #人のコピーもダメよ・・・。
          親コメント
  • >依然
      ...以前ですよね?
    --
    M-FalconSky (暑いか寒い)
  • by G7 (3009) on 2003年04月06日 11時27分 (#293618)
    >果たしてプラットフォームに依存したプログラミングを学ぶことが本当によいことかどうかは、

    まとも(^^;に絵やGUIが出る開発環境で、「非依存」といえるようなものって、何か有りましたっけ?

    メーカーの言い分を真に受けるならJavaは該当することになるが、あれはJava自体がプラットフォームだから、ここでは除外だろね。
    メーカーに囲い込まれる度合いという意味では、単なる「.NETのライバル商品(=同格)」でしかないんだよね。

    依存しないプログラミング環境でプログラムを覚えた、と自負できる人、どれくらい居るっすか?
    大抵、どっかこっかの環境に依存するかたちで、プログラムを覚えるものだと思うけど。
    どこそこの会社のBASICだとか、さ。

    ある意味で非依存は確かに理想なんだけど、逆にいえば「具体的なことを何も出来ない」んだよね。
    非依存といえば身近な奴だとANSI Cくらいなものっすかね。ほら、何も出来ない(藁。
    いや、絵が出来ないことだけをどうこう言おうっていうわけじゃないです。
    絵「も」出来ないし、他の多くの事も出来ない。
    (ANSI) C って、それくらい装備が薄いから。
    ライブラリをヨソから持ってきたらそれはその環境に依存したことになるし、
    ライブラリを自作したとしても自作の対象はその環境自体だから。

    奥まったロジックというかアルゴリズム(やデータ構造やOOP??)の部分では、環境に依存しない色々なことが多いけど、
    そういうのを覚えるのって、むしろ第二段階以降かなという感じ。

    あと、OOPについては顕著な問題なんだけど、言語ごとにOOPアーキテクチャ自体がバラバラなんだよね。
    あるOOPアーキテクチャを覚えるには、その言語自体(そしてC以外の多く(笑)の言語ではそれは直接、言語実装を意味してしまう)を
    覚える羽目になっちゃう。
    #だからOOPは最初に覚えるな、という考え方は本末転倒だと思う。

    抽象的ではありたいんだけど、ゲンジツはなかなかそれをさせてくれない、という感じがしてます。

    Windows(ならではの開発環境)を初心者から取り上げたとして、
    じゃあ替わりにどんな「非依存な」環境を彼に与えることが出来るか?ってーと、
    そんなものは無い、んだよね。
    LinuxでもBSDでも駄目っすよ。CででもUnixならではの関数は使っちゃ駄目なんだから(笑)。#RedHatも名を挙げられてるなら尚更ですね。

    で、
    実際には何をやればいいかってーと、個々の環境依存な状況に「甘んじ」つつ、
    それで学んだことを頭の中で非依存化(抽象化)する、という形になるんじゃないかな。
    え?それを出来るならもう学ぶ必要は無いって?うーん?(^^;
    • 多くの利用者がいるかはともかく、仕様が完全に公開されていて多くのプラットフォームで動作するX Window Systemはプラットフォーム非依存といってもよいのではないですか?XlibとXtはCが存在する環境なら標準で提供されていますし。テキストエディタとCコンパイラとXlibさえあればとりあえず開発環境でしょう。私はGUIをこれで学びました。
      親コメント
  • by abilitei (1889) on 2003年04月06日 12時26分 (#293654)
    うちの高校は、プログラミング実習はWideStudioにしました。OSが
    Windows2000とLinuxの2種を使用していますので。
    でもPICの実習にはPIC C Liteを使うため、MPLABを使ってます。

    依存も非依存も何がしたいのか、が問題なのではないかと。
    目的の無いプラットフォーム依存が問題なのではないかな?
  • by ikemo (901) on 2003年04月06日 14時40分 (#293711)
    プラットフォーム非依存はつまんねーので却下。
    個人的にはこの意見 [srad.jp]が近いです。

    ただ、最初に学ぶ環境は重要だと思います。
    出来れば、背景となる思想がしっかりしているものがいいですね。
    昔ならやっぱりNEXTSTEPがお勧めだったのですが(^^;)、
    今ならJavaかなぁ。GUIもそこそこ使えるし。.NETでもいいけど、Javaの方がシンプルそうだし。

    # プログラムの実力より、視野を広く持てる人が少ないのが最近の不安。
  • 相手は初心者 (スコア:1, すばらしい洞察)

    by Anonymous Coward on 2003年04月06日 15時29分 (#293727)
    初学者相手なんだし、うだうだゴタクを並べてもわかりませんよね。

    ここの議論には「面白い」の一言も書いてないつまらない人ばかりだ :-p
    • by tanimachi (4564) on 2003年04月06日 21時40分 (#293875) 日記
      荒らし扱いになっているけど、これはまともな質問ではないのか?

      プログラムってパラダイム転換の一種なので、「数学が面白い」程度には面白いと思う。つまり、どんなに工夫しても、半分以上の人には面白いと思ってもらえないってこと。

      みんなに良質なきっかけを与えることが大事で、無理やり面白いと思わせようとするだけ無駄……かというと、数学でも面白く教えられる先生がいるからなぁ。ただ、言語や環境よりも、教師のほうがよほど重要でしょう。

      さて問題は、数学が嫌いな人にも四則演算を身につけさせるのと同様、プログラム初歩を身に付けさせることなんだが。これは九九と同様、ある種の調教であって、面白いなどというものではないという意見はいかがでしょうか。

      # いまのところ、プログラム技能と教授の能力は反比例しているように思える……
      親コメント
      • by Anonymous Coward on 2003年04月07日 8時46分 (#294083)
        同意。

        まあ、ここにいる人たちは自分と他人を勝手に重ねてしまう「自分環境依存」タイプなので、
        どうしても「自分の考えに従えばみんな面白いと思う」になってしまうな。
        でも、実際は人それぞれな訳で、
        その人が一番興味を持てるところから入るのが一番だと思う。

        とりあえず、環境うんぬんの前に、まず「自分環境依存」をやめないと。(w

        ># いまのところ、プログラム技能と教授の能力は反比例しているように思える……

        プログラミングって「探求」だからじゃない?
        やっぱりそういうものに没頭すると周りが見えなくなるし。

        プログラム言語を覚えるたびに人間の言語を失っていくのかも…。(w
        親コメント
  • 深く学ぶことできますから。
    ハードウェアというかコンピュータがどうやって動いているのかもより身近だと思いますし。
  • 卵から孵った雛は、最初に見たものを「親だ!」と認識します。
    最初のうちは、その親にしっかりと付いていきます。





    ということで、早く親離れしてね。
    --

    ----------------------------------------
    You can't always get what you want...
typodupeerror

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

読み込み中...