多読によるプログラミング言語勉強法

概要

プログラムも言語なので、文系科目です。多読によるプログラミング勉強法を紹介したいと思います。

言語の勉強方法

言語を勉強する場合には主に二種類のアプローチがあります。

文法からのアプローチ

英語などを外国語として学ぶ場合には、一般的に文法からしっかり学びます。一般的にある程度の年齢以上になると、文法から勉強したほうが勉強効率は高くなるようです。(すみません、根拠あるはずですが、手元資料はありません)

高頻度接触でのアプローチ

英語を母国語として学ぶ子供はこちらのアプローチです。しかしながら社会人になると、まとまった時間が取りにくいので、このアプローチはなかなか取りにくいです。

プログラミング言語は文系か理系か?

私は文系だと思います。そもそも文系と理系という区分が適していないと思っています。一般的に数学ができる人が理系で、苦手な人が文系とされている気がします、、、

プログラミングは課題の言語化であり、その人の主張を文字化する行為でもあるので文系だと思っています。

プログラミングは法律と同じようなものであり、書いた通りに運用されます。脱税との戦いのように、文が曖昧だと運用も曖昧になってしまいます。

写実的か抽象的か?

理系か文系かよりも、こちらの軸の方が重要だと思います。どちらかというとデザイナーとプログラマの指向性に近いです。絵を描く場合にうまいか下手かを別にして、細かい模様があるものを、なるべく見たままのものを描こうとする人が写実的で、なんとなく雰囲気がわかるようなものを描く人が抽象的です。

ピカソなどは子供の頃はデッサンしっかり学んでいるので、写実的にも描けますが、どんどん抽象度が上がってきています。逆に下手ウマで売っている蛭子能収さんなんかは写実的に描こうとしたら、元の絵が描けなくなりそうです。

一般的にプログラムに適している人は写実的な人になります。ただ作品を作るためにプログラムが必要な人ってのは抽象的な人が多い気がします。

自分がどれぐらいの位置にいて、今後どうなっていきたいかを考えながら勉強するのも良いことだと思います。

多読勉強法

「13歳のハローワーク」的な本を、それぐらいの年齢によみ、なんとなくプログラマになろうと思い、勉強をはじめました。ただ「13歳のハローワーク」だとプログラマってどうかいてあるんだろう?

上記に公開してありました。当時は別の本でしたが、とりあえずプログラム言語の勉強をはじめました。

当時の勉強法は図書館で関係ありそうな本を、とにかく大量に読む多読。中学生で時間があったので、かなりの量を読むことができました。

もちろん、一冊すべてを理解することはできないのですが、何冊も読んでいるうちになんとなくわかってきます。学生であれば三桁ぐらいの本も読むことができると思います。

ただし、図書館って地域差がかなりあるんですよね。人口に比例して予算があるので、人口が多い場所に住んでいるってのはものすごい利点だと思います。

とはいえ、いろいろな図書館で蔵書検索してみましたが、「C言語」で検索できる本って場所によってかなりの差がありました。

あと東京は区単位で図書館が整備されているので、実は横浜市とか大阪市のほうが図書館の規模は大きいです。

どのプログラミング言語を学ぶ?

個人的には色々手を出してほしいですが、かんたんに言語系統別の解説をします。こちらも語学と一緒なので、似たような言語はすぐに使えます。フランス語を使える人がすぐに英語を覚えることができるように、言語には関連性があります。

BASIC(BASIC, FORTRAN)

昔の入門向け定番言語でした。プログラムの歴史的経緯を知るのにはいいですが、最近はちょっと利用される機会が減ってきているようです。

試しにプログラムしてみるのにはいいですが、文法の勉強には向かない言語だと思います。

COBOL

こちらも昔の商業高校などでの必修言語でしたが、現在はあまり使われていませんので、新規で勉強をするのはおすすめしません。

C(C, C++, GO, Java)

今も昔もよく使われている言語たちです。C言語はヨーロッパの言語でいうとラテン語に近いもので、C言語をベースによりよくしていった言語たちがたくさんあります。

ヨーロッパ系の言語はラテン語の影響を受けた言語が多いので、比較的似ています。ここの群にいる言語から学習を始めると、他の言語も学習しやすいです。

