トップ «前の日記(2007-07-22) 最新 次の日記(2007-07-24)» 編集

日々の破片

著作一覧

2007-07-23

_ ……

劇場で見逃してた、チェンカイコー(チェンガイグって書く人もいるが、どっちなんだろう? の陳凱歌)のプロミスをテレビでやってたので、あっけにとられて最初の40分と、最後の40分くらいを見た。

この人が、群集を扱わせたらただごとではないってのは、大閲兵でも見たし、黄色い大地でも見たし、琴の糸でも、というか、キリングミーソフトリー以外(先生の映画以外は、結局、全部見てるようだ。追記:確かに先生のやつ以外は全部見てる)ではいつも見てたわけだが、それにしたって、野牛と囮の奴隷と漢軍と蕃軍の出だしのところは、何が起きたのかとびっくり。いや、そもそも最初の、「お前が落としたのはこの饅頭かい?」というか、その手前の明日のジョーの金さんの子供時代のエピソードっぽい饅頭を手に入れるところからして、いったい何事かのオンパレードで、こんなおかしなものを平然と撮れる作家は、他の誰でもなく、まさにチェンカイコー。

しかも、相変わらずの、女性ヘイトっぷりで、女主人公がネガティブで気分悪いし。(で、そのぶんだけ、クーヒャンというような名前の貴族が、見た範囲では、誤解してるかも知れないが、実らぬ将軍への恋に苦悩していて、敵役にも関わらず美しく描かれていたり)、というか、この人が描く人間は、すべて自分のことしか見ていないし、いつもながらの不協和音っぷりは健在なんだが、どうして作品を作る資金が得られるのかそれが不思議ではある。こんなイヤなやつに映画を撮らせる資金があるのなら、ゲルマンとか(生死不明の)カネフスキーへ資金を回してやってくれ。

PROMISE (無極) [DVD](真田広之)

それにしても、ペキンのバイオリン少年のラストで見せた、異様な空間把握の撮影方法に磨きがかかっているのにも驚きではある。進歩を止めないってのはすごいな。(というか、ますます嫌いな作家になるのだが、やはり才能ってやつなんだろうか、力量は尋常じゃないので、あっけにとられながらもつい見てしまうのであった)

_ Cは必要か?

そんなの、自明じゃん。必要に決まってる。分野によるけど。少なくてもハードウェアとかリソースとかをフルに利用する必要が少しでもあるんなら、現時点ではC以外の選択肢は、アセンブリそのものしか無い(し、最適化を考えると、多分、Cのほうが良い)。

だから、ネットワークを本気でやるなら、スティーヴンスの本だし、それを読むにはCが読み書きできなきゃ全然、だめだ。

そうではなく、最初にプログラミングを学習すんのに、どの言語を学べば良いですか? っていう質問にどう答えるかだ。

プログラミングで覚えなければならないことってなんだろう?

考え方だと思う。

学習するときに必要なことってなんだ?

良いお手本とフィードバックだ。フィードバックはプログラミングについて言えば簡単で、作って動かして結果を見れば良い。だから、自分ってやつを用意すればとりあえずはOK。UIとか言い出したら別の話だけど、プログラミングって言ってんだから、そいつはどうでも良い、多分。

良いお手本とはなんだろう?

もちろんソースだ。

(書いているうちに脱線しそうな気がしてきたから、話半分)

でも、ソースから考え方を読み取るには、それ以前の段階が必要な気がする。なんだろう? 勘なんだけど、それはつまりは養うしかない。

養うには、結局は、経験ってことなんだろうか? なんの経験だ? プログラミングの経験だ。始めに戻った。

経験を詰むのに必要なことはなんだろう? 持続できることだ。持続するには何が必要か? おもしろいという感じとか、達成感とか。

お、kitajさんの名言が出てくるぞ。おれってすげー感。

職業としてのプログラマーってのにも、いろいろあるわけだから、それも勘案してみたい。

がちがちに書かれた仕様書と、箸の上げ下げまで指定してあるコーディング規約にしたがって、もくもくとプログラミング。そういう職業としてのプログラマーであれば、おれってスゲーも、ソースを読む必要も、経験も、いらないだろう。良いアルゴリズムを考える必要も、最適化戦略を練る必要も、やばい匂いを嗅ぎ分ける能力もいらないだろう。だったら、Cをやる必要なんて、どこにもない。

そうではなく、いろいろなアイディアを生み出し、生み出した先から片っ端から実装していくプログラマーであれば、おれってスゲーで突っ走るしかあるまい。やはりCをやる必要なんてどこにもない。とりあえずは。そのうち、必要があれば深追いすりゃいいし、必要があればCの言語仕様はシンプルだからプログラミングそのものはすぐわかる。むしろ、ハードウェアとかネットワークとかリソースの扱いかたの知識のほうが必要になるだろう。

