登 大遊@筑波大学大学院コンピュータサイエンス専攻の SoftEther VPN 日記 このページをアンテナに追加 RSSフィード

Daiyuu Nobori's SoftEther VPN Diary since 2004

登の Web サイト: http://dnobori.cs.tsukuba.ac.jp/

mixi : http://mixi.jp/show_friend.pl?id=672294
Twitter : http://twitter.com/dnobori/
Facebook: http://www.facebook.com/dnobori

日記などへのリンク集
IKeJI さん | Cedar さん | Mayaqua さん | thisjun さん
bakueikozo さん | mugen さん | 分散計算の神林君 | 榮樂先生 (hdk) | 吉田戦車 (ceekz) | 高木先生 | ron さん
AC の古澤さん | AC の TAKAO 君 | AC の NIES 君 | AC の古橋君 | AC な wakatono さん | AC のいのひろ君
AC な三戸君 | AC な柴田君 | AC の小野君 | AC すぎる松本君 | AC な小西君 | AC な google の及川さん | AC な tomocha さん
まつもとゆきひろ氏 | 板野先生の blog | 新城先生の最近の fj への投稿 | つくばあさひなあんてな | hatena 筑波大学 AC リング

日記でよく出てくる「AC」(もともとは筑波大学用語) について詳しくは ここここ をお読みください。

 | 

2011年10月13日 (木)

C 言語や Windows プログラミングはこのようにして習得した Part 1  C 言語や Windows プログラミングはこのようにして習得した Part 1を含むブックマーク  C 言語や Windows プログラミングはこのようにして習得した Part 1のブックマークコメント

あまり参考にならないと思いますが、私がどのようにして C 言語や Windows プログラミングを習得したのかを書いていこうと思います。


C 言語を勉強しなければならないと思ったのは、中学 1 年生の 4 月でした。多くの中学校、高校にもあると思いますが、私が入学した「高槻中学校・高等学校」にもパソコン部のようなものがあり、そこでは C 言語が流行していました。


C 言語が流行していたといっても、「C 言語が良いらしいぞ」という言葉が流行していたという程度であり、誰か C 言語によるプログラミングがものすごくできて人に教える能力がある程度の生徒や教員がクラブにいた訳ではありません。当時、クラブでは PC で動作するフリーウェアのゲームが多数流行っており、放課後や昼休みなどに皆で必死にゲームをして遊んでいました。そのときに流行っていたゲームの 1 つに、以下の「Flying Jump」というものがあります。

f:id:softether:20111013163849j:image

この「Flying Jump」はサンフラット氏が Nifty Serve で公開されていたフリーウェアのゲームです。当時はインターネットではなく、Nifty Serve でこのような自作ゲームの公開が盛んだったと思います。ちょうど 1997 年ごろに続編の「Flying Jump 2」というゲームも公開されました。

f:id:softether:20111013163900j:image

この「Flying Jump 2」は異様な麻薬製のあるゲームで、大変はまってしまいました。だいたい半年くらいこればかりやって遊んでいたと思います。なぜこの 1 つのゲームだけ狂信的にプレイしていたかというと、このような面白いゲームは他にも Nifty Serve にたくさんあるらしかったのですが、Nifty Serve には当時はクラブでその友達 1 人だけが加入しており、私たちは Nifty Serve に加入していなかったので、その唯一 Nifty Serve に加入している友達が自宅でダイヤルアップしてダウンロードしてきたものをフロッピーディスクに入れて持ってきてもらって中学校でみんなでさらにコピーして遊ぶという方法でしか新しいゲームを入手できなかった為です。しかも、そいつが Nifty Serve にアクセスして大きなファイルをダウンロードすると電話代がたくさんかかるのでよくないとか言ってその他のゲームをあまり持ってきてくれないので、長い間、「Flying Jump 2」ばかりで遊ぶことになってしまった訳です。

実は、当時は Vector から「PACK for WIN」というフリーウェアばかりを詰め合わせた雑誌が年刊で出ていたのですが、中学 1 年のときだったので、お金があまりないのでそのような雑誌を気軽に購入することはなかなかできませんでした。

このような状況で、限られた情報だけが入ってくる中学校のパソコン部で、「この Flying Jump 2 のようなゲームを作るためには C 言語を勉強する必要があるらしいぞ」というような話が盛んに流れるようになり、それでここはひとつ C 言語を勉強して自分でもこのような楽しいゲームを作ってみようと思うようになりました。


