プログラミングに詳しい人に質問です。大学でプログラミング経験の学部一年生向けにプログラミングを教えることを想定しています。週1コマ×半年程度の限られた時間で、プログラミングとはどういうものかという本質を教えたいのですが、どの言語を使うのが適切でしょうか。

回答の条件
  • 途中経過を非公開
  • 男性,女性
  • 20代,30代,40代,50代,60代以上
  • 登録:
  • 終了:2008/09/18 12:57:52
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答100 / 100件)

Q01まずは「プログラミングに詳しい」かどうか判定するための質問です。正しいものを選んでください。これに答えられない方は解答をご遠慮ください。(択一)

Schemeは1.5からオートボクシングの機能をサポートした19
Schemeはインデントによってブロックを表現する23
Schemeは多くのレンタルサーバに標準でインストールされている14
Schemeでは関数がファーストクラスのオブジェクトである6
Schemeの文の終わりはセミコロンである7
Schemeは純粋関数型言語であり、副作用はモナドでくるむ必要がある8
Schemeは型に厳格なため整数の加算と浮動小数点数の加算の演算子が異なる4
Schemeは関数の呼び出し時に括弧を省略することが出来る6
Schemeのマクロ定義には#defineを使う2
Schemeの言語仕様はキューマシンとしての実装に適しているため並列化が容易である6
Schemeのブロックはbeginで始まりend.で終わる3
SchemeのコンパイラとしてはGHCが有名である2
合計100

Q02どの言語がよいでしょう(複数選択)

機械語(かそれに近いハードウェアアーキテクチャに密結合なもの)10
Scheme14
Haskell9
PHP16
Python14
Ruby20
なでしこまたはその他の日本語プログラミング言語9
Perl15
C++(better Cとしてではなくgenericsなどに言及するため)10
Java11
C(C++ではない)12
Brainf*ck, Befunge, Pietまたはそれに類したパズル的言語5
合計100

集計

