SEマサヨシのブログ

システムエンジニアとしての備忘録や、勉強の記録などを残していきます。

【基本情報技術者試験】「インタプリタ」「コンパイラ」について

どうも、マサヨシです。

 

今週も基本情報技術者試験の勉強をやっております。

 

普段、平日の通勤中にちょっとずつ過去問を解き、残った問題を土日に消化するというスケジュールで進めている僕ですが、今週の僕は一味違います。

 

 

平日でやりきれなかった問題を土曜日に消化したうえで、日曜は午前試験の全80問を150分で解く、つまり本番と同じルールで過去問に挑みました。すごい。自分に拍手。

 

そして採点結果はというと、、

 

 

やるやん。

 

現時点で合格点を超える能力はあるようなので、この調子で勉強をしていけば安定して合格できる気がします。自信が湧いてきますね。

 

しかし。

 

一方でこんな悲劇も起きていました。

 

 

ここでタイトル回収になるのですが、以前けっこうしっかり勉強したはずの「インタプリタ」と「コンパイラ」について思い出せませんでした。。。不覚。。。

 

プログラミングをするうえで基本的な用語でもあるので、かなりショックを受けました。

 

ということで、本記事では「インタプリタ」「コンパイラ」ってなんぞや?というアウトプットをしていきたいと思います。

 

インタプリタコンパイラについて

 

2つの用語について解説する前に、そもそもプログラムってなんだっけ?という話をします。

 

プログラムとは機械への命令文のことで、「文字を表示してくれ」「計算をしてくれ」など、さまざまな命令を機械に与えることができます。

 

それらを書くことをプログラミングといい、プログラムを書くための言語をプログラミング言語といいます。

 

たとえば、コンソールに文字を出力したい場合の命令文(コード)は、Pythonの場合はprint("出力したい文字列")のように書きます。

 

printというコードの意味が「文字を出力する」という意味であることは、我々人間にとっては直感的にわかりやすいかと思います。

 

しかし、肝心のコンピュータは、その意味を理解できません。

 

なぜならコンピュータが理解できるのは1と0だけだからです。

 

そのため、プログラミング言語(原始プログラム)というものは、機械がわかる言葉(目的プログラム)に翻訳する必要があります。

 

ここで出てくるのが「インタプリタ」と「コンパイラ」というわけです。

インタプリタコンパイラはどちらも翻訳する方式のことを指しますが、それぞれ明確な違いがあります。

 

インタプリタ

 

インタプリタ方式は、インタプリタという言語プロセッサがソースコードに書かれた命令をひとつずつ翻訳しながら実行していきます。

 

メリット

書きながら試すことができる。

 

デメリット

実行速度が遅い。

 

Ruby, Python, JavaScript, PHPなど

 

コンパイラ

 

コンパイラ方式は、コンパイラという言語プロセッサがソースコードの内容をすべて翻訳し、機械語のプログラムを作成します。

(その後、リンカというプログラムが必要な目的プログラムをすべてくっつけることで実行可能ファイルを生成し、ローダというプログラム主記憶に読み込むことで実行されます。)

 

メリット

すべて翻訳された状態から実行できるため、プログラムの実行速度が速い。

 

デメリット

書きながら試すことができない。

 

C言語, Java, Swiftなど

 

まとめ

  • 人間が読みやすいように作られた原始プログラムは、機械がわかる目的プログラムに翻訳する必要がある。
  • インタプリタ方式はプログラムを翻訳しながら実行していく方式のこと。
  • コンパイラ方式はプログラムをすべて翻訳し、目的プログラムを作成する方式。

 

まだまだ覚えることだらけですが、ひとつずつ覚えて身につけていきたいと思います。

 

それでは。

 

 

参考文献

blog.codecamp.jp

tech-camp.in

 

 

【基本情報技術者試験】「可用性」という言葉について

どうも、マサヨシです。

 

基本情報技術者試験の申し込みが始まっておりますが、僕はいまだに勉強中です。

 

 