私は小学校の頃に少し BASIC をやったことがある程度で、ほとんどまともなプログラミングをする能力は全く無く、もちろん、C 言語という言葉もそのクラブに入ってゲームプログラミングをしたいと思うようになるまで全く知りませんでした。

クラブに何人か先輩がいたので、C 言語について教えて欲しいと聞きました。1 人の先輩は、MS-DOS の VZ エディタで、C 言語でコンパイルした結果の .exe ファイルをダンプして気持ち悪い文字を画面に表示し、「これこそが、C 言語にできて、BASIC にはできないことである!」というような高尚なことを言ってきましたが、意味がよくわかりませんでした。

別の高校生の先輩は、実はものすごく C 言語に詳しいようなのですが、数値計算のような難しいことばかりやっていて、ゲームプログラミングについては全く興味がないようで、ゲームプログラミングについて聞くと、すぐに怒って怖い感じでした。

最後に中学 3 年の先輩に聞いたところ、「はじめての C という本を読みなさい」と言われたので、これはありがたいアドバイスだと思い、下校途中に大阪・梅田の紀伊國屋書店へ行き (当時は阪急電車の京都線で、高槻から十三へ行き、十三から神戸線に乗り換えて帰宅していた)、「はじめての C」という本を買ってきました。だいたい、中学 1 年生の 6 月の頃だったと思います。

f:id:softether:20111013163910j:image


この「はじめての C」を 1、2 週間くらい、朝の登校電車と、夜の下校電車でずっと読み、さらには 6 月にあった野外合宿という学校の旅行にも持って行って読んでいましたが、いくら読んでもさっぱり意味がわからないし、これを読んだところで、ゲームプログラミングができるようになるとも思えませんでした。

とくにこの「はじめての C」では「ポインターを操作する」ということが C 言語で良いプログラムを書くために必須だということで、ものすごく熱心に解説していました。これには中学 1 年であった私も納得し、「確かに、マウスポインターを扱うことができない、N88-BASIC で動作するソフトウェアは使いにくいと思っていたが、C 言語でプログラムを書くと、簡単に、マウスを用いた Windows のソフトのようなプログラムが書けるんだな。」と嬉しくなり、試しに、MS-DOS の Turbo C (クラブのパソコンに入っていた) でポインターをインクリメントするサンプルプログラムを本から丸写しで書いてわくわくして動かしてみても、画面には、マウスポインターなどは出ずに、代わりに、気持ち悪い文字列が出ました。

また、他の友達に、通学の電車で「はじめての C」という本を読むのはよくないと言われたので、この本は嘘を書いてあるばかりか、有害であるに違いないと確信し、それ以降はこの本を読むのをやめました。


しばらく C 言語を勉強することを諦めて、「Flying Jump 2」で遊んでばかりいたのですが、そのうち、先ほどのクラブの C 言語に詳しくて数値計算のような難しいことばかりやっている怖い感じの先輩がやってきて、ゲームばかりやるやつはダメなやつだと怒って、パソコンのリセットボタンを押して妨害してきました。


そこで、ここは 1 つ C 言語をもう一度ちゃんと勉強しないといけないと再び決意しましたので、Nifty Serve をやっている友達に聞いたところ、MS-DOS の Turbo C よりも Windows 用の Microsoft Visual C++ というコンパイラのほうが勉強しやすいし、Windows 用のゲームも作ることができるので楽しいらしいという情報を得ました。これは大変有益な情報だと思ったので、早速、お金をためて大阪の日本橋のソフマップで「Microsoft Visual C++ 5.0 Leaning Edition」のアカデミック・パックを 1 万円で購入してきました。

f:id:softether:20111013163925j:image


中学 1 年でまだ英語はあまり読めませんでしたが、「Leaning Edition」というのは「学習用のパッケージ」のようなものだな、ということくらいは分かりました。そのため、C 言語を初めて勉強する人にとってものすごく懇切丁寧な教材が同梱されているに違いないと期待して、楽しみな気分で、日本橋のソフマップから地下鉄に乗って帰宅しようとしました。

途中に大阪・梅田の紀伊國屋書店に寄り、今日こそは本気で Visual C++ を始める記念すべき日なのであるから、専門書コーナーで、前回に購入した「はじめての C」のような役立たずの書籍ではなく、本格的な、Visual C++ の入門書を買って帰ろうと思いました。

