Rubyに感銘を受けたという話

「この next 49、Rubyどのの大きさに感銘を受け申した。」という感想を作者に伝えたくて、学生がはてなダイアリーを使うときに気をつけるべきことの「誰かを誉めたくなったら全力で誉める。世界は賞賛に飢えている」を相手の迷惑かえりみず実行したら、他の人が面白がってくれた。

まつもとさんにも読んでいただけたので(RTしていたのでそう判断)、連続つぃーとの目的は達成できた。

で、上記Togetterとそれへのはてなブックマークでいろいろとコメントをいただいているのでそのフォローをいくつか。

「別の方法がある」と知っていることが重要

「〜をやるときには、・・・という別の方法があるんだ」という認識があるかないかというのがとても重要だと考えています。その認識があるかぎり、その人はそのときどきに応じて、具体的な「別の方法」を常にアップデートしていくと考えています。

「プログラミング=C言語で書くこと」という認識しかなくて、「プログラミングが嫌い/できない」(正確には「できない」から「嫌い」に思う)人が、「プログラミング=Rubyでも書いてよい」という認識を得ることによって、「プログラミングが好きかも/できるかも」というように変わることができたならば、将来、何かプログラミングしなければならないときがきたならば「この問題をプログラミングするために適したX言語があるかも?」と考えを進めることができると思います(そう期待しています)。

Rubyという言語で、「プログラミングが好きかも/できるかも」という認識に学生が変わったことに、私は感動しましたが、それで彼らがIT技術者として十分な力量を身に着けたとはこれぽっちも思いません。普通に勉強が足りません。でも、一度「プログラミング=C言語で書くこと」を打ち壊した彼らは、問題に応じて適したプログラミング言語を探りながら、いろいろなことを勉強していると思っています(そして、数年後に「やっぱ、C言語だよな!」と言っているかもしれません)。

上記、TogetterではバグトラッキングシステムとしてTracバージョン管理システムとしてSubversionを紹介しましたが、重要なのはバグトラッキングシステムやバージョン管理システムを使うと「便利であった」という経験です。この経験があれば、将来はその状況に適切なバグトラッキングシステムやバージョン管理システムを探すことでしょう。

さらには、そのような開発を支援する便利なツールがあるという認識が「この〜を簡単にするためのうまい方法はないか?」という認識を導くのではないかと期待しています。ですから、実際に使った道具は、利用者にトラウマを与えない限りはなんでも良いというのが私に考えです(とはいえ、便利じゃなければ認識が変わらないので定番ツールを選ぶ必要がありますが)。

上記Togetterのコメント欄より

大学に入れる知能がありながら、高卒のアホの子な私でも簡単に理解できたC言語が難しいなんて 教えるほうが よっぽどのアホだろうって思うんだけど…

教え方が悪かったのはおっしゃるとおりだと思います。一方で、人には向き・不向きがあり、プログラミングができる人でも合う言語と合わない言語があります。ですので、ある人にとってはC言語は簡単だけど、別の人にとっては難しいというのは別に不思議な話ではないと思います。

私の所属学科でC言語を題材にプログラミング言語を教えているのは教育に適しているという理由よりも、多くの場で使われているという理由ですので。

来年はgitとredmineですね

gitは挑戦する予定です。Redmineは、Railsのバージョンアップに追随してくれないので、使用をやめ、Tracに行きました。

プログラミングが嫌いになってしまった学生じゃなくて?タイトルどおりに読むと、じゃあなんでプログラミングを学ぼうとしたんだよ、いやいやで学んだのかよ、それとも・・・ってミスリードしそう。

計算機科学系に進路をとったからといって、全員がプログラミングを学ぼうと思っているわけではないのです。単に偏差値が都合がよかったからという学生もたくさんいるのが現実です。

なお、Togetterのタイトルは私が付けたものではありません。

C言語でprintf("Hello World");ってされていて、printfって何だよ、どこで宣言されて定義されてるんだよって思わない人間はIT業界には向いていないと僕は思う。Rubyだって、p Hello Worldってしたときのpの役割や、それがどこに書かれているかを疑問に思うべきだと思う。

ある言語の構文がどういう意味で使われているのか(言語の意味論はどうなっているのか、や、実際にどのような機械語に翻訳されているのかなど)と、自分が思った動作をどれだけ少ない手間で行えるかどうかというのは別の話です。

私がRubyすごいなと思ったのは「プログラミング嫌い/できない」という思いを「プログラミング好きかも/できるかも」に変えさせた点にあり、彼らがプログラマとして十分な実力を持った人材になれたという点ではないです。

良いソフトウェア開発者・IT技術者になれるかどうかは、彼らが学び続けるかに依存すると思います。それでも、「プログラミング嫌い/できない」と思っている人材であるよりは、未熟で適性がないかもしれませんが「プログラミング好きかも/できるかも」と思っている人材がIT業界に進むのは良いことだと思っています。

printf は「書式付き文字列と変数の関係」ってのが分からんともうきつい。しかもプレースホルダと「\nとかの特殊文字」この区別もつけないといけない。ここまでが最低限の基本中の基本。もちろん、変数とか言語の基本を覚えた上で

そこから先がまたきつくて「文字列とはなんぞや」「文字列変数は実は配列」「そんで配列にはポインタが絡む」「もし入力値を取得するなら scanf」「scanf にはアドレスを渡して出力引数にする」ここまでが た だ 文 字 を 出 す た め だ けに必要。学生んときは苦労したした。聞いても何ヶ月か後には忘れちゃってたからなあ・・・

