2010-07-22

やみ式プログラミング学習法 ver. Perl

「プログラミングなんていろいろ試して覚えるのがいちばん早いってー」

なんて、常ひごろ申しているやみです。

「教科書とか読んで〝勉強〟するようなもんじゃないよー特にさいしょはー」「解説サイトだっていっぱいあるしさー」てな具合ですね。


しかし、これが他のひとからはいまいち理解されてない気がするのです。

どうも他のひとプログラミングは

「たのしいRuby + 先生の説明 + 授業の課題」

で勉強するものらしい。たのしいRubyておま。あれ読み物だろjk。
# 萌えごみでも作るか。『たのしいYummy』とかなんとか。うああああ楽しくなさそう……





なんか「勉強」って言っちゃうとさ、ただのプログラミングが途端に難しくならね? リテラルがなんだオペランドがどうだオブジェクト指向があれだ、云々。

ちげえよ。おれが知りたいのはこれから書くプログラムのための必要最低限の知識だけだって。「いつか使えるかもしれない」知識はいつか覚えればいいんだよ。モジュール化だとかそんなの必要になったとき調べるんで十分だし。


ぷーぴぽー。小学生のころに父親がやってたのの見よう見まねでDOSコマンド覚えたっていうアレゲの子やみですから、いろいろ試してりゃ覚えるよ系アプローチはしごく当たり前てかんじなんだけど、周りを見る限りそうでもないらしい。んん私は異端なんだろうか。

いやそんなことないよ! だってだって、だってだってだって……
ああもどかしい!! もう実体験書いちゃえ!! 書いちゃうもんね!!!


そんなわけで今日は、やみがはじめてPerl触ったときのことを書いちゃおうとおもうのです。キャっ 赤裸々体験記!


※興味のないひとにはとても退屈な記事です。長いです。反対に分かってるひとにはいまさらな話ばっかりです。そして携帯からだと絶賛意味不祭り状態。

※※な、なんて対象の狭いエントリなんだ!




しらないひとへ。

Perl(ぱーる)というのは言語名です。比喩でもなんでもなく言語です。一種の人工言語だな。
これ、コンピュータに命令を送り込むための言葉なのです。


Perlでなんか書く

→ コンピュータがPerlを解釈する

→ なんか命令通り動いてくれちゃう!


な流れ。たとえば


1+2って書く

→ コンピュータが1+2を解釈
「1+2とかマジパネェ。これ計算しろって空気っスかね」

→ 結果が3って表示される!


こう。

プログラミングてのは「1+2」って打ち込む作業のことだね。
そんで、できあがった命令「1+2」のことはプログラムっていう。あと今回ならスクリプトってもいう。

※PerlとRubyは似たもの同士。というかPerlをもとに作られたのがRuby。




やみ、Perlに出会う。

やみ「オッス オラやみ! いっちょPerlっての書いてみっぞ!」

たとえばそこら中の掲示板でも使われてるってことで、とりあえずWebで動くソフトにするならPerlじゃねっておもったのだ。


#!/usr/bin/perl

print "Content-type: text/html; charset=utf-8", "\n\n";

print <<"EOD";
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-jp" lang="ja-jp">

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-style-type" content="text/css" />
<link rel="index" href="./index.htm" />
<title>perl test</title>
</head>
<body>
EOD

print "</body></html>";


やみ「ネットから拾ってきたてきとーPerlのサンプルがこれだぜ!」

やみ「Webサーバ用?」

やみ「意味はよくわからん。htmlとperlの混ざりモノってかんじか!?」

やみ「なんぞよくわからんけど、ここらへん


#!/usr/bin/perl

print "Content-type: text/html; charset=utf-8", "\n\n";

print <<"EOD";
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja-jp" lang="ja-jp">

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-style-type" content="text/css" />
<link rel="index" href="./index.htm" />
<title>perl test</title>
</head>
<body>
EOD