その中間のプログラマー(おれとかそうだ)であれば、どうだろうか? 必要な言語を必要に応じて使えなきゃならないね。.NETの仕事? じゃあ、C#だ。Javaの仕事? じゃあJavaだ。NT4.0用? 今頃? しょうがないな。じゃあC++だ。だったら、OOPを最初からやっときゃいいね。なんでもやるんだから、なんでもできる言語をきっちり知っておけば後は応用だ。突然、デバイスが振ってきたらCでもOK。というか、実装をどうするかを考えるのが必要なわけで、それを養うには別にCである必要はない。

それに、ジョエルあたりが書いてそうだが、学習が終わったころに、求人が最大になりそうな言語を選べば良い。どう考えたってCの求人が最大ってこた、ないだろう。

というわけで、どう転んでも、最初は絶対にCをマスターという必要がないことがわかる。

むしろ、ライブラリが豊富に用意された言語ならいろいろなAPIを使って、こんなAPIはこれこれだから使いにくい、こういうAPIはこれこれだから、こういう場合には良いけど、こういう場合には中途半端だな、とか見識が広がる可能性が高い。

というように考えていくと、最初:に対して落ち着くところは、処理系が入手しやすく、良質なソースが(あるいは、悪質であってもプログラムの実行結果が良ければ、読む気になるので、それでも良いのかも、というあたりからいくらでもソースが手に入るくらい大量に出回っている)そこら中で公開されていて、ライブラリが充実していて、良い教科書/入門書がほどよく出回っているプログラミング言語ってのが答えになる。

Cは確かにそういう言語に見える。でも、ライブラリが充実していて、というあたりでいささか怪しい。いろいろ作って楽しめなきゃ続かないと思うからだ。いきなり仕事パターンなら別だろうけど。

それに、最初に覚えるべきことに、ヒープの解放なんていうのがあるところがちょっと問題だろう。それは後で良いからだ。

つまり、その作られた時代によってライブラリの充実度が異なる。

ネタ元のCの基本をマスター先生は、PASCALを否定してたけど、時代をスライドさせてDelphi(綴り違うかも)を最初の学習用に渡されていたら、きっと、PASCALで基本をマスター先生になってたんじゃないか? 基本をマスター先生が自分が楽しむのに十分なライブラリがその時点ではPASCALよりCのほうが充実してたんだ、と思えるのが、そのあたりの書き方。

というわけで、JavaとかC#とかVBとかだと、GUIは作れる、ネットワークは叩ける、悪貨も良貨もソースはそれなりに手に入る。Rubyだったら、持ってるコンピュータがPCならSwinがあるし、MacならCOCOAがあるし、LinuxならGTKとか、その気にさえなれば手に入るし、というか、SDLか。ゲームの本がライブラリ付きであるわけだし。ネットワークも叩き放題だ。

JavaScriptだって実は全然OKで、GUIはDOMがある。むしろ、実用度は高いかも。(P言語はよくしらないので書けないけど、多分OKだろう)

で、まあ、そうやっていろいろやったその後で、はじめて、遅いとか、スレッドがどうとか、多重化が、とかあって、Cを見ればいいんじゃなかろうか。というか、話が逆でOSの知識が必要となっていろいろ調べていくと、そのうちCにぶつかる。でも、その時点で覚えりゃいいし、もうプログラミングの感覚は身についてるはずだから、読むのだってK&Rで十分だ。

でも、確かに、足が地に着いてないと落ち着かない人もいる。そういう人は、いきなりcoreを眺めて安心できるわけで、そういう場合はCでも良いのかも。でも、そう思う反面、それはやはり、ライブラリが充実していなかったからなんじゃないか? とも思うのだ。でも、さらに気付くのだが、asはたいてい入ってるし、Windowsでさえ、masmのフリー版があるわけで、なぜアセンブリやれ、とならんのか? それはマスター先生と同じ罠に落ちて、自分がコンピュータ=プログラムの関連を納得した経験(=C)に頼ってそう言っているだけかも知れないじゃないか。(おれは、そういう意味じゃ、68000が最初で、次がCというのが正しい。メインフレームのはスタックマシンじゃないところで特殊なアセンブリだったから、全然、別のことだったし。まあ、16進で読み書きして、アドレッシングモードを計算してjmp書くのも慣れてたから、むしろアセンブリのほうが読みやすかったようだ。で、考えるのは、Cのポインタポインタとポインタ配列の関係を理解するのにアセンブリリストを見て納得したわけだが、おそらくCがそういうハードウェアに密着した理解を求める言語だからそういう理解の過程を踏んだんであって、最初からJavaだったら、最終的にはVMを眺めてたかも知れないけど、ヒープとスタックの2つを仮想的に理解してれば後はいらなかったかも、と思うのだった。っていうか、間接参照してどうたらみたいなことって全然基本じゃないよ)。むしろ、副読本みたいな感じで、CPUの作り方みたいなのを読めばいいような気がしてきた。必要ならば。逆に、デザインパターンみたいなものを副読本にすべき人もいそうだな。そのあたりって性格とか学習方法の癖みたいなもので決まるんじゃなかろうか。

