そもそもプログラミングとはなんぞや?ということを考えています。
プログラミングとは地道な(地味な)作業の積み重ね。
もちろん自分はまだまだ初心者ですし、そもそも趣味の範囲内でのレベルですので、でかいことはいえませんが、現時点での自分なりの意見をまとめておきたいと思います。
大前提: コンピュータに仕事していただく
とりあえずプログラミングは、コンピュータに何らかの仕事をしてもらって、それによって、人が利を得るタメの手段です。その仕事は直接的なことかもしれないし、補助的なことかも知れない。
どちらにせよ、それはあくまでコンピュータが膨大な計算をした結果に基づくもので、コンピュータ自体は計算しかできない、という点は注意しないといけないと思います。
現代社会においてはあたかもコンピュータであらゆることが出来るように思えますし、実際いろいろ出来ますが、それはプログラマによってそう見せかけられているだけではないでしょうか?。
コンピュータの人間をはるかに超えた、とてつもなく早い計算能力をうまく転用することで、いろんなことを機械にやらせているわけで、どう転用するかを考えて、プログラムするのは人間であり、コンピュータはいわれたことをそのままただ実行するだけです。
本質的にはコンピュータは現時点では、まだまだ出来ないことの方が多いような気すらします。そんな機械様の能力を発揮させるために人間側が譲歩しているのであり、その妥協の産物がプログラミングなんじゃないかなと。
理想としてはsiriにこういうソフト作って!といえば作ってくれるような未来かもしれませんね。でもそれは現時点では無理と。
人工頭脳がブームになってますけど、まだまだ擬似的な再現に留まっており、自発的な判断はまだできないですし。でもポーカーは一部のルールで、もう人間が勝てないみたいですね。
もはや、いろいろ時間の問題ではあるかもしれませんね。ディープラーニングとかかなり盛り上がっていますが、でも、あれも高速計算によるゴリ押しみたいですけどね。
どっちにしろコンピュータが自分で電源入れたり、自分で自分のソフトのバグ直したりしたら、人間終わりなような気がします。
というわけで、現時点ではあくまで計算機の範疇をでないコンピュータ様に、人間に役立つような計算式の数々を計算してもらうために、コンピュータに理解できる形で一つ一つ書かせていただく、ということがプログラミングであると思います。
じゃあ具体的には何をする?
・コンピュータ様が記憶できるように、データを入れる容器を準備する
→変数、あるいは配列の宣言。
プログラムをロード、実行の際にはコンピュータはその短期記憶はメモリに記憶するわけですが、コンピュータはただなんとなく覚えるということが出来ません。
コンピュータに計算に必要なデータを保存するための容器を教える作業です。あるいはメモリ上における場所とり、と言うべきか。
データタイプによって容器は異なるので、ちゃんとあったものを用意する。
・特定の動作をする関数を作る
→関数の作成
実際の計算式であり、単なる計算だったり、特定の動作だったりを実現、実行する、ヴァーチャルな機械を作る。
・規模に応じて、情報が整理できるようにクラスを作る。
→クラスの作成。
安全性、可読性、保守性、作業効率、拡張性と様々な利を得る!
・あるいは既存の関数、クラスを利用する。
→ライブラリの利用。
時間と労力は限りあるものなので、既に他のプログラマによって作られているものは利用できるなら利用する。C#であるならクラスライブラリとなり、各クラスにいろんな道具が準備されている。.NetFrameWorkやUnityのAPIなどがこれにあたる。現代の大規模な開発状況においてはプログラミングは実質的にいかにAPIをうまく使えるか?というものになっているようです。
基本的な作業については今はこんな感じで理解しています。アルゴリズムを作るとか、リファクタリングとかはまあ応用だと思うので・・・。
これらを積み重ねることで、あたかもコンピュータを魔法の道具のようにしているのはプログラマの方々の努力の賜物なんだなーと理解できただけでもプログラミングの勉強をした価値があったなと思います!
参考文献 :
・プログラミングはなぜ動くのか? 著: 矢沢久雄 出版社: 日経BP
・苦しんで覚えるC言語 著:MMgames 出版社: 秀和システム