(ここらへん!)

print "</body></html>";


やみ「に好きなこと書いていいよーてかんじらしいな! 試すぜ」

(この先、「ここらへん」以外はてきとーに省略します)


(前略)

aaa

(後略)


やみ「とりあえず基本だろ」

やみ「実行っ!」


Internal Server Error


やみ「いんたなるさーばえらーだとおおお」

やみ「ようわからん! こんなときはGoogle先生カモーン!」

"perl 文字 表示" の検索結果...

(よみよみ)

やみ「んー。なんかprintっての使えばできるっぽいぞ。」


(前略)

print aaa

(後略)


やみ「あれれ何も出てこない。ワタシドコ間違タノヨGoogleサアァン。」

"perl print" の検索結果...

(よみよみ)

やみ「あー。クォーテーションとかセミコロンが要るのかー。じゃこうか!?」


print "aaa";


aaa


やみ「おおおぉうまくいった!!」



なにが楽しいって

このまま勢いでPerl覚えられそうな気がしてきちゃう瞬間です。初めてかめはめ波撃ったときの悟空もきっとこんな気分だったに違いない。

やみ「日本語はどうよ?」


print "あああ";


あああ


やみ「xhtmlとかは?」


print "<img src='http://volkarten.appspot.com/calledext/Benno_bright_79_af.jpg' style='background: #525252; padding: 5px' />";




やみ「勝 っ た」

やみ「よおし勝利宣言だ」


print "ハハロローーワ((゚゚дд゚゚))ワーールルドド";


ハハロローーワ((゚゚дд゚゚))ワーールルドド


やみ「ふははははははは!」

やみ「これだよ! この全能感!」

すげえ! なんか画面にだせた!
htmlも書けてる!
なんかこれでもう文字表示なら全部できるんじゃね!?


てなる瞬間です。

できることが1つふえた。確実にふえた。それが自分でわかる。これはうれしい。楽しい。

覚える順序ってか流れが自分オリジナルだってのはでかい。本で読んだとか授業で聞いたより忘れづらいとおもうの。

あとになってもしprintの書き方忘れちゃってても、流れさえ残ってればまた思い出せるんね。歴史の勉強とおなじ。


やみ「これだとどうなるん?」


Print "aaa";


Internal Server Error


やみ「ほーほー。大文字と小文字は区別してるっぽいなー。」



とりあえず変数を覚えな

やみ「プログラミングっていえば変数だよね変数」

やみ「出番ですよGoogle先生っ!」

"perl 変数" の検索結果...

(よむよむ)

やみ「ふうむ、なるほど。『ドルなんとか』って書けば変数になるんか」


$piyo = "あああ";
print "$piyo";


あああ


やみ「あーわかりやすいぞ。すげーわかりやすい」


$piyo = "あああ";
$puyo = "いいい";

print "$piyo$puyo";


あああいいい


やみ「あれ。成功しちゃった」

やみ「てっきりなんかエラーでると思ったのに」

やみ「あ、こういう書き方もできるっぽい」

やみ「『ドットイコール』で『末尾に追加』だって」


$piyo = "あああ";
$puyo = "いいい";

$piyo .= $puyo;
print $piyo;


あああいいい


やみ「あと『プラスプラス』で1加算、『マイナスマイナス』で1減算だって」


$a = 5;
$a++;

$b = 4;
$b--;

print $a;
print "<br />"
print $b;


6
3


やみ「いじめてみよう」


$a = "a";
$a++;

$b = ZZZ;
$b++;

print $a;
print "<br />";
print $b;


b
AAAA


やみ「!! おまPerlのくせになまいきだぞー!」

やみ「ふつうに1足してみよう」


$a = "a";
$a = $a+1;

print $a;


1


やみ「あ、これは1になるんだ」

なんか++だけの特別機能だったらしい。



やみ「そういえば大文字小文字は区別してるんだっけ」


