「プログラミング」とは、プログラムを書くことです。
「プログラム」とは、コンピュータを動かす手順を書いたものになります。
料理でいえば、料理を作ることがプログラミングで、
料理のレシピがプログラムになります。
プログラミングをする目的は、主に
(1), 解決したい問題の処理を行う
(2), 時間の節約をする
があります。
より良いプログラムを書ければ、私たちの生活はよりよくなります。
また、顧客の悩みを解決できるプログラムはビジネスになる、とも言えます。
なので、良いプログラムを書ける人材は、よりよい待遇で働くことができることになります。
じゃあ、
- プログラミング能力は、どう、高めればいいの?
- 何を学べばいいの?
- どんな方法があるの?
と思われる方も多いかと思います。
そこで本記事では、
まずプログラミング能力の高め方をまとめ、
それを実行する時に役立つ参考書などのおすすめ本をご紹介します。
本記事を読むことで、
- プログラミング力を高める方法
- やるべきこと
- 明るい未来
をつかんでいただけたらと思います。
本記事の概要
「プログラミング」による「問題解決」とは?数学力・アルゴリズム力をつけて、良いプログラムを書くための方法とオススメの本はこちらです。
問題解決には、方法論(方法の体系)があります。
数学とプログラミング(アルゴリズム)の力をつけることで、
問題解決方法を、プログラムにすることができます。
問題解決のためのプログラムを作成できれば、
- 自分の悩みの解決ができる
- 人の役に立つことができる
- ビジネルとしてお金を稼ぐことができる
といったことができるようになります。
そのためには、問題を解決するための ”良いプログラム” を作成できる能力が必要です。
良いプログラムを書くのに必要なこととは
問題解決をプログラミングで実行するには、以下の点が重要です。
現実世界の解決したい問題について、
(0), 現実の問題を、数式で扱える形に「問題を定義」し直す
(1), 「数式化」する
(2), その数式を、「効率的に計算」する
ことが必要です。
なので、問題解決という点でのプログラムの良し悪しは、
- 「問題を定義」の仕方、
- 「数式化」の巧拙
- 「数式の計算処理手順」
によって決まることになります。
「問題の定義」では、そのあとの数式化や計算処理がしやすいものを考えながら、定義していきます。
問題が定義できたら、「数式化」し、
数式の「効率的な処理」を考えていきます。
ちなみに、後半の数式化や効率的な処理には、
「アルゴリズム」の運用能力も重要となります。
アルゴリズムって?という方は、こちらの記事もどうぞ↓
『アルゴリズムとは?アルゴリズムに入門したいあなたにおすすめの本はこちらです』
以上から、
良いプログラムを書くためには、
- 問題解決力
- 数学力
- アルゴリズム力
が重要だということがわかっていただけるかと思います。
じゃあ、どうやってこれらを高めていくの?
- 問題解決の方法って?
- 数学は学校の数学を勉強すればいいの?
- アルゴリズムの能力ってどう高めるの?
など思われる方も多いかと思います。
そこでここからは、良いプログラムを書くためにおすすめの本や参考書などをご紹介していきます。
問題の解決力を鍛えるためには?
現実の問題を、解ける形で定義するのがここでの目的になります。
そのためには、まず一般的な問題解決のための考え方を知る必要があります。
一般的な問題解決の手順とは
何か問題を解決したい!という時には、
一般的には、以下の考え方を適用することで、
系統的に問題を解決する方向に持って行きやすくできます。
まず、単に問題を解決したい!と言っても、
まずはなにが問題なのかを発見しないとはじまりませんよね。
問題が何なのか、しっかり問題と向き合う必要があります。
表面的に見えるものでなく、
その奥にある本質的な部分が問題である場合などもあります。
問題発見には、以下の書籍で詳しく学べます↓
問題がわかったら、問題をしっかり理解していきます。
具体的には、問題の原因をはっきりさせることで、
問題をより深く理解することができます。
この時、原因は1つとは限らないのがポイントです。
可能性のある原因をすべて列挙していきます。
原因がわかったら、1つひとつの原因に解決策をそれぞれ考えていきます。
対策が立てられたら、物理的なスケジュールを立てて、
計画に落とし込んで実行していきます。
実行しながら、定期的に見直しを並行して行います。
・・・・・
これが一般的な問題解決の考え方となります。
実際には、問題解決の具体例などを読んでいくと理解が深まるかと思います。
問題解決法については、具体例とともに学ぶには、以下の本がおすすめです↓
同著者のこちらもこちらもございます↓
ビジネスでの問題解決のための本には、以下のものがございます↓
問題解決の技法を網羅した辞書的な1冊もございます↓
ここまでは、一般的な問題解決のお話で、
ビジネスの中でもすぐにでも活用出来る内容でした。
ここからそれを踏まえて、
プログラミングでの問題解決の基礎として、
数学を使った問題解決の方法について学べる本をご紹介します。
数学を使った問題解決とは
本書は数学者のG.ボリア教授がまとめた、問題解決の一般的手順の解説書です。
数学の例をあげながら解説されており、
数学での問題解決の例を、一般的な問題にも適用しやすいように説明されています。
ただ、文字量が多かったり、抽象的な高度な話も出てきているので、
サクッと隙間時間で理解して、目の前の業務に活かす
というのには難しいかもしれません。
そこで忙しいあなたが、問題解決手順をサクッと理解するには、以下の書籍がおすすめになります↓
こちらは上記のボリア教授の本を、
より日常的に活用しやすい形で、内容を”翻訳”してくれている1冊です。
具体例には、小学校の算数+αの内容が使われているので、
高度な内容をわかりやすい例で理解することができます。
また忙しいあなたも、通勤電車の中や、ちょっとした隙間時間で読み進めることができるおすすめ本となっています。
逆に、上記ボリア教授の本の内容を、
さらに高度な数学とともに学びたいあなたにはこれらの本もございます↓
逆に、ボリア教授の方法のアンチテーゼ(?)として、こちらもございます↓
数学の解釈を大きく変えることで、問題を証明なし・計算なしで答えを予想しよう!というコンセプトの1冊です。
例えば、計算を使わずに微分・積分を行ったり、
ナビエ・ストークス方程式の驚くべき解法などが示されています。
ボリア教授の方法でうまくいかない場合など、多くの手法を持っておくのに良いかと思います。
この他にも、数学での問題解決についての書籍には以下のものがございます↓
本書は、主に整数と確率について、それぞれ問題解決の考え方を示してくれています。
数学と言っても、小学校の算数+αのレベルで理解できるように噛み砕いて書かれているので、
数学が苦手な方にもわかりやすい内容となっています。
具体的には、
整数問題では、素を探る・情報を増やす・解を絞り込む・周期性を見つける・抽象化する・間接的に証明する・足がかりを見つける・推論する・予測の正しさを証明する
などが具体例とともにまとめられています。
確率では、鳩ノ巣原理・ものの数え方、逆の視点・「かつ」と「または」・問題の置き換え・同様に確からしい・未来に目を向ける・原因を突き止める
といった内容がわかりやすく解説されています。
数学を題材にして、論理的に思考できる能力を高めれる1冊となっています。
実際の問題解決をしたい時には、上記の小学校算数だけでなく、
より広範囲の数学を扱えることで、解決策の選択肢が増えますよね。
そこで大学数学レベルの内容を、問題解決に適用するための手引書もございます↓
本書は、大学数学初学者の方向けに、
大学レベルの数学の内容を、問題解決にどう使うか、
各数学分野の活用方法がまとめられた1冊となっています。
数学的方法による問題解決として、対称性・最大最小主義・鳩の巣原理・不変量が挙げら、解説されています。
また、横断的な方法として、グラフ理論、複素数、母関数が示されています。
さらに、代数・組み合わせ論・整数論・幾何学・微積分学などの各論だけでなく、
問題に対する際の心理的な方針や、スタートの仕方、議論の方法など、
問題解決での周辺的なノウハウも学べるのもうれしい1冊です。
注意点としては、高校数学をきちんと理解している前提で話が進むんでいるところです。
高校数学に苦手意識がある場合には、そちらを先に学ばれるのがおすすめです。
高校数学については、以下の記事がございます↓
『高校数学を独学で学びたい、やり直したい社会人のあなたにおすすめの本はこちらです』
『「高校数学」をサクッと身につけたい・復習したい・やり直したいあなたにおすすめの本はこちらです』
プログラムによる問題解決とは
プログラミングをある程度学んだのに、実際にプログラムを書こうとすると
- どう書けばいいんだろ?
ってなったことは、誰しもあるのではないでしょうか。
プログラミングでは、プログラミングやアルゴリズムの知識だけ知っていれば十分というわけではありません。
それらの使い方を理解して、体得しておくことも重要です。
- 自分の思いついた解決策を整理してまとめる力
- 解決したい問題と、すでに知っている解決策に結びつける力
- アルゴリズムを問題に対して、柔軟に使いこなす力
といったことが、創造的なプログラミングには重要です。
これらは「問題解決能力」と呼ばれたりもします。
問題解決能力は、非常に重要ですが、
プログラミングのルールの解説本や、
アルゴリズムの網羅系書籍などからは学ぶことができません。
この点がプログラマの”センス”と言われる部分の一部ではないかと思います。
センスを持った方だけでなく、最初は出来なくても、
学んで訓練することで、この”センス”を身につけることができます↓
プログラマの考え方がおもしろいほど身につく本 問題解決能力を鍛えよう!
問題解決においては、通常は何らかの制約があります。
その制約のもとで、何らかの成果を出すプログラムを作るのが目的となります。
本書は、制約条件下でのプログラミングによる問題解決能力を系統的に学べる1冊です。
- 計画を持つこと
- 問題を言い換えること
- 問題を分割すること
- 知っていることがから試してみること
- 簡略化すること
- 類似点を探すこと
- 実験してみること
- イライラしないこと
などの一般的な問題解決の方法の説明から、
それらをプログラミングに落とし込むやり方について、
体系的に学べるおすすめの1冊となっています。
アルゴリズムを駆使した効率的プログラムの作成方法とは
問題解決を実行するには、プログラムを作成する必要があります。
同じ処理でもプログラミング方法によって、1日で終わるものから
1年かかるものなど、大きな差があります。
「効率的」なプログラミングを行うには、
(1), 「アルゴリズム」を学ぶ
(2), アルゴリズムの「組み合わせ方」を学ぶ
といったことも大事になります。
アルゴリズムって?というあなたは、こちらの記事もどうぞ↓
『アルゴリズムとは?アルゴリズムに入門したいあなたにおすすめの本はこちらです』
アルゴリズムの組み合わせ方・運用力を高めたいあなたには、こちらの記事もございます↓
『アルゴリズムの勉強方法とは?プログラミングコンテストについて学べる書籍などもこちらです』
というわけで、本記事では、
- プログラミング能力の高め方
として、以下の3点からまとめました。
- 問題の解決方法の「選択能力」
- 数学を使った問題解決の「定式化」
- プログラム(アルゴリズム)による問題解決の「実装」
といった点から、
これらをそれぞれ高めるための参考書などのおすすめ本をご紹介しました。
こちらもございます↓
『プログラミング超初心者のあなたが、独学で基礎から入門するのに役立つ、プログラミング勉強法、おすすめの本はこちらをどうぞ』
こちらもございます↓
こちらもございます↓
『人工知能(AI)とは?危険なの?どんな未来になるの?について勉強したい・学びたい・独学したい初学者の方におすすめの人工知能の入門本はこちらです』
『「ディープラーニング(深層学習)」とは?ディープラーニングを学習したい、入門したいあなたにオススメの書籍、入門書、教科書、参考書などの本はこちらです』
『Linux の基礎知識やサーバー構築術を学べるおすすめの本はこちらです(Linux 初心者向け)』