言葉をしゃべくるとき、脳みそが言葉を選択し、声帯と舌と口蓋の形を音に合わせて動かすように、筋肉に対して指令を出すと、それが神経を通して……ってなところがイメージできなきゃ、しゃべれないという人はいない。それが必要になるのは、リハビリをするときじゃないかな?

やっぱり、思いつくはしから書いていると違うことを書いてるな。

というかね、ああいうところで質問してる時点でだめだよね。いくらでも転がってるんだけど、目移りするってこともあるまい。職業だけで考えてるんなら、求人広告を眺めて決めれば良いし、何かまねしたいアプリケーションでソースが公開されてるやつ探して決めても良いし、なぜ質問してるのか、と考えると、それがすでに釣りだったりして。

それにしても、なんかむかついてきたが、デイブトーマスですら、いろんな言語をとっかえひっかえして、手にあったツールを探してるっていうのに(そして出会えたらしいので良かったね)、なんで、最初に学ぶ言語なんてものを気にするんだ? とりあえず本屋に行って、表紙のデザインが気に入って、ぺらぺら眺めて自分にとって読みやすそうな入門書を買ってくれば済む話だ。本屋で売ってるくらいだから、そこそこメジャーな言語なはずだから、それがたまたまCならそれでいいし、Haskellならそれでいいじゃん。3ヶ月くらいして、おれにはこの言語は合わないとわかったとしても別に無駄になるわけじゃない。プログラミングはプログラミングだ。

本日のツッコミ(全9件) [ツッコミを入れる]
_ arton (2007-07-23 01:04)

base_urlのテスト

_ arton (2007-07-23 01:07)

別のパターン

_ arton (2007-07-23 01:08)

だめパターンもテスト

_ arton (2007-07-23 01:09)

OKみたい。

_ jzkey (2007-07-23 21:09)

joelは、Cは学んどけ派ですよね。<br>「(CとLISPから得られる)ポインタと再帰を理解できる能力は、優れたプログラマになるための能力と直接的に相関している。」(Javaスクールの危険,Joel Spolsky)<br>あとは、なぜアセンブラでなくてCか、というあたりは、<br>「単純にCを知っている必要がある。(略)Cというのは、フォン・ノイマン・マシンの機能を記述するための軽量で表現力の高いシンタックスなのだ」(バベル案内,Steve Yegge)<br>から、ということでしょうか

_ arton (2007-07-23 22:12)

学ぶのは別にいいけど、本当にCが「最初の」プログラミング言語である必要があるとお考えですか?

_ arton (2007-07-23 22:14)

つまりね、最初は、楽しめなきゃだめなんじゃないか? ということですが、読み取れてます?

_ arton (2007-07-23 22:30)

違うなぁ。難しいなぁ。ジョエルはなんとなく書いただけで、確かにJavaスクールがどうしたとか書いてますね。でもそれはジェエルが雇いたいプログラマに求めてるものだから、ちょっと違うかな。<br>つまり、僕はCは楽しいけど、それは僕の特殊事情で、100人のうち80人はRubyとかJavaとかVBのほうが楽しいんじゃないか? そして楽しいほうがやる気が持続できるのではないか? そしてやる気が持続できれば、コードをたくさん書けるのではないか? たくさん書けば良い悪い判断が可能になるのではないか? (審美眼を養えるのではないか?)、それに対してCみたいに回りくどいやつだと、あまりに遠回りじゃないか? 本当にそれで良いのか? っていうのが1つ、アルゴリズムについていえば、たかが文字列のコピー1つに手間がかかるような言語を使って学ぶんじゃ無駄に遠回りじゃないか? すぐにフィードバックを得られないからうんざりするんじゃないか? <br>というような疑問に答えることができるのか?<br>ということが書いてあるのだよ、ということです。

_ arton (2007-07-23 23:29)

あ、良く読んだら、自分の考えで疑問に対して答えてるんじゃなくて、単に他人の意見を書いてるだけなのか。勘違いしてました。ごめんなさい。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え