$A = 1;
$a = 2;

print "$A<br />$a";


1
2


やみ「区別してるっぽいなー」

やみ「……計算とかってできちゃったりしますか?」


$a = 3;
$b = 4;
$c = $a+$b;

print $c;


7


やみ「できちゃった」

やみ「よ、ようし(ゴクリ)」


$a = 3;
$b = 4;
$c = $a**$b;

print $c;


81


やみ「うほっ」


$c = -5/2;

print $c;


-2.5


やみ「おい優秀だなおまえ」

……なんかエラー吐かせないと負けな気がしてきたぞ。


$c = sqrt(2);

print $c;


やみ「へっへっへー数学ソフトてき書き方だぜ」

やみ「さすがにこれは計算できんだろ~!」


1.4142135623731


やみ「ええええええ」

やみ「いやちょっ! すごいけど! ちょっ 自重!」

……負けた気がする。


やみ「よおし こうなったら奥の手いくぜ」


$c = 0/0;

print $c;


Internal Server Error


やみ「フン! 勝った」



トライ&エラー方式ってプログラミング向き;なぜか


その1:間違ってもダメージゼロ。すぐやり直せる。

何度でもやり直せるなら、いつかは正解にたどり着くでしょう。


その2:同じプログラムはいつも同じ結果をだす。

試すたびにエラーが出たり出なかったりみたいなことは、ふつうありません。


その3:なにを覚える必要ないかがわかる

関数の書式とかは使うときに1回いっかい調べれば十分です。
でも論理式の書き方はいつも頭に入ってなきゃマズイ。
そういうのが感覚で身につきます。ついでに必要なもんだけは確実に覚えてるかんじになります。


その4:理解じゃ足りない。

プログラムの書き方なんて本読めば理解できるのです。
でも実際プログラム書くには理解じゃ足りなくて、たとえば行末のセミコロンなんかでも癖になるまで染みついてなきゃダメなのです。


その5:実際に予想通り動くかは試してみないとわからならい

スクリプトみて処理を想像するのはわりと簡単です。
そしてたいがいの予想は読み違っているものです。


その6:解説はネット上に溢れてる。完成品も溢れてる。

トライ&エラー用サンプルはそこら中に転がっていますよ!


もうすこしPerlのつづきます。



配列ってのがあるらしい。変数のともだちらしい。

反体制的な行動をとると絶交されるらしい。

されません。

やみ「よくわからんが」

やみ「『アットなんとか』で配列。で取り出すときは『ドルなんとか[n]』らしい」

やみ「意味わからんけど試してみればいいや」

やみ「サンプルそのまま打ち込んでみっべ」


@piyo = ("aaa","bbb");

print $piyo[1];
print "<br />"
print $piyo[0];


bbb
aaa


やみ「んー」

やみ「ようは@piyoってひとつのなまえで、連番になった変数がつかえるってことか」


@piyo = (3, 4);
$c = $piyo[0]**$piyo[1];

print $c;


81


やみ「把握した」

やみ「でもこんなことはきっとできないよね」


@piyo = ();
$piyo[1] = "bbb";
$piyo[0] = "QQQ";

print "$piyo[0]$piyo[1]";


やみ「まあ普通かんがえてエラーだよね」


QQQbbb


やみ「ってええええええええ成功してるし!」


$piyo[1] = "ccc";
$piyo[0] = "UUU";

print "$piyo[0]$piyo[1]";


やみ「こ、これならさすがにエラーだよね……?」


UUUccc


やみ「eeeeeeeeeee自重しろし」

よく知らないけど
こういうときはundefined variableだとかって
怒られるもんなんじゃないの!?


やみ「じゃ、じゃあこれは……?」


$c = $a + $b;
print "$a, $b, $c";


, , 0


やみ「貴様の辞書にundefinedの文字はないのかあああ!」



さらにともだちで連想配列ってのがあるらしい。