×
  • id:ootatmt
    意味のないアンケート結果になっていますね。
  • id:van-dine
    個人的にはVisualBasicがいいと思うんですけど…選択肢になかったんで。
  • id:u1p
    回答者を晒せるアンケートオプションがあれば良いのに。
    不良回答者としてフラグ立てる機能とか、複数の質問者から、そのフラグがいくつか集まった時点でポイント没収・Question参加不能とか。
  • id:australiagc
    VB/C#.NETは? 視覚で理解できるし。
    半年で教えるのにコマンドライン型は(生徒が)辛い。
    特にアセンブラ、C、Haskellは論外だと思う...
  • id:nishiohirokazu
    とりあえず20人中19人がQ1に不正解というのは想定外でした。もう少し「適当な解答をする人」にたいして抑止力になってくれるかと思ったんですがね。。
    個人的にはQ1でSchemeのコードをちらりと見たことすらないとしか思えない解答をしている人たちは今後自分の質問への回答を拒否したい気分です。IDさらさなくてもいいから回答拒否ユーザに登録だけでもさせてくれないかな。。。
  • id:nishiohirokazu
    視覚的に理解しやすい言語、というのは選択肢に入れておいた方がよかったですね。
  • id:standard_one
    言語を教えるのとプログラミングを教えるのは本質的にまったく別の事ですよ。
    順接、分岐、繰り返し(あと呼び出しも)が実装されてればなんでも良いと思うけど、卒業まで時間がある学生に教えるならCASLかな。
    国家資格とるのにも使えるし。
    特定言語だと教える人の趣味性が出すぎる危険と隣り合わせだと思いますよ。
    特にこの質問者さんはその傾向が強そうに感じられます。
  • id:kappagold
    質問かいわしの方が良かったみたいですね。
    質問なら勧める理由も書いてもらえますし。
    回答履歴を見て、詳しそうな数人にIDコールをかけておくというのもいいかも。
  • id:dev_zer0
    インデントは重要だろう
    だが、インデントに意味があるSchemeが残念な結果になってるが
     
    構造化プロブラミングでは順接、分岐、繰返しで全ての表現ができるが
    順接、分岐、gotoでも全ての表現が可能なんですよね。
    見やすいかどうかは別として
  • id:a14
    Schemeなんて誰も使っていないという結果を良く示したアンケートだ
  • id:practicalscheme
    「使っている/使ってない」と「知っている/知っていない」は違う。
    コンピュータサイエンスの教育を体系的に受けた人なら、日常的にSchemeを使ってなくてもQ1には答えられると思う。

    このアンケート(およびそれに対する反応)は、「プログラミングに詳しい」と「コンピュータサイエンスの基礎教養がある」ということが実はあまり関係が無い(と思われている)ということを示しているのかもしれない。
  • id:a14
    >コンピュータサイエンスの教育を体系的に受けた人なら、日常的にSchemeを使ってなくてもQ1には答えられると思う。
    これだからScheme使いは非常識だって言われるんだよ。Lispなんてマイナー言語使うやついるわけねぇだろ。
  • id:practicalscheme
    おっと、釣られちゃいますよ。
    「使ってなくても答えられるでしょ」という私の発言に、「使うやついるわけねぇだろ」というコメントは噛み合ってないですね。

    あと、別に計算機科学を体系的にやらなかったらプログラミングができないとかそういう話はしてませんので、念のため。
    プログラミングを教えるのと計算機科学とは関係ないだろ、という主張はそれはそれで成り立ち得ると思います。
    Q1を見れば、質問者さんは大学の専門課程程度の計算機科学の素養を問うていることは明らかなので、それを汲んだ上で「そんな知識、プログラミングには必要ねぇ」という議論をなさればよろしい。

    Schemeがなぜ基礎教養かというと、レキシカルクロージャを言語の根本的なモデルの一部として採用した初めての言語だからです。実際に現場で使うかどうかにかかわらず、クロージャの原理、実装モデル、最適化手法などを知るのにはもってこいの言語ですし、そのために多くの計算機科学専攻の入門コースで使われています。

    また誤読されると困るので補足しますと、「だからSchemeを教えるべき」と言っているんじゃないですよ。このアンケートは、「Q1に答えられる程度に色々な言語を知っている人」に答えて欲しい、と言っているだけです。Schemeが使われているかどうかという話は全く関係ないですね。
  • id:hogege
    「プログラミングとはどういうものかという本質」は「プログラム言語」によって
    左右されないので、どの言語でも「プログラミングとはどういうものかという本質」に
    違いはないよ。

    言語により違いがあるなら、それは「○○言語の特性」であって
    「プログラミングとはどういうものかという本質」ではないし。
  • id:misho
    コメ欄もまたレベルが低いなぁwwwゲラゲラゲラw
  • id:practicalscheme
    > 言語により違いがあるなら、それは「○○言語の特性」であって
    > 「プログラミングとはどういうものかという本質」ではないし。

    まさしくその通りで、何が「○○言語の特性」であって何が普遍的なものかを区別するには色々なパラダイムの言語を知ってないとならないわけですね。

    Q1は、色々なパラダイムの言語を知っている人はニヤリとする質問になっています。「Schemeという特定の言語の知識」を問うているように見えたなら、その時点でこのアンケートの対象から外れてるということです。
  • id:hogege
    >Q1は、色々なパラダイムの言語を知っている人はニヤリとする質問になっています

    です。
    色んな言語の特性に対して主語をSchemeとして記述されてるだけですしね。
    まぁ私自身Scheme知らないんで2つまでしか絞り込めず未回答。
    まぁ調べりゃわかる事だけど、そうした時点で知らない言語はQ2の回答から除外しちゃうし。

    Q1のそれぞれの主語を「Scheme」だけじゃなく色んな言語をちりばめた方が、
    Q1に対する誤解を受けにくかったかもしれませんね。
    (選択肢を考えるのにもう一手間必要になっちゃいますけど。)

    質問者さんと意図とはかけ離れた結果になってるようですが、
    自分にとっては別の意味で面白い結果になりましたね。
  • id:r24
    質問者の回答者を馬鹿にした偉そうな態度が鼻につく
  • id:australiagc
    何やらスゴイ議論になってたんだ(笑)
    ではついでに釣られてツッコミ入れますね~。

    >>Schemeがなぜ基礎教養かというと、レキシカルクロージャを言語の根本的なモデルの一部として採用した初めての言語だからです。

    歴史や起源が先端技術の優劣を論じる上での基礎教養というのはちょっとおかしくありませんかね?
    磁気テープの構造が分からないならブルーレイとHD DVDの優劣を語るべきではない。
    第一国立銀行の開業当初の利率を知らなければ来年の利率は決められない。
    古代インドの民主制システムが分からなければ民主党に投票すべきではない。
    な~んてな事になっちゃうし。

    大体もって、欧米の理系大学が.NETはじめ最新規格を教えてるのに、日本の大学生がまだLispなんか語ってたらちょっと先輩として悲しい・・・。
  • id:practicalscheme
    もうとことんいっちゃいますよ。

    > 歴史や起源が先端技術の優劣を論じる上での基礎教養というのはちょっとおかしくありませんかね?

    私の書き方もまずかったな。反省。
    「全てのものごとは起源を知ってないと論じてはだめ」と言いたかったのではないのです。

    この質問の対象はプログラミングを教える立場の人でしょう。ブルーレイとHD DVDの優劣をユーザとして語るなら印象論でも表層的な知識でも構わないでしょうが、「学生に次世代の光学記録デバイスの設計法を教えるのにどの教科書が良いか」っていうレイヤの質問なわけですよ。だとしたら答える人に対して、これまでの光学記録デバイスの開発上の代表的なブレークスルーの知識を要求してもおかしくはないでしょう。

    これからレキシカルクロージャが主流の言語においても重要な機能になってゆくことにはあまり異論はないと思うのですが、クロージャがどのようにコンパイルされ実行されるか、またどのような最適化が可能か、といった議論をする上で、クロージャ最適化の基本的な論文にあたろうと思えば、Schemeの知識はやっぱり基礎教養じゃないでしょうか。それを学生に教えるかどうかって話ではないですよ。「何を学生に教えるべきかを考える立場の人間」ならそのへんは知っててもいいんじゃないか、って話です。

    まあこの質問自体、あんまり厳密な話をしてないのでツッコミどころはあるんですが(例えば「プログラミングの本質」って何? とか)、Q1で問われている言語とQ2で選ぶ言語と、対象が違うってことに気づいてない人がいて話が混乱してる感じがします。Q1は「言語を選定する側=教える側」のバックグラウンドに対する問いで、 Q2は実際に学生が触れる言語に対する問いですね。教える側のバックグラウンドにSchemeを教養として要求することと、Q2で対象としている学生にどの言語を教えるべきかって話は*全く*別ですよ。学生がみんな将来「教える側」に回るわけじゃないんですから。
  • id:r24
    >Schemeの知識はやっぱり基礎教養じゃないでしょうか
    ねぇよw
    SchemeはBrainf*ckと同じレベル。「こんなんも出来て面白いですね」って言語
  • id:Bookmaker
    >「何を学生に教えるべきかを考える立場の人間」
    そんな人が一般人が集まるはてなでどれだけの数がいるか、またはてなのアンケートの機能で誰でも押せるという機能から考えるとたくさん質問を集めて、有効な情報を振り分けることが必要なことぐらいすぐわかりそうなものだが。
    >「何を学生に教えるべきかを考える立場の人間」
    がはてなに数%居るとして、それ以外のユーザーの回答をみて「馬鹿じゃね」と笑う質問者の方が、馬鹿としか思えないな。
    はてなのシステムも理解できないレベルの脳だな。
  • id:practicalscheme
    r24さん、いい線いってる。前半の

    > SchemeはBrainf*ckと同じレベル。

    これはある意味あたりです。ただ、Brainf*ckよりもBoehmのP''と言った方がツボだったかも。
    http://en.wikipedia.org/wiki/P_prime_prime
    P''でもBrainf*ckでもいいですが簡単なチューリングマシンのモデルになっていることがポイントです。

    「基礎教養」っていうのが誤解されてる気がするんですけど、教養として知っていることと、それを実用に直接使うことは別の話でしょう。プログラミングを教えるなら、教える側はチューリングマシンやλ計算を知ってないとまずいでしょうが、だからといって教師が日頃からチャーチ数を使ってプログラムを書いてるわけじゃない。でも、様々なプログラミング言語を「何故そのように設計されているのか」「その得失は何か」そして「それらの要素のうち、どの要素を選んで学生にモデルとして示すか」といった観点から比較するためには基礎となるモデルを知らないとならないわけです。

    Schemeはレキシカルスコープとクロージャを統一して単純にモデル化できること、さらに継続まで含めるとアクターモデルまでひとつの枠組みで説明できること、という点で、基本的なモデルを説明するのに向いているわけですよ。JavaもC#もC++もどうやってクロージャを導入するか議論してたけど、既にそれらの言語にはレキシカルスコープのローカル変数があって、ローカル変数というのはレキシカルクロージャの特別な一形態にすぎない。だからそれらの議論は「全く新しい機能の導入」ではなく、「これまで限定されていた機能をどうやって拡張するか」という議論なわけです。例外システムと継続の関係もそう。Schemeのモデルが唯一の正解ではないけれど、スペクトルの一方の端であることが既にわかっているから「どこでバランスを取っているのか」というふうに議論を位置付けることができるわけです。

    ここまでは、Q1の妥当性についての私の見方です。それでもQ1は偏っている、という議論はあり得ると思いますが、私の主張は「Schemeをネタに使ったことは、Schemeという一言語の知識を問うている以上の意味がある」という点だけです。

    で、もうひとつの論点は、回答者にそこまでを要求することが良かったかどうかってことですね。ただ、設問を読めば、質問者はそのラインをクリアした人に答えて欲しかったということはわかるんじゃないですか。それで回答が集まらなければ、質問者の設けたハードルが高すぎたってだけ。それを指して「はてなのユーザ層を見誤ってるよ」って言うのはいいと思いますよ。ところが蓋を開けてみたら、自分は質問者の対象でないとわかるはずなのに答えている人がほとんどだったと。質問者はそれが自分の期待してた結果と違ってびっくりしたりがっくりしたりしてるだけであって、誰かを馬鹿にしているわけじゃないと思うんだなあ。

    たとえば「最近流行のファッションに関する質問です。次の問題に正解できた人のみ、Q2に進んでください… (各ファッション雑誌の特徴に関する質問) …」というアンケートがあったら、私は全くわからないので単にスルーします。「そんなに難しい問題じゃないでしょ?」と言われたって、知らないものは知らないんだから、別に馬鹿にされたとは思いません。単に自分が対象じゃなかったってだけの話です。今回、馬鹿にされたと感じた人は、どういう点で馬鹿にされたと思ってるんでしょうか。
  • id:australiagc
    すみません、矛先に選んでしまって!

    >>この質問の対象はプログラミングを教える立場の人でしょう。

    まあ、そうなんですよね。確かに「教える内容」としてSchemeが妥当だとは思えませんが、「教える人間の知識」としてはあってもおかしくな、あって当然かも?というところではありますよね。

    ただ、何かを教える時に時系列を辿って順序良く教えるのは最終的にはかなりの効果があるでしょうが、半年程度の期間に「さわり」だけ教えるのには適してないのではないかと思うんですよね。

    例えば、外人に日本語を教えるのにいきなり英語が喋れる学識の高い古典の先生を呼んで、日本語の起源たる漢文を題材に講義をさせるよりは、日本語をやっと覚えたばっかりの外人学生にひらがなや簡単なあいさつ程度を教えさせるだけで事足りると思うんですよね。むしろ、「何が入りやすいか」が分かっているぶんだけ学生ウケするかも知れません。

    プログラミングも同じで、ド素人にいきなりコンピューターサイセンスの学者をあてがって20年前の言語を題材に「プログラミングとはなんぞや」という歴史臭の強い講義を受けさせなくても、ASP.NET以外知らないような学生からとりあえず見慣れたGUIの画面上に「Hello World」を表示させる程度を、気軽にちょちょいと作らせて「プログラミングってのはこんなカンジ」ってのを教えてあげれば十分なんじゃないですかね。

    逆に難しい理論や、淘汰された旧式言語や開発環境を使って物を教えても、学生側としては「うわっ、プログラミングって難しいからイヤだな」という先入観を植え付けられるだけですし。高校や大学でも、はじめの方の授業はJavaやVBの様なマウスをちょちょいといじくって組める言語を習いましたし、SchemeやHaskell含め旧式のあまり使われなくなっている言語の歴史を習ったのは大学2~3年目の授業だった気がします。

    それにこのご時世スコープに関する理論を教える前に、まずはオブジェクト指向がどんなものかを教える方が先じゃないですかね?オブジェクト指向言語のスコープはオブジェクトに依存するわけだし。その点じゃSchemeの知識があっても、オブジェクトを語れないとダメでしょ。
  • id:z11
    >今回、馬鹿にされたと感じた人は、どういう点で馬鹿にされたと思ってるんでしょうか。
    >「Q1ってそんなに難しいですか?簡単な問題のつもりだったんだけど。」
    http://q.hatena.ne.jp/1221971933
    簡単な問題かどうかアンケートしてみました
    質問者にすげーむかつきますね。偉そう
  • id:practicalscheme
    いやあ、私だって何も「Schemeしか語れない」人に学生を教えて欲しいとは思わないですし、大学一年で歴史臭の強い小難しい理論を教えるべきと主張してるわけでもありません。

    上の方で「欧米では…」という話が出てきましたが、私はちょくちょく、米日欧の大学でプログラミングを教えている人と話す機会があります。で、大学の教員でプログラミング講座のカリキュラムを組み立てる立場にありながら、Schemeを*全く*(Q1にも答えられないほどに)知らないという人を想像しがたいのですが、現実にはそういう人は多いのでしょうか。私の知っているサンプルは偏っているんでしょうか。

    オブジェクト指向の話が出てきましたが、その文脈での基礎教養とは、たとえばオブジェクト指向言語を教え始めて、学生に「で、結局オブジェクト指向言語におけるオブジェクトって何なんですか?」と質問された時に、次のURLで議論されているような「特定の言語べったりのオブジェクト指向ではなく、色々な言語を俯瞰した上でのオブジェクトの位置づけ」を踏まえて説明できることです。
    http://d.hatena.ne.jp/sumim/20040525/p1
    http://d.hatena.ne.jp/sumim/20080415/p1
    こういう説明ができない人が、「学部一年向けのプログラミング教育における言語選択」をするのにふさわしいとは思えないわけです。

    で、このくらいの(計算機科学に対する)教養のある人なら、オブジェクト指向言語におけるスコーピングルールのデザインとレキシカルクロージャとの関係も知っているはずだし、もしそれを説明する必要に迫られたらSchemeからネタを拾ってこれることくらい知ってるはずだ、と私は思います。 (もちろんScheme限定じゃなく、インスタンスベースの話がしたければSelf、メッセージパッシングの話をしたければSmalltalk、などいくらでもネタ元はあるわけですが、肝心なのはそれらネタ元を知った上でJavaなりC#なりC++なりを語っているのかどうかってことです。)

    さて、実際に大学でプログラミングを教えている立場の方には共通する悩みがあるように見受けられます。(複数の大学教員 (米国、日本、欧州) から実際に聞いたことです)

    (a) 学生には、特定のプログラミング言語べったりの枝葉の知識 (IDEの使い方だとか、ライブラリの使い方だとか、文法上の落とし穴だとか) だけではなく、言語を越えて普遍性を持つ概念を学んで欲しい。→そのためには言語自体はシンプルなものの方が良い。
    (b) 産業界からは、即戦力として卒業時にJavaやC#がすぐに使える学生を求められているし、学生達も就職に有利になるそれらの言語を学びたがる。→しかし、実際にJava中心のカリキュラムを組み立ててみたら、既存のライブラリを探してきてくっつけるのは得意だが普遍的な抽象化が不得意な学生の割合が明らかに増えてしまった。

    (a)の立場に立って、欧米でもSchemeやMLは初年度のプログラミング言語として教えている大学は多いと思いますよ。ハードウェアアーキテクチャを教えるためにCを組み合わせるところもあるみたいです。
    しかし米国の地方大学になると(b)の圧力が強くなって、(a)方式をやりたいけれど仕方なく(b)にしている、というところも見受けられます。両方をブリッジする言語としてPythonあたりを採用するところもあります (最近、MITが入門コースをSchemeからPythonに変えましたね。カリキュラムはこちら: http://mit.edu/6.01/mercurial/fall08/www/calendar.html )
  • id:practicalscheme
    z11さん、それって

    (大学のプログラミング言語の教育カリキュラムを考えられる人なら) 簡単な問題でしょ

    という意味だと思いますよ。だってそもそも大学の学部一年生のプログラミング講座の言語選択についての質問なんですから。z11さんはそういう立場の方なんでしょうか。そうでなければ最初から関係のない話です。
  • id:z11
    >z11さんはそういう立場の方なんでしょうか。そうでなければ最初から関係のない話です。
    03-5805-9035
    labのほうは公開してないのか?
  • id:z11
    「プログラミングに詳しい人に質問です。」じゃねのか?
    >(大学のプログラミング言語の教育カリキュラムを考えられる人なら) 簡単な問題でしょ
    勝手に話すりかえてんじゃねーよ
  • id:yo-kun
    横槍失礼しますね。


    >今回、馬鹿にされたと感じた人は、どういう点で馬鹿にされたと思ってるんでしょうか。

    この点に関してだけ私の考えを述べさせて下さい。
    私はその原因はQ1のこの質問ではないかと考えます。

    >まずは「プログラミングに詳しい」かどうか判定するための質問です。正しいものを選んでください。これに答えられない方は解答をご遠慮ください。

    不特定多数がいい加減に回答できるアンケートにおいて回答者を絞り込みたいという意図はよくわかるのですが、
    この質問の仕方ですと質問者様は「この設問に答えられないならばプログラミングに詳しくない」と主張されているように取れます。
    そこで、選択肢を見てみるとこの設問に答えられるということはSchemeに詳しいか、
    schemeに詳しくなくても複数のプログラミング言語に詳しいことが必要になっていると思います。

    Schemeに詳しいならば正解がどれか当然わかります。
    もしくは何人かの方が主張しておられる通り、Schemeに詳しくなくとも複数のプログラミング言語に詳しい方ならばあの選択肢はあの言語のことを言っているんだな、とわかります。
    ただし後者はそれでも設問に答えるには十分ではありません。
    Schemeを知らなければ「Schemeももしかしたら該当するかもしれない」という可能性は捨てきれないからです。
    (明らかに違う選択肢もありますが)

    結局「確実に」Q1に答えられる方は少なくともSchemeを知っていることが必要になり、
    nishiohirokazu様は「Schemeを知らないならばプログラミングに詳しくない」と主張しているように取れます。

    これはプログラミングには一定の自信を持っているがSchemeを全く知らない方にとっては
    「あなたはプログラミングに詳しい人ではありません」と言われているように感じるのではないでしょうか?


    以上横槍失礼しました。
  • id:practicalscheme
    私は、プログラミング言語に詳しくなりたい人なので、

    「○○言語を知らずに『プログラミング言語に詳しい』なんて言えないよねー キャハハ」

    とかいう文を見たら、そうか、○○言語もちょっと見てみるかなと思うんですが、
    この文を見てプライドを傷つけられるように感じる可能性もあるということですね。

    でも、そのプライドの根拠って何なんでしょう。

    自分の知らないことを指摘されて、勉強のネタが出来たと喜べない人が、他人に何かを教えることについて(この質問はプログラミングを教えることについてですよね)云々できるんでしょうか。

    それに、「○○言語を知らなくても自分はプログラミングに詳しいと言える」ということを本気で思っているなら、上のように言われても痛くも痒くもないはずで。感情的な反発が出てくるってことは、「自分にはまだ学びたりないことがあるんじゃないか」って薄々気づいているのに、それをプライドの仮面で隠しているからかもしれません。
    感情的にもやもやしたなら、それは仮面を捨てて「もっとプログラミングに詳しい人になる」大いなるチャンスかもしれませんよ。
  • id:Bookmaker
    Q1の質問をschemeでなくCOBOLに置き換えたらどうだろう
    どちらも同じくらい古い言語だし、ユーザーの数で言えばCOBOLerの方がLispユーザーより多いだろう。


    COBOLは1.5からオートボクシングの機能をサポートした
    COBOLはインデントによってブロックを表現する
    COBOLは多くのレンタルサーバに標準でインストールされている
    ・・・

    はぁ?COBOL何てしらねぇよ。ふざけんなボケが。
    というのが標準的な「プログラミングに詳しい人」の反応だと思います。
    言語オタはどっか逝け
  • id:australiagc
    >practicalschemeさん

    もちろん、「Schemeを*全く*知らないという人を想像しがたい」というのはごもっともです。大学のIT系の教師なら知っていて当たり前でしょう。ただ、yo-kunさんが仰ったように、今回の質問では「プログラミングに詳しい人」を指名しているのであって「プログラミングの大学教師として適切な教養がある人」とは意味外が少し異なるのではないか、「Schemeを知らないならばプログラミングに詳しくない」というのは違うのではないかと言う指摘も確かだと思います。まあ、ここはとりあえず置いておきましょう。

    「(b) 産業界からは、即戦力として卒業時にJavaやC#がすぐに使える学生を求められている」という点ですが、こういった商学共同傾向は学部に限らず最近では良く見られる事ですね。確かに個人的にも学問的視点では大学の在り方としてどうかと思う事も多いです。

    ただ、逆に言えば生徒の立場になって考えて見た時に、「教師が満足できる学問的授業」か「就職後に役立つ実践的授業」かと言うと、後者の方が重宝されるのではないかとも思います。結局、生徒はお金を払っている「客」である以上は、「従業員」が客の要望に合わせるのは多少し方が無いのかな、と感じるんですよね。良し悪しは別ですよ、もちろん。

    特にこの意見は欧米の先生達のものですよね?だとしたら、学士と企業の就職斡旋関係がより濃密な日本の大学では、余計に「学問」より「実践」が優先されるのではないでしょうか。身近にこんな例があります。以前大学で講師をしていた若い先生なのですが、院卒で就職したは良いものの、学術的知識ばかりで実践的な技術や経験が乏しかった為に企業で「使えない奴」の烙印を押され、大学に戻って一からカリキュラムを作り直すように提唱していた方が居ました。実際に大学側もその現状に危機感を覚え、グループワークやプロジェクト管理、言語もなるべく最新のものを優先的に教えるようにしたそうです。

    何より前のコメントにも書きましたが、生徒が「プログラミングって難しい」とか「プログラミングって面白くない」という先入観を持ってしまったらお仕舞いですし。もしnishiohirokazuさんが教える生徒が今後4年間プログラミング漬けになる予定の情報工学科生とかなら名誉挽回の機会があるので良いですが、それ以外の学科の生徒さんだった場合、一生「君子プログラミングに近寄らず」なーんてなったら逆効果ですし。

    結局、学校法人もビジネスには変わりはないので・・・。自分で言ってて気分の良い言葉じゃないんですけどね。
  • id:rssi
    >とかいう文を見たら、そうか、○○言語もちょっと見てみるかなと思うんですが、
    いや、普通にプログラマなら知らない言語でもさわってみると思うよ。
    それで、schemeの普及率を考えてみて欲しい。
    まあ、実用言語ではないね。
    おもちゃみたいなものかな。
    真っ当なプログラマなら相手にしない言語だね
  • id:yo-kun
    >practicalscheme様

    ・プログラミングに詳しい
    ・プログラミング言語に詳しい

    まずこの2つの言葉に違いがあると受け取るか、違いが無いと受け取るかだと思うんです。
    正確に言うと
    プログラミングに詳しいならばプログラミング言語に詳しい。
    もしくは
    プログラミングに詳しいと主張する人はプログラミング言語に詳しくなければならない。
    という命題を真と考えるか偽と考えるかです。
    上述のコメントを拝見する限りpracticalscheme様は真と考える方のようですし、
    私は偽と考える人間です。

    もしご質問が
    「プログラミング言語に詳しい人に質問です。」
    「プログラミング言語に詳しい」かどうか判定するための質問です。
    であれば、本件に関して質問者様に文句を言うのは完全に筋違いだと思います。

    ですからpracticalscheme様が例に挙げた
    > 「○○言語を知らずに『プログラミング言語に詳しい』なんて言えないよねー キャハハ」
    これはまぁ「キャハハ」となるのはわかります。(これを他人に口にする方の人間性は肯定しかねますが。)

    > 「○○言語を知らずに『プログラミングに詳しい』なんて言えないよねー キャハハ」
    これは「は?」となります。
  • id:practicalscheme
    australiagcさん、詳しい意見をありがとうございます。
    まさしく、「基礎教養」と「実践」をどうやってバランスするか、が大学に課せられている課題だと思います(なお、私の出した意見は欧米の大学ばかりではなく、日本の大学の先生も含みます)。ちなみに「学問」というのはその先にあるものなので、ここでは触れません。

    米国の場合は、講義で基礎をやりつつ、演習で実践を学ばせるという方式が充実しているような印象がありますね (たとえば、前のコメントで上げたMITの「電気電子工学・情報科学入門」講座の内容の充実ぶり)。スタッフもそうとう充実していないと実現できないことではありますが、やはり理想は「すぐに手を動かしてものを作れるスキル」と「何十年も変わらない、基礎となる知識」とを両方学んでもらうことだと思います。プログラミングの世界の表面的な流行は速く、今日勉強したライブラリは数年後には古くなっているでしょうが、基礎となる理論がころころ変わっているわけではありません。理論だけを学んだ頭でっかちの学生を作っちゃまずいですが、かといって前者だけを学ばせて、今後何十年かのその学生のキャリアにおいて目先の流行だけを追うのにあくせくさせてしまうのもまた罪作りなことだと思います。

    現実には予算も時間もスタッフも足りないので難しいことではあるのですけれどね。

    Bookmakerさん、
    そこでWebでCOBOLをざっと調べてみる程度のこともせずに、自分は「プログラミングに詳しい人」であって「学生に教える言語の良し悪しを議論できる」と思える自信はいったいぜんたいどこから来るのでしょう。
    プログラミングなんて、他のエンジニアリングの分野に比べてもまだ石器時代みたいなもので、わからないことだらけですよ。縄文人が壷の作り方の流儀をあれこれ議論しているようなものです (もちろん、私も質問者さんも縄文人です)。偉そうな物言いが鼻につくっていったって、未来の人から見ればどっちも泥遊びをしているようにしか見えないんじゃないですか。ならあっちの泥の方が具合が良いって聞いたら試してみればいいじゃないですか。

    「偉そうな質問者に馬鹿にされた」と怒っている人こそ、エンジニアリングを舐めているんじゃないかと私は感じます。

  • id:Bookmaker
    >「偉そうな質問者に馬鹿にされた」と怒っている人こそ、エンジニアリングを舐めているんじゃないかと私は感じます。
    質問者はサイボウズ・ラボの新入社員だろ
    >(大学のプログラミング言語の教育カリキュラムを考えられる人なら) 簡単な問題でしょ
    大学のプログラミング言語の教育カリキュラム何て関係ないし。


    この質問自体が「釣質問」だって判っていってるのかい?
  • id:practicalscheme
    Bookmakerさん、

    > 大学のプログラミング言語の教育カリキュラム何て関係ないし。

    質問にはっきり「大学でプログラミング経験の学部一年生向けにプログラミングを教えることを想定しています。」って書いてあるじゃないですか。(「プログラミング経験の」は「プログラミング経験の無い」のtypoだと思いますが)

    > この質問自体が「釣質問」だって判っていってるのかい?

    私は最初から釣られますよってはっきり書いてるじゃないですか。
    釣られた者同士でも、何人かの方とは有意義な議論が出来ていると思っていますよ。

    yo-kunさん、
    確かにその二つの違いはあるかもしれません。質問文自体にツッコミどころがたくさんあったのも騒がしくなった大きな理由のひとつでしょうね。
  • id:ytakenaka

    僕は傍観者の一人だったんですが、
    practicalscheme さん>「偉そうな質問者に馬鹿にされた」

    エンジニアリングを舐めてるととらえられるとそれは違うのではないかと思いました。おそらく、ここの人が怒ってるのは西尾さんの姿勢の影響が大きいと思うからです。指導者になるには「ノイズ源」など不適切な発言が目立ってたと思いました。答えた人たちに対して敬意が感じられないんですよね。100人もいれば真面目に答えた人もいるし、1ポイントを稼ぐための人もいるでしょうけど、たとえ少数であっても真面目に答えた人の心を傷つける発言は指導者になっていく人間として不適切ですから。

    ブログのこのアンケートの感想についての発言も含めて適切だったろうか?ということがありますね。その点も含めて、このアンケート結果から自身がとった行動や問題設定にあったから。また、アンケートに答えてくれた人たちに対して敬意がないところは、反省しなきゃいけない点だと思いますよ。

    この荒れようを納められるのは西尾さんしかいないですよ。それも不適切な行動をとったことに対して、頭を下げることです。
  • id:emitter
    >「偉そうな質問者に馬鹿にされた」と怒っている人こそ、エンジニアリングを舐めているんじゃないかと


    おいおい,望む結果が得られなかったケースに遭遇して
    実験方法に不備が無かったか検証もせず他人にそれを指摘されても聞き入れず
    「実験サンプルが粗悪だ」
    「実験装置に不備がある」
    とか言ってる奴はそれこそエンジニアリングを舐めてるんじゃねーか?
  • id:practicalscheme
    えーっと、質問者さんの手続きについては私は話題にしていないんですが、emitterさんが持ち出したので触れることにすれば、確かに手続きに穴があるのでエンジニアリング的には正しくないですね。

    *質問者さんの態度のいかんにかかわらず*、「○○を知らないならプログラミングに詳しくないでしょ」(A)と言われた際に取り得る態度としては、

    (1) ○○について知っており、(A)の真偽を判断できる。
    (2) プログラミングという広大で未成熟なエンジニアリング分野に関して一通り把握しており、○○について知らなくても(A)の真偽を判断できる。
    (3) ○○について知らなくて、プログラミングについてもまだまだ学ぶところがあると思っているので、(A)の真偽については保留し、○○を調べにゆく、もしくは自分はプログラミングに詳しくないのかもしれないという可能性を受け入れる

    しかないわけですよ。で、(1)や(3)の人は(A)を聞いても馬鹿にされたとは思わないと思うんですよね。
    怒るとすれば(2)の人だろうけれど、私はそれはプログラミングという分野を過小評価しているand/or自信過剰なんじゃないかなあという印象を持つのですよ。
    あくまで印象論にすぎないので、本当に(2)に当たる人がいるのなら謝りますが。
  • id:ytakenaka
    practicalschemeさん>*質問者さんの態度のいかんにかかわらず*

    と言う仮定の元でしたらおっしゃる通りです。だから、正しいことをおっしゃってますよ。ただ、この仮定がこのアンケートで起きたことを正確に理解できるのか?なのだろうね。根本(ここで起きていること)に帰ったときに、質問者の態度の問題は外せないなと思ったんですよね。だからコメントさせてもらった。

    少なくとも教育に携わることを想定している方ですから、教育者に見合うだけの思慮深さを持ってもらいたかったかな。
  • id:r24
    Scheme(Lisp)を知らないものはプログラマにあらず
    というScheme(Lisp)ユーザーの態度がむかつく
    実用性0の癖に
  • id:practicalscheme
    さすがにこれだけコメントがついて全部読むのは大変でしょうから、ここまで読んできた人の多くはプログラミングについて何らかのこだわりがある人だろうと思います。なのでそういう方に向けて書いておきます。

    先日、アラン・ケイと食事をする機会に恵まれたのですが、そこでプログラムとはどう組み立てられるべきか、あるいはプログラミングとはどうあるべきかという話になった時に、彼が "We're not smart enough (to know the answer.)" と言ったのが印象に残っています。結局、プログラミングについて私たちが知っていることというのは、どんなに勉強したってまだほんの入り口近くを散策する程度で、奥にはいくらでも未踏の世界が広がっているわけです。それはまた、まだ堀り尽くされていない鉱脈へのドアが至る所にあるということでもあります。

    今回の質問がおもしろいのは、「『プログラミング言語について考える』ために必要なことは何か」という問いをたてたところにあります。質問者が意図していたかどうかにかかわらず、これは非常におもしろい世界へのドアになっています。質問者はQ1でとりあえずSchemeをネタに持ってきましたが、それは限られた質問数と形式に落とし込むための「とりあえず」の試みであることは、質問者のblogを見ればわかりますね。別にSchemeじゃなくても良かったわけですよ。Javaがどうとか書いてますし。ただたまたま必要な数だけの質問を思いつきやすかったのがSchemeだったっていうだけで。

    でも、とりあえずその問いをたててくれたおかげで、この質問は「『プログラミング言語について考える』ことについて考える」というメタな問題を提起することになりました。「質問者はSchemeって言っているけど、別にScheme知らなくたって俺はプログラミングに詳しいよ」と思った人は、では自分はどういう基準を以ってプログラミングに詳しいと判断しているのか。xx言語を他人に勧めたいと思ったなら、印象以外にxx言語の何に着目してそう思ったのか。その着目した点は他の言語には無いのか。他の言語に無いとしたら、何故他の言語はその点を採用しなかったのか。逆に他の言語にあってxx言語に無いものについて、何故それはいらないと思ったのか。それらの価値判断をひっくるめて、自分にとってプログラミングという行為はどういう意味を持っているのか。いくらでも考えを広げてゆくことができます 。「『プログラミング言語について考える』ことについて考える」という問題は、その向こうに素晴らしく豊穣な世界が広がっています。

    そういう金の鉱脈のような問いの前には、質問者の態度がえらそうだとか上から目線だとかなんていうことは、ごくごく瑣末な問題じゃないですか。子供の何気ない質問がしばしば科学や社会に対する本質的な問いを含んでいるように、良い問題というのは、誰がどういう意図でその問いを発したかとは独立して存在するものです。質問者のことはほっといて、あなたの好きなプログラミングについて、今回の問いを元に今まで行ったことのないルートを発見して探検してゆく方が、きっとあなたにとっても実りの多いものになるんじゃないかと、私は思います。

    (ytakenakaさん、おっしゃることはよくわかるのですが、私にとってはこのアンケートは単なるきっかけなので、ここで起きていることを正確に理解する、ということには関心がないのです。ちなみに「荒れている」とは思ってませんし、納める必要性も感じません。このアンケート、あるいは一連のコメントを読んで、一人でも多くの人がより大きな問いについて思いを馳せてくれたら、今回の騒ぎには充分意味があったということだと思います)

  • id:bugggs
    はてなで釣りするような人に金払って講義受ける生徒は哀れだな
  • id:emitter
    他の人に有意義になろうがなるまいが
    捨て台詞吐いて何人かの人間を不快にさせたのは事実。

    自分の非を認めようともせず、論理的に反論するわけでもなく。
    プログラムの探求者云々以前に人間としてどうかと思うね。
    先に書いたとおりエンジニアとしてもどうかと思うが。


    正直、正体を自ら晒してる人間がよーやるわとは思う。
  • id:nishiohirokazu
    遅くなってしまいましたが、いきさつの解説と謝罪を書かせていただきました
    http://d.hatena.ne.jp/nishiohirokazu/20080922/1222094878

    不快な思いをされた方には本当に申し訳ありません。僕の手抜きとミスと勘違いが原因です。詳しいミスの種類などは上記URLに書いてあります。
    どんな理由があったにせよ、他人を不快にさせるような言動をしてしまったのは事実です。
    本当に申し訳ありません。。。
  • id:web10
    再質問してみた
    http://q.hatena.ne.jp/1222138124
    「これに答えられない方は解答をご遠慮ください。」ではなく
    「プログラミング言語には詳しくないのでわかりません 」という設問を設けるのがポイント
    上記の項目を選んだ人がこの質問ではQ1に回答しているのがから、正答率が下がるのは当然。
  • id:web10
    上記のアンケート結果がほぼまとまったので、結果を以下でまとめました。
    「はてなアンケートは使い方しだいで精度が6%から70%にUPする」
    http://d.hatena.ne.jp/web10/20080923
  • id:myuon
    Schemeがどうこうという訳ではないですが、
    もし自分が授業でSchemeをやらされるとしたらやめてほしいと思うでしょう。

    ほとんどの学生にとってSchemeで覚えた本質はSchemeでしか使うことのできないものです。
    他の言語にも活かせる人はほんの一握りしかいません。

    であれば、最初からCやJAVA等のスタンダードな言語で基礎からたたき上げてもらったほうがいい。
    プログラミングの本質を教えたいという明確な目標があるのであれば、その後のプログラムの学習や就職してからもあなたの授業が基礎として根付いていくはずです。

    Schemeで教えられるものが他の言語で教えられないということはないと思いますよ。
  • id:kokorohamoe
    いちおう大学でアシスタントして1年生の授業を教えていましたが。
    設問1にSchemeを持ってくる そのマインドセットが1年生をおしえるにはどうかと。
    もうちょっと現実を見つめる目を持った方がいいとおもう。


    まぁ、大学であれば何を教えても良いといえば、良いのですが。
    プログラムの基礎という と、僕の大学では、カリキュラムとして、ある単位ではコンデンサとか半導体を、ある単位ではコンパイラをと分担して統合的に教えていました。本質ってそのぐらいのボリュームがあります。
    IT系の大学で4年かけてみっちり教える物が本質です。
    たぶん、おっしゃりたいのは、本質ではなく、初歩さわり。ですよね。であれば、なんでも大丈夫だとは思います。


    という前提で、その単位数ということは、専門学科ではなくて、文系か何かの補助として教える感じですか?
    全体のカリキュラムがどういう構成で、その中のどのパートか?というのに依存するかと。
    また2年次、3年次で使う言語との相性もあるので、そういう全体のカリキュラムなしに、単科だけ決めない方が良いと思います。
    ほかの教授とかとも相談して、統合的に決めた方が良いと思います。


    その中で、あえて、その時間だけで初歩を教えるとしたらJavascriptをオススメします。
    理由は学生が自宅で 簡単に 復習・予習ができるからです。
    C++とかだと、学生が自宅で練習しようにも環境を整えるのが大変というのがあります。
    Javascriptならば、IEさえあれば、どこでも動きますし、その時間数ならたいした物は組めないでしょうからデバッガとか複雑な物は不要。そう考えると、先々BlogやHomePageを作るときにちょっと役立ちますし、Javascriptがいんじゃないでしょうか?


  • id:practicalscheme
    もう引っ込んでいようかと思ったけどちょっとむずむずしてしまったので。

    > たぶん、おっしゃりたいのは、本質ではなく、初歩さわり。ですよね。

    「さわり」は名場面とかハイライトとか、要するに一番盛り上がるところって意味ですが、プログラミングしてて一番盛り上がるところって何でしょうね。

    初心者だとやっぱり「動いたー」って瞬間でしょうか。何らかのビジュアルなフィードバックがあると良いですね。そう考えるとJavaScriptは良い選択だと思います。

    CS学生向けなら、単に動いたってだけでなく、もう少し抽象的な理解に達するAha!な瞬間が欲しいところですね。コンビネータを扱えると、単に手順を組み立てるだけでなく「「手順の組み立て方」を組み立てる」というメタな考え方を得られるので、高階関数は必須でしょう。できれば超循環評価機までやりたいですが、やるならホスト言語のせめてサブセットが容易にパーズして評価できないとうまくないので、シンタクスとセマンティクスが単純な言語ということになります。あ、JavaScriptも当てはまるか?

    私もプログラミング言語講座のTAで演習サポートやレポート採点を昔やりましたが、課題演習のサポートがどれだけできるかで目標設定はかなり変わってきますね。
  • id:taknt
    >Schemeは多くのレンタルサーバに標準でインストールされている

    これはレンタルサーバーに詳しい人しか わからない。


    文の終わりがセミコロンだろうが、begin、endを使うとかそんなのプログラミングの本質とき
    かけ離れたものだろうな。


    しかし、Q1を見ると Schemeって 糞言語に見えるな(笑)
  • id:leiqunni
    昔の議論にロングパス。

    ぼ、僕はSchemeを知らないから、
    BASICだと嬉しいなあ。
    でも、C++を少し分かるから、
    Schemeの言いたいことは分かるんだ。

    つまり「レキシカルクロージャ」って知ってる?
    って聞いたほうが。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません