プログラミングについてとか

こんばんは、south37です。
今日は、自分がプログラミングをどういった経緯で始めたか、どういう風に勉強してきたか、について書いてみたいと思います。
大きな転機などは特に無くて、その時その時で興味を持ったものを何となく学んでいました。また、大体は参考書を買って読んでサンプルコードを書いてみるだけだったので、この時期にこんな本を読んでて面白かったぜ、ってのを中心に書いていきたいと思います。

プログラミング事始め

大学に入ってしばらくはプログラミングなんて全く興味がありませんでした。が、大学二年の冬の終わり、持っていたPCが壊れて新しいPCを買ったことをきっかけにして、勉強を始めました。お金の無い当時の自分としては高い買い物だったので、何とか元をとってやろうという一心だったのを覚えています。
最初は、明解C言語 入門編という本の例文をひたすら読む&写経していました。当時のバイトが待ち時間がとてつもなく長く自由に本を読んだり出来た為、その時間を使ってひたすら読み進めていました。知らない事ばかりな領域に手を出して勉強するのはとても面白かったです。
ただ、例文は本当に基礎的な内容でしか無かった為、出来る事が全然無くて物足りない思いはありました。また、成長するには良い書き方をした良いコードを写経するのが一番だと当時は思っていたのですが、そういったコードに触れる機会も無くて不満に思っていました。*1

ハッカーと画家を読む

あと、この頃にハッカーと画家という本を読みました。この本はめちゃくちゃ面白くて、いろいろな意味で僕にインパクトを残しました。ハッカーという存在、クールな生き方、バイアウトで大金持ちというアメリカンドリーム、そして力のある言語である"Lisp"。言語による表現力というのは今でも意識しますし、この本の著者であるポール・グレアムの事は本当に尊敬しています*2。この本のおかげで、ハッカーという生き方に憧れるようになりました。

Lisp

また、Lispも簡単に触れてみました。Lisp本を何冊か買って、読んだり写経したりしていました。ただ、当時はデータ構造という概念を知らず、リストと言われてもなんだそりゃ状態でした。今だったら、Lispにおけるリストってのはチェインリストの事で、コードがそのままデータ構造を表してるって表現にも納得なのですが、当時は全然分かっていませんでした。結局、Lispについては簡単な文法と辞書(keyでvalueにアクセスするデータ構造)の作り方くらいしか学べず、具体的なアプリケーションにどう繋がるかは全然分かりませんでした。

C++

次は、低レイヤの言語も知っておきたいと思い、C++の勉強を始めました。C++の絵本ってヤツをまた写経していました。自分の信条として「知らないことを勉強する時は最も簡単な本を使って大枠を理解し、それから詳細に進む」ってのがあるので、この本を選びました。むっちゃ薄くて簡単なヤツなんですが、とっかかりとしては良かったと思います。パラっと読んでみての感想は、オブジェクト指向は面倒臭い、でした。例文が単純な事しかしないものなので、クラスを作ったりの手間がただただ回りくどいものにしか見えませんでした。大規模コードなんて見たこと無かったので、しょうがなかった気もします。

Java

当時はめちゃくちゃ焦っていて、早く成長しなければとずっと思っていました。プログラミングの勉強を始めたのが遅かったので、その分追いつかなければいけないという思いもありました。。C++で勉強を続けると長く複雑なコードと向き合い続ける必要があって時間がかかると感じたことから、次はJavaを勉強することにしました。
Javaは簡単とネットでよく言われていたのでナメていたのですが、実際触ってみるとクソ面倒という印象でした。ファイルごとにわざわざクラスを作って、main関数を書くのにすらpublic static viod main(String args[])みたいな長ったらしい文を書く必要がある点が気に食わなかったです。ただ、この頃に読んだJavaによるアルゴリズムとデータ構造という本はめちゃくちゃ面白かったです。代表的なデータ構造やアルゴリズムについて丁寧に解説していて、勉強になりました。特に、全てのアルゴリズムに対して実際に動くコードが載っているのが嬉しかったです。いろいろな言語の入門書は読んでみたものの、大して意味のないサンプルコードに飽き飽きしていた自分にとって、ある程度の長さで有用な機能を持つコードを写経してみて、それが実際に動く様を見るのはとても嬉しいものでした。正直、この頃にプロコンという存在を知っていたらそのままその道に突き進んでいた気もしますw。

RubyとかPythonとか

その次は、スクリプト言語に手を出してみました。最初はYuguiさんの初めてのRubyを読んでみたのですが、ブロックが全然分からなくて、全くピンと来ませんでした。また、当時はWindowsを使っておりターミナルという概念を知らず、VCやEclipse等の統合開発環境を使ってプログラミングをするのが普通だと思っていた為、rubyにおいては専用の開発環境が無いのが不満でもありました*3

で、Pythonに手を出してみました。初めてのPythonという本を読み始めたのですが、分厚さにはビビリました。ただ、すごく分かりやすい上に面白く、Pythonはプログラミング初学者に最も適した言語という言説にも納得でした。構造がシンプルで、変数に何でもかんでもぶち込める(バインド出来る)ってのが良いと思います。オブジェクトの属性も結局変数でしか無くて、関数をバインドすればそれがメソッドになってってのが分かりやすいですね*4

10日でおぼえる Python 入門教室エキスパートPythonプログラミングも買って、当時はPython押しでした(エキスパートPythonプログラミングについてはほとんど読んでませんがw)

Webプログラミング

Googleに憧れていた事もあってGoogle App Engineを触ってみたいと思い、その為にWebプログラミングを勉強する事にしました。そこで、まずはPerlを使ったCGIを勉強してみる事にしました。10日でおぼえる Perl/CGI 入門教室ってのを読んだのですが、例となるコードがけっこうひどかったのを覚えていますw。特に、最後らへんのRPGを作る章では多重リファレンスが何度も出てきて、むちゃくちゃコードが汚くて、オブジェクト指向の必要性というものを実感しました。
ただ、この時に初めてhtmlやjsやcssなんかに触れたので、いい経験になったと思います。jsやcssはこの頃は全く分からなかったのですが、htmlはシンプルだったので、構造は何となくつかめました。生のhtmlを書くのはクソ面倒臭いという事も学びました。動的なWebページというものを最初に意識したのもこの頃でした。

iOSプログラミング

iOSにもちょっとだけ手を出してみました。ただ、この頃はMacを持っていなかったので、Windowsの上にVMWareでOSXを動かして、その上でXcodeを立ち上げて書いていました。例のごとく参考書の写経をするだけでしたが、ブラウザを作ったり地図アプリを作ったり、アプリとして形になるものが出来上がるのは嬉しかったです。ただ、VM上での開発というのがクソ重くてつらかったので、すぐに飽きてしまいました。


このへんまでで学部三年が終わりですね。無駄にダラダラ書いていたせいでけっこう時間がかかってしまったので、今日はここまでにしたいと思います。いろいろと手は出していたものの、自分で一から作り上げたアプリケーションというのが無かった為、かなりのコンプレックスでした。何か作り始める前にもっと知識と技術を身につけないと、って思いもずっとありました。このへんの加減は難しい気がしますねー

次回は学部四年&修士一年編です。

*1:今だったらLinux Kernelのコードとかいろいろオープンソースのコードがあるやんと思うんですが、当時はLinuxオープンソース自体をそもそも知りませんでした。

*2:グレアムはハッカーでありエッセイストであるだけでなく、優秀な投資家でもあります。Yコンピネーターというベンチャーキャピタルを設立し、DropboxやHeroku等、数々のスタートアップを成功へと導いています。

*3:今だったらSublime使っとけって言えるんですけどね。ちなみに、僕はVimmerです。

*4:と思ってたんですが、今試してみたらselfを第一引数にとるメソッドはclass定義の時に書かないと駄目っぽいですね。残念