連想配列。ハッシュだとハッシュ。ポテトか? ポテトなんだな!?

やみ「なんぞこれ。サンプルみても使い所がわからん」

やみ「わからんのでスルーする。必要になったとき戻ってくればいいよねー!」

いいとこ取りでよくわからんかったらスルーって効率いいよね。どうせ全部覚えるとか無理だしー。



条件分岐! だってさ!

やみ「いふいふ! これはスルーできないぜー!」

やみ「出番だぜGoogleさん!」

"perl if" の検索結果...

やみ「サンプルゲット~」


if ( 10 > 1 ) {
    print "あああ";
}else{
    print "阿アア";
}


やみ「これなに英語っぽく読めばいいの?」

やみ「かっこの中の通りだったら『あああ』で、そうじゃなかったら『阿アア』、てかんじ?」


あああ


やみ「うんうん」


if ( 10 > 100 ) {
    print "あああ";
}else{
    print "阿アア";
}


阿アア


やみ「なるほどー」

(よみよむ)

やみ「あ。こんな書き方もできちゃうらしいですよ」


print "あああ<br />" if ( 10 > 1 );
print "阿アア<br />" if ( 10 > 100 );


やみ「ものぐさ向きな書き方ですね」


あああ


やみ「かっこのなか変数にするとプログラムっぽい」


$a = 1;

if ( $a == 1 ) {
    print "あああ";
}else{
    print "阿アア";
}


やみ「『イコール』が代入で『イコールイコール』が比較なんだってね」

やみ「数学ソフトとおんなじな」


あああ


やみ「うん」


$a = 2;

if ( $a == 1 ) {
    print "あああ";
}else{
    print "阿アア";
}


阿アア


やみ「なるほどー」

やみ「ところでこれかっこの中自体の計算結果どうなってるん?」


$a = 99;
print ( $a == 99 );


1


やみ「へー。比較が一致したら『1』なのか」


$a = 999;
print ( $a == 99 );


 


やみ「へーへー! 不一致のときは『空』なのか! じゃ」


$a = 1;

if ( $a ) {
    print "あああ";
}else{
    print "阿アア";
}


あああ


やみ「こんな書き方も」


$a = 0;

if ( $a ) {
    print "あああ";
}else{
    print "阿アア";
}


阿アア


やみ「できるって」


$a = "";

if ( $a ) {
    print "あああ";
}else{
    print "阿アア";
}


阿アア


やみ「ことか」


if ( "aaa" ) {
    print "あああ";
}else{
    print "阿アア";
}


あああ


やみ「もうなんでもありだなー」

やみ「Googleさぁぁん!」

"perl 条件式" の検索結果...

(ふむふむ)

やみ「あーいろいろあるー」

やみ「『アンドアンド』で論理積ねー」


$i = 16

if ( ( 13 < $i ) && ( $i < 16 ) ) {
    print "あああ";
}else{
    print "阿アア";
}


やみ「13より大で16より小のときだけ『あああ』ってことで」


阿アア


やみ「順当だー」


$i = 15

if ( ( 13 < $i ) && ( $i < 16 ) ) {
    print "あああ";
}else{
    print "阿アア";
}


やみ「$i を16じゃなく15にしてみたら」


あああ


やみ「結果がかわる、と」

(よみよみ)

やみ「あ びっくりつけると」


if ( !1 ) {
    print "あああ";
}else{
    print "阿アア";
}


阿アア


やみ「1と0が逆になるんだって!」


if ( !( !0 && !1 )) {
    print "あああ";
}else{
    print "阿アア";
}


あああ



くりかえし…… とか?

やみ「よおし if はぜんぶわかった」

やみ「セオリー的に次は繰り返しっぽいな。ささっ 先生っ!」

"perl 繰り返し" の検索結果...

(よみよみ)


for ( $i = 0; $i < 10; $i++ ) {
    print $i;
    print "<br />";
}


