表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
甘えん坊幼馴染と過ごすイチャイチャ大学生活  作者: 久野真一
第7章 アルバイト始めました
68/140

第67話 俺と幼馴染がペアプログラミングをした件について

二人がC言語でペアプログラミングするお話です。

プログラマじゃない方は雰囲気を読み取る感じで。

※今回は、プログラマじゃないと理解不能な部分多数なので、

※雰囲気だけ感じ取ってもらえればと思います。

 

 バイトのために、C(しー)言語でプログラミングをする事になった俺たちだが、先日思い知ったように、ミユとの技術差が激しすぎるので、まずはそれを埋めることが必要だと痛感した。


「それで、ペアプログラミングしてみないか?お前と俺で」


 ペアプログラミングというのは、2人のプログラマが1台のマシンを操作してプログラミングを行う方法だ。2人で一つのプログラムを作るというのは効率が悪いとも思えるが、技術の底上げやチームワークを培う、作業効率などの利点があるらしい。


「それは賛成だけど、何を作るの?バイトのプログラムは家だと無理だよ?」

「それなんだよなあ……」


 今回、バイトで頼まれたHyperEther(はいぱーいーさ)のライブラリを作るためには、HyperEtherの機能を持ったハードウェアが必要なのだが、それはさすがに持ち出し禁止らしい。


「そもそも、俺がC言語のプログラミング慣れてないんだよな」

「リュウ君は十分できるって」

「あくまで、ちょっと書けるだけだろ。仕事だとまだまだ足りないって」


 C言語は1970年代に生まれただけあって、色々なところが古いと評されているが、なかでも、プログラマが、メモリ破壊バグを作り込みやすいのが悪評の元になっている。メモリ破壊バグというのは、性質が悪くて、一つ間違えば、アプリのセキュリティにも大穴を開けかねないものだ。


 それはともかく、それだけ嫌がられながらもCが必要なのは、今回のような件だとC以外に適した言語がないという実情がある。


「とりあえず、システムコールを直接使うプログラムを書く練習をしたいな」

「それでも、何を書くかが決まっていないと、意味ないよ」

「まずは、ファイルをコピーするのを書こう。難しいの書いても挫折しそうだし」


 昨日、(しゅん)さんから教わった事を応用すれば、ファイルをコピーするくらいならなんとかなるはずだ。


「うん。わかった。じゃ、Linux(りなっくす)マシン起動するね」

「ああ、頼む」


 我が家には、現在4つのPCがある。1つは俺が持っているノートPCでもう1つはミユが持っているもの。後の2つは、デスクトップPCで、それぞれWindowsとLinuxが入っている。バイトで頼まれたのもLinux上のプログラムなので、Linuxが入ったマシンが必要なのだ。


「はい、立ち上がったよ」

「よし、じゃあ、エディタ立ち上げるか」


 最近、プログラマの間で人気の|Visual Studio Code《ヴィジュアル スタジオ コード》(略してVSCode)というエディタ(プログラムなどを書くためのアプリ)を立ち上げる。


「しかし、コンピュータ扱ったフィクションって何であんなおかしいんだろうな」

「どうしたの、急に?」

「いやさ、なんかずっと真っ黒い画面に文字が流れてるとか、それどう見てもプログラミングしてないだろ、って感じのプログラム風景とか」

「リュウ君、そういうのは野暮だよ」

「いや、そうなんだけど」


 どうにも納得が行かないんだよなあ。と、話が脱線してしまった。とりあえず、立ち上げたエディタに、まず、関数のひな型を書いてみる。


/**

* ファイルをコピーする。

* @from_file コピー元のファイル名

* @to_file コピー先のファイル名

*/

void copy_file( char *from_file, char *to_file);


「こんな感じでどうだ?」

「いいと思うんだけど、なんでJavadoc(ジャヴァドク)形式のコメント?」


 プログラムの中には、人間にとってだけ意味がある(コンピュータが無視する)文字を書き込むことができて、そういう文字をコメントという。コメントの中に、プログラムがどんな動作をするかを書くことが一般的だ。


 ミユが指摘しているのは、俺が書いたコメントはJava(ジャヴァ)言語で採用されているJavadoc形式で、C言語ではあまり使わないからだ。とはいえ-


「別に今、そこにこだわらなくてもいいと思うんだが」

「ん。そうかもね。じゃあ、私がcopy_fileの中身を書くね」


 プログラムに取り組む時のミユは恐ろしい程真剣で、普段の甘ったるい雰囲気は微塵もない。


void copy_file(char *from_file, char *file) {

int from_fd, to_fd ;

char content[BUFFER_SIZE] ;


}


 そこまでミユが書いている横で、ふと気づいた事をコメントする。


「BUFFER_SIZEって定義されてないよな」

