対象
プログラムもピンからキリまでありますので、言語を覚えて、プログラムがどのような物なのか概ね理解できるまでということを前提で書きます。
プログラムを独学で覚えた経験から、ふと半日くらい考えただけの思いつきに近いものなので、ツッコミ等はコメント欄にお願いします。
前提知識、能力
プログラムを組めるようになるために、前提知識や能力として必要なものはたった二つだと思っています。
一つ目は日本語や英語などの母語ができること。
これ、ものすごく大事です。
プログラムで何をするかにもよりますが、一般的にすべての言語や仕様なんてものを覚えているプログラマは居ないと思います。
参考書やリファレンスを読むことができる知識はどうしても必須になります。
そしてドキュメントは英語であることが往々にしてあり、英語ができると日本語化されていない物も読めるためアドバンテージがあります。
二つ目は、小学生レベルの算数。
どうしても足し算、引き算、掛け算、割り算などは出てきますし、小数点なども扱うことになります。
高度なプログラムになると三角関数をはじめとしたライブラリを使うことになると思いますが、こちらは使い方さえ理解できれば最低限プログラムは組めます。
つまり、プログラムを始めるのに、それほど特殊な能力は要らないと思うのです。
ただ、自由自在にプログラムを書けるかどうかは、努力と才能が必要になる場面も多々あると思いますが、時間をかければ大抵は努力で何とかなるでしょう。
お勧めしたい言語など
まずは目的を見つけることです。興味があれば、なんでも構いません。
ゲームを作るでも、ユーティリティを作るでも、業務効率化のためにマクロを作るでも、ロボットを動かしたいでも、やりたいと思ったことを目標にしてください。
いきなりgoogleを超える検索エンジンを作るとか、そういうものは無理かと思いますので、レベルを落とす必要はありますが・・・。
で、言語ですが、やりたいことに適した言語というものがあります。
ゲームを作りたいのであれば、フルスクラッチで作るならCやC++が主流ですし、エンジンを使うならUnityはC#、UE4はC++を選択することになるでしょう。
しかし、検索エンジンを作るような、あまりに大きなものを目標にしてしまうと挫折が待っています。
私の経験談ですが、初っ端からC++で通信機能を持った将棋プログラムを作ろうとして、ソケット部分で挫折しました。
目標の設定については、誰か知識のある人に聞いてみるのが良いと思います。
まだ明確な目標はないけど、どのようなものか知るために始めてみたいという方には、javaかC#をお勧めします。
IDE(統合開発環境)がフリーで提供されているので、参考書やネットを見ながらでも簡単に環境構築ができ、 簡単にデバッグや実行ができるので、トライ&エラーがしやすいのです。
また、どちらもオブジェクト指向世代?以降の言語なので、オーソドックスなプログラム言語を理解するには最適だと思います。
プログラムを覚える(理解する)ためにオススメしたいこと
プログラムに慣れるには、何よりも書くことです。
といっても、いきなり書き出すことは難しいでしょう。
まずは書籍などを参考にサンプルコードを写します。
次にそれをカスタマイズしていきます。
どこを修正したらどこが変わるか、どこを修正したら動かなく(コンパイルできなく)なるかなど、とりあえずいじってみるというのが良いです。
分からない物を触っていて一番怖いのが、元の状態に戻せなくなることです。
パソコンを初めて触ったときに、「壊したらどうしよう」と思いませんでしたか?
やってもいい行動と、やってはいけない行動というのをある程度覚えたら、あとは好き勝手触れば良いのです。
そのためにも、一から自分でコードを書いてみる、修正した部分を元に戻してみるという経験は大事なことだと思います。
こうすることで他人のコードでも壊さずに読むことができますから、知識の幅が広がっていきます。
参考書を1冊終わったころには、自分で何か作ってみたくなるのではないでしょうか。
そして、どう作れば良いのか知らないことだらけであることに愕然とするかもしれません。
ゲームで敵の動きを作ろうとして、敵が自分に向かってくるにはどうすればいいのかなんて、言語の教科書にはまず載っていません。
それが普通だと思います。知らないことは調べて使えるようになれば良いのです。
何度も使うものであれば自然と覚えますし、たまにしか使わない物であれば調べて正しく使うことができれば問題ないのです。
基礎部分を理解したら
ここからが本格的なプログラムの勉強開始になります。
プログラム言語が分かるだけでは、プログラムを書くことは難しいです。
これを読んでいるあなたは日本語の読み書きができると思いますが、300ページの小説を書いてくださいと言われて書けるでしょうか。
文法的に正しくても、表現技法や読み手を物語へ引き込むテクニックなど必要なことは山ほどあると思います。
プログラムも同様で、言語やフレームワークごとの作法だったり、最適なアルゴリズムの取捨選択だったり、ネットワークやハードウェアの知識など勉強することだらけです。
また、専門的な知識も併せて勉強する必要がありますし、顧客向けシステムを作るのであればその業界の知識も必要になってきます。 (会計ソフトを作る場合は税法の知識が必要になる等)
全てを理解するのは時間的にも無理がありますので、自分の専門分野の知識を増やしていくことになります。
それ以外の分野については、リファレンスを調べながらある程度のことができる程度で構わないと思います。
さいごに
ソースコードも文章の一つです。
誰が読んでも誤解無く、読みやすくなるようなコードを書くことを心がけましょう。
完璧である必要はありません。常に心掛けていれば、他人のコードの読みづらさや読みやすさから自ずとコードが洗練されていくと思います。