アカウント名:
パスワード:
すくなくとも、JAVAでは領域計算量のセンスを磨かせる演習は困難じゃないですか。
あと、組み込みCPUのブートとか、データセグメントの初期データをROMからRAMに転送するとかいった当たりのセンスの涵養がサッパリ。 某家電メーカーの知人は、そのあたりができる技術者は皆40代以上だと嘆いていました。
教育に使う言語は、将来その言語でプログラミングして喰ってゆくかどうかで選ぶものではありません。 プログラミングの本質を身につけるのが目的。言語は、仕事で使えと言われた言語をその時点で勉強して使えばいいのだし。 将来お手軽言語さえ知ってれば困らない職場で定年まで居られるか、抽象度の低い言語のセンスがないと辛い職に行くか、どちらの可能性もある学生さんを教育するんですから、目先の楽ちんさで将来を限定してしまうのはよくありません。
言語による「致命的な差異」など存在しないという点については同意しますが、Javaしか知らないと自らの記述したJavaのコードが「複雑怪奇なものになっている」ということなど、なかなか自分で気づくことができません(「そんなもんだ」と自分自身で納得してしまうから)。 しかし他の言語を知っていると、他言語での実装と簡単に比較できる、つまり「自らのやっていることを振り返りやすい」というメリットが出てくるわけです(実際に実感しています)。
「言語に精通する」という目標を「山の頂上を目指す」という目標になぞらえてみると、Tatenon氏の「まずJavaだけに専念する」という主張も「他の言語とともに言語を学ぶ」という主張も「単なる別ルート」であり、どちらも間違ってはいないと思います。しかし、Tatenon氏のルートはかなり険しいのではないかと思います(完全無欠のカリキュラムがあり、神の如く完璧な先生の元で教われば最短距離で頭頂可能だと思いますが、現実問題としてあり得ない)。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond
別に言語は関係ないと思うけど (スコア:5, すばらしい洞察)
もう随分前から語りつくされてることじゃないのかな?
向き不向きもあるから、自分の目指す道に応じた言語を習得すれば良いと思うけど。
逆にどちらにしても、習得が中途半端なレベルではそもそも使い物にならないわけだし。
母国語を喋るのと同じ感覚でコードが書けるようなレベルまで教育しないと意味が無い。
それができないなら言語に関係なくカリキュラムに問題があるだろうとは思う。
JAVAが引き合いに出されてるが、本当の意味で『JAVAの限界を感じる』程JAVAを使いきれる人間を育ててるかってことが
問われるべきではなかろうか。そこまで極めていればそうそう他の人間に引けをとることはなかろうし、
自分が本当に必要とする言語も見えてくるはずだから。
# BASICでなんでもできると思ってた時代が私にもありました。
# 86ASM/C/C++/JAVAを業務で使ってるけど、まだまだ全然使いきれていない。
# まだまだ功夫が足りんということか・・・
Re: (スコア:5, すばらしい洞察)
すくなくとも、JAVAでは領域計算量のセンスを磨かせる演習は困難じゃないですか。
あと、組み込みCPUのブートとか、データセグメントの初期データをROMからRAMに転送するとかいった当たりのセンスの涵養がサッパリ。 某家電メーカーの知人は、そのあたりができる技術者は皆40代以上だと嘆いていました。
教育に使う言語は、将来その言語でプログラミングして喰ってゆくかどうかで選ぶものではありません。 プログラミングの本質を身につけるのが目的。言語は、仕事で使えと言われた言語をその時点で勉強して使えばいいのだし。 将来お手軽言語さえ知ってれば困らない職場で定年まで居られるか、抽象度の低い言語のセンスがないと辛い職に行くか、どちらの可能性もある学生さんを教育するんですから、目先の楽ちんさで将来を限定してしまうのはよくありません。
Re:別に言語は関係ないと思うけど (スコア:3, 興味深い)
だったら別にJAVAでエミュレーター書かしてもいいわけで。(極論すぎますけど)
元コメでも言ってますが、中途半端に色々使えるくらいなら、いっそ何でもJAVAで書けたほうがいいと。
JAVAでは実現が難しいことがわかってから、CなりLISPなり他の言語をやっても全然遅くはないし、
その方が本質がわかるはずです。
そもそも学生の演習レベルや、アルゴリズムの習得といったレベルで、言語による致命的な差異があるとは思えません。
"Hello World"に毛が生えたようなコードが、CとJAVAでどれほど違うというのか。
もちろん向き不向きがあるので、アルゴリズムによってはJAVAでは複雑怪奇なコードになるのにLISPだと数行で書けるといった違いはあるでしょうけど。
それでも一度JAVAで書いて苦労する方が、むしろ勉強になると思います。
『目的次第では、JAVAは決して楽な言語ではない。万能な言語ではない』
コレが理解できて、やっとスタートラインだと私は思います。ハンドル握らせるのはそこからです。
元の話がJAVAを引き合いに出してるのでJAVAと書いてますけど、これをCに変えてもLISPに変えてもアセンブラやCOBOLに変えても
私のスタンスは変わりません。だって、同じことですから。だから「言語は関係ない」と申し上げております。
以下はちょっと話がそれますが。
実際使ってる人なら痛感してると思いますが、JAVAの便利さは時に足枷にすらなります。
これはC等でも同じことで、それゆえにインラインアセンブラみたいな技術がありました。
JAVAはVMを使ってコンパイラとインタプリタの両方の利点を持つ中間言語コンパイラですが、
VMとコンパイラの作り方次第でネイティブコンパイルができないわけではありませんし、そういうソリューションも存在します。
これはまぁ極論ですけどね。最終的に動いてるのは何で書こうがマシン語なんです。
# そもそも学生が集まらないでは意味が無いし。
# 最終的に必要な知識が備わっていないというなら、それはやはり教え方の問題でありカリキュラムの問題ではないでしょうか?
Re:別に言語は関係ないと思うけど (スコア:3, 興味深い)
言語による「致命的な差異」など存在しないという点については同意しますが、Javaしか知らないと自らの記述したJavaのコードが「複雑怪奇なものになっている」ということなど、なかなか自分で気づくことができません(「そんなもんだ」と自分自身で納得してしまうから)。 しかし他の言語を知っていると、他言語での実装と簡単に比較できる、つまり「自らのやっていることを振り返りやすい」というメリットが出てくるわけです(実際に実感しています)。
「言語に精通する」という目標を「山の頂上を目指す」という目標になぞらえてみると、Tatenon氏の「まずJavaだけに専念する」という主張も「他の言語とともに言語を学ぶ」という主張も「単なる別ルート」であり、どちらも間違ってはいないと思います。
非線形な世界では、こまめな進路補正が欠かせないのです。しかし、Tatenon氏のルートはかなり険しいのではないかと思います(完全無欠のカリキュラムがあり、神の如く完璧な先生の元で教われば最短距離で頭頂可能だと思いますが、現実問題としてあり得ない)。
Re:別に言語は関係ないと思うけど (スコア:1)
それは確かにそうですね。w
でもコンピューターでは最先端を走ってる(はずの)アメリカの大学で、しかもプログラミングを学ぶ学生たちには
この位険しい山を越えて欲しいなとは思います。(勝手過ぎるのは重々承知で
またそうでなければ、
>このままでは海外の安価なアウトソース先にたやすく置き換えられてしまう程度の能力しかない「プロフェッショナル」しか育てられなくなる
というEdmond Schonberg氏やRobert B.K. Dewar氏の危惧は、今後現実となっていくでしょう。
そういう意味では、日本も同じだと思います。
大学出たって、易しい言語で易しい処理しか書けないなら、これから先の時代プロフェッショナルである必要は無いし、またプロフェッショナルたり得ないでしょう。
デザイナーでも書けるようなコードしか書けないプログラマーに存在意義なんてありませんから。
高度な知識を必要とする言語で書くことができたって、同じ処理が別の容易な言語で書けるのであれば、やはり駆逐されていくしかないでしょう。
同じ入力から同じ出力が得られるのであれば、何で書いてるかなんて使ってる人間には関係の無いことですから。
頂上に到達するならどの道を通っても同じだと思います。大いに同意です。
それだけに、コースを設定する『教育者側』の責任は重大だと思います。
「基礎は教えた。後はがんばれ」って絶対壊れない棍棒数本渡して魑魅魍魎跋扈する森に放り出すのも、それはそれでアリかなとは思いますが、
放り出されたレベル1勇者たちは少々気の毒な感じがしてなりません。
そういう意味では、最初からエクスカリバーを持たせようとする私の方がむしろ甘いのかもしれませんね。
Re:別に言語は関係ないと思うけど (スコア:2, 興味深い)
何れの言語も万能ではなく、得手、不得手があるのは同意ですし、そういう意味で、元発言で言われていることの大半には同意なのです。
ただ、その結果として (教育するに当たって)「言語は関係ない」と括られてしまうところには異論がありまして、結果として「どの言語でも良い」と結論付けることはできないと私は思っています。
どの言語も万能でなく、適用領域が異なってくるという面では同意して頂けると思う (コメントを辿ると同様のことを仰っていると思います) のですが、その上で、私が強く感じているのは、それぞれの言語を習熟する過程で身に付くプログラミングのアプローチが異なるのではないか、という点です。
これまで様々な言語を使って (本当の意味で『限界を感じる』程、使い熟すまでには至っていませんが) 来た中で感じていることや、他の様々な言語を習熟されている方々からの話を聞いていても、やはりそれぞれの言語が持つ特性や文化、言語設計の方針などによって、問題領域の捉え方や解法へのアプローチが異なってくる様に感じられるのです。
非常に本質的で抽象度の高い問題意識に関して言えば、「言語なんて皆一緒だ」と括ることができると思うのですが、「教育」という観点に立ったとき、教育対象となる人々に学ばせて実効性のある事柄を考えると、どの言語でも良いとは言えないかなあ、というところでしょうか。
教育の目的がある程度限定的な問題領域に対するプログラミング能力ということになれば、その目的に即した言語を習熟させることになるでしょうが。
また、同じ理由から、何れか一つの言語ではなく、幾つかの言語について学ぶことにも意義があると感じています。これについては、初学者がある程度の素養を身に付けるまでは対象を絞った方が良いという考え方もあるとは思いますが。
どうも上手く説明できなくてすみません。
個人的な意見としては、この様な観点で、プログラミング初学者に最初に学んで貰いたいのは Lisp/Scheme かなあと愚考する次第です。他の方々からは異論もあるでしょうが。
Re:別に言語は関係ないと思うけど (スコア:1, 参考になる)
将来、苦労も勉強もしなくなるのが怖いなあと思います。
(Javaだと)書きにくいコードやアルゴリズムを、
忌避するというクセがついてますね、
昨今の人らは。職場で見てると。
学校のほうがむしろ「こういうアルゴリズムを頑張って書けよ」と命じる力を振るう
ようですが、
シゴトコードだと、
より不適切なアルゴリズムでも、
レビューを通ったりします。
伝家の宝刀「他の人には理解できないから」
って奴です。
Re:別に言語は関係ないと思うけど (スコア:1)
それを理由にレビューが通らないのが正常で、通ってしまうのが問題なのでは?