なぜか書店には Visual C++ という文字が含まれるタイトルの本としては「Visual C++ 5.0 プログラミング入門」という書籍しかなかったのですが、表紙は、下の写真のような、宇宙に向かってロケットに乗った楽しそうな人が飛び出している絵であったので、きっとこれを読めばゲームプログラミングができるように違いないと確信し、あまり中身は読まずに 4,000 円くらいで購入してきました。

f:id:softether:20111013163933j:image


帰宅して、早速「Microsoft Visual C++ 5.0 Leaning Edition」のパッケージを開封すると、製品の CD-ROM の他に、以下の 3 冊の書籍が入っていました。ものすごく懇切丁寧な教材が 3 冊も同梱されていることに一瞬感動を覚えました。

  • Visual C++ 5.0 プログラミング入門 ← !!
  • Win32 API オフィシャルリファレンス
  • C++ プログラミング入門 (Microsoft 著)

しかし、すぐに、なんと「Visual C++ 5.0 プログラミング入門」という本は、さきほど直前に書店で買ってきた本と全く同一の本ではないか、ということに気付きました。表紙の楽しそうなロケットの絵まで同じです。ただし、表紙はなぜか Visual C++ 5.0 に入っていたほうはグレースケールでした。これが OEM というやつなのかと思いました。だまされた! という気分になり、随分がっかりしました。

f:id:softether:20111013164603j:image


ただし、冷静に考え直したところ、この「Visual C++ 5.0 プログラミング入門」は、表紙が楽しそうであり、書店でも購入したくなって購入してきて、さらには Visual C++ 5.0 のパッケージにも同梱されていたのだから、ものすごい良書に違いない、これを読めば直ちにゲームプログラミングができるように相違ないと思い、より元気が出ました。

そこでこれを読み始めたのですが、ほとんど「MFC」というよくわからないライブラリの使い方が書いてあるだけで、やはり意味がわかりませんでした。

MFC とは Microsoft Foundation Class の略だとも書いてありましたが、「::」のような顔文字のような気持ち悪い記号がサンプルコードに書いてあり、さらに、「Foundation」という単語の意味は中 1 であった自分には分かりませんでした。

しかも、当時、へんな化粧品を女の人が付けていて「もう、ファンデーションには頼りません !!」と言うテレビの CM が頻繁に流れていたのだけは覚えていましたので、この「Microsoft Foundation Class」というのには絶対に関わってはいけないに違いないと思いました。

これにより、直ちに「Visual C++ 5.0 プログラミング入門」は役立たずの書籍であると判断し、1 冊は友達の H 君にあげました。


次に、「Microsoft Visual C++ 5.0 Leaning Edition」に同梱されていた「C++ プログラミング入門 (Microsoft 著) 」を読み始めました。これはなんと Microsoft の社員が執筆したものであり、「入門」と書いてあるだけはあって、ものすごく役に立つはずだと期待しました。

この本は前編は「C++ 言語と C 言語の違い」、後編は「C 言語を初めてやる人のための C 言語入門」の 2 編に分かれていました。もちろん前編はさっぱり意味がわからないので、後編だけを読みました。しかしよく見ると前編は 150 ページくらいあるにもかかわらず、後編はたったの 30 ページくらいしかページ数はなく、だいたい内容は「予約後一覧。以下のキーワードは予約後ですので使ってはいけません。以上。」というようなものすごくどうでも良いことが大々的に書かれており、C 言語の入門的な話はほとんど書かれていませんでした。


C 言語を習得するための頼りの綱である 3 冊の本のうち、2 冊が役立たずであると判断したため、残りの 1 冊である「Win32 API オフィシャルリファレンス」こそ、救世主的に違いない、この「Win32 API オフィシャルリファレンス」を読んで理解することができなければ、今後一生 C 言語を習得してゲームプログラミングができるようになる道は断たれることになるだろう、という謎の決心をしました。

f:id:softether:20111013163946j:image


毎日、通学には往復で 2 時間近くかかっていましたので、「Win32 API オフィシャルリファレンス」を手に持って満員電車の中で直立して読みました。

満員電車といっても、大阪の十三のあたりで京都線に乗る所は超満員というやつで、日本でも 1、2 を争う車内人口密度だったので、その中で 750 ページある百科事典のような「Win32 API オフィシャルリファレンス」を手に持って直立して読むのは、今考えると大分迷惑だったかも知れませんが、当時はあまりそのようなことは気にせずに、どのような超満員の中でも毎日読んでいました。

