プログラミング初心者へ捧ぐプログラミング入門法

プログラミング経験3年のヤツが何言ってんだとか言われそうですが。
プライベートでこんな質問をされました。

ド素人がプログラミング始める場合にとっつきやすい本やサイトは?

……ふむ。
これに対してZYTHは思いました。
よろしい、ならば入門の手引きをして差し上げましょう

参考にする本とサイト

まずは質問に対する回答からでしょう。

よくわかるC言語―イメージと例題で理解する
著:長谷川聡
本書は、ANSI準拠C言語の入門用演習書。文科系・情報系などの大学や専門学校で、はじめてプログラミングを学ぶ学生を対象とする演習用教科書として、または、自学自習によってコンピュータに向かってC言語を学ぶ場合の自習書として利用されることを想定。文法定義の厳密さや網羅性よりも、入門者にとって実践的な理解のしやすさを目指している。

http://www.amazon.co.jp/%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8BC%E8%A8%80%E8%AA%9E%E2%80%95%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%A8%E4%BE%8B%E9%A1%8C%E3%81%A7%E7%90%86%E8%A7%A3%E3%81%99%E3%82%8B-%E9%95%B7%E8%B0%B7%E5%B7%9D-%E8%81%A1/dp/4764903199/ref=pd_rhf_p_t_1

この本は私が入門の際に用いた本ですね。
某大学の1年生が教科書として用いています。
私は先生の話を聞かず(オイコラ)、これを見て勝手にやってました。

サイト

初心者のためのポイント学習C言語
このページはプログラム言語初心者の方に、C言語をなるべく簡単に勉強してもらうためのページです。

http://www9.plala.or.jp/sgwr-t/

教科書だけではよくわからなかった際によく使っていたサイトです。
上述の本よりも発展的な内容が掲載されており、より深く勉強できた覚えがあります。

言語について

それではプログラミングを学ぶ上で触ってみて欲しい言語について。
なお、これはプログラミング経験3年の私が勝手に考えているだけなのであしからず。

C言語

私がこの言語から始めたからかも知れませんが、プログラミングをやっていく上で一番最初に触ってほしい言語です。
ポインタの概念など、非常に難しくはありますが、基本が身につきます。
これを理解していると、他の言語でも内部的にはどのような動作をしているのかなどを理解しつつプログラミングできますし。
Javaとかであるnew演算子とかの動作、ちゃんと分かって使いたいものです。
何よりもコンピュータのローレベルの部分にまで踏み込んで出来るのは大きいですよね。
Linuxカーネルにも用いられているとか、さすがの古参です。
え、アセンブリカーネルに使われているけどそっちはいいのかって?
……ま、まあ(私はやってないんですが、)興味があればやってもいいんじゃないでしょうか(アセアセ)。

Java

C言語をある程度触ったらこの言語に触ることをオススメしたいですね。
うちの教授もよくオススメしてきます。
それJavaでできないの?
……オススメじゃない気がするなあw
閑話休題
こちらはオブジェクト指向プログラミングを学ぶ上で非常に良い言語です。
リファレンスも見やすいですし。
C言語の系譜だからか、C言語シンタックスを覚えておけば結構書きやすいですしね。
Androidのアプリを作りたいなら触っておいて欲しい言語ですね。
だいぶ書き方違うみたいですが。
オブジェクト指向プログラミングを学ぶ上でC++はオススメしませんね。
いくらC言語の拡張でそれっぽいからー、なんて思っても絶対にダメです。
なにしろC++は難解さがトップクラスで余裕で死ねますので。
慣れると面白いんですけどね、C++

PHP

ウェブ系なら絶対に触っておいてほしい言語ですね。
最近ではPerlよりこちらのほうが主流になってきているのではないでしょうか?
実は私はこの言語をしっかりとやったことがありません。
近いうちに触ることになりますが。
さて、これを触る上で同時にデータベースとの連携もやってみるといいかも知れませんね。
ウェブ系ってやっぱりネットに公開する都合上、データの集積とかが大切になりますし。
え、別に大量のデータを扱うつもりはない?
こりゃ失礼しました。

Python

スクリプト言語を学ぶなら個人的にはPython推しです。
GAE上で動くことも利点としてあげられますが、一番の理由はその仕様です。
何しろインデントを強制する仕様上、非常に見やすくなるんですよね。
難読化するならともかく、オープンソースとかに関わるならば可読性の悪いコードはゴミでしょう。
動けばいいってもんじゃありません。
わかったかー!

スマートデバイスアプリの開発

最近流行ってますよね、スマートデバイス
私も一応持ってます。
Androidが三台、iOSが一台で、しかもタブレットは持っていませんが。
林檎教信者なのにiPad2持ってないとは何事か! とか怒られそうですw
あ、それ以上にiOSバイスが少ないことに怒られますかね?
閑話休題
さて、これらを開発する上で一つ購入して欲しいものがあります。

アップル公式サイト

http://www.apple.com/jp/mac/

そう、Intel Macです。
iOSアプリの開発は困ったことにMacを持ってないとできないんですよね。
しかもIntel CPUの入ったMac限定。
Windowsでも開発できるようになっていれば敷居が低くなるんでしょうけど。
そしてAndroidアプリの開発はeclipseというIDEがあればできるはずです。
これはマルチプラットフォームなので、あまり気にする必要はありません。
よってIntel Mac一台あればAndroidでもiOSでもアプリを開発できるようになります
Windowsよりも使いやすいですし、プログラミングを始める方はいっそMacを買ってみては?!
え、Macじゃゲームの大半できない?
そういう方はBootCampで検索しましょう。
Windows+Macデュアルブート環境を楽に構築できますよ!
まあWindowsOSは単品で買わなきゃいけませんが……。

プログラミングをする上でのアドバイス

まだ3年目なので、そんなに素晴らしいアドバイスが出来るわけじゃありませんが。
二つだけ気にしておいて欲しいことがあります。

コメントを書く

とにかくこれです。
プログラミングをする上で、コメントを欠かしちゃいけません
一月後にはどういうプログラムかわからなくなっていることが多発しますよ。
しかも自分だけのプログラムならともかく、オープンソースなら余計です。
コードだけで何やってるかわかるのであればいいんですが、そうでなければ解読作業を行う必要が出てきますし。
ただし、

// 変数aに12を代入
a = 12;

こんなコメントを書く必要性は絶無、皆無です。
見りゃわかるっちゅーねん。
コメントはコードの事実ではなく意味を書いてください。
何故ここはこうする必要があるの?
この質問に答えるコメントを。

理解出来ないコードは書くな

荒っぽい言い方になりますが、自分が説明できないコードはたったの1行も書かないでください
プログラムにオマジナイはありません。
オマジナイを書いて、動かなくてもそりゃ当然でしょう。
説明できないコードは害悪です。

総括

さて、これにて「プログラミング初心者へ捧ぐプログラミング入門法」は終了です。
長くなりましたが、これからプログラミングを始める方々は頑張ってください。
理論的で美しく、とても楽しい世界が待っています。
それでは最後に、この言葉を。
Hello,World!