nishiru3の日記

備忘録です。ネットのゴミ。

Perl入学式の感想

Perl入学式に参加させていただいていたのですが、 せっかくなので、これまでの感想とかを書いておきます。


動機

私は大学から社会人まで科学技術計算で生きてきて、プログラムを書いておりましたが、 CとかFortranがメインです(おそらくこれからもそう)。 スクリプト言語AWKPythonRubyをテキストデータ整形用やグラフ描画用に書くくらいで、 見よう見まねでやっている状態でした。 それで、ちょっと調べてみたらPerl入学式という名の勉強会があるじゃないですか! 私のような初心者でも参加できそうなので、参加しようと思い立ったわけです。 といっても、第2回の開催前に気づいたので、参加できたのは第2回以降です。 Perl入学式のURLは下記です。

http://www.perl-entrance.org/

第1回

この時はまだ存在を知らず、不参加でした。 内容は、Perlを使う上での環境構築だった模様です。 対応OSはLinuxMacです。ただWindowsでもVMWareを使って、Ubuntuの環境を構築するので、 心配は要りません。 Webにアップされている資料だけでも、環境は構築できました。 正直、環境を構築できたので、参加しても得るものがあるかなと思い、第2回の参加を決めたのでした。

第2回

第2回の内容は大まかに以下のとおりです。

  • 前回の復習
  • おまじない
  • 変数
  • 標準入力
  • 四則演算
  • 基本的な演算子
  • if, else文
  • 論理演算子
  • for文, 配列

入出力、演算、反復や分岐等を学びます。 私自身は多言語で経験があったので、特に難しい印象はありませんでした。 ただし、「プログラムを書いたことがない」人でも出来ると思います。 とにかくサポーターが心強いです。レベルが低いかもしれない、みたいな事を聞いても問題ないです。

こういった勉強には初めて参加したのですが、Macが圧倒的に多い印象です。 まあ、OSXになってから爆発的に増えた気がします。 私も大学の研究室で始めてOSXを使って、「おー、Terminal使えるんだ!cdとかも使えるじゃん!すげー!」 とOS9との違いにびっくりしたものです。

第3回

大まかには、以下のとおりです。

  • 配列 (関数)
  • ハッシュ
  • リファレンス

配列とハッシュは、多言語で経験しているとわかりやすいです。 リファレンスはC言語の経験があって、ポインタを知っていれば理解しやすいと思います。 PythonRubyだと、参照について強く意識することはあまりないですが、 Perlは気にする必要があります。Perl入学式第3回後、ネットや書籍の情報で勉強してみたところ、 このリファレンス機能により、柔軟なデータ構造を表現できることが理解できました。

普通は、一気に書かずに、機能毎に途中出力結果を確認しながらコーディングをしますが、 リファレンスの出力には「Data::Dumper」を利用すると便利だなと感じました。

第4回

概要は以下のとおりです。

リファレンスの復習で撃沈気味でした。時間が空いてしまったため、普段使わないと忘れるのは仕方ないですが・・・。 サブルーチンは、C言語の関数です。Fortran以外でサブルーチンという音を聞くとは思いませんでした。

サブルーチンへ渡す引数は、基本的に1次元の配列です。 したがって、aという配列とbという配列を渡して、それぞれの要素ごとに足し合わせてcの配列を返す、なんてことはリファレンスを使わないと表現できません。 これは代表的なリファレンスの使い方ですが、オブジェクト指向等の表現もリファレンスの機能を使っているはず?です。

正規表現は「Perl入学式」に参加する大きなモチベーションのひとつでした。 Webアプリ等を仕事にしていないので、どちらかというとテキスト処理のツールとして、 Perlを使えないかなと思っていましたので、非常に勉強になりました。

テキスト処理にはAWKを使うことが多く、正規表現も結構適当で、とりあえず、パイプで繋げばいいじゃん! の感覚でいたので、Perl正規表現AWKにもフィードバックできるれば、 もう少しエレガント(コードが少なくわかりやすく)に書けるかなと思ってます。

第5回

