ordinary -何てことない- 普通のエンジニアが書くコラム。

改めて、プログラミングの学び方を考える

»

みなさま、おはようございます。Kyonです。

『プログラミングを「体で覚える」 LABOTが学習サービス「写経」を期間限定で無償提供』という記事を読みました。

プログラミング言語を学ぶ時に"写経(プログラムを模写すること)"という勉強の仕方があります。その方法を使ってプログラミングを学ぶというサービスらしく、ネーミングが上手いなと思いました。

それとともに、プログラミングをどうやって学ぶかを改めて考えてみようと思います。

概念に用語、考え方は地道に学ぶしかない、のかも

結局のところ、用語や考え方というものは、書籍なり講義なりで地道に学んでいくしかないのかなと思います。

いきなりプログラムを書いてみるという方法も一つですが、先にベースとなる知識(用語、考え方等)を頭に入れておくと、プログラムを書いてみて疑問に思ったことを調べるためのキーワードとして活用できる気がします。

ここでは、無理に覚えなくていいと言いたいのですが、実際は「その言葉、聞いたことある」「こういうところで出てきた」「確かこんな感じの意味だったはず」ぐらいのレベルでは覚えておかないと、活用できないでしょう。

プログラミングは書いて書いて書きまくれ

知識ベースっぽいものができたら、実際にプログラミングを書いてみます。

ここで、先に培ったベースとプログラムとの突き合わせをします。「変数というのはプログラムで書くとこういうもので、こういうふうに使うんやな」とか「配列ってこういうプログラム書くときに使えるものなんやな」と確認していきます。

「あーこれってこういう意味やったんや!」と、点と点が繋がるような瞬間が来るはず。

私個人の体験です。大学の講義でデータベースを学び、当時は全然知らない概念や用語だらけで、とりあえず試験対策で覚えたというレベルで卒業しました。ところが、仕事で使うようになって、学生時代に覚えたことがちょっとずつ繋がっていったので、個人的にはこの勉強方法は有効だと思います。

他人が書いたプログラムを読み解けてこそホンモノ

新人時代に師匠から「早く他人が書いたプログラムを読み解けるようになってな」と言われてました。当時は「そーなんや」ぐらいにしか思っていませんでしたが、20年物のシステム(ほとんどCOBOL、ごく稀にPL/Ⅰ)を解析しないといけなくなった時、ようやく意味が理解できた気がします。

『駆け出しエンジニアがコード書くよりやるべきこと』でHorusさんもおしゃっていますが、一からプログラムを書くことってあまりないです。システムリニューアル案件だったとしても、ベテランさんが最初に基本となる画面とかのプログラムを書いて、ほかのメンバーはそれを参考にしながら作ることが多いです。

だから、ある程度(入門書1冊ぐらいのプログラムを写経したぐらいの感覚)、なんとなくわかった気になれたら、次のステップへ。

それは、誰かのコードを読むことです。そうすることで、早く戦力になれると思いますし、今すぐ戦力になるつもりがなくても次の言語も勉強しやすくなります。

仕事だったら他の人が書いたプログラムや他システムのプログラムを読ませもらったりするといいと思います。それか、フリーソフトでプログラムが公開されているものを読んでみるのもいいと思います。ソフトを使ってみながら、プログラムを読めるので、気持ち的に折れにくいかも。

おまけ:説明できないプログラムは書かない

学び方というよりは、気を付けておきたいことです。

プログラミングがよくわかっていない時、ネットで調べて見つけたプログラムをコピペすることって、あると思います。それが悪いということではなく、「なぜそう書くとここで適切に動くのか」「コピペしたプログラムはどういう意味があるのか」を説明できるかどうかが大事です。

自分の言葉で「ここでは○○処理がしたいから、△△処理をする××関数を選択した」と説明できるかどうか、ということです。

これは私が新人時代に師匠に言われたことで、私も後輩や教え子たちにも同じことを言っています。自戒も込めて。

Comment(2)

コメント

user-key.

たくさんのプログラムを読んでいると、言語や実装によって書き方や用語や意味が結構変わってくるので「どっちやったっけ?」と困ってしまうことが良く有ります。(JAVAとRUBYではprotectの意味が違うし、「デフォルト」や「リスク」は金融分野じゃ一般的な意味と違ったりと)
又、元々のプログラムが「グチャグチャで何とかギリギリ動いている」だとそれを「こういうモノだ」と理解していると困ったチャン量産機になる時もあるので、昔のプログラムは「要注意」なものとして取り扱う必要が有るかと。
私はちょっと特殊かと思うんですが、プログラムを組むときは、頭の中でテトリスを行なって、それを実装言語に翻訳していることが一番近いです。
OOPでは回路図になっていることも有りますが…

コメントを投稿する