0
1
2
3
4
5
6
7
8
9


やみ「あー なるほどー」

やみ「なんかもう大体わかった気がするお」

やみ「同じとこぐるぐるループさせとけってことだろ」

やみ「『かっこの中の判定が失敗するまで』」

やみ「これ配列と組み合わせるの相性よさそうね」


@aaa = (5, 7, 9, 11, 13);

for ( $i = 4; $i >= 0; $i-- ) {
    print $aaa[$i];
    print "<br />";
}


13
11
9
7
5


やみ「うんうん」

やみ「てきとーにifと組み合わせてみるべー」


for ( $i = 1; $i <= 10; $i++ ) {

    if ( $i%6 == 0 ) {
        print "$iって6でわれる";

    } elsif ( $i%3 == 0 ) {
        print "$iって3でわれる";

    } elsif ( $i%2 == 0 ) {
        print "$iって2でわれる";

    } else {
        print "$iなんかぶー!";

    }

    print "<br />";

}


やみ「あ。『パーセント』で割り算のあまりが計算できるよ」

やみ「『20%6』なら『2』だって」


1なんかぶー!
2って2でわれる
3って3でわれる
4って2でわれる
5なんかぶー!
6って6でわれる
7なんかぶー!
8って2でわれる
9って3でわれる
10って2でわれる


やみ「おおお! なんか今までになくプログラムってかんじするぜええ!」

やみ「いじめてみよう……」


for ( $i = 0; 1 == 1; $i = 0 ) {
    print "a";
}


ドキドキ


aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa


やみ「わああやっぱり無限ループしたああ やっほほい!」

たのしかった。


やみ「よーしだいたいわかったぞー」

やみ「doとかforeachとか何種類もあったきがするけど知らん!」

やみ「どうせ全部なんか覚えられるわけないんだし」

やみ「ループやるときゃそのつどGoogle先生たたけばいいよね。」



あとは検索置換さえできれば

必要なもんぜんぶ揃うんじゃね!?

やみ「んー 置換は『s///』っての使えばいいっぽい。」

やみ「サンプルー」


$piyo = "hhajjakkallap";
$piyo =~ s/a/あ/;

print $piyo;


やみ「いまいち理解してないけどこれでいいの?」

うまくいけば「a」が「あ」になるはず!


hhあjjakkallap


やみ「あれれ。いっこだけしか置換しないや。どうしてGoogleせんせー?」

"perl s/// 繰り返し" の検索結果...

(よみよむ)

やみ「んー つまりスラッシュのあとに『g』って書けばいってことスかね?」


$piyo = "hhajjakkallap";
$piyo =~ s/a/あ/g;

print $piyo;


やみ「これでどうよ!?」


hhあjjあkkあllあp


やみ「ふっはあ! 勝利!」

やみ「しかもこのs///ってやつ正規表現がつかえるらしぞ!」

※やみは正規表現もいまみたくエラー吐きながら覚えました


$piyo = "fds23gk6lvk0as555ccxz";
$piyo =~ s/[0-9]/あ/g;

print $piyo;


やみ「数字だけ置換とか」


fdsああgkあlvkあasあああccxz


やみ「うむ」


$piyo = "ggnammmkl33kllllllkklkklse5555nnarrrr";
$piyo =~ s/(.)\1{2,}/あ/g;;

print $piyo;


やみ「3文字以上連続したら置換とか」


ggnaあkl33kあkklkklseあnnaあ


やみ「うむ」


$piyo = "あいう~ゑを~";
$piyo =~ s/(.+?~)(.+?~)/\2\1/;;

print $piyo;


やみ「前後入れ替えとか」


ゑを~あいう~


なんでもできるげっ なんでもできちゃうげっ!

やみ「検索だけで置換しないときはm//でいいらしい」

やみ「複数行文字列もつかえっしこれで万能じゃね」



これだけで全部書けるッ!