概要は以下のとおりです。

  • 前回の復習
  • mapとgrep
  • while
  • next, last
  • package / 名前空間
  • モジュール
  • テスト
  • テストを使った開発
  • 付録: 後置if, 後置for

packageについては名前空間を使ったことがあると、理解が早まります。 また、テストは結構重要な要素かなと。

プログラムは、「環境構築して、プログラム書いて、回った回った!!!終わり」、 というわけではないので、 単体テストの実施方法を学べたのは良かったです。

第6回

概要は以下のとおりです。

  • Mojolicious の準備
  • HTTP の基礎
  • Mojolicious 入門
  • 簡易 BBS の作成

Mojoliciouのインストールからはじめます。cpanmは第1回でインストールしているので、 さくさく進みます。

私はHTTPをちゃんとやってなかったですが、特に違和感なく出来ました。

1つ気になったのは、Mojoを使って吐き出されるソースで、インデントがスペース2つという所です。 おー、emacsの設定変えろって事?です。

不足分

オブジェクト指向については、十分に触れられません。 ただし、第5回までで学習したことを生かせば、書籍やネットの情報で理解することが出来るかなという印象です。

CPANモジュールは第1回で使い方を、第6回でMojoliciousをインストールしますが、 必要なモジュールを調べて、使ってみるのも面白いかと思います。 私はPDLというのを入れて使ってみました。

書籍

Perl入学式では特に書籍は必要ありません。 一冊くらいは購入して、体系的に学ぶこともしておいたほうが良いかと思います。 お勧めの書籍については第1回で紹介されています。

https://github.com/perl-entrance-org/workshop-2014-01/blob/master/slide2.md

また、書籍とPerl入学式で学んだことに差異がありますが、 Perl入学式の方が、最新の情報らしいです(まあ、生の情報が新しいに決まってますが)。 気になったら、サポーターの方に聞くのが一番です。 ハッシュタグ「#Perl入学式」でつぶやくと、すごい人々が対応してくれるそうです。

今後

Webアプリ

今後は、復習しながら、Mojoの学習かなと思いますが、 そもそもWebについては明るくないので、そこから学習するのもありかなと思います。 ただし、仕事で使うことはないと思われるので、 どうやって趣味としてモチベーションを維持するかは個人的な課題です。

テキスト処理

一方で、テキスト処理の自分用ツールを書きたいなという思いはあります。 こちらは普通に仕事でも使えると思うので、やってみたいかなと。 ですから、モチベーションの維持については課題はないと思ってます。 やれば、それだけ生産性が向上しますから。

Perlに対する印象の変化

Perl古い」という印象を持っていました。 まあ、CとかFortranとか使っているんで、古い事にはなれてますが・・・。

Perlは強い後方互換性を保ちながら、新しい機能を追加していく姿勢がすごいなと思います。 お勉強用の書籍については、RubyPythonに比べて少ないのかなとの印象ですが、 実はいろんな機能を追加したり、書き方の流行?の変化速度が速かったりして、 書籍じゃ追いつかないのかなという印象に変化しました。 「古くて新しい」が一番しっくりきます。

付随して得られたもの

開発環境については、「エディタ」を使うようになってます。 Perl入学式の中では推奨はEmacs、SublimeText、Vimでした。 個人的にはEmacsを使ってましたが、講師の方がVimでコーディングしている姿を見ると、 Vimもかっこいいなと思い、多少触ったり、カスタマイズの方法なんかも調べました。

大規模なプログラムになると、開発環境を整えることも重要かなと思います。

サポーターの皆様への感謝

プログラムを書くのは「楽しいから書く」のだな、と思います。 一人で書いても楽しいですが、仲間がいるともっと楽しいです。 ただ、いざ一人で新しい言語を勉強しようとすると難しいです。

こういった場を提供してくださった講師をしていただいた方をはじめ、 サポーターの皆様には感謝です。

加えて、プログラミング言語を学ぶ基礎として、コミュニティは重要だと認識しました。 職場でも、プログラムを書く人がいたとしても、職務の範疇でしか知識や経験が得られませんが、 こういった勉強会があると、幅も広がります。

また、機会があれば参加させていただきたいと思います。 皆様、本当にありがとうございました。