昨日、今日は休日だったため自宅で勉強できましたが、平日は通勤電車に揺られて立った状態で過去問を解いたりしています。

 

通勤電車という環境は意外と集中できるものです。

 

周りの人の目があったり、目的の駅に着くまでという時間制限があったり。あとは、座ってるときよりも立ってるときの方が考える能力が上がる、みたいな論文もあるようなので、立ちながら勉強するのも捗る要因のひとつかもしれません。

 

さて、基本情報技術者の勉強をしていて、僕なりに感じたことがあるのでまとめてみます。

 

基本情報技術者試験を勉強して感じたこと

 

まず、問題に2パターンあると思っています。

 

1. 完全に暗記ゲー。覚えるしかないもの。

2. 計算したり、論理的に考えることで解けるもの。

 

基本情報技術者試験はこの2パターンで成り立っていると思っています。(まあ、だいたいどの試験もこんな感じだろって思うかもしれませんが)

 

1つめですが、基本情報技術者試験は数学の問題や論理的に考えればわかる問題も多数出題されます。

 

これらが出れば正直ラッキーです。過去問解いてますが、こういう問題はほとんど当たってます。

 

なので、この辺はもうこれ以上勉強しなくてもいいかなといったところです。

 

問題は2つめです。こいつらはもう覚えるしかありません。しかも、EAIEJBERP、みたいなよく似た略語がいっぱい出てきて、それらの意味について問われたりします。正直けっこうきついです。(汗

 

ですが、基本情報技術者試験に出てくる選択肢には特徴があり、それが攻略のヒントに繋がったりします。

 

それは、すべての選択肢がなんらかの用語の説明をしていることが多いということです。

 

たとえば、次のような問題があるとします。

 

『Aに関する記述のうち、適切なものはどれか。』

 

この問題の選択肢がア〜エの4つだとしたら、4つのうちひとつはAに関する説明をしていますが、残りの3つも実は何かしらの用語の説明になっていることが多いのです。

 

そうすると、たとえAが何かわからなかったとしても、A以外の説明を見ると「これは○○についての説明なのでAではない」と消去法で弾くことができます。

 

これで選択肢を1つに絞れたらいいのですが、だいたい2つ3つになります。あとは運ゲーです。がんばりましょう。

 

まあ、出るところを100%覚えられなくてもなんとかなるかもしれないというのは救いですね。

 

「可用性」という言葉

 

試験問題の中には「このキーワードさえわかれば論理的に解ける」みたいな問題も出題されます。

 

「排他的」、「再帰的」といった言葉がそれに該当します。

 

そして今回のタイトルである「可用性」も覚えるべきキーワードのひとつだと思います。

 

可用性(availability)とは、「使いたいときにいつでも使える」ということです。

 

特にシステムの信頼性と稼働率の話で出てきます。(稼働率が高いほど可用性が高い)

 

この可用性というワードがわからず、間違えてしまった問題があるので注意して覚えていきたいところです(僕が)。

 

可用性については、こちらの記事で詳しく書かれておりまして、勉強にさせていただいてます。

 

bcblog.sios.jp

 

www.idcf.jp

 

 

試験に合格するためだけでなく、システムとしてはかなり重要な単語のようですね。基本情報技術者の勉強を通してこういった用語を覚えていけるのは、資格取得以上に意味のあることだと思いますので、ちゃんと長期記憶していきたいなと思います。

 

それでは。

【読書ブログ】「LEARN LIKE A PRO 学び方の学び方」

 

どうも、マサヨシです。

 

ついに、令和3年度下期基本情報技術者試験の申し込みが始まりますね。

 

今年の春からシステムエンジニアになったばかりである僕にとって、基本情報技術者の資格を取ることは目標のひとつでした。

 

4月ごろから勉強を始めてはいたものの、仕事が大変だったり、いろいろあってメンタルが落ちたり(本当にいろいろありました)したこともあって、しばらく勉強していない期間ができてしまいました。

 

ということで僕は今、基本情報技術者試験の勉強をまた一からスタートするようなところにいるわけです。

 

その一方で、システムエンジニアになりたての僕はこんな悩みを抱えていました。

 

「覚えなきゃいけないことが多すぎる...!!」

 

そう。Python、React、C#、、、このたった3ヶ月で、今まで触ったことのないような言語やフレームワークをたくさん勉強させられてきました。

 

プログラミングは楽しいし、実務を通して勉強させてもらえることに何の不満もない(それどころか、こんな初心者に仕事をくれてありがたい)のですが、新しいことを覚えようとするたびに、「もう少し要領が良ければ覚えるのも早いのにな」と思うことがたくさんあります。

 

つまり、今の僕の課題は、

「効率の良い学習法が知りたい!」

というところになります。

 

本の概要

 

「LEARN LIKE A PRO 学び方の学び方」は、勉強への取り組み方を変えることで優等生となった2人の筆者が、科学的な視点から効率の良い学習法を解説するという内容になっています。まさに、今の僕にぴったりな本だと思いました。

 

ということで、この本を書店で見つけた僕はさっそく読書をスタート。

 

味気ないツイートを投稿して1週間、読了したのでこの本から得た知見を3つにまとめたいと思います。

 

1. 学習とは、集中モードと拡散モードの繰り返しである。

2. 長期記憶を形成するためには思い出すことが重要。

3. 自律心を高めるのではなく誘惑を減らせ。

 

こちらについて、ひとつずつ解説していきたいと思います。

 

学習とは、集中モードと拡散モードの繰り返しである。

 

脳には思考と学習について完全に異なった2種類のモードがあるといいます。

ひとつが集中モード、もうひとつが拡散モードです。

 

集中モードとはそのままの意味で、物事に集中して取り組んでいるときに働いているモードです。

 

拡散モードとは、集中モードとは逆で、さまざまな事柄が頭の中に漂っているモードのことを言います。(僕はこれをぼんやりとしている状態だと解釈しています。)

 

学習、特に複雑なことを覚えようとしたり、難しい問題に取り組むにはこの2種類のモードが非常に重要です。

 

問題に取り組むとき、まず集中モードで解いていこうとします。

 

このとき、簡単な問題であれば集中モードだけでなんとかなります。

 

しかし、考えてもなかなか解けないような難しい問題に当たったとき、集中モードだけではどうにもならないことがあります。

 

ここで拡散モードの出番です。

 

考えるのをいったんやめて頭を休ませるとき、脳は拡散モードに切り替わっています。

 

「拡散モードではさまざまな事柄が頭の中で漂っている」と書きましたが、実はこのとき頭の中では無意識に整理が行われ、考えやアイデアどうしが結びつけられています。

 

これにより、休憩を終えてまた学習にもどる(集中モードにもどる)とき、「あ、そういうことか!」と気づくことができるのです。

 

僕はシステムエンジニアとして仕事をしていると、こういった場面がかなりあります。

 

エラーに悩まされ、集中していろいろ試してみてもダメ。とりあえず休憩する。

そのときふと、「あ、そういえばアレ試してないかも」と思いつき、試してみると大当たり。

 

このときおそらく、集中モードで狭くなった視野を、拡散モードでいったん引いたところから物事を整理できてるんだと思います。

 

しかし注意点が一点あります。

 

休憩中はスマホを見てはダメです。

 

スマホを見ているとき、実は人間の脳は十分な休憩ができていないそうです。

なので、いったん休憩と言いながらスマホを見ていると脳は拡散モードに入れず、問題解決が遅れたり疲れたりします。

 

あとで触れますが、学習中、仕事中はスマホをどこかに遠ざけるのが一番かと思います。

 

長期記憶を形成するためには思い出すことが重要

 

みなさんは英単語や歴史上の人物などを覚えようとするとき、どのように覚えるでしょうか?

 

ひたすら参考書を見て覚える、といった方法は一番コスパが悪いそうです。

 

何かを覚えようとするとき、もっとも重要な行動は「思い出そうとすること」です。

本書ではこれを「回収作業」と呼んでいます。

 

人間の脳は一度覚えたことを思い出そうとすることで、より強く記憶に定着すると言います。しかもそれは回収作業を繰り返すほど効果が高いのです。

 

さらに、回収作業をすることにより、ちゃんと覚えているかどうかのフィードバックができることもポイントです。

 

このフィードバックがあることで「間違えたところをより復習しよう」「学習の方法を変えてみよう」といった、次の行動にもつなげることができるため、回収作業は重要なんですね。

 

学習する際は問題集や単語帳など、答えを隠した状態で自力で思い出すような教材がかなり重要だと言えます。

 

ちなみに基本情報技術者試験は公式が過去問をアップしており、無料で見ることができるので、それを解いていくのが一番コスパが良さそうです。

 

自律心を高めるのではなく誘惑を減らせ

 

自律心とは「自分を律する心」。やるべきことが目の前にあるとき、どんな障害や誘惑があっても負けずにこなすことができる精神のことを言います。

 

自律心があれば、目標に向かって努力し、結果を出すことができるはずです。

試験でいえば、疲れていても自分で決めた時間を勉強し、それを試験日まで継続し、試験でみごと合格を取ることができるでしょう。

 

断言しますが、僕は自律心がめちゃくちゃ弱いです。

 

学校でもらった宿題を家で集中して取り組めたことの方が少ないし、仕事中に頭の片隅で「今夜は筋トレをしよう」と思っていても、いざ帰ってくると「今日は疲れてるからやめよう」などといって逃げることがよくあります。

 

僕のような自律心の弱い人間はどうすればいいのか。

 

それは、自律心を高めるのではなく、やるべきことのハードルを下げることが重要です。

 

ハードルを下げる方法は2通りあります。

 

ひとつは、やるべきことを始めやすくすること

 

たとえば、「帰ってきたら整頓された机の上に問題集とノートが開いた状態で置かれており、すぐに勉強を始められる状態にしてある」「床の上にヨガマットを常に敷いており、すぐに筋トレを始められる」というように、スタートのための動作を少なくすることが重要です。

 

「やる気は入れるものではなく、勉強中に湧いてくる」といったことが言われているように、とりあえず始めてしまうことが重要なので、やらなければいけないことはハードルを下げるといいと思います。

 

二つ目は、障害や誘惑を排除すること

 

勉強できない原因が「すぐにゲームを始めてしまうから」だったら、ゲームを隠してしまう。「スマホをこまめに触ってしまうから」だったら、スマホの通知を切ってどこかに遠ざけてしまう。

 

といった具合に、何か障害になっているものがあるならそれをひとつずつ排除していくと、もうやるべきことをやるしかないという状態に持っていくことができるはずですので、こちらも効果的かと思います。

 

先ほども述べたとおり拡散モードに入るためにはスマホが邪魔ですが、僕はついつい触ってしまうため、仕事中や勉強中は通知が聞こえないようにして遠くにしまうようにしています。

 

まとめ

 

本書で紹介されている内容は学習者向けの内容ではありますが、仕事に取り組むときにも使えるノウハウがたくさんつまっていると思います。

 

学校でいい成績をとりたい、仕事で結果を出したい、という人は読んでみてはいかがでしょうか?

 

 

 

ブログ始めます。

はじめまして。マサヨシと申します。

東京でSEをやっているのですが、このたびブログを始めることにしました。

このブログの目的は以下の通りになります。

  • 勉強したことのアウトプット
  • 調べたこと、解決したことの備忘録

ざっくり言うと、エンジニアとしてのスキルアップのために始めました。

まだまだ勉強不足でエンジニアとして未熟な身なので、このブログを通して成長できればと思います。

よろしくお願いします。