プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

ムリにプログラミングを学ぶ必要はないよ

どのようにすればプログラミングができるようになるかということに興味を持つ人が多い 一方、実際にプログラミングを仕事にしている人から学習方法を聞く機会は少ない。

いつ、どのようにしてプログラミングを学習した? | スラッシュドット・ジャパン デベロッパー

どうやって学んだんだっけ!?

これからプログラミングを学ぶ人の参考になるかもしれないので、ぼくが学んだ過程を書いてみることにする。長いから、興味ない人は次の節まですっ飛ばしてね :)

どうやってプログラミングを学んだか

きっかけは

高校生の頃、BASICのプログラムリストを秋葉原のマイコンショップで見つけたこと。友人に入力方法を教えてもらい、リストをマイコンに打ち込んでみるものの、エラーが出て動かない。ただ、プログラムは番号順に実行されて、計算結果をAとかBに格納し、PRINTで結果を出力する、ということを感覚的に理解する。

その後雑誌やプログラミングについての書籍を読みあさる。秋葉原のマイコンショップに通い、リファレンスを片手にBASICプログラムを打ち込んだ(当時迷惑をかけたお店の方々、ゴメンナサイ…)

やがてポケコン(PC-1211)を買ってもらい、プログラムを書く日々が始まる。1ライン、それも24文字しか表示できなかったけど、プログラムを書くことには慣れた気がする。

その後PC-8001を買ってもらい、ゲーム三昧の日々を送る。自作ゲームも作ってみたが、つまらない上に遅くて実用にならなかった(笑)

やっぱり機械語じゃないと遅い!

と思い、Z80の書籍を買ってくる。機械語はBASICよりさらに単純であることを理解する。メモリからレジスタにロード/ストアし、比較して、条件分岐する、ぐらいしか出来ない。コンピュータの仕組みは機械語で学んだように思う。

本を読みながらマイコンに打ち込み。もちろんアセンブラなんてないのでハンドアセンブルして16進数をモニタから打ち込んで実行。その速さに驚愕し、次第に機械語でのプログラミングが多くなる。

さすがに機械語はしんどかったので

月刊ASCIIに載っていたTL/1というPASCAL風のコンパイラを使いはじめる。いわゆる構造化プログラミングを理解できたのは、この言語のおかげだと思う。

高校卒業後ソフトウェア企業に就職

入社後何年かして、当時流行り初めていたUNIXの移植を担当する。いわゆるK&RC言語を学習したが、多くはUNIXソースコードを調べた時、自然に覚えた。

御多分にもれず、ポインタでつまずいた。分からない部分はコンパイルしてアセンブラソースコードを見て理解した。コンパイラにバグが多かったのでアセンブラを眺める機会が多かったのも今思えば幸運だったな(笑)

OSの構造やアプリケーションとの関係なんかは、UNIX移植で学んだ。

これからはやっぱりC++だぜ

ということで、C++の本を買ってきて読んでみる。たぶんあまり理解できなかったと思う。覚えたのは、実際にC++で書かれたプログラムの修正を始めてから。使ってみて初めてデータの隠蔽化や継承の意義が分かった。

そしてJava

Eclipseというものを使ってみる。C++よりもシンプルで使いやすい。というより、Javaとの対比により、C++の良さや不満が見えた、といった方がいいかもしれない。今一番好きなプログラミング言語かも。

やっぱり関数型プログラミングも知っておかないといかんかな

と思って本を読むが、よく分からなかった。やっぱり実際に手を動かしてみないとダメかな ←イマココ

こんな感じで覚えたんだけど

結局どうやってプログラムの作り方を覚えたのかはよく分からないんだよね。

一つだけ「これなのかなあ」って思うのは、たぶんプログラムを買いている時はいつでも楽しかったってことだと思う。最初にBASICリストを見た時からそう。仕事が大変で辛いってことはあったけど、プログラミングをしている時はとにかく楽しくて、ずっと書いていたい、って思えるんだ。しばらく書いてないと、禁断症状が出るぐらい(笑)

プログラムが書けるようになるかどうかは、個人の能力の差ではなく、単に興味があるかどうかだけだと思う。言語仕様を読めば文法は分かるけど、プログラムが作れるようになるには、実際にいろいろなものを作ってみる必要がある。興味がないと、これはツラい。好きな人は黙ってても書いて覚える。それだけの話じゃないかな。

もしプログラミングを学びたいと思って学習している時

やってて辛い/楽しくないのであれば、ムリに覚えなくてもいいんじゃないかな。

もしかしたら、やり方が悪いのかもしれない。ある程度進んだら楽しさが分かるのかもしれない。でも、いろいろやってみて、どうしても楽しく感じないのであれば、たぶんその人には合ってないんだ。

「どうやったらプログラミングが出来るようになるのかな」って思ったら、まずは実際にプログラムを組んでみることをオススメする。もしそれが苦行だったら、この先ずっとツラいかも…

長文を最後まで読んでくれて、ありがとう。