AzureStone Memo(ちらしの裏)

 | 

2008年06月02日 最高に到達せんと欲せば、最低から始めよ

Kansai.pm 第9回 ミーティングで発表させて戴きました

| 03:12


資料の続きを読みたいときは、ブックマークして下さい。



こんばんは、わざとテンション低く喋るすごいプレゼンスキルをもっているAzureStoneです。

先日、Kansai.pm 第9回 ミーティングでテンションを低くめ*1にして「脱KENT様方式 - 読書百遍 義 自ずから見る -」を発表させて戴きました。

当日、お越しいただき私の発表を聞いて下さった方ありがとうございます。

また感想を書いて下さった方々ありがとうございます。

Kansai.pm 第 9 回ミーティング - ピックはどこだ。(2008-05-31)

Kansai.pm #9 感想 - ちなみに

Kansai.pm行ってきた。 - たら風呂

たまスパ

Kansai.pm第9回ミーティング - 日々の御伽噺

恥を忍んで勉強会レポ - satzz online beta

Kansai.pm 第 9 回 ミーティングに参加してきた - ひがきの日記

Kansai.pm 第9回ミーティング行ってきたお - Kentaro Kuribayashi's blog


重要な事

今回は、いつもと違い非常にリスクのある発表をしてきました。なぜならKENTさんの名前を出しているからです。もしかしたら題名は、「脱初心者への道」とかにした方がよかったのではないかとあとから思っていたりします。しかし私は、KENTさんを例にあげました。理由は、簡単です。それは、KENTさんが有名でかつ自分自身がKENT様方式であったからです。

実は、私のPerlおよびプログラミングスキルは人前で喋れる程、高くないと思います*2。プレゼンテーションの中で説明していましたが、未だに正規表現が使いこなせていないためレベル4です。残念ながら私はそれ程プログラミングが死ぬほど好きってわけではありません。でも自分で学習コストを支払い勉強したには理由があります。それは、掲示板やメール送信フォームを超える物を作りたかったのです。よくあるサービスレベルでたくさんのユーザに使ってもらう事をとらえた意味での「超える物」ではありません。ここで意味している「超える物」とは以下になります。

  • ソースコードレベルで如何にして保守性をあげるか?
  • ソースコード属人化させないためにどうしたらいいか?
  • 如何にしてバグを減らすか?
  • 作成したプログラムの機能を如何にして保証(動くことを証明)するか?
  • これらの3つの条件を満たして如何にして工数を短縮するか?

こういった事を考えた時にKENT様方式だと色々と不便な事があります。また不便だけではなく実装と行動ができないまたは非常に難しいです。

では実際にどうしたらよいのか?その答えは、プレゼンテーションの時に説明しましたが後に紹介させて戴きます書籍にその答えが載っていると思います。ですのであえてその手法をここに列挙する必要はないでしょう。ここに列挙することは、お互いの時間(列挙する人間も列挙された物を読む人間のどちらも*3)を無駄します。


ご紹介したい書籍とその理由

プレゼンテーションで紹介させて戴きました書籍を下記にあげておきます。あなたが実現したいことの答えや理由がそこに載っているので是非おすすめします。ごくまれに「Perlを上達するにはどうしたらいいんですか?」という質問されている方がおられて「プログラミングPerl《VOLUME1》とプログラミングPerl《VOLUME2》を読めばいいよ! 」と回答されている方を見かけます。その質問をされている方は、あきらかに初心者なので適切ではないと思います。その理由は簡単です。初心者でなければそんな漠然とした質問はしないからです。似たような質問で「Linuxを上達するにはどうしたらいいんですか?」と同じだと感じます。このような事を考慮したうえで私は改めて下記の書籍をお薦めします。

初めて」とタイトルがついているから、読むこと自体が恥ずかしいかもしれませんがあなたは意外と知らないことが多いのです。それを証明する物を下記に列挙しておきました。「恥ずかしい」と思って読めない方は、恐らく各書籍に対して5個以上当てはまるのではないでしょうか?すべて当てはまらないのであればあなたは確実にKENT様方式ではないと思います。


最初の方は、変数に値を代入など知っている事もあるかもしれませんが、下記の事が二つ以上当てはまるのであればこの書籍をお薦めします。練習問題もやってみてください。もちろんできるまで回答欄を見ないで下さい。間違えてみるのも勉強だと思います。

  1. リテラルってなに?
  2. perl -wc ってなに?
  3. undefってなに?
  4. 範囲演算子ってなに?
  5. コンテキストてなに?
  6. レキシカル変数ってなに?
  7. プラグマってなに?
  8. 連想配列っていったい何に使うのよ?
  9. 正規表現の書き方がわからない!
  10. dieってなに?
  11. ファイルパーミッションのあの数字って十進数じゃなかったの?
  12. ビット演算子ってなに?
  13. グロブってなに?あっもしかしてそれBシェル正規表現じゃないの?
  14. system関数の使い方によっては危険ってほんとなの?
  15. <=>ってなに?
  16. evalで例外処理なんてできるの?
  17. $@ってなに?