やみ「そろそろ覚えんの疲れたし」

やみ「テストじゃなく本物のプログラム書いてみるべ」

やみ「わかんなくなったらGoogle先生はいつだってぼくらの味方!」


そんなかんじで本番作り始めたのです。

書き始めるとわかること。
これだけ覚えとけばほんとに大体の処理は書けちゃうってこと。

Perlって、最終的に同じ処理になるプログラムが何通りでも作れるらしい。
ながーいプログラムをたった一行で書いたりできる。これは難解。
逆にすっげえ長ったらしいけど究極的にわかりやすいって書き方もできる。

ここまでの材料~

  • 変数
  • 配列
  • 論理式
  • print
  • for
  • if
  • s///

とちゅう追加で

  • ファイルオープン
  • フォームからデータ受け取り
  • サブルーチン

覚えた。
いまいちよく理解してないのでサンプルコードコピペモードでおk
とりあえず s/// の威力が強すぎてバランス崩壊っていうか、使う関数 print と s/// だけで7割越え状態。

  • 文字列操作はs///の正規表現にぜんぶ任せちゃえ。
  • 見た目方面はcssがなんとかする。
  • ちょっとくらい動作遅くてもキニシナイ。遅いったってどうせたかが知れてるんだから。がんばって高速化しても数年後には誤差の範囲です。


――そんなかんじで数日後

やみ初めてのまともなプログラミング成果物には
ちっこいスクリプトが1本できました。
テキスト読み込んで行並べ替えて表示するってだけのしょぼいやつ。これこそが
のちにP室オンラインとか呼ばれることになる子なのでした。




時空戦士イバライガーR
よい子のみんな! 努力と根性! トライ&エラーだ!
正規表現は秀丸エディタで覚えると簡単だぞ!

6 個のコメント。書きます?:

あっとん said...

P室オンライン気になる。

俺も来ないだエクセルで出納帳作るときトライ&エラーで頑張った。

たぶんプログラミングはやらないけどな。

やみ said...

>P室オンライン
tp://s6.ql.bz/~mk-sohm/p/

>エクセル
懐かしいw むかしそうやって覚えました

エクセルでもマクロという名でVBAプログラムが書けるのだ。
覚えるとたのしいよー。

m-ogawa said...

プログラミングは、実用的に覚えるもの。というのが会社に入った側の意見。を、ちょっと興味が沸いたので述べます。


正直、プログラミングそのものに興味が無いとやみの解説は読むのが辛いと思う。それこそ解説書に書いてある事と一緒。

結局はよくわからない文字列を書く作業だから、それが何のためにあるのかはっきりしないとしんどい。プログラミングはやっぱりそれ自体が目的ではなくて、何か達成したい目的がある場合に使われる。perlだったら掲示板を作ったりブログを作ったりファイルアップローダを作ったり。出納帳用のデータベースのインタフェースとして使ったり、他ドメインからフィードを取得したり。

で、用途を考えると、今の世の中は本当に便利で、自らプログラミングをする必要がほとんどない。プログラミングをしなくても代表的な目的が達成できてしまう。無料サービスのおかげで。たまに、より凝った事をするために、ほんの少し必要になる。

大学では、ほんの少し必要という程度ではなく、最終的には、既に存在する無料サービスの根本的な仕組みを把握して、別の手法で同じサービスを一から作ったり、ある部分を改善したりという事を達成するために、ガチで勉強する。就職する人が多いからほとんどの人はそこまでつかわないんだけど。でも順当に大学で勉強を進めるなら、ガチ勉強は避けては通れないはず。
そんで単位取得を目的にすると、これまた教科書的に勉強するしか無い。そういう試験や課題が出るから。

という目的を考えると、ガチ勉強する必要があるんだから、ネット上の情報を頼るよりは、まずは他の授業と同様に教科書とにらめっこする方が確実で速い。その辛さは新しい学問を習うときの辛さ以上ではないはず。

