2014/12/12

プログラミング言語を学ぶという事についての私見

Perl入学式 Advent Calendar 2014の12月12日(金)の記事です。昨日の記事は@toku_bassさんの「cpandocべんりってはなし」でした、perldocにcpandocと一次資料に簡単にアクセス出来るものがあるって便利ですね。

さて、僕は普段京都に住んでいて、Perl入学式 in 大阪のサポーターとして参加しています。とはいっても毎回参加出来てるわけではなく、学校の校庭にたまに現れる野良犬みたいな頻度でしか登場しないので、あんまり貢献出来てないなぁと思ってはいます。

12日目の記事は「プログラミング言語を学ぶということ」ってテーマで、本来なら校長が卒業式の壇上で長々と喋るような内容になるのかもしれませんが、(書き終わってから)なりました。


歴史その1 補遺

@papix校長の記事 #Perl入学式 Advent Calendar 「Perl入学式の歴史 〜その1 2011年〜」 でPerl入学式黎明期の話に@nqounetさんと共に僕の名前が出てきます。これはKOF2011という大阪南港のトレードセンタービルで開催されたオープンソースのイベントで、僕は自分のトークセッションが終ってから訪ねたKansai.pmのブースでこの場面、まさにPerl入学式が誕生する瞬間に出くわしました。

Perl入学式って名前もこの時の立ち話で出たと記憶しています。