「あ、忘れてた」


 慌てて、ミユが定義を書き足す。


#define BUFFER_SIZE 256

void copy_file(char *from_file, char *file) {

int from_fd, to_fd ;

char buffer[BUFFER_SIZE] ;


}


 ミユでもこういうところでミスをするのかというのは少し新鮮な気分だった。


「ところで、バッファを256バイトにしたのはなんでだ?」

「深い意味はないんだけど、1文字ずつだと遅くなるから」

「どういうことだ?」

「昨日、俊先輩が言ったことを思い出してみて」

「システムコールはOSの機能を呼び出すって奴か?」

「そうそう。read()もwrite()も、多く呼び出すとそれだけ遅くなるよね」

「なるほど。納得だ」


 とりあえず書けるという俺のレベルはまだまだだと痛感する。


「じゃ、続けるね」


 淡々とプログラムを書いていくミユ。


#define BUFFER_SIZE 256

void copy_file(char *from_file, char *file) {

int from_fd, to_fd ;

char buffer[BUFFER_SIZE] ;

int read_size, write_size;

from_fd = open(from_file, O_RDONLY);

if(from_fd == -1) {

perror("ファイルを読み込めませんでした");

exit(1);

}

}


「ファイルが開けなかったら、メッセージを出して終了するんだな」

「うん。とりあえず、動かすだけなら、いいかなって」

「まあ、そうか」


 さらに、ミユは書き進めようとするが、そこで俺がストップをかける。


「今度は、俺に書かせてくれ」

「うん。お願い」


 ここまでで、コピー元ファイルを開けたわけだから、次はコピー先ファイルだな。ミユと違って、システムコールのマニュアルとにらめっこしながらだけど、こんな感じか?


#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

#include <fcntl.h>


#define BUFFER_SIZE 256

void copy_file(char *from_file, char *to_file) {

int from_fd, to_fd ;

char buffer[BUFFER_SIZE] ;

int read_size, write_size;

from_fd = open(from_file, O_RDONLY);

if(from_fd == -1) {

perror("コピー元ファイルを読み込めませんでした");

exit(1);

}

to_fd = open(to_file, O_WRONLY | O_CREAT | O_TRUNC,0666);

if(to_fd == -1) {

perror("コピー先ファイルを読み込めませんでした");

exit(1);

}

do {

read_size = read(from_fd, buffer, BUFFER_SIZE);

if(read_size <= 0) break;

write_size = write(to_fd, buffer, read_size);

if(read_size != write_size) {

perror("コピー中にエラーが起きました");

exit(1);

}

} while(1);

}


「とりあえず、こんなもんだと思うけど、どうだ?呼び出すのはまだだけど」

「うーん、良さそうだけど……待って、開いたファイル閉じてないよ」

「あ!しまった」


 開いたファイルは閉じるのが鉄則だ。慌てて、次の二行を書き加える。


close(from_fd);

close(to_fd);


「うんうん。いい感じ。失敗したときに、いきなり終了するのは不親切かも」

「そこは、ちょっと目をつぶってくれ」

「じゃあ、後は、呼び出す部分を書くね」


 素早く、copy_fileを呼び出す部分をミユが書き連ねていく。動作確認のために、とりあえず、


$ ./copy_file test.txt test2.txt

$ echo test.txt

Testです

$ echo test2.txt

Testです


 となる事まで確認して、やっと一段落。


「とりあえず、出来たか。でも、これだけ簡単なのでも、結構めんどくさいな」

「だから、私達が頼まれてるんじゃないかな」

「それもそうか。しっかし……」

「ん?」

「いや、プログラマで食ってくのって、思ったより大変なのかもな」


 食いっぱぐれしなさそうと思っていたけど、案外そうでもないのかもしれない。


「私は、こういうの考えるのも楽しいけど」

「まあ、俺もちょっとはわかるがな」


 たったこれだけで、かなり頭を使った、と思ってしまっているようではまだまだだと痛感した。


 気がつくと、2時間も経過していた。自分の実力の無さを思い知らされるが、同時に、腹の音がぐーと鳴っているのに気がつく。


「ふふ。ご飯、用意するね」

「助かる」


 その後は、ミユお手製のお昼ごはんを堪能したのだった。ちなみに、最近は暑いので冷たいお蕎麦に薬味をたっぷり添えて、頂いている。


「最近暑いから、こういうのがいいな」

「でしょ?お素麺も買ってあるから、言ってね」


 すっかり、料理をするのが当たり前という感じのミユ。


「ほんと、いつもありがとうな」

「どうしたの、急に?」

「いや、ちょっと、飯作ってもらえるありがたみを痛感した」

「別に好きでやってるから、気にしないで」


 ご飯を食べた後は、再びペアプログラミングを再開。そんな風にして、暑い夏の一日が過ぎて行ったのだった。

 

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