Perlの使い方というよりもどっちかというとPerl5の使い方といったところでしょうか?Perlオブジェクト指向プログラミングする前に知っておかなければいけない「リファレンス」について書いてあるのでリファレンスについてわからなければ是非読んでみるといいと思います。リファレンスブレイクスルーだと思います。

  1. コードの再利用ってなに?
  2. 入力量を減らすことってそんなに重要なの?
  3. grepなんてたいした事ないだろw
  4. モジュールってなんですか?
  5. CPANってなんですか?
  6. @INCってなんですか?
  7. リファレンスって辞書の事ですか?
  8. リファレンス使用するメリットなんですか?
  9. Perlは、メモリリークしないと聞いたよ!
  10. デバッガ?なにそれ?
  11. クロージャってなに?
  12. なんでIOモジュールを使うの?open関数でいいじゃないの?
  13. シュワルツ変換?なんですかそれアーノルド・シュワルツェネッガーの事を言っているのですか?
  14. プログラムの規模が大きくなってくるとrequireを使っていると問題になるって聞いたけどほんとですか?
  15. オブジェクト指向って難しいではないですか?
  16. @ISAってなんですか?
  17. @ISAってアイサって読むんですよね?
  18. セッターってなんですか?
  19. ゲッターってゲッターロボの事言っているのですか?
  20. 間接オブジェクト記法ってなんですか?
  21. Exporterってなんですか?
  22. CPANで配布されているようなモジュールを作るにはどうしたらよいのですか?
  23. ソースコードからドキュメントだけ取り出せるって本当ですか?
  24. テストってなんですか?

突然職場で数年前作成されたPerlで作成されたプログラムを保守を依頼および命令された事を想定しています。つまりレガシーコード(Perl4スタイル)の保守をどのように行っていくか?と言ったことを主にかかれています。また改善策とその手法を採用する理由も載っています。

  1. リニアサーチってなんですか?
  2. 自分ってレベルいくつ?
  3. use warnings;とuse strict;をつける意味ってあるですか?
  4. CPANモジュールってそんな信頼できる物なんでしょうか?
  5. プログラムの実行動作が遅いどうやって調べればいいのでしょうか?

さて書籍の紹介をしました。今回のプレゼンテーションでは、いっさいネタを入れていません。理由は、誤解されないためです。KENTさんという人間を批判しているわけではないからです。本当は、発表時間30分を想定していたのですが15分にしました。15分のうちにポイントだけ紹介できればそれで万々歳だと考えました。本来は、発表後にこれだけの説明文を書くことはないのですが、今回は誤解を受けないように書きました。ご理解して戴けると嬉しいです。


書籍の内容がしんどいという方

プレゼンテーションが終わり質疑応答である方にこんな質問されました。


オライリー書籍が難しいという方はどうすればよろしいのでしょうか?」


という質問に対して私は


「本日紹介した書籍を何回も何回も読む事をおすすめします」


と回答しました。当プレゼンテーションのサブタイトルに「読書百遍 義 自ずから見る」としていただけあってこのような回答をしました。その後、色々と考えて初心者がつまりそうなキーワードをAND検索してわかりやすいWebページを見つけましたので下記にご紹介しておきます。このWebページをお薦めする理由は、参考書籍に「初めてのPerl」があったことと早い段階でuse strict;とuse warnings;の使用を進めている点にあります。何かしらの理由*4がある場合は下記のWebサイトをご覧になってからでも書籍を読むのは遅くないかも知れません。初心者向けに分かりやすくかみ砕いて解説してあります。恐らくこういうサイトが、初心者向けの情報なのではないかと考えます。

●Perl5編 トップページ

f:id:azurestone:20080616071059g:image

http://www.geocities.jp/ky_webid/perl5/index.html


注意書き

何回も言っておきますが、私はKENTさんが嫌いなわけではありません。またKENTさんの人間性を否定しているわけではありません。見下しているわけでもありません。反KETN様方式ではなく脱KENT様方式を主張しています。取り違えのないようにお願い致します。


JVNの件と今回の件は別

f:id:azurestone:20080616085439g:image

http://jvn.jp/jp/JVN43906021/index.html


実は、前日(2008年05月30日金曜日)にセキュアコーディング勉強会を開催していました。その際にJVNから下記のようなお知らせが出ていることを知りました。懇親会で「AzureStoneさんならそのことをプレゼンテーションで言うと思いました」と仰る方がおられました。脆弱性を作ってしまうことと今回の発表の趣旨とは違うためプレゼンテーションの中にはその内容を含めませんでした。またそれを紹介することによりKENTさんを笑い者にしていると思われると侵害ですので含めていません。実際、脆弱性を作り込むこと自体はKENT様方式ではなくてもありえます。そのことについては、また別の機会に説明したいと思います。


反省点

私は悪気なかったのですが、あとからid:vkgtaroさんこと海賊たろさんに相談したところ座ってじゃなくて立って発表した方がいいねと言われました。あと声が小さいのかどうなのかがわかりませんが、テンションの低いプレゼンテーションだったそうで申し訳なかったです。id:vkgtaroさんこと海賊たろさん曰く知らない人間がみたら「仕事で心の病にかかったのかな?と思われるよ?」とアドバイス戴きました。改善できるように努力します。なにぶん頭に血が上らないかぎり小心者ですので…。


まとめ

少し長くなってしまいましたが、これを読まれてPHPPHP!と叫ばれている中でこれからPerlを勉強していこうとされる方に微力ながらお役に立てれば幸いです。

*1:そういえば、以前id:vkgtaroさんこと海賊たろさんにも「相変わらず低いテンションでみんなの前で発表してるの?」って言われていたなぁ…。

*2:思いますの意は、id:vkgtaroさんこと海賊たろさんに「それは逃げだ!」と渇を入れられたのでこう言っているだけです。

*3:お互いのためになるとは思いません…。

*4:どうしても書籍を購入するお金がない場合および初めてのPerlが難しくわからない

 | 
0200 | 01 |
2000 | 09 |
2007 | 01 | 08 | 09 |
2008 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 10 | 11 |
2010 | 05 | 06 | 11 |