プログラミングはもはや自分の職種に関係なく、あらゆる人が最低限知っておくべき教養として、急速に普及しつつあります。
実際、プログラミングそのものの難易度は以前よりも下がっており、子供から大人まで、誰でも気軽に始められるエンジニアリングの一種になっています。
ただ、そうはいってもプログラミングは専門技能である以上、独特の思考法やアプローチで取りかからなければ、その勝手の違いに戸惑ってしまうかもしれません。
今回はそんなプログラミングを学んでいく上で、入門者が知っておきたい基礎知識について、ご紹介します。
記事のもくじ
プログラミングの基礎知識・考え方
まずは、そもそもプログラミングとはどういうものかについて学んでいきしょう。
プログラミングの仕組み
プログラミングは、コンピューターに命令を与えるために必要なプログラムを、人間が打ち込む行為のことをいいます。
わかりやすいのが、いわゆる映画やドラマなどで、天才プログラマーやハッカーがカチャカチャと英数字を打ち込んでいる姿です。
ああいったシーンは作品むけに誇張されたり、様々なプロセスを省略して描かれることが多いものの、基本的にあそこで行われているのは、プログラムを入力して、実行するという行為です。
プログラムには複雑な数式が並んでいますが、あれには全てコンピューターに行って欲しい命令が書かれています。
人間とは違い、コンピューターはあらゆる行動を人間が指示してやらなければ、何1つアクションを起こすことができません。
そのため、コンピューターがきちんと理解できるよう、順序立てて説明してやるのがプログラミングというわけです。
例えば、子供にリンゴの皮の剥き方を教えるとします。
人間は経験から学習をすることができるため、包丁の持ち方や、リンゴの掴み方などは「リンゴの皮を剥く」という経験をしていなくとも、これまでの記憶と体験から、つたないながらも行うことができます。
この場合、大人が子供に与えるのは、正しい包丁の持ち方や、より綺麗にリンゴの皮を剥くためのコツなどです。
一方、リンゴの剥き方を教えるのがコンピューターの場合、全く異なるアプローチでコンピューターにリンゴの皮を剥かせる必要があります。
そもそもコンピューターには経験というものは基本的に存在しないため、包丁はどの部分をどのように持ち、リンゴはどのようにして掴むのか、というところから教える、つまりプログラムしてやらなければいけません。
そして、正しい力で綺麗にリンゴの皮をむくためには、その加減も数字で人間が完全にコントロールしてやる必要があります。
「リンゴの実の部分を捨ててしまわないよう、丁寧に」と言っても、コンピューターはまるで理解することができません。
「包丁をこの角度で、この力で、この距離で、何秒間リンゴを動かし続ける」などと詳細にプログラムしなければ、コンピューターはろくにリンゴを剥くことができないのです。
人工知能の登場でより自由度は拡大
ただ、一度最適なプログラミングに成功すれば、その後は非常に頼もしい存在となります。
コンピューターが人間より優れている点として、一度設定されたシステムから外れることはなく、同じクオリティのものを半永久的に量産し続けることができるということがあります。
人間であればその日のコンディションなどによって、その質は微妙に変わってしまいますが、コンピューターの場合は全く同じ行動を延々と、休みなく繰り返すことができるため、作業の効率化という意味では無類の強さを発揮します。
そして、最近話題になっている人工知能は、この「最適な設計の発見」を自ら行うことができるという点において非常に注目されています。
人間が何度もプログラムを組みなおさずとも、自動的に幾度となく試験を繰り返し、最適解を導き出せるのです。
人工知能の強力さは、この点を理解すると非常にインパクトの大きなもののように感じるのではないでしょうか。
プログラムは生活のいたるところに
人工知能の登場により、コンピューターによるオートメーション(自動化)は様々な分野で見受けられるようになりました。
工場のロボットアームや荷物管理システムといった産業分野から、スマートスピーカーやテキストチャットボット、翻訳システムのように、私たちの生活に大きく関わっているものまで、その種類は様々です。
現在も自動化の幅は着々と広がっており、将来的には自動運転や配送システム、マネートレードと、あらゆる職業においてコンピューターの自動化が浸透していくことになるでしょう。
プログラミングの良し悪しの考え方
続いて、人間がプログラミングを行う際に言われる、プログラミングの良し悪しについて見ていきましょう。
コンピューターにとって良いプログラミング
良いプログラミングというのは一般的に、安定して動作するプログラムを書くことを言います。
プログラミングは単純なコードを書いているうちはそこまで気にならないのですが、コードが複雑になっていくと、どうしてもどのコードがどのタイミングでどのように動作するのか、ということもわからなくなってしまいます。
もちろん書いた本人はわかるかもしれませんが、肝心なのはコンピューターがきちんと把握できる文章を書くことなので、バグを起こさずに記述する必要があります。
論理的に整合性があるか、書き漏れやミスなどがなく、矛盾するコマンドが同時に入力されていないかなど、スムーズに動作するための条件をクリアしたコードは優れたプログラムであると言えます。
人間にも優しいプログラミング
また、人間にとっても可読性、つまり読みやすさが保証されたプログラミングであることも重要です。
将来、そのプログラムを書いたモノやサービスを誰かに引き継ぐことになった時、理路整然と整理されたコードでなければ、何かトラブルが起きた際の対処に時間を要してしまうことになります。
後から誰が見てもプログラムの仕組みが理解できるコーディングができれば、一流プログラマーの仲間入りです。
まだ初学者のうちはこのような点に気を払うことが難しいかもしれませんが、覚えておくと後々変な癖を修正する手間も省けるため、知っておいて損はないでしょう。
プログラミングを効果的に学ぶための基礎知識・考え方
それでは、次にプログラミングを学ぶ上で役に立つ、頭の使い方についても見ていきましょう。
ロジカルシンキングが重要
まず念頭に置いておきたいのは論理的思考力、いわゆるロジカルシンキングです。
先ほどのリンゴの例を再び引用すると、「リンゴの皮を剥くには、包丁とリンゴがいる。右手で包丁を持ち、左手でリンゴを持つ、そして包丁の持ち方は・・・」など、実際にプログラムを動かしていく際に、どういった順序で物事を進めていくかを頭の中で組み立てる力が大切になるというわけです。
これは数学的思考力と一緒に説明されることもありますが、これまで数学に多くは触れてこなかった人にとって、ロジカルシンキングは難しいと感じることも多いかもしれません。
プログラミングを学びながら、論理を組み立てる練習も同時並行的に進めていくと良いでしょう。
きめ細やかな作業ルーティンになれる
また、プログラミングは正確にコードを入力していく必要があるため、大雑把な作業ではバグが目立ち、まともにシステムとして動作してくれません。
これには慣れの側面も大きいのですが、マメな作業にも根気強く取り組めるよう、精神的なタフネスの強化にも取り組みましょう。
もちろん、ロジカルシンキングも精密な作業ルーティンも、プログラミングを学ぶことで自然と身についていくものではあります。
途中で投げ出してしまわないよう、あらかじめこのような要素が問われるようになることは理解しておきましょう。
プログラミングの基礎知識・考え方を学ぶのに最適な教材
最後に、プログラミングの基礎を学ぶのに最適な教材もご紹介しておきます。
教養としてのプログラミング講座 (中公新書ラクレ)
こちらはエンジニアではない人に向けて書かれた、プログラミングの基礎をわかりやすくまとめた新書です。
いきなり専門的な話をされてもわからないことも多いため、エンジニアの思考を読み解くという意味でも非常に有益です。
世界が変わるプログラム入門 (ちくまプリマー新書)
こちらも非エンジニア向けの新書ですが、まずはプログラミングを紙とペンで体験し、頭で理解しようと言うのが主な内容です。
キーボードをひたすら打ち込むのではなく、親しみのある道具を用いてプログラミングを理解することができる仕掛けが書かれた、読んでて楽しい一冊です。
プログラムはこうして作られるプログラマの頭の中をのぞいてみよう(秀和システム)
ゲーム会社のセガで活躍する、本物のプログラマーが語るプログラミングの話です。
言葉遣いなどに堅苦しさを感じる時があるかもしれませんが、内容そのものは理路整然としていてわかりやすく、現場に近いプログラマーの話をもっと知りたいという人におすすめの一冊となっています。
まとめ:プログラミングの考え方は意外と単純
プログラミングは敷居の高いスキルのように思えますが、その基本的な構造や考え方は、紙とペンで書けてしまう単純なものであったりもします。
論理的思考力を養い、細かなデバッグ作業にも耐性がついてくる頃には、プログラミングはそこまで理解不可能なものではないということに気づけることでしょう。