Kuratani Shigeru Weblog

***
2019年11月3日

プログラミング学習方法 振り返り

このエントリの経緯

今期は社内勉強会でC#勉強会の講師を拝命致しました。
これまでC#は学習をしたことがなかったのですが、「まずは公式ドキュメントを読んでみよう」ということで、以下のドキュメントを読んでみました。

C# ガイド(https://docs.microsoft.com/ja-jp/dotnet/csharp/)

初学者の方、他言語を使用している方に向けて、とても分かりやすく、かつ、簡潔にまとめられていて、短期間でC#の基礎を学ぶことが出来ました。
(本当にMicrosoftはドキュメントが豊富でしっかりしていますね!)

初めてプログラミング言語を学び始めた頃を振り返ると、初学者向けの書籍を購入して学習し、ステップアップとしてより詳しく記述されている書籍を学ぶということをやってきました。
公式ドキュメントやリファレンスは、学習の過程で適宜参照をして、徐々に理解をしていくというスタイルです。

しかし、今回のC#の学習で「これまでの自分の学習の進め方はあまり良くなかったのでは?」と思ったのが、このエントリを書くことにした経緯です。

初学者の頃

私が初めて学んだプログラミング言語はPHPです。
当時はPHP5がリリースされて間もない頃で、PHP4で構築されたアプリケーションも多くありました。PHPの勢いもとてもすごくて、「プログラミングPHP」(※現在は第3版になっていました)にも、「世の中のWEBサイトの約70%にはPHPが使用されている」と記述されていたと記憶しています。(うろ覚えです...)それぐらい勢いは凄かったです。
私も多くのエンジニアと同じようにPHPを学習するようになりました。


注記

JavaScriptも重要なプログラミング言語です。私の当時の仕事はWEBサイト制作でしたのでJavaScriptも当然学習をしたのですが、現在と違ってまだJavaScriptはWEBアプリケーションの中心・重要言語として認識がされていませんでした。ですので、このエントリでも「PHPを初めて学んだ言語」として進めます。


学習の進め方としては、初学者向けの書籍を読み進めながら言語仕様を理解し、実際に書籍に記述されているプログラムを打ち込んで実行してみるという、一般的な手法です。
(「一般的」でなければ、私の認識違いです。すみません。)
この自主学習での理解を武器に、実務で「プロセスの多重化(フォーク)」や「システム移行の為の外字へのコードポイントの変換」、それとフレームワークを使用したアプリケーション構築などをやりました。
その中で、PHPを深く理解しておられる熟練者の方の書籍を読んで理解を深めていくという感じです。

振り返ってみて

私だけかもしれませんが、書籍を読むのはとても時間が必要です。また、初級からのステップアップに読むことになる書籍は基礎がわかっていないと、はてな(?)の連続です。なかなか読み進められず、あまり理解が出来ないまま読了となります。

まず、学ぶべきは「言語のエッセンス」だと考えています。
その学習に最適なのは「公式ドキュメント」だと思いました。
もちろん、私と同じようにコンピュータサイエンスを専攻していなければ、最初から理解をすることは難しいかもしれませんが、エッセンスを端的にまとまった形で学ぶことができます。 情報の正確性と学習時間を考えると、間違った学習方法だとは思いません。

現在、多く使用されているスクリプト言語の公式ドキュメントも日本語で提供されています。

PHP

PHP マニュアル(https://www.php.net/manual/ja/)
当時は有志の方が、英語のドキュメントを日本語訳されていました。今でもそうなのかな。 とても活用させていただき、感謝で一杯です。

Python

Python 3.8.0 ドキュメント(https://docs.python.org/ja/3/)
これまで有志の方が独自に日本語訳を公開されていたそうですが、公式に日本語ドキュメントが参照出来るようになっています。

Perl

perldoc.jp(http://perldoc.jp/)
英語の公式ドキュメントの日本語訳が公開されています。JPAが管理されています。

上記の公式ドキュメントをまず学べば、短時間で言語仕様や動作原理などの基礎を学ぶことが出来るのではと思っています。
ただ、独学の場合、プログラミングが初めてという方は、プログラミング一般に関する書籍を読んでみると良いと思います。
公式ドキュメントで学習を進める場合は、「なんじゃこら」とならない為に、有識者のナビゲートが欲しいところです。大学で情報科学を専攻されていれば講義形式で基礎が学べます。また、今はプログラミングスクールが多く存在しますので、現役のエンジニアの方からアドバイスを受けながら基礎を学んでいくのが良いと思います。その際に、公式ドキュメントを読むと正確な情報を短期間で学習出来ると思います。

その後ですが、「実際にアプリを作ってみる!」というのが良いと思います。
実際にアプリを作りながら、公式ドキュメントを読み返してみるとより理解が深まりますし、「使える知識」に変えていくことができます。
また、熟練者の方が書かれた良書を読むことで、さらに言語に対する理解を深めていくことが出来ます。

プログラミング言語に関する書籍を読むタイミングですが、
「公式ドキュメント」→「アプリ実装」+「書籍」
のような順序も一つの学習法だと感じています。
これまで、熟練者の方が書かれた良書を沢山読んできましたが、著者が伝えようとしたことを本当に理解出来たかはとても怪しいです。少し「濫読」気味で勉強をしてきました。最近は出来る限り「精読」するように心がけています。
私を反面教師として、皆さんなりの効率的かつ実戦に役立つ学習法を見つけてもらえたらと思います。

あと、多くの方が良書を沢山書いてくださって、有志の方が英語のドキュメントを日本語訳してくれたおかげで今の自分があると思っています。本当に感謝で一杯です。
まだまだ「道半ば」ですが、向上心は失っていません。
自分がしていただいたことを、今度は自分が初学者の方にしてあげられる日が来るといいなと思っています。

最近の学習

今期のC#勉強会準備での気づきを活かして、最近は「公式ドキュメント」を読むように心がけています。
でも、読みたい書籍が沢山出版されるので、見つけるとつい読んじゃうんですよね。
あと、Javaの言語仕様の学習に以下の書籍を読みました。(少し忘れてきていますが...)

プログラミング言語 Java

言語仕様としては、以下に公式ドキュメントが公開されています。

The Java® Language Specification

上記ドキュメントの日本語訳はないと認識しています。
英語頑張るぞ!と思っています。
コミュニティー関連のサイトも英語なので、英語少しずつ勉強していきたいです。
最近はこんな感じです。