Perl入学式 in 大阪(2012 #4)
僕は元々サーバエンジニアで、Perlはバッチ処理を書く際にShell Scriptでは複雑な処理を書く言語って認識でした。KOFより一年半ほど前に、モダンPerlを勉強してプログラミング言語としてのPerlを学び、bounceHammerというソフトウェアを作りました。

KOF2011の時点で未だPerl歴1.5年程度でしたし、職業プログラマとしては全然経験の無い状態でbounceHammerを作り上げたのですが、ちゃんと一から学び直したいなぁという思いがありました。そこで誕生の場に居合わせたPerl入学式、受講者として参加するつもりでいました。

その年は急ぎの案件開発でバタバタしていたので2012年4月から、受講者ではなくサポータとして参加しました。それほどPerlを熟知しているわけでもないのでサポータが務まるのか不安ではありましたが、人様に教えるのも自分自身の勉強になるというのを改めて痛感した2012年でした。

入学から卒業、それと進路や未来。

プログラミング言語を学ぶ目的

やっと本題です。Perl入学式ってのはプログラミング学校のPerl科みたいなものです。受講されている方は初めてプログラミング言語に触れる人も居れば、他の言語を使っていて次はPerlを学習しようという人も居てはります。

プログラミング言語を学習するきっかけは、仕事で覚える必要がある、作りたいものがある、いつもの業務をプログラムでもっと楽にできそう、とかそんな現実的な目的があるからやと思います。

僕の場合は、
  1. エラーで返ってきたメールを解析する必要がある
  2. 前職で作ったスクリプトは退職時に置いてきたから手元に無い(そもそも所有権を持ってない)
  3. Shell Scriptで作るには難しい(正規表現とか)
  4. メールサーバで動かす予定
  5. Cで文字列処理は茨の道っぽいしJava|Ruby|Pythonはサーバに最初から入ってない事もある
  6. ほなPerlか!
という感じでした。Perlを選んだ理由は「僕がPerlを使う理由」って記事でちょいと書きました、顧客のサーバを主に扱うサーバエンジニア視点での理由です。

モダンPerlを勉強しながらソフトウェアを書き、Perl入学式でサポータをしながら更に学習しました。Perl入学式の講師もサポータも皆さん第一線でPerlを使っておられるエンジニアですので、ググってやたら古いPerl情報で独習するよりも遥かに良いと思います。

最初に覚える言語と二番目以降に覚える言語

プログラミング言語に入門する時、どの言語を選べば良いか?僕の答えは「近くに居る人が使っている言語を選べ」です。会社でも学校でも、あるいは近所で開催されているその言語のコミュニティでも、いつでもその言語について聞ける人がいる、というのが選択基準の中で大きな割合を占めると思います。

これは他の事でも言えます。個人でサーバを持ちたいけどOSは何が良いか?僕はサーバエンジニアなのでよく聞かれますが、やはり「まわりの人や会社が使っているサーバOSが良い」と答えます。今ならほぼLinux系OSになりそうな世相ですが、前述の条件を満たすならFreeBSDOpenBSDでもよいと思います。

一つのプログラミング言語をある程度覚えたら、他の言語、例えばRubyでもPythonでもJavaでも、プログラムを書くという基本的な考えや作法に極端な違いはありませんので、Perlから入門して次はRubyを、Pythonから入門してPerlも覚える、といった具合で二つ目の言語からは学習速度や効果もより高くなります。

サーバ用OSでも、学校にあった端末はSunでしたが、僕は最初はFreeBSDから入りました。まわりがFreeBSDユーザばかりであったからです。その後転職した先の会社ではRedhat Linuxを主に使っていたのでLinuxの管理も覚えました。FreeBSDもLinuxも根底はUNIX互換OSなので一方を知っていれば他方の学習時間も短くてすみます。

他の言語

Perl入学式の一年が終った後の進路は様々でしょう。@tomchaさんや@yabookさんのようにサポーターとして帰ってこられる方もいらっしゃいます。お二方ともRubyを使われていると聞いた記憶がありますのでPerlは第二言語の位置づけでしょうか。

僕は統計処理でRを使います。Perlで二次元配列を作って頑張ったのですが、回帰分析に時間がかかりすぎる(たぶん僕の書き方が悪いと思う)ので、その分野が得意なRを使うようになりました。

しかし、やはりサーバで動かすプログラムを書くときはPerlを選びます。ある程度はPerlが書けるようになったというのが大きいですが、個人で使っているOSがOpenBSDで最初から/usr/bin/perlとして存在するからというのもやはり大きいです。さっと書いてさっと動く、ってところが大事ですので。

手を動かす

なるべく大きな頻度で手を動かす事が大事です。つまり、学習したプログラミング言語を使って何かを作るという事です。プログラミング言語を覚えるきっかけとして多いであろう「作りたいものがある」という目的を達成するのに、その言語を完璧に覚えるまでまつ必要はありません。習得したところから作り始めて、少しずつ改良したり、機能を追加したりすれば良いのです。

作りたいものが特にない場合、何か好きな事・物を題材に何かを作るのが良いと思います。例えば僕はネコが好きなのですが、Perlを覚えだして間もない2011年に作り出して放置して2013年2月22日(猫の日)にリリースしたAcme::Nyaaというモジュールがあります。文字列を引数に入れると「ニャー」が語尾について猫っぽくなる何かです。
とは言え、本業はサーバエンジニアとかインフラエンジニアなので常に何かプログラムを書いているわけではありません。やはり暫く手を動かしていないとPerlもShell Scriptも忘れてしまいます。なので、去年はいくつかの案件での要求が大元の、あったら便利かもしれない且つPlackを勉強したい点を目的としたJSONでメールが送れるHainekoを作って(最近放置してるけど)、今年はbounceHammerの焼き直しというか、自分がモジュールとして使うに際して使いにくい点と性能面での改善を図ったSisimaiをちょいちょい書いて手を動かしていました。

例え直ぐに仕事に繋がらなくても、好きな分野に関連した何かを作る手の動かし方は学習曲線のあれでも言及されていますが、重要で効果的やと思います。

作ったものがちゃ〜んと動いたときの喜びはまた格別ですし、公開して反応があった時もまた嬉しいものですし、Pull-Requestやパッチを貰ったときの認められた感や承認欲求の充足も他ではなかなか得られるものではないでしょう。

プログラミング言語を学ぶということ

奈良時代とか平安時代、千年以上も前では一部の特権階級しか文字の読み書きはできなかったと思います。識字率変遷記録として残ってない時代ですので、この段落は全て「たぶん」ですが、それが江戸の頃には寺子屋での学習効果でしょうか、それ以前の時代よりも識字率が上がって、今まで読めなかったものが読める人が増え、自分でも話を書いたりしようという人が増えたのでしょう、たぶん。

今はまわりにあるものの多くが電子機器であったり電子回路を内蔵しています。車の窓(を開閉する部分)とか電子機器にせんでもええやろってものまでそうなっています。

ということはプログラミング言語が書ける人の割合は、現代における識字率と言っても過言ではないのかも知れません。多くの人がプログラミング言語を書けるようになると、新しく生まれるソフトウェアも増えるでしょうし、想像もしていなかったソフトウェアやWebサービスが出てきたりするでしょう、実に面白そうです。

現代の識字率であろうプログラミング言語の読み書きができる人の割合(なんか短い良い漢字表記の名前はないのか)が大きくなる未来へ繋がる最初の一歩目か二歩目がPerl入学式であれば、最初のほうからお手伝いに参加させてもらった一人としては嬉しい限りです。

お知らせ

明日は@mackee_wさんの「Perlを学んでいるとお得みたいなチラシ情報ぽい」何かの記事です!あ、それと明日はPerl入学式首席卒業と言っても過言ではない@tomchaさん主催のもくもく会「第1回なにわPerl」が大阪は梅田で午後一時からあります!

0 件のコメント:

コメントを投稿