プログラマ・アゲイン blog

還暦を過ぎたけどプログラマ復帰を目指してブログ始めました

ちょっと一服:プログラミングの勉強はどうするのが良いのか

プログラミングの勉強を再開してみて、徒然に感じたことを「ちょっと一服」として書き残しておきたいと思います。

あくまでも個人の感想ですので、今更と思われる方は読み飛ばしていただければと思います。

 

何でプログラミングの勉強?

たまたま、以下のページを見つけました。

qiita.com非常に参考になり、感心させられました。

私はプロクラマーから始めて、システム・エンジニアやプロジェクト・マネージャーのような仕事をしてきました。どちらかというと、システム・エンジニアが一番長いです。なので、上記のページのような高尚なことは書けないのですが、拙いプログラミング歴から自分でも感じていることを残しておきたくなりました。

という事で、個人的感想がメインになります。

 

個人的プログラミング勉強の歴史

プログラミング勉強のし始め

最初大学などの学校でプログラミングを習った時には、分厚い本を買わされて講義を受けることで勉強していました。講義が進むとそれなりに理解度も上がり、自分でしたいことをコーディングするようになり、うまく動かないと先生に質問することで習得してました。

でも、FORTRANとかコーディングしたけど、今思い返すとすっかり忘れているし、あまり身に付いてないように思います。ただ、その後の就職した仕事で、少し役に立つこともありました。

それよりは、興味本位でその当時はやっていたマイコンを使って、自力で8080アセンブラーを勉強したことの方が役に立っているように思います。

アセンブラーは機械語に近いので、コンピュータが 0と1を、AND回路や OR回路などを使って、ビット単位でどう処理するか、それを直接命令している感じで、基本的なコンピュータの動作を学んだように思います。(勉強不足で、大学の講義ではピンときませんでしたが)

その後、大学を裏口から出て一応コンピュータを教える学校にも一年行きました。当時、大学には情報処理学科が無かったものですから。

 

就職して

就職してから、いろいろな言語でプログラミングをすることになりました。

ざっと思い出しても、仕事で以下の言語のプログラミングをしています。

こうしてみると、第二、第三世代の言語から始まり、第四世代の言語までやってるんだなと思います。できれば、Cと Javaも経験する機会があれば良かったと後悔してます。まだこれから勉強しようと思えばできますが。

ただ、それぞれの言語を使っていたのは期間でいうと 1~2年ぐらいで、仕事に合わせて次々と変わっていきました。

また、この中でちゃんと人に教えてもらった(講習があった)言語というと、もう昔の事は忘却の彼方ですが、S/370アセンブラー、COBOLREXXぐらいかなと。それ以外は、見様見真似、マニュアルや書籍を読む、取り敢えず知ってる人を見つけて聞く、で勉強したように思います。

 

最近の勉強

自分でWebサイトをいずれ作りたいと思って、2年前に以下のプログラミング言語の勉強を始めました。欲張って、複数の言語を対象にしてますが。

どこかの学習教室で勉強するのではなく、個人で独学でしようとしているからかもしれません。また、特定分野のシステムに限定せず、広く一般的になったWebシステムの言語を対象にしているからかもしれません。

なので、順番に上記のプログラミング言語の勉強をしていく中で、以下の障壁を感じてます。

プログラミング勉強の障壁①

以前はマニュアル(コンパイラーの開発元)が数冊あるだけでしたが、実際に勉強しようとしたプログラミング言語のマニュアルと呼ばれるものはなく、代わりに多数の書籍とWebページがあります。

その中で、自分に合ってそうなものを探す必要があります。

つまり、情報が多すぎて、どこから手を付けたらよいものやら、という感じです。

ある意味、昔は単純でした。

プログラミング勉強の障壁②

また、その言語の開発環境や実行環境など、関連することも勉強しなくてはいけません。でも、それぞれの組み合わせが自由にできるので、体系的に考える事が出来ません。

勉強を再開して2か月ぐらいが過ぎたばかりの頃は、以下のようなことが気になって調べたり環境を作ったりしていて、プログラミングの勉強は少しづつしか進みませんでした。

など、1つのことを調べていたら、関連してあれも重要そうだ/これも重要そうだ/役に立ちそうだ、となってしまってました。

尚且つ、それらの導入方法を調べて、実際に導入して動くまでするのにかなりの時間も使ってました。一度動いてしまえば大丈夫なんですが、それまてで疲れてしまっているのでホッとして、さあブログロムするぞとならない。

 

基本的な勉強方法

プログラミングは何か目的(Webサイトを作る、自動化ツールを作るなど)を実現するための手段であり、目的によっては新しい環境や言語、ツールを勉強しなくてはいけません。

じゃあ、どう勉強すればよいかですが、私の感じていることを述べたいと思います。

ロジック力をつける

プログラミング言語として効率がいいとか、短縮されて分かりやすいとか、いろいろプログラミングの書き方はあると思うのですが、それらの事に目をつむると、結局はロジックが大事だと思います。