というのが一つ。これはちょっと揚げ足取りのようで申し訳ない。



次に、僕の経験談から。解説サイトがあるから本で勉強する必要は無いのか?という事について。

最近はもう、解説サイトが役に立たない時代だと思う。情報をまとめてくれているwikiを見つけて、そこのリンクを一通り眺めたらよくわかるんだけど、多くがブログのエントリだったりする。

そしてブログのエントリというのは、往々にして信用ならない。PCが多種多様すぎて環境依存要素を取り除けないのが主な理由で、あとは文字でブログ主の経験を伝える事に無理があるか、あるいは書き間違いなどによって正しい情報を得るのが難しい。
・・というのは、iPhoneアプリを作っていて感じた。

だいたい、perlだって、自分でサーバを用意してアップロード(あるいは自宅でファイル移動)して最終的にinternal error出さずに表示するのに、いったい何分かかるか。なれてない人が暇を見てやる程度だと、下手したら一週間かけても達成できない。僕だってサーバのレンタルから始めたら1時間弱はかかる。それでこんにちは世界。作業を趣味化できない限り、ものすごいコストに対して見返りはゼロ。


つーわけで、学習法の神髄は、目的の明確化、じゃないっすかね・・・。
ちなみにプログラミングを趣味とする場合の目的として、最近だとGUIも簡単に組めるから、そっち系のがおもろいよ多分。VC++がフリーだからWindows用のゲームとか簡単に書ける。もちろんグラフィック関係は座標系の知識(というか知恵)が必要だし、サウンド関係なら信号処理の知識(こちらは知識かな)が必要になるけど。

やみ said...

>m-ogawa

いろいろあるけど
>正直、プログラミングそのものに興味が無いとやみの解説は読むのが辛いと思う。それこそ解説書に書いてある事と一緒。

これに言われつくされた感がある。そうか。書いてて「なんかちげーなー」ってなってたのはこのせいか。


>プログラミングはやっぱりそれ自体が目的ではなくて、何か達成したい目的がある場合に使われる。
>つーわけで、学習法の神髄は、目的の明確化、じゃないっすかね・・・。

そうだ、そうだ。じぶんもP室オンラインみたいなの作ろうと思ってからPerlはじめたんだった。


>そんで単位取得を目的にすると、これまた教科書的に勉強するしか無い。そういう試験や課題が出るから。

これは専門とか授業によるんじゃね。プログラミングとかプログラムそのものに対する理解を求めるのか、仕様通りにプログラムを組み上げることが目的になるのか。
※ガチ勉強すべきところに手を抜く方法をかんがえて賢くなるのが学生。


----


>最近はもう、解説サイトが役に立たない時代だと思う。情報をまとめてくれているwikiを見つけて、そこのリンクを一通り眺めたらよくわかるんだけど、多くがブログのエントリだったりする。

そこは言語でちがうって認識してる。
perlみたく古典的で紙の本もいっぱい出てるような言語は、全部ひとりのひとに整理されて書かれたサイトがわりと見つかるんじゃね。そういう意味ではiPoneは新しすぎるのだ。

ブログエントリの信用ならなさ具合は痛感した。HTML4.0のころの解説本みたいだと思った。勘違いが伝染してくのよね。


>だいたい、perlだって、自分でサーバを用意してアップロード(あるいは自宅でファイル移動)して最終的にinternal error出さずに表示するのに、いったい何分かかるか。

そこはほら。学情なら即座に使えるってことで。
開発環境の構築はめんどいよなー。はじめてApache+PHP+MySQL環境入れたとき2日がかりだったもの。LaTeXのときも1日かかった。


GUIをやり出すとジョークアプリしか作らなくなるきがして……(w

くまちゃん said...

今ならまだ間に合う!!
Pythonにしておけええええええ!

やみ said...

>くまちゃん
モンティもやってみるつもりだったけど手つかずなり