ある程度のレベルを超えると、何の言語を使っていても結局はこういう面倒なことを考えなければいけないので同じだったりするわけですが、最初の「すぐに動くのでもっとやりたい」という素朴なモチベーションを引き出すには、C言語はちょっと敷居が高いというのは事実だと思います。

はてなブックマークのコメントより

p "Hello world"に感動を覚えるのは、一度メンドクサいHello worldを経験してるからなんだよね

おっしゃるとおりだと思います。とはいえ、必ずめんどくさい思いをさせるべきかは難しいところです。

"Rubyならプログラム嫌じゃない"って程度だと余計に不幸になる気がする

「プログラミング嫌い/できない」という思いを持ったまま、IT業界に就職するよりは良いというのが私の考えです。

最初の喜びが続けていくエネルギーになるし、続けられればスキルが上がり、さらに喜びを感じられる好循環になるね。

そう思います。

目的と期間の短かさにもよると思うんだけど、Rubyではなく「最初からRails」は「最初からPHP」「情報の授業でFORTRAN77」と同じくらい不幸せな可能性が…

短期間でWebアプリ開発ですとRailsが便利だったもので。確かにRubyわかるまえにRailsは極悪提案だと自分でも理解しております。

(C言語がむずかしいなんて言ってる者がプログラマ等になれるかっつーの

頂上へと至る道は一つではないですし、目指すべき頂上すら複数ありますから。もちろん、優秀なプログラマC言語が簡単にわかる方が良いですよね。

Cに比べたらincludeの壁もmallocの壁もポインタの壁もないから教えやすいね。でもRailsだけだと「RailsってDSLが使える人」でプログラミングができる人じゃない気がするな。ほかのカリキュラムしだい?

もちろん彼らは勉強不足です。ですから「プログラミングができる人」になるにはたくさん勉強しないといけないと思います。

大学の卒論って、そんなの使うの?

研究の分野やテーマによりますが、道具は目的を達成できるならば何でも良いので。道具の新しさ、手法の新しさ自体が研究テーマならば話は別です。

アプリケーションが目的ならrubyのほうが単純だろうし、計算機を学ぶならCが必要だろうし、ケースバイケースで、ただ苦手意識を克服できたのが一番大きいと思う

おっしゃるとおりだと思います。

ぱ、Perlも楽しいよ!(>_<)

Perlは私も使っていたのですが、5.8ぐらいからの日本語の扱いに挫折し、Rubyにうつりました。学生にRubyを提示したのは私がRubyを使っていたからです。

研究室に入る前の大学生のレベルってこのくらいなんだ?みんなスーパーマンぐらいに思っていた。(無知です)

博士号をとってもスーパーマンではないです。

Ruby はともかくRails とか subversion とか trac とか実務じゃん。大学で教えるようなことか−?大学が就職予備校化してるのってを実感するな

道具ですから。書き味のよりボールペンを提示しているのと同じ感覚です。

キックスターターでエンジンかけるバイクより「ボタン押せばエンジンがかかります」のスクーターのほうがラクでたのしいって思うよね。そこから「なぜボタンを押すとエンジンがかかるのか?」に発展させてあげよう

本来はこれをカリキュラムで教えているはずなのですが、プログラミングが嫌いであるという自己認識があるので、自分がプログラミングすることと、プログラミング言語がどういう理屈で成立しているのか、コンパイラーがどう動くのか、計算機はどういう構成であるのかなどがバラバラなのだと思います。

そういう奴って壁にぶつかるのも早いだろ

そうかもしれませんが、それは別の話です。

あたえられないとRuby触らないって意欲なさすぎじゃないか。/matzさんが昔ネタで開運プログラミング言語を提唱してたのを思い出した

はい、問題です。授業でやらない言語を学ばないというのが深刻です。

各言語がどうのこうのっていう特性のお話よりも「苦手意識を克服できた学生がいた」というシンプルな事実を喜びたい。

ありがとうございます。

連続リプライはうざいと思う

ごめなさい。ごめんなさい。

全員が全員「プログラミングが苦手で嫌い」ってすごい状況ですな^q^

これが結構毎年だったりします。好きならば得意と言えなくてはいけないという考えがあり、かつ、得意といえるためのハードルが高すぎるというのもあるようです。数か月でRubyでなんとかプログラム書いているのですから、本当は「苦手」ではないわけなんですけどね。本人たちの自己認識では「苦手」なのです。

いやそれメールでも出来るよ... > Twitterはいいものだ。全然、面識のないmatzにお礼が言えるし

Twitterと違って、メールアドレスを知るのは簡単ではないです。

コメント欄に「C言語分からないとダメ」的な人が出てきてるのは相変わらずだなぁと思った。お前は作文を作るのに日本語の文法を心底理解しながらやってるのかと。楽しく作ったモノが動けば良いんだよ!!

外部的な動機でなんとかできない場合は、内部的動機が必要で、内部的動機を高く保つためには「作ったものが動く」という楽しみをすぐに味わえないと厳しいんですよね。で、十分学んだあとには「なぜ、動くのか?」を追求する段階に自然と移るわけです。ですから、最初が敷居が高いと「なぜ、動くのか?」を追求したい意欲がわかないのでダメなんですよね。