- ベストアンサー
スキルを高めたい日曜プログラマへアドバイスをお願いします
はじめまして。 カテゴリ違いと指摘されるかも、とは思ったのですがより広範に情報を得たいのでこちらにPOSTさせてください。 私はperlをさわり始めて4年目くらいになる主婦です。 コンピュータの基礎教育を得て卒業し、出産退職までは一般メーカーのシステム部でシステムメンテやネットワーク管理、社内システムサポートなどをしていました。 もともとプログラマ志向が強く、育児がひと段落してからPerlのCGIを触り始め、最近は一からソースを組むことも苦ではありません。 ですが、最近は自分のソースを美しくない(醜い)と思うようになりました。 Perlの基本思想(?)であるTMTOWTDIから言えば、私のようなプログラマも受容される世界ではあると思うのですが、もっとスマートなソースを書きたいという欲が出てきたのです。 具体的に問題意識の高い順に挙げると、 ・正規表現にとても弱い!ので冗長なソースを書きがち ・家庭環境的に(たぶん年齢的にも)職場復帰しづらく、自分のソースを客観的に評価・研鑽する機会がない ・コーディングにリソースを意識しておらず、一般ISPのサーバにUPしたときに不安 ・「オブジェクト指向」という言葉を知っているが具体的にどういうことかさっぱりわからない などなど・・(本当はもっと重篤な問題点がいくつもあると思いますが)。 Perlの世界は私にとって流れの速い大海のようで、自分が今どこにいるのか、どこへ向かって泳ぎ出せばより「高み」へ進めるのかがわからない、といった感じです。 ちなみに私には「職場復帰して大規模システムの開発にかかわる」などといった野望はなく、あくまで在野にいて、一般ISP向けCGI専門として、よりクオリティの高いソースが書ける個人プログラマでありたいと考えています。 そこでこんな私に、購読すべき本・参加すべきグループ・訪れるべきサイト等があれば、ぜひおすすめいただけませんか。 手元には リャマ本、ラクダ本(Perl5)、CGIプログラミング初版、Perlクックブック2版、Perl救命病棟(翔泳社)、正規表現辞典(同) などがあります(オライリー系は皆リファレンス的な活用です) グループにはどこにも参加していません。 自宅には Vine Linux3.2 + Perl4 によるローカルテスト環境があります なんだか抽象的な質問で申し訳ありませんが、業界の一般論として有用なものがありましたらぜひお教えください。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
>最近は自分のソースを美しくない(醜い)と思うようになりました。 > もっとスマートなソースを書きたいという欲が出てきたのです。 ご自分のソースに対してこのような感想をもたれるということは、 「美しい」「スマート」と感じる基準をお持ちなわけですよね? たとえばそれが××さんの書いたソースのような、というものなら スタイルを真似してみるのも一つだと思います。 また、スタイルに限りませんが、「よいPerlプログラム(スクリプト) を書く」のには ダミアン・コンウェイの「Perlベストプラクティス」 が非常に参考になると思います。 オライリーの本でちょっと高いのでオススメしづらいのが難ですが、 値段以上の価値はあるでしょう。 正規表現に関しては書き始めると止まらないので抑えておきますが(笑) Regexp::optimizer http://search.cpan.org/~dankogai/Regexp-Optimizer-0.15/lib/Regexp/Optimizer.pm Regexp::Assemble http://search.cpan.org/~dland/Regexp-Assemble-0.28/Assemble.pm Regexp::Common http://search.cpan.org/~abigail/Regexp-Common-2.120/lib/Regexp/Common.pm あたりを活用すると良いかも知れません。 挙げられた本に入っていないので書きますが、 正規表現をとことん究めるなら、オライリーの 「詳説 正規表現」は外せないでしょう。 効率のよい正規表現の書き方などがわかります。 > 自分のソースを客観的に評価・研鑽する機会がない Rubyなんかだとわりと活発に勉強会などが開かれている のですが、Perlだとどうなんでしょうねえ 一応 Shibuya Perl Mongers http://shibuya.pm.org/ FrontPage - Kansai.pm http://kansai.pm.org/cgi-bin/wiki.cgi のようなグループはあるのですが。 > ・コーディングにリソースを意識しておらず、一般ISPのサーバにUPしたときに不安 こればっかりは場数を踏むよりないと思います。 まあこれはやっちゃだめよ的なパターンはありますけど。 ・オブジェクト指向について これもスペースが足りません(笑)が、多分誰に投げても納得させられる だろう答えは Object-oriented programming (OOP) is a programming paradigm that uses "objects" to design applications and computer programs. (英語版Wikipediaより) つまりプログラミングの中心が、手続き(関数)ではなく "オブジェクト" = 処理の対象であるということです。 詳しくは↓この辺とか。 オブジェクト指向とは何か http://iwatam-server.dyndns.org/software/devintro/oo/oo/ sumim’s smalltalking-tos - オブジェクト指向の概念の発明者は誰ですか? http://d.hatena.ne.jp/sumim/20040525/p1 > 訪れるべきサイト等 海外の事情は明るくありませんが、日本に関して言えば Perl Hackerの方々はサイトにまとめてなにかを 置くということよりも、blogという形で 断片的に残していくスタイルがほとんどだと思います。 ですので追いかけるのはちょっと大変かもしれませんが 日々ウォッチしておくとか。 小飼さん、宮川さん、竹迫さん、伊藤さん…あと誰か? ところで > 自宅には Vine Linux3.2 + Perl4 によるローカルテスト環境があります いくらなんでも Perl 4は問題ありではないかと… Vine 3.2でも 5.8あたりが入っていませんか? Perlベストプラクティス http://amazon.jp/dp/4873113008 Perl Hacks ―プロが教えるテクニック & ツール101選 http://amazon.jp/dp/4873113148
その他の回答 (9)
- sakusaker7
- ベストアンサー率62% (800/1280)
まだ締め切られていないのですね。 他の人がどんなものを読んでいるかという参考になるのではないかと思います。 Unknown::Programming http://d.hatena.ne.jp/fbis/ Perl関連のものが主ですが、プログラミング全般に 関係するような本もあります。 簡単な感想もついていますので参考にしやすいのでは ないでしょうか。 もちろん全部読めということではなくて、興味をひきそうな ところをつまんでいけばいいと思います。
お礼
こんにちは! お教えいただいたリンク先は私にとって、とてもおいしい(!)リンク先でした(笑)ありがとうございます。 中にある「まるごとPerl!」は「私ってぜんぜん勉強不足やん!」と大きなインパクトを与えてくれた一冊で、手元に持っています。 「初心者放置のやりたい放題な一冊w」という書評に思わずクスリときてしまいました。 またその他に紹介されている書籍の数々も魅力的なものばかりです。 即効ブックマークさせていただきました。ありがとうございました。 >まだ締め切られていないのですね。 実は突然実家に戻っていましたので、締め切りし損ねていたのです。 お返事が遅くて、回答してくださった方には申し訳ないことをしました。 今回いろいろ情報をいただいて、当面の目標も定まりました。 #回答いただいたすべての皆様に感謝します。 #いつか私が逆にお役に立てる日がきますように・・。
- us123
- ベストアンサー率26% (10/38)
Squeakを勉強したらどうですか ここではSqueakというSmalltalkベースのプログラミング環境の主にプログラム開発者向けの情報を掲載しています http://squeak.qp.land.to/wiki/index.php?FrontPage 以上
お礼
回答いただきありがとうございます。 リンク先サイトを見たり、またキーワードでググってヒットしてきたサイトも見てみましたが、ざっと見るだけでもとても興味が引かれました。 子ども一緒になって学ぶのもいいかも、とも。(でも子どもが先に習熟してあっさり追い抜かれてしまうとヤだな、とも思ったり。。笑) すてきな情報ありがとうございます。 早速ブックマークさせていただきました。
- kabaokaba
- ベストアンサー率51% (724/1416)
>自宅には Vine Linux3.2 + Perl4 によるローカルテスト環境があります これが理解できないんですよ.Vineは2.6でもPerl5.6でした. 今,Vine2.6の環境下のPerl5.6で日本語を扱うスクリプトを いじらないといけなくて,えらく難儀してるので間違いないです. で,Vine3.2を今立ち上げてみましたが, Perl5.8(Perl5.8.2だった)です. わざわざPerl4の環境を作ったのなら, Perl5.8で勉強する方がメリットは大きいです. #しょぼいISPではいまだPerl4のところがあるようですが。。。 #最近のPerl本は5系統が前提のようですし, #Perl6も準備されてる状況です. >「Perlベストプラクティス」や「Perl Hacks」は、実はずっと気になっていた本です。 >やはり読むべきですね。(ベストプラクティスは私も価格にひるんでました) 「ベストプラクティス」はともかく, Perl Hacksは,Perl5のリファレンスとかモジュール, オブジェクト指向を知らないと呪文だけが並んでいる本にしか みえませんよ.ぶっちゃけた話,主観でしかないですが, ・hashをblessしてobjectを作る といわれて「あいよ~,あとでやっとくわ」くらいに 軽くOKできないと厳しいかもしれません. Perlの小技集には違いないのですが,かなりハイブロウな小技集です. 個人的なお勧めは「続・初めてのPerl改訂版」. Perlの基本的な事項,sub,for/foreach/while,if/unless, ハッシュ(key/value は大事),配列程度を前提として(型globも ときおり顔を出しますが), Perl流OOP,Perl流module,リファレンスの話が展開されます. ただし,どうもforとforeachがごっちゃになっていると思われる 箇所が散見されるので要注意です. ちょっと難解な部分もありますし,Tips集ではないので 実際に応用して自分で何かを作らないと理解できないですが, 概念の把握には有用です. 実際,練習問題と解答までついてます. あと,Code Readingも名著だと思いますが, Cがメインなのでそこらへんは適宜解釈する必要はあると 思います.プログラム作成の共通概念のようなものの把握には 面白いと思います.高いですけどね・・・ #表紙にちょっとした細工がしてあるんですよね,この本. #気がついてない人も多いかも・・・ 「詳説正規表現」は正規表現の本格的な理解には欠かせない 名著ですが・・・オライリの動物本の常として お値段が。。。けどその価値はあります. とにかく,なんでもいいから作ってみるしかないです. 例えば,「詳説正規表現」にはCSVの解析のネタがあります. これを使って,CSVからオブジェクトを生成して, YAMLに変換してみるとか (オブジェクトの生成とYAMLの生成は 「続・初めてのPerl改訂版」に出てます).
お礼
こんにちは。ご回答ありがとうございました。 >>自宅には Vine Linux3.2 + Perl4 によるローカルテスト環境があります >これが理解できないんですよ.Vineは2.6でもPerl5.6でした. ご推察のとおり、ショボいISPがperl4で、ローカルでも4にしていたのです(笑。 とはいえ、積極的にローカルテストをしておらず「作っただけ」に近い状態でもありました。。。 今回のご指摘を受けて5にしようか、とサーバーを立ち上げてみたのですが、HDDがお亡くなりになっていたというオチさえついていました。(中古部品の寄せ集めですから) めげずに環境を戻し、perlは5にしておくつもりです。 さて「続・初めてのPerl改訂版」は、今までぜんぜん注目していませんでした。 具体的な内容までお教えくださりありがとうございます。きっと私にとって効果的で有用に違いないと感じました。 またじつは先日書店で「詳説正規表現」を購入したばかりです。 付箋をつけながら読んでいますが、まだ2章の途中なのにジュリアナ東京でお姉さんが持っていた扇のような状態になってしまい、思わずため息がもれますがご教示いただいた練習ネタも挑戦したいと思っています。 具体的で親身なアドバイスをいただき、とてもうれしいです。ありがとうございます。
- okok_tone
- ベストアンサー率0% (0/2)
なにか目的を持って、取り組んだほうがよいと思います 本ばっか読んでいても、はっきりいって意味が無いと思います 本は目的を遂げるための補助的なもの(まさしく参考書)と考えるべきです 自分は個人的にブログシステムを作成していますが、とても勉強になります 四方八方手を尽くして問題を解決することが、多くのことを吸収できます 購読すべき本・参加すべきグループ・訪れるべきサイトなどはその過程で自ずと分かってくると思います
お礼
こんにちは。ご回答いただきありがとうございます。 >なにか目的を持って、取り組んだほうがよいと 実は自分なりに持っているテーマはあるのですが、ちょっと恥ずかしくって申し上げる勇気がありません(汗)・・。 私はどうしても近視眼的になりやすいタイプのようで、一般常識と認知されていることさえ、初めて知るという状態ですので、今は本を読むだけでもある程度効果があるかもしれません。 ブログを手がけるのも、面白そうですね。 まだ私の実力はうんと手前ですが、いつかはやってみたいテーマです。 私も負けないようがんばります。
- 10940
- ベストアンサー率21% (41/187)
書き漏らしたことと、他の方のコメントを読んで改めて書きたくなったことなど。 まず、正規表現はどの言語を使うにしても重要な武器なので敬遠しないで身に着けましょう。最終的には適材適所ですが、まずは何でもかんでも正規表現でやってみるくらいでよいと思います。特にPerlは正規表現が簡単に使えるから人気があるのだと私は思っています。 コードが汚いということですが、やはりPerlは汚くなりがちな言語だと思います。それに嫌気が差して別の言語に移った方、別の言語を作った方(!)がいるくらいですから。これも結局は好みの問題なので、余裕があるならばPython、Ruby、Java、C#あたりを勉強してみてはいかがでしょうか。Python、Rubyはオブジェクト指向を強いないので手軽に始められ、それぞれ特徴をもった言語なのでおすすめです。(OSやドライバなどを作るのでもなければ今さら勉強とはいえ趣味でC、C++に手を出す必要はないと思います。生産性が低すぎます。) オブジェクト指向を気にされているようですが、必要に迫られていないのにどうしても覚えなければならないものだとは思いません。 それ以前に構造化ができていないのではないしょうか。 テストモジュールを使って(Test::Tutorialなど参照)テストプログラムをちゃんと書くことからはじめてみてはいかがでしょうか。テストプログラムはその関数、モジュールを使うユーザであるわけなので、テストしにくい関数、モジュールというのは設計が悪いといえます。 このあたりの問題を扱ったJavaの本なら良書を紹介できるのですが、Perlであるのかはちょっと知りません。
お礼
何度も気にとめていただき、ありがとうございます。 正規表現は、じっくり腰をすえて取り組みたいと思っています。 今はまだアスキーアートにしか見えない、と泣きたい気分になることもしばしばなのですが、いずれは勝手に手が動く(?)ようになりたいと。いや、言い過ぎでしょうか(笑) Python、Rubyなど他の言語の学習は、総合的なプログラミング能力を高めるためにもいずれ避けられないと思っています。やるならRubyがいいな、とも。 けれどperlの習熟度が幼いうち両方に手を染めるのも自分のためにならないような気がしています。 自分の稚拙さを今回思い知りましたので、せめて半年は知らずにいた常識を取り戻すことに集中し、それからとりかかりたいと考えています。 それから構造化については、今まで全く頭の中にありませんでした(苦笑 ご指摘いただけたことは幸運でした。また具体的にお教えくださって感謝します。 こういう客観的な視点が私にはまったく欠けており、指摘していただけることに感謝しないではいられません。 これからもどうかご指導ください。
- nyaa519323116
- ベストアンサー率51% (41/79)
No.3回答者です。 PHP5を勧めるのはあくまでオブジェクト指向がどのようなものかを知る上で、もっとも手軽で取っつきやすいのではないかと思うからです。 PHPの変数は基本的に局所変数となるため、スコープの縛りはきちんとしています。PHPでは、どのブロックでも変数宣言ができる上に、その点のチェックが弱い(変数名のタイプミスを指摘してくれない)点で、非常にやっかいな面を持っています。 use strictプラグマと use varプラグマ、変数宣言でのmyを使いこなすことで perlの方がずっと変数スコープについては使いやすい言語になります。 正規表現、perlとしてのプログラムについては他の方がおっしゃっているとおり、他の優れた方のコードを読み、自らたくさんコードを書かれることではないかと思います。perlはCGI以外の、いろいろなテキスト処理やデータ処理用のプログラムを書くのにも適しているので、そうした方面のコードも書いてみられてはどうでしょうか。CGIだとどうしても表示用のHTMLコードがロジックのコードと混在するので、その分、コードが見にくくなるという難点がありますので。
お礼
なるほど、私は混乱していたようですね。でも今度は理解できたと思います。 ありがとうございます。 use strictプラグマと use varプラグマについては、最近読んだ本でもその重要性を強調されていました。今後コーディングの際は習慣化するつもりです。 今回いろいろお教えいただきながら、一般に流通しているオープンソースCGI(優れたソースもありますが、そうでないものも・・)を参考に自己学習することは、一定のリスクもあるのだな、と思いました。 気づくのが遅すぎた感はありますが、こうして無知な質問に対しても丁寧に教えていただけるというのは本当にありがたいことです。 いただいたお時間を無駄にしないように、と気持ちを引き締めています。
- panerai777
- ベストアンサー率34% (9/26)
perlを否定されている方がちょこちょこいるようなのですが、 まず、変数すべてがglobalになるわけではありません。 局所化するには、my,local を使えば可能ですし、 perlは、blogを世に知らしめたmovableで採用されていますし、mixiもperlです。 # このような著名なシステムで採用されているperlが仕事でつかえないと思い込むのはどうかと・・・ perlでのオブジェクト志向を学ぶのであれば、賢人達が集う、cpan(http://www.cpan.org)のモジュール群をダウンロードして中身を解析してみるのが、一番てっとり早いのではないでしょうか? ただし、元々perl自体はオブジェクト指向言語ではないため、(perl6は違いますが)ちゃんとオブジェクト指向の勉強をしたいなら、rubyなり、javaの方がいいかも知れませんが。 言語に関係なくデザインパターンも勉強されたほうがよろしいかと思います。 他の方の返答やら、質問から察するに、モジュール(cpan)をあまり活用されていないように思います(違ってたらごめんなさい) perl利用の最大の強みはcpanにあると言っても過言ではありません。 ぜひともcpanを活用し(自分もcpanへモジュールがupできるようになり)みんなで幸せになりましょう!
お礼
ご指摘のとおりでお恥ずかしいです。 CPANの存在は知っていたものの、単なるPerl本体の配布サイトだと思い込んでいました。 今回のおっしゃるような側面を持つサイトであることを知り今後は積極的に見たいと思っています。 それにしても、ちらと見ただけでもすごいボリウム。。。 「初心者向けCPANの歩き方」みたいなサイトがないかと探してみましたが、同じことを考えた旅人の足跡しか見つけられませんでした(笑 これも王道なし、ということでしょうか。 また、Rubyは「いつか触たい言語」でした。ですが今回の一連のやり取りを反すうしていくうち、もう少しperlで基礎体力をつけてから行くべきかも、と思い始めています。 いろんなバックグラウンドを持つ方のアドバイスに触れることは、私にとって本当に有意義で、ひとつひとつがうれしく、ひたすら感謝です。
- nyaa519323116
- ベストアンサー率51% (41/79)
perlのコードは確かに綺麗じゃないと感じます。CGIで公開されているコードも、中身が詳しくわかってくると「これはどうも…」と思うものが多々あります。 個人的な感想として… (1) 構造化がなされていない。特にperlは全変数がglobal変数となってしまう上に、どこででも変数宣言が可能であるため、とにかく手当たり次第に変数を宣言し、プログラム・コード全域でglobal変数を参照・変更しまくるというコードになりがちです。この意味で、他のプログラム言語、特に変数のスコープの縛りが厳しいプログラム言語を他に1つは学ばれることを勧めます。CやC++、あるいはPaslcal(Delphi?)あたりがいいかもしれません。また、perlのコードを書く時に、use strict プラグマとuse vars プラグマを使う習慣をつけるのも良いです。 (2) perlはオブジェクト指向を学ぶ入門の言語としては不適切。りゃま本でperlのオブジェクト指向をかじりましたが、残念ながら歯が立たず。C++かPHP(ver5)が適切かと思います。個人的感想としてはPHP5がオブジェクト指向を学んでいく際の最初の言語としてはわかりやすいように感じました。
お礼
ありがとうございます! 乱雑な変数宣言&参照とは、まさしく私のソースを象徴する言葉です。身につまされて読みました・・。 >変数のスコープの縛りが厳しいプログラム言語 にPHPはあてはまりますか? またCやC++のどちらかを選択して勉強する場合、利用者が多い(勉強会やユーザグループが活発)なのはどちらでしょうか?
- precog
- ベストアンサー率22% (966/4314)
「Perlなんか仕事で使うなよ!!」って言っちゃう古いオジサンなんで、わかるところだけ、、、 >・正規表現にとても弱い!ので冗長なソースを書きがち 正規表現って決して軽くないんで、究極のパーラー目指すならいろんな表現で書いて性能を比較してみましょう。 Perlにメンテナンス性を求めるのは間違えてる気もしますが、野武士やるなら他の人がいじれた方がいいですよね。自分なりの「わかりやすい書き方」を目指してみては? >・家庭環境的に(たぶん年齢的にも)職場復帰しづらく、自分のソースを客観的に評価・研鑽する機会がない これはプログラマーのコミュニティ見つけるしかないですね。後は作品発表してコメント求めるとか、Perlで目指すエレガントなコーディングを題材にしたサイト立ち上げるとか (もうありそうな気もしますが) 後は、良いコーディングの基本は大量にコードを読むことです。既にその時期は過ぎていると感じているならもういいですけど。 >・コーディングにリソースを意識しておらず、一般ISPのサーバにUPしたときに不安 これは環境が有るなら実験すれば済む話ですよね。自分で自分にフィードバックが出来ないで、本だよりだと限界がありますよ。 ・「オブジェクト指向」という言葉を知っているが具体的にどういうことかさっぱりわからない 簡単に言うと、データ(型)にコード(振る舞い)が付いてきます。 データの定義が厳密に出来るのと、設計の流用/管理が容易になりますので、スパゲッティコードにさよなら出来ます。もちろん書きようによってはOOPでもCOBOLチックに書いたり、スパゲッティーコードも書けます。 なので、きれいなコード(信頼性/メンテナンス性が高い)を書くことが出来る言語という理解で良いと思います。 まぁ、最初は量なんで、なんでもいいからガシガシ書いてみれば?
お礼
ありがとうございます。 在宅のみという環境なので、おのずと「本だより」になり、知識の蓄積も場当たり的で穴だらけなのです。 具体的に「こんなの役に立つよ」というものがあれば引き続きお願いします。
お礼
ありがとうございます! 問題点のひとつひとつに的確に応えていただき、まるで森の中でコンパスを与えてもらった気分です。 ご紹介いただいた内容を、すべて一巡してからお礼しようと思ったのですが、あまりに深く広いものばかりで、すべて見るのは途中で諦めました(笑)。 あとでじっくり勉強したいと思います。 「Perlベストプラクティス」や「Perl Hacks」は、実はずっと気になっていた本です。 やはり読むべきですね。(ベストプラクティスは私も価格にひるんでました) 私が自分のソースを「美しくない」と感じるのは、やはり無駄なロジックが多いという一言に尽きると思います。 きっかけは、先日公開されたCGIソースの中にに、自分のと同じ目的をもつサブルーチンを発見したことです。 私は30行ほどで書いたサブルーチンを、その方はたった3行の正規表現で済ませていました。衝撃で、無知の知という言葉が浮かびました。 もちろん私の場合は「無知であることを知らずにいた」という逆の意味で、ですが。 今回いろいろ教えていただいて、自分がさらに何も知らなさすぎだったことを恥じていますが、少しでも上向きでいきたいとも思います。 これからもいろいろお教えください。