はじめに
まず簡単に自己紹介をさせてください。
現在、東京のSES企業に所属するSE歴4年目のGendyと申します。
プログラミングの学習歴は学生の頃からで約9年程になります。
私は挫折せずにプログラミング学習を進めるにはメンターの存在が大事だと思っています。
今回はその理由の1つについて解説しようと思います。
なぜ挫折が多いのか
皆さんはIT用語が難しくて全然イメージが湧かなかったことはありませんか?
私はよくあります(笑)
実は、私は3回も挫折した経験があります。
というのも、単語や知識を覚えるときに、その説明だけを暗記していて、どういう風に動くのかはあまり理解していませんでした。
そもそも全体のイメージが理解できていなかったんですね。
質問するときも、自分でどこが分かっていないかも分からないような状態だったので、
質問しても単語や知識の説明が返ってくるだけでした。
複数のプログラミング言語を学習してきましたが、どれも同じ理由で挫折してきました。
では、どのように挫折を乗り越えてきたのかというと、概念の具体化です。
IT用語は概念が多く、どのようなデータがどのように動いているのかが分かりづらいのです。
私は難しい言葉を身近なものに例えてイメージすることで理解できるようになりました。
では、具体化をどのように実践するのか並列処理を例に説明していきます。
(ついで並列処理も同時に学びましょう笑)
並列処理を調べる
並列処理について調べるときに「マルチスレッド」や「マルチプロセス」という言葉をよく目にします。さらに、マルチスレッドを詳しく調べると「並列処理」や「並行処理」といった、少し紛らわしい用語も出てきて、理解を妨げてしまうこともあるかもしれません。
なので、まずは「並列」と「並行」について簡単に押さえてみましょう。
これを理解するだけでも、後の学習がグッとスムーズになります!
並列と並行の具体化
比較的想像しやすいであろう「料理」を例に、スーパーお料理ロボットくんに登場してもらいましょう。
スーパーお料理ロボットくんには、特殊能力があり両手を自由自在に扱うことができ、それぞれの手が独立した作業を行うことができるのです。
では、スーパーお料理ロボットくんに「主菜と副菜を作り食卓に並べる」というタスクを与えてみましょう。
パターン:A
①右手は主菜のお肉やお野菜をカットして調理します。
② ①と同時に左手で副菜のお野菜をカットして調理します。
それぞれの手が同時に別の作業を行い主菜と副菜を作り、同時に食卓に並べます。
これを「並列処理」といいます。
パターン:B
①両手で主菜のお肉をカットします。
② ①が完了したら両手で副菜のお野菜をカットして調理します。
③ ②が完了したら両手で主菜のお野菜をカットして調理します。
両方の手で同じ作業を行い、主菜と副菜を作り、同時に食卓に並べます。
これを「並行処理」といいます。
並列処理は複数の作業を「実際に同時に」行うことを指し、
並行処理は複数の作業を「同時に見えるように」進めることを指します。
なんとなく理解できたでしょうか?
マルチスレッドとマルチプロセスの具体化
飲食店を運営する会社(レストラン Super Cooking Robot)でのお話で、お客様に料理を提供するタスクがあるとします。
一店舗内(東京店)に限った話で、複数の店員さんが料理を作り、お客様のもとに料理を提供します。
これが「マルチスレッド」の考え方です。
仮に上記のお店が複数店舗あり、2店目(大阪店)が営業しているとします。
その場合、レストラン Super Cooking Robotは2つのお店を通してお客様に料理を提供することになります。
これが「マルチプロセス」の考え方です。
同じお店内では連携はしやすいが、他店舗同士では連携しにくいのと同じように
プロセス間同士での通信はしづらく、プロセス内での通信は容易なのです。
マルチスレッドやマルチプロセスもレストランに例えると分かりやすいですね!
まとめ
このようにITの概念(抽象)を身近なものに例えることを具体化といいます。
具体化をすることで、概念で理解するよりもイメージしやすく、理解しやすいと思います。
具体化の例として…
繰り返し処理:
5階建てのマンション(1フロア10部屋)があるとして、
自分が101、102、103、.....201...301....510の順に扉を開けること
キュー:
券売機で順番待ちしている人のこと
上記のように普段からIT用語を日常的なものに例えて、メンターに確認し理解を深めていきました。
私には具体化して教えてくれるメンターがいたことで、理解が深まり、具体化することが重要だと思うようになりました。
あくまで具体化したものは物事の1面でしかありません、もし具体化したもので単純にそれを例えられるものがあるとしたら、それは同じものですからね(笑)
なので、物事を本質的に理解するには抽象度を段階的上げていくこと が必要です。
つまり …
「自分の理解度に応じて、抽象度を調整しながら教えてくれるメンターを見つけることが重要!」 なのです。
メンターを見つけましょう!