ロジックとして、ああしてこうしてこうやってと考えがまとまれば、あとはプログラミング言語に合わせてコーディングすれば良いからです。

まずは、ロジックを頭や紙の上でまとめる力をつけることです。これは、日常生活の中で、いろんなことの段取りを考えることで身につける事も出来ると思います。

昔は、プログラミングの前に、必ずフローチャートやHIPOを書いたものでした。

ロジック力が付けば、どんなプログラミング言語にも使えます。

 

面白いと思う

「プログラミングすること」が、面白いと思うことが一番です。面白いと思うことは、楽しいと思う事や、好奇心を芽生えさせる事や、新しいことへのチャレンジに繋がると思います。

勉強を始めたころは覚えることが多くて、とても面白いとは思えません。

私は、動くことが面白くて、自分の思い通りに動いた時の楽しさでプログラミングをしています。苦労して自分の思い通りに動くプログラミングが出来た時、よく達成感を感じてました。

そういう意味では、「Hello World」を表示させることから始めるのは、いち早く動く面白さを感じることになるので重要なのだと思います。

 

人のまねをする

プログラミング言語の勉強を始めたときは、先ずは人のコーディングをまねしてみることです。これは、書籍を読んだり、Webページで紹介されているコーディングを見ることも含まれます。

私が Rubyの勉強を始めた時に、「rubyXLを使用したExcel操作」にも書きましたが、「Excelで佐々木希を描く with Ruby|MetaData」を参考にさせていただきました。

また、他の人が作ったプログラム群があったので、それを本を片手に読み解くことも始めました。そこで使えそうなコーディングは、自分が作成するプログラムの中にも使わせてもらっています。

そういう風に、「門前の小僧習わぬ経を読む」という感じで、プログラミングの仕方を人まねで覚えていきました。

 

自分なりの変更をする

まねる事が出来たら、それだけでなく、自分で何か変化をつけたものを作成します。

例えば、「Hello World」が出来たら、「Hello PAGAIN」に替えてみたり、「Hello xxさん、yyさん、zzさん」にしてみたりという感じです。あくまでも例えなので、もっと面白いことをした方が良いとは思いますが。

自分なりの変更をしようとすると、その為の勉強や調査に繋がっていきます。

プログラミングは、まるでジグソー・パズルを完成させていくようなところがあるので、少しづつ関連のあることを勉強していくのが良いと思います。

 

自分の得意を作る

長年この業界にいるのですが、殆どの時間はシステム・エンジニアとして設計・導入・保守に携わっていたので、プログラミングをしている純粋な期間は、ネットすると4~5年ぐらいの感じです。

その中でもアセンブラーが一番長いので、敢えて私の得意と言えばアセンブラーかなと思います。プログラミングに限らず、どんな分野でも、その中で 1つ自分の得意を持つことは大事だと思っています。

一つ勉強したことが点となり、いくつか勉強したことが繋がって線となり、それらが重なって面となってくると、もう自分の得意になっていると思います。

「一芸は百芸に通ず」という言葉が好きで、ある時点では一つの事を集中して勉強しています。とは言え、奥義を窮めるまではとても及びませんが。

ただ、一つの事を勉強してそれを自分の得意とするとこまで行けば、別の事に直面しても何となく関連付けて考えられ、それなりに理解する事が出来ます。

 

継続する

長年プログラミングしていると、同時に複数のプログラミング言語でプログラミングすることは少ないです。つまり、ある時期は アセンブラーでプログラミングしていたけど、今は COBOLでプログラミングしてますみたいな。

そうすると、あるプログラミング言語で暫くプログラミングしていてそれに慣れてしまい、前使っていたプログラミング言語で久しぶりにプログラミングしようとすると書き方を忘れていることが多く、また初めから勉強しないといけないのかなと、嫌に思うこともあります。

そういう時は、諦めずに過去のプログラミングを見て思い出す時間を取ってます。思い出してくると、またそれなりに楽しくなってきますから。

また、新しいことの勉強を始めた時も、途中で嫌になって中断してしまうことがあります。期限や仕事などでの必要性があれば否応なしに継続させるのですが、ある意味趣味で勉強しているとなかなか旨くいきません。

そういう時は、いったん中断してもいいから、何か次の始める機会まで諦めないことです。「継続は力なり」とまではいかなくても、長いスパンで継続していれば、いつかは自分のものになると思います。

 

体系的に勉強する

やはり、プログラミング言語として勉強するには、1冊にまとまっているものを読んで体系的に勉強することも大事だと思います。

プログラミングの勉強の為に購入した書籍や、オンライン本の中で、特に気に入ったものを洗い出してみました。

書籍

第5版を購入し、Rubyのプログラミングをする時には常に横において参照しています。

体系的にまとまっているし、分かりやすいし、参照しやすいと思います。

 

オンライン本

JavaScriptの入門書 js-primer 初心者の読み方 - プログラマ・アゲイン blog」でも書きましたが、これも勉強になりました。

jsprimer.net

 

以上、徒然に思いを書いてみました。

これらの思いを基に、これからもプログラミングの勉強をしていこうと思います。