ある程度空いている車内で立ってこのような重たい本を保持して読むと疲れるのですが、超満員電車であれば、前の人の背中にこの本を押しつけることによって、その人に重さがかかり、自分の手にかかる重さはずいぶんと軽くなるので、結構楽に読めました。(今考えるととんでもないことだと思います。)

毎日 2 時間くらい、「Win32 API オフィシャルリファレンス」を、合計 3 ヶ月くらいの時間をかけて通学電車の中で読むことで、一応は全部のページを読破しました。この本は単に Win32 API の解説を A から Z まで順に並べてあるだけ (一応、ジャンル別に分類されている) であり、API の関数名、引数の一覧、戻り値の意味、関係する構造体、および動作の解説が詳しく書かれている辞書のようなものです。本来は、プログラミング中に必要に応じてちょっと参照するだけのものですが (当時、なぜか MSDN Library は Win32 API の解説は英語版しかなく、日本語版が欲しい人はこの紙媒体のアスキーから出ているオフィシャルリファレンスを購入するしかなかった。日本語に翻訳した部分の著作権はアスキーが持っていたためである。そのような事情に配慮して、Microsoft は Visual C++ 5.0 Learning Edition にはオフィシャルリファレンスをアスキーから安く供給を受け、1 部同梱ていた)、そのような目的の本だとは知らなかったので、1 ページ目から最後まで順に読みました。

満員の通勤電車の中で、一度だけ、「おいこら、満員なのに本を読むな、迷惑だ。いったい何の本だ、そんなに重要なのか ?」というようなことを怒鳴ってきたおじさんが居ましたが、この本を渡すと、ぱらぱらめくって、こいつは頭がおかしい中学生だというような目つきで本を返してきて、それ以降は何も言わなくなりました。


「Win32 API オフィシャルリファレンス」は 750 ページくらいある中の 99% 以上は API の辞書になっていましたが、わずか 2、3 ページだけ、サンプルコードが印字してありました。このサンプルコードは、MFC のような邪悪なライブラリを使わずに、Pure な Win32 API のみでウインドウを作成して表示するプログラムになっていました。これは、これまでに見たどの書籍のコードよりも、一番欲しい情報であり、唯一、「MFC」とか「テンプレート」とか「純粋仮想クラス」といった意味のわからない概念が出てこない、最もシンプルな Windows プログラミングを習得するために必要な基礎的なコードでした。このサンプルコードはなんとコメントもちゃんと書いてあり、しかも日本語で書いてありました。


この短いコードから帰納的に C 言語の書き方や文法、プログラミングの方法を理解していったのですが、恐らく、「Win32 API オフィシャルリファレンス」を満員電車の中で全ページ読むということをしなければ、今ごろは、Visual Basic ばかりやっていることになってしまっていたかも知れません。


Part 2 に続く

sunflatsunflat 2011/10/13 17:41 なつかしい!

softethersoftether 2011/10/13 19:04 神降臨!!

mathemathikomathemathiko 2011/10/13 20:02 続き楽しみにしてます!

pinpin 2011/10/14 15:07 大変面白い。早く続きが読みたいです。

AnaKutsuAnaKutsu 2011/10/16 00:25 Visual C++のパッケージが懐かしい!!

ポケットポケット 2012/02/13 16:45 WindowsでVisualC++で開発する場合は、時間が掛かってもWinAPIを使う方を
勧めます。経験上、MFCでは開発は早いでしょうが、自身でイメージを描くことは出来ませんでした。プログラミングとはイメージイングである。イメージ
イングすると、頭の中に構文が出てきます。私の場合はイメージできないとプログラミングはできません。頭に浮かんだ構文をタイピングしているだけです。

トラックバック - http://d.hatena.ne.jp/softether/20111013
 | 

<< 2011/10 >>
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31




※ この Web サイトのコンテンツは 登 大遊 が個人的に運営しているものであり、ソフトイーサ株式会社や筑波大学内での立場として公式なコメントを掲載しているものではありません。一応コメントは投稿できるようにしていますが、個人的に運営している日記のため、自分が不快に思ったコメントは前触れ無く削除しております。ご了承ください。同様に会社に関するコメントなどについても、削除される可能性があります。コメント書き込み機能については、匿名の掲示板のような状態になることを予防するため、はてなユーザーからのみ受け付けるように設定することもあります。