プログラミングの学び方
何をどう勉強したら、思うようなソフトウェアが作れるようになるのかわからない
そう思っている人も多いのではないでしょうか。
私も以前は何をどうやっていいかわからず、右往左往していた一人です。 基本的に私は大学は理科系でしたが、ソフトウェア工学やコンピュータ・サイエンスの専攻ではありません。
そういうこともあって、私は基本的に全て独学で学んできました。
そのため、かなり回り道してきたと思います。
もし自分が一から勉強するならどういう順序で勉強したらいいか、昔の自分にアドバイスするつもりで、 勉強方法を書いてみたいと思います。
プログラミングをする準備
パソコンを用意する
当然ながら、まずはパソコンが必要です。
このサイトでは Windows で使うプログラムの開発を前提にしていますから、最新の Windows 搭載のパソコンを用意してください。
Windows XP 等のいわば古いバージョンの Windows でも開発作業は全然普通にできます。ですが、新しい機能を試せないなどの不自由が出てくることがありますから、 もしこれからパソコンを買うのでしたら、最新の Windows がインストールされているパソコンを買うことをお奨めします。
どの程度の仕様のパソコンを買うか迷うところですが、一番気にするところはメモリです。 RAM は最低 4GB 搭載しているパソコンを選んでください。
パソコンのメーカーの お奨めは DELL (デル) です。 よほどの理由が無い限り、デルで選ぶと良いと思います。 なぜなら、値段も安く、かつ余計なプログラムがインストールされておらず扱いやすいです。
思わぬソフトウェアがインストールされていると、期待した動作と異なることがありますので、 開発機はなるべくシンプルな構成にしておくべきです。
この点で、デルコンピュータははじめから、構成がシンプルであり、開発者向けということが出来ます。
かつ、デルコンピュータは企業で採用(推奨)している場合が多く、ビジネス向けでもあります。 職場やビジネスミーティングに持っていくにも、デルコンピュータは適しています。
開発ソフトの準備
学ぼうとするものによってまちまちですが、私ははじめは C 言語を学ぶことをお奨めしています。
C 言語を学ぶ場合、開発ソフトの準備はこちらのページでご紹介しているように、 Visual Studio 2017 を用意すれば良いです。
最近はコミュニティエディションが無償で利用できますので、ダウンロードしてインストールしてください。
C 言語を勉強するだけなら、高いお金を払う必要は全くありません。
初めてのプログラミングとしての C 言語の学び方
開発ソフトの使い方を覚える
プログラムを開発するには、C 言語でソースコードを書いてから、 それをコンパイラやリンカというツールを使ってプログラムを構築 (ビルド) しなければなりません。
上述の Visual Studio というソフトは、ソースコードを書く作業やビルド作業等をやりやすくするためのソフトウェアなのです。
最初はその使い方を覚えるため、Visual Studio の入門書をざっと読むといいでしょう。
C 言語の習得
Visual Studio を読むと同時くらいに、 C 言語の入門書も読んでください。
これで簡単な数学の計算などができ、画面に好きな文字が出力したり、ファイルからデータを読み書きできるようになります。
データ構造とアルゴリズムの勉強
C 言語の入門書を読むと、どうやって画面に出力するか、とか、どうやってファイルからデータを読むか、 という方法を習得することができます。
しかし、 どうしたらより良いプログラムが書けるか、という視点があまりありません。
データ構造とアルゴリズムの勉強をすると、どのようにプログラムを書けばより速い、 優れたコードになるか学ぶことができます。
ちなみに、私が今でもたまに参考にしているのはこちらです。
後者の Knuth 氏の本はバイブル的存在で、マイクロソフト創始者のビル・ゲイツも次のように推薦文を書いています。
「本当に良いプログラマーになりたいなら、この本を読んでください。そしてもし全部読めたら、私に履歴書を送ってください」
(ビル・ゲイツ)
アルゴリズムの勉強をしないと、良いコード・悪いコードの評価ができません。
プロとしてやっていきたいなら、必ず勉強しましょう。
Windows プログラミングの学び方
最近は C# などによある .NET プログラミングが盛んですが、 本気で Windows を使っていろんなことを出来るようになりたいなら、 C/C++ を使って Windows API を直接使う方法を学ぶのが一番良いとおもっています。
例えば .NET Framework も Windows の上に載っている以上は、やはり裏で Windows API に通じます。
Windows API を学ぶことで、.NET Framework の基盤となる CLR のようなレイヤーもよりよく理解できるようになる、というのが私の考え方です。
Windows が「本来」出来ることをしっかり把握することで、ライブラリがやっていることなのか、Windows がネイティブにやっていることなのか、 区別できるようになるのです。
二つ目の理由は、そもそも Windows の API を直接呼んだ方がより高性能のプログラムを作れる可能性が出てくるからです。
自分で全部書かないで、ライブラリを使ったほうがより良いのではないか、 という意見もあると思いますが、究極的にはちゃんとコードを書けるようになれば、 OS の機能を直接叩けるようになるほうが良いものができるはずです。
そういうわけで、私は C 言語での Windows プログラミングを推してます。
もちろん、仕事で C# で Windows プログラムを書く必要があって、それで初めてプログラミングを覚えた人もいると思います。
そういう人も、今後プロとしてやっていくなら、家に帰ってきたら C 言語と C 言語による Windows プログラミングを勉強して幅を広げていく勉強をするのも、 とても大切なことだと思います。
C 言語の習得
繰り返しますが、Windows のプログラムを始める前に、C 言語の入門書を最低でも一冊はしっかり勉強しておく必要があります。 このステップをおろそかにすると、見よう見まねで人の書いたコードを打ち込むことしか出来なくなりますので、しっかり勉強してください。
逆に、しっかり C 言語を覚えれば、それだけでいろいろなことが出来るようになります。
早く見栄えの良いソフトウェアを作ってみたい気持ちは良くわかりますが、ある程度は何も見ないでプログラムが 書けるようになるまでは、C 言語の勉強を続けてください。
野球をやりたい人が、バットとボールを買ったからといって、すぐに試合に出ても何も出来ないのと同じです。 ボールを投げたり打ったりする練習は避けて通れません。
C/C++ による Windows プログラミング入門
次に当サイトの Windows プログラミング入門 のように、 C 言語で Windows プログラミングを説明している情報源を探し、それで学びましょう。
ここで MFC や ATL など、Win32 より上層のレイヤーに位置するものを学ぶのではないことに、 注意してください。
ここでぶ厚いライブラリを使ったプログラミング方法を学ぶと、理解できずに、ただ呪文のように書くコードが増えてしまいます。
私のおすすめは Windows API にこだわることです。 (ウィンドウズプログラミングのおすすめ書籍 に、 この観点からおすすめできる書籍を探してリストしてますので、参考にしてください)
ここまで来ると、Windows はだいたい見えてきます。骨組みが出来た状態になると思います。 当サイトの Windows 情報 等を参考にしつつ、自分の得意分野・伸ばしたい分野の詳細情報を学んでください。
このステップまで来ると .NET Framework など、より上層のレイヤも正確に理解できるようになると思いますので、 Windows API にこだわることも無いと思います。好きなように、いろいろと幅を広げていけばよいと思います。
書籍による技術習得のすすめ
あなたは万年初心者で満足できますか?
IT 業界はテクノロジの変遷が激しいので、次々と新しく出てくるテクノロジを盲目的に追いかけていると、 どのテクノロジも新しくおぼえたての状態になってしまいます。常に覚えたての知識で仕事をしている状態。 私はこれを「万年初心者状態」と言っています。
あなたの会社にもいるでしょう?キャリアが長い割に、いまひとつデキナイ人。
きっと本人はヤル気はあるんです。真面目に勉強もしているのかもしれません。 ですが、戦略なしに目新しいものに飛びつき回ってしまったために、万年初心者状態になってしまったのでしょう。
他人事ではありませんよ。下手するとあなたも、すぐに万年初心者病にかかってしまいますよ。
万年初心者にならないためには、信頼できる良書を読み、知識を積み重ねることが大変重要です。 私がマイクロソフトに入社して、役職を「飛び級」してテクニカル・リードになれたのは、知識を積み重ねることを常に意識して勉強したからだと思っています。 このために自分より経験年数の長い人に負けなかったのだと思います。
昨今はインターネット上に情報が氾濫しており、何かしようと思ったとき、ググれば大抵は簡単にサンプルコードは手に入るでしょう。 しかし、それは理解しているのとは違います。理解していないのに、できたつもりになっているだけです。 体系的に知識の骨組みを作るためには、書籍から学ぶのが一番です。 書籍でしっかり体系的に骨組みをつくり、ウェブサイトの情報などで知識を膨らませていくとよいでしょう。
ここで紹介している書籍は私が実際に読んだ大量の本の中から、特にお奨めの本を厳選しています。