Python

C言語系の言語体系だと表現が冗長になる構文を、より書きやすくした言語です。エスペラントみたい? ちょっと違うか。。。

他の言語とはまるで違う言語体系なので、なれてしまえば便利ですがC言語周辺とは考え方もかなり違います。ヨーロッパ系の人が、日本語を学ぶようなイメージかな?

同じような言語としてRubyがあります。こちらも同じようなコンセプトの言語です。

学習の順番

使いたいターゲットとなる言語がない場合にはC言語をおすすめします。一番勢力的には大きく、ベーシックな言語です。

C言語をなるべくがっつり勉強して、ポインタ周りを理解しましょう。たぶん本をちょっと読んだぐらいだと理解できないので、多読が必要になると思います。複数の本を読むとなんとなく理解が深まります。

C言語を少し勉強したあとに、おすすめなのが上記の「一夜漬けCASL」です。かなり古い本ですが、CASLというアセンブリ言語の本です。C言語の深いところを理解するのにはアセンブリの知識もあったほうがいいです。この本はかなり難しいアセンブリ言語をなんとなくわかった気にさせてくれる名書です!

その後はJavaがおすすめです。このへんは歴史が長いので良書が多いです。もちろんだめな本もたくさんあったり、嘘が書いてある本もあります。そーいう意味でも多読をすることで、検証しながら読むことも身につけることができると思います。

実習は必要?

私は一年以上本だけの独学で勉強をしましたので、必須ではないとは思います。ただ、実際にプログラムを組みながら勉強したほうが効率的な人もいるとは思います。

まだ若くて時間がある人であれば、まずは本だけで勉強するのでも十分だと思います。実際にプログラムを組んでみると、どうしても何を組むのかが主体になって、文法の勉強がおろそかになってしまう危険があります。

ある程度の年齢になっていている場合には、実際に組みながら必要になったところを勉強する方が効率がいいと思います。

コードの多読は必要?

これは難しいところで、一般的な英語学習とかであれば英語の絵本を多読する勉強方法がありますが、プログラムの場合におすすめのコードは少ないです。

オープンソースが広まったので、自由に読めるコードは多いのですが、思ったより汚いソースコードが多いのと、高度すぎるコードなどで程よい難易度のものが少ないです。

書籍などのサンプルコードをたくさん読むほうが適している気がします。

ある程度勉強が進んでいる状態であれば、ウイザード級の人のソースコードは非常に参考になります。ただウイザード級の人が本当に一人だけで組んでいるソースコードってのが少なく、一般公開されているコードはチームで組んでいることが多いです。

本当に実力をつけるには?

実力のある人に添削してもらうのが一番だと思います。とはいえ、添削って非常に難しいです。英語の添削でもちゃんとできる人はまれです。違和感がある場所などについて、なぜその書き方だといけないのかをちゃんと説明してあげる必要があります。

文法的には正しいけれど、保守性やバグを少なくする方法まで考えて添削をするとなると、それなりに経験を積んだ人じゃないと添削できないと思います。

実装系の勉強方法

言語の学習は本がありますが、実際の実装系もしておいたほうが好ましいです。コンパイラとかリンカとかメイクとかです。

上記はかなり古いですが、Windows(DOS)の体験版のC言語環境です。非常にマニュアルが整備されているので一通り目を通すとかなり勉強になります。

上記が100行まで使えるアセンブラですので、LSI C試食版と組み合わせてC言語からアセンブラで書いた関数を呼び出すなどができます。

最近はgccを使うことが多いのでgccの書籍を勉強してみるのもおすすめです!

ただしgccは非常に巨大なシステムなので、勉強する範囲が広すぎる気もします。LSI Cのマニュアルも284ページあります、、、

まとめ

社会人には多少難しいかもしれませんが、多読での勉強はおすすめです!

作ってみようみたいな本ではなく、文法入門書を大量に読むほうがおすすめです。

コメントする

メールアドレスが公開されることはありません。

管理者承認後にページに追加されます。公開されたくない相談はその旨本文に記載するかTwitterなどでDM投げてください。またスパム対策として、日本語が含まれない投稿は無視されますのでご注意ください。