ここ最近、プログラミングが世間の注目を浴びていますね。学校に「プログラミング教育」が導入されるという話や、フレキシブルな働き方をしやすいエンジニアという職業に人気が出てきたなど、その背景は様々でしょうが、「これからプログラミングを始めよう!」と考える方も少なくないと思われます。
それと同時に、「でもプログラミングってやっぱり難しいんじゃ?」と思っている方も多くいる事でしょう。
はい、実際難しいです。
僕は一応現役のエンジニアですが、企業で働き始めたのは2021年5月からなので、この記事執筆時点では実務経験は半年ちょっと過ぎた程度です。採用選考を勝ち抜いて内定をもぎ取った実績はあるものの、もちろんキャリアが10年や20年を超える方々のような豊富な知見はまだ持ち合わせていません。まだまだわからない事は多いですし、仕事ゲットしてからも毎日が勉強です。
今日はそんな
「プログラミング初心者とベテランエンジニアの中間に位置しており」
「初心者よりはプログラミングを理解しているが、初心者の気持ちもまだ忘れていない」
僕だからこそ語れる事をここに綴っていきます。
このプログラミング用語、わかりますか?
・「配列」
・「オブジェクト指向」
・「依存性の注入」
・「API」
・「単体テスト」
etc
これらは全て、プログラミングを勉強して将来エンジニアになるのならほぼ間違いなく耳にするであろう用語です。もちろんプログラミング未経験者であればまだ聞いた事がなくてもおかしな事ではありませんし、上記以外にも何か自分がまだ知らない概念があればその都度新しく勉強して覚えていく事になります。
そして、多くの人が直面するであろう問題が
調べたり人から説明を聞いてみたりはしたけど……
全くワカラン _| ̄|○
というものです。
僕もこれまでに何度も経験しましたし、今でも何か新しい事を覚えようとしている時は未だにこの感覚に襲われる事があります。
でもそれは、いたって普通な事。すぐにわからないのは別にあなたの頭が理解力に乏しいからではありません。これは誰しもが通る道なのです。
でも、ここで疑問が浮かびます。説明を聞いても理解できない新しい概念に遭遇した時、どうすれば理解できるようになるのでしょうか?
解決法はいろいろあるかもしれませんが、初心者にオススメなのは
「今の自分でもわかるような噛み砕いた説明をしてくれる教材や記事や人を探す」
という方法です。
では「噛み砕いて説明する」とはどういう事なのか?次の項目で、同じ概念でも説明の仕方によって初学者への伝わり方が大きく変わる事をお見せしましょう。
「フロントエンド」と「バックエンド」をどう説明するか?
さて、次のようなトピックについて少し考えてみましょう。
「Web開発における『フロントエンド』と『バックエンド』という用語を解説した文章がAとBの2種類出てきます。あなたが初学者の立場で見た場合、どちらの説明の方がわかりやすいと思いますか?」
説明A:
フロントエンドとバックエンドは、プロセスの最初と最後の工程を指す一般的用語である。フロントエンドは各種入力をユーザーから収集し、バックエンドが使える仕様に合うようにそれを加工する。フロントエンドとバックエンドの結合部はインタフェースと呼ばれる。
ソフトウェア設計におけるフロントエンドは、ユーザーと直接やりとりするソフトウェアシステムの部分を指し、バックエンドはフロントエンドへの出力を生成する部分を指す。ソフトウェアシステムをフロントエンドとバックエンドに分けることは一種の抽象化であり、システムを異なる部分に分離して扱いやすくする効果がある。フロントエンドの処理をおこなうハードウェアやソフトウェアをフロントエンドプロセッサ(FEP)と言うことがある。
多くのプログラムは概念的にフロントエンドとバックエンドに分割できるが、多くの場合バックエンドはユーザーからは見えない。しかし、既存のプログラムのフロントエンドとすべく開発されるプログラムもあり、例えばコマンド行インタフェースしかないプログラムにGUIを提供する。このような形態のフロントエンドはUNIXのGUIによくある。また、動画や音楽関連のソフトウェアでは、フロントエンドとCODEC(エンコーダーとデコーダー)の組合せで利用されることが多い。たとえば、CDリッピングソフトがMP3エンコーダーのフロントエンドとなったり、動画再生ソフトが動画デコーダーのフロントエンドとなる関係が一般化している分野と言える。
(引用元:https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89)
説明B:
目の前にレストランがあると想像してみてください。そこにはウエイターやウエイトレス、それからキッチンにはシェフがいますね。Webアプリをレストランに例えるとすれば、ウエイターやウエイトレスはフロントエンドで、キッチンにいるシェフはバックエンドに相当します。
Webアプリにおいて、フロントエンドはユーザーと直接やりとりをして、そのリクエストをバックエンドに送って処理してもらい、そのレスポンスをユーザーに返すのですが、これはレストランでのウエイターやウエイトレスの役割と似ています。お客さんとやりとりをして注文を取り、その注文内容をキッチンのシェフに知らせ、出来上がった料理をシェフから受け取りお客さんに差し出します。シェフはキッチンから出ず、お客さんと直接やりとりをしておらず、間接的に聞いた注文内容を基に料理を作るのです。
なぜこんなやり方をするのかというと、いくつか理由があります。1つは分業体制を取る事による効率化。1人で全部やるより、「注文を取る係」と「実際に料理する係」を分けた方がそれぞれの仕事に集中できます。もう1つは、「シェフの仕事は裏方として隠したい」という事。基本的に、何をどうやって料理しているのかってお客さんには見せませんよね。もしかしたら、そのお店だけの秘密のレシピがあり、その情報を外に漏らしたくないという事情もあるのかもしれません。
Web系プログラミングでも、フロントエンドとバックエンドに分けるという手法を取った方が効率がいいし、裏でどんな処理を入れているのかの「秘密のレシピ」の部分は公開したくないでしょう。レストランという物理的な建物とWebアプリというバーチャル空間という違いはあれど、根本的な考え方は実はけっこう似たようなものなんですね。
(参考資料:https://www.udemy.com/course/the-complete-web-development-bootcamp/)
いかがだったでしょうか?AとB、どちらの説明の方がわかりやすいですか?
現役エンジニアの方であれば、Aの説明でも十分にわかるでしょう。でもそれは「既に知っている内容だからわかるだけ」であり、何も知らない状態でこの文章をみたらおそらくチンプンカンプンであり、初心者の目線で見れば圧倒的にBの説明の方がわかりやすいはずです。
説明が伝わるかどうかは「相手の頭に”絵”が浮かぶかどうか」にかかっている
先ほどの「フロントエンド」と「バックエンド」の説明で、なぜAとBの説明では初学者にとってわかりやすさに大きな差が出るのかというと、Bの説明の方が「相手の既に知っている情報の上に積み上げる形で説明がなされている」からです。
この「新しい情報は自分が既に知っている旧情報に関連付ける事で学習効率が上がる」という考え方は、スウェーデン記憶力選手権で3回の優勝を誇り、国際大会でもグランドマスターの称号を得たマティアス・リッビング氏も下記リンクの動画でその必要性を説いています。
(15:33-16:14)
何か新しい事を学ぶには、自分が既に知っているものとの結びつけが重要です。自分にとって何か身近なもの。それが常に鍵となるのです。”テフロン・ブレイン・シンドローム”って聞いた事ありますか?聞いた話の内容が全部滑り落ちて全く頭に残らない、アレです。これは聞いている内容の中に自分の既に持っている知識と関連付けられるものがないからなんです。だから点と点がつながらない。逆に、優れた教育者や指導者は相手にとって身近なものに紐づけて話を伝えるのが上手いという事ですね。
ちなみに、マティアス・リッビング氏の普段の記憶力選手権用のトレーニングは「ランダムな数字の羅列をどこまで覚えられるか」などの暗記系のものが多いですが、この動画では彼は「一般的な学習全般」にフォーカスを当てて話をしてくれているので、プログラミングに限らずどんなものの学習にも応用できます。
上記リンクの動画では、「優れた教育者は相手の既知の情報に新しい情報を結びつけさせる事ができる」というコメントがありましたが、「伝えるのが上手な人」の例をもう1つ紹介します。それは漫才師です。
面白い漫才師というのは、小道具も何もない中で観客を笑わせますよね。で、笑いが起こった時に観客の頭の中はどうなっているのかというと、漫才師が表現している”絵”が頭に浮かんでいるはずなんです。その浮かんだ絵が面白いからウケる。逆に、話の内容を観客が自分の既に知っている情報のみを基に頭でイメージできるように話さなければ、そもそも面白いかどうかを判定してもらう段階にすらたどり着けません。内輪でしか通じない「寒いネタ」になってしまいますよね。
初心者にもわかりやすいサイトの紹介:『わわわIT用語辞典』
画像元URL:https://wa3.i-3-i.info/word19551.html
さて、ここでIT関連の調べ物をしている人に役に立つであろうサイトを紹介します。
『「わかりそう」で「わからない」でも「わかった」気になれるIT用語辞典』
です。
『わわわIT用語辞典』
という略称でも知られています。
このサイトは僕自身も愛用していまして、以前エンジニア就活用に自作ウェブアプリに取り組んでいてわからない所をいろいろ調べていた時に見つけたサイトです。当時の僕はメンターのエンジニアにもお世話になっていたのですが、このメンターさんからも「これ、すごくわかりやすくていいサイトですよね!」とコメントをいただけました。
このサイトも先程の「フロントエンドとバックエンドの説明」の時のような噛み砕いた表現を使ってくれます。
例えば次のリンクは「マトリクス認証」について説明しているのですが、ここでもまずは「そもそも認証とは何か」から入っており、その説明にも
画像元URL:https://wa3.i-3-i.info/word19551.html
と、難しい言葉を使っていません。
特にプログラミング初心者であれば、IT関連で調べものをする際はこのような「やさしい説明」をしてくれるサイトや記事を意識して選ぶようにするとよいと思います。
まとめ
何事も初心者の時はわからない事がたくさんあり、調べたり質問したりしながら徐々に覚えていくものですが、「万人に同じように有効な説明」というのはありません。
全く同じ説明をしても、ある人には「既に知っている情報しかなくて退屈」かもしれませんし、ある人には「自分にピッタリな説明」かもしれませんし、ある人には「説明文の中に更にわからない表現がいくつも散りばめられていて、結局何もわからない」となるかもしれません。
なので、何かわからない事を調べる時は、まずは「目の前のこの説明は今の自分に適した説明なのか」を嗅ぎ分ける必要があり、場合によっては別の説明をしてくれる人やサイトを探した方がいい事もあります。
逆に、自分の専門分野を初心者相手に説明する時は、
・相手は現時点で既に何を知っていて何をまだ知らないのか
・どう説明したら相手の頭に”絵”が浮かぶか
などを意識しながら話すようにするとよいでしょう。