テクノシップブログ

田舎育ちで文系でもITの世界へ

「コンピュータはなぜ動くのか」内容紹介&感想【第19号】

 こんにちは!

 テクノシップブログです!!

 

 今回は、プログラミング関連で読んだ書籍について、内容をアウトプットする

記事にしたいと思います!

 まだ何十冊も読めているわけではなく、読んだ知識を実務で活かす段階には

行ってはいませんが、自分なりに考えたことなどをしっかりと記録に残しておき、

他の方にも参考になればと思っています。

 

 

1. 今回の一冊

 今回の一冊は、矢沢久雄氏著/日経ソフトウェア監修で出版された

 

      「コンピュータはなぜ動くのか」

 

 という本です!!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

2. 本の概要

 この本は、2003年に初出版された書籍であり、「本質がわかるなぜシリーズ」

というシリーズのうちの一つとして出版され、「コンピュータというものを本質的

に理解し、様々な場面でしっかりと活用できる知識を身につけようとする本」

なっています。

 

 著者の矢沢久雄氏は、企業セミナーの講師をしている中で、驚くほど若者が

コンピュータに関する興味が少なく、知識も少ないということを目の当たりにした

そうです。(まだ働き出してはいませんが、私もその内の一人ですが、、、、、)

 

 その原因は、「時代と共に多くのシステムが複雑化、ブラックボックス

化していき、若手はただマニュアルを見ながら表面的にコンピュータを触って目的

達成をしているだけなので、『コンピュータがわからない』」ことだとしています。

※図では極端な分け方をしていますが、ご容赦ください。

 

 私も受験勉強や資格の勉強で、「わからない」という理由で挫折してしまった

経験があるので、この著者の言いたいことはよく理解できました。

 

 そんな「 わからない」を「わかる」に変えるために、著者は大切な要素が

3つあるとしています。 

 

   ①絶対的な基礎知識

 ②習得するべき知識の範囲

 ③ゴール

 

 どんな分野にも土台となる「絶対的な基礎」があり、それを理解した上で、

範囲を定めて勉強」していき、最終的なゴールを定める。

 

 本書は、この3つの点を網羅しながら段階的にコンピュータ技術というものを

理解できるようになっています。

 

 

3. 絶対的な基礎

 この本ではコンピュータ技術を理解するための絶対的な基礎は3つあると

述べています。

 その3つの絶対的な基礎が以下の通りです。

 

   ①コンピュータとは、ハードウェア的に見ると、

       「入力・演算・出力」を行う装置である

 

 ②コンピュータはソフトウェア的に見ると、

       「命令とデータの集合体」である

 

 ③コンピュータにはコンピュータなりの都合

         というものがある

 

基礎①ハードウェア的には「入力・演算・出力の装置」

 まず、①ですが、コンピュータはハードウェアとして見ると、命令やデータ

を入力し、それをもとに演算を行い、結果を出力するというシンプルな

3工程のみを行う装置です。

基礎②ソフトウェア的には「命令とデータの集合体」

 そして、②ですが、コンピュータをソフトウェア的に見ると、

命令とデータの集合体」である「プログラム」が数多くあると解釈する

ことができます。

 

 

 ※上の図は少々細かいですが、コンピュータは命令やデータを取り出して、

  演算し、結果を出力しています。

 

 

基礎③コンピュータなりの都合がある

 そして、③ですが、コンピュータには人間の都合が通用しないのです。

コンピュータは全ての命令やデータを「0」と「1」の組み合わせのみで表現する

からです。

 

 と、ここまでは私もこれまでのコンピュータサイエンスの勉強を通じて学習して

きていたところなので、「そうだよね」というような感覚だったのですが、

 その後なるほど!と思わされたのが、

 

 「コンピュータは人間の感覚に近づけるために

  進化し続けている」

 

 という点です。

 人間と同じ感覚でコンピュータを扱えるようにするために、日進月歩の

勢いで進化し続けているということなのですが、そうなっていくと、

 

 「もはやこの本で学ぶ知識も要らなくなっていく

  のではないか」

 

 というような極端な思いも抱いてしまいます。

 限りなく人間の感覚に近いユーザーインターフェースが増えていたり、

プログラミングの手法に「オブジェクト指向」が導入され、部品を一つ一つ

組み立てるようにして、人間が物を組み立てるのと同じ感覚でできるようになって

いたりと、進化は絶えません。

 

 しかし、矢沢氏は、必要な知識であると言っています。

本質的な知識は幅広く応用が効き、どんなに進化した技術であっても通用する知識

になると考えています。

 

 ここで得た、本質的な知識を使えば、どんなに難解な技術でも3つの基礎に照らし

合わせることで理解が容易になるということですから、非常に重要な知識なのです。

 

 だからこそ、ここでの絶対的な基礎は本当に大切な要素となるのですね。

 

 

4. 知識の範囲

 知識の範囲としては、主に3つのキーワードを元に解説してくれていると

感じました。

 それは、

 

   アルゴリズム

 ②データ構造とデータベース

 ③ネットワーク

 

 に関する知識です。

 

 ①のアルゴリズムについては、「アルゴリズムの条件」、「アルゴリズムと付き

合っていくためのポイント」など、「なんか難しそうだな」と思ってしまうアルゴ

リズムに関して分かりやすく説明してくれています。

 

 私が「なるほど!」と思わされたのが、「アルゴリズムの条件」として、

 

          「明確、有限回、機械的

 

という3要素があるということです。

 人間の「勘」に頼らず、「コンピュータが機械的に処理できるプログラム」、

それこそが「アルゴリズム」であるということを知り、納得しました。

 

 本書では「ユークリッドの互除法」や「バイナリーサーチ」など広く知られている

アルゴリズムも紹介してくれています。

 

++++++++++ユークリッドの互除法++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

+++++++++++バイナリーサーチ+++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 ②のデータ構造とデータベースに関しては、「紙上実験」で理解を助ける

記述のおかげで理解は進みましたが、全体的には難しい印象を受けました。

 ただ、「プログラムの処理の中でデータがどのように動いているのか」や、

「リレーショナルデータベースの意義について」などデータベースと仲良くなる為

の内容が豊富に盛り込まれていました。この範囲については再度読み直して理解を

深めます。

 

 そして、③のネットワークですが、これは非常に面白かったです!!

 なぜなら、普段自分がスマホやパソコンを使って行っていることがとてもよく

分かったからです。

 

 「LAN」、「WAN」、「ルーター」、「ケーブル」、「IPアドレス

など、名前だけは知ってはいたけどどのような役割を果たすものなのかについては

全く理解していなかったので、この場で理解できたことは非常に有意義だったと

考えています。

 

 特に、「TCP/IPプロトコル」について理解し直せたことが嬉しかったです。

TCP/IPプロトコル」はネットワークに関するルールの中で最も広く使われている

ルールですが、このルールに基づいた「ネットワーク階層」というものを全く理解

できていなかったのです。

 

 それについて、「コンピュータから送り出したデータや受信したデータがネット

ワーク階層とどのように関わるのか」という点を理解することができたことが

非常に大きかったと捉えています。

 

 

 深掘りすればまだ理解すべき点が沢山ありますが、大まかに構造を理解できた

だけでも有意義だったと考えています!

 

 

5. ゴール

 この本では、最終的なゴールとして「現場を理解する」としていると感じました。

話題としては「SE」を挙げ、仕事内容や求められる力などが述べられていました。

 

 しかし、最終的に著者が言いたかったことは、

 

 「SEでもプログラマでも、自分の技術が

  必ず社会の役に立っているという感覚を

  持ち続けていくことが大切だ」

 

ということです。

 道半ばで業界での仕事を諦めてしまう人というのは、得手して仕事について

いけないことが理由ではなく、「貢献している感覚が掴めなくなってしまい、

仕事がつまらなくなること」が理由だそうです。

 

 社会人として、社会の役に立っているという感覚を掴めることは大きな活力源に

なるはず。

 だからこそ、立場に関係なく、どんな小さな力でも社会の役に立っているんだ

という感覚を持ち続けるべきだと言っているのです。

 

 私もまだエンジニアとしてのキャリアはスタートしていませんが、おそらく

働き出しの段階は、仕事内容での苦しみや人間関係での苦しみなど、多くの苦しみ

と遭遇すると予想できます。

 

 しかしそこで「我慢して頑張るぞ」と気張るのではなく、

 

 「どんなにちっぽけでも必ず社会の役に立っている」という気持ちを強く持つ

ことで困難を乗り越えていきたいと考えています!!

 

 

6. 感想

 この本を読んでみて、「本質的な理解」というものがどれだけ大切なのかという

ことを改めて実感することができました。

 私はこれまでの人生で、「わからない→諦める」という経験を何度もしました。

 しかし、それは本当に勿体無いことでもあると考えていました。

 だからこそ、何かを新しく勉強するときには、「本質的に理解できる内容を提供

してくれているのか」ということを強く意識するように心がけるようになった

のですが、そのような中でこの本と出会い、単純に

何度も読み返して理解したい!」と思えました。

時間を忘れて没頭して読んでしまった日も数多くあったものです。

 

 この本を読んで、「急速なスピードで進化し続けるコンピュータ技術も全ては

本質的な部分の理解で対応できる」ということを教えてもらい、これから業界に

飛び込む自分としては、とても勇気づけられました

 

 実際に業務に携わることになれば、「わからない」という場面に出くわすと思い

ますが、そんな時こそ冷静に「本質的な部分と照らし合わせた理解」というものを

試していきたいと思います!

 

 ぜひ、ご興味あればご一読ください!!

 

 

7. テクノシップ第19号プチ編集後記

〜ついに引っ越しが完了しました!!

 いきなり一人になるので正直なところ寂しいですが、東京だからこその良い

 ところを発見しながら前向きに生活していこうと思います!

 まずは家の中を整理整頓するところからコツコツ始めてます!〜

 

 

CS(コンピューターサイエンス)奮闘記③『Recursionを受けてみて...』【第18号】

こんにちは!

テクノシップブログです!

 

先週からCS(コンピューターサイエンス)基礎を学び始めており、

その経過を「奮闘記」としてお送りしています。

 

ちょうど1週間経過したので、前回立てた目標の確認と、その成果をアウトプット

したいと思います!!

 

 

1.前回の目標の確認

 前回の目標は以下の通りでした。↓↓

gyazo.com

 結果はどうだったのか、、、

 

 目標達成です!!

 

 前回の記事でご紹介しましたが、学習教材を変更し、

「Recursion」というオンライン学習サービスを利用し始めました!!

 

 以下、概要です↓↓↓

---------------------------------------------------------------------------------------

Recursion(CSを基礎から学べるオンライン学習サービス)

 こちらは「無料プラン」と「有料プラン」の2種類があります。

 カリキュラムに沿って基礎から学習を進めていき、コーディング問題やクイズに

答えながら知識を定着させていくスタイルをとっています。Facebookの現役エンジ

ニアの方がカリキュラムを作成しており、現場で通ずる良質な知識が習得できそう

ですね。

 

 最終的にはチームで実践的なアプリケーションを開発する経験を詰めたり、

途中で分からない点は質問し放題だったりと、非常に有意義な学習体験が

詰めそうなサービスですね!!

 

 ただ、使えるサービスを増やすには「有料プラン」にする必要があり、

月額7,000円くらいするので、少し手が出しづらい印象もあるかもしれません。

 

 Recursion↓↓↓

recursionist.io

---------------------------------------------------------------------------------------

 最初は「使えるサービスを増やすには月額7,000円の有料プランに切り替える

必要がある」という点に尻込みしましたが、無料プランで学べる内容もそれなりに

豊富にあると改めて感じたので、アウトプットの機会も豊富にあるという点も

加味して、こちらを使って学習を始める方向にシフトすることにした

という経緯でした。

 

 1週間で無料で学習ができる「CS初級編」を一通り学習したのですが、

正直学習し始めたばかりの初心者としては、、、

 

      「無料プランでもこんなに内容の濃い

       学習ができるのか!!!」

 

 と思えるくらい、驚きの学習内容でした!!😄

 

 今回の記事では、1週間通して学習した「Recursion」の感想をお伝えできれば

と思います!!

 

 

2.Recursionの学習内容(無料プラン編)

 無料プランでの学習内容は以下の4つです。

 

 ●データとデータ型について

  まず、「データ」と「データ型」について学習します。

  なぜ、ここから始めるのか。

  私が学習して感じたのは、

        

     「コンピュータと人間の都合が異なる」

 

  という本質的なところをまず理解するためです。

  例えば、人間は「1」というものを見せられたとき、それが「数字の1」として

 利用するためのものか、それとも「単なる文字としての1」として利用するための

 ものなのかを、文脈やその他の状況を読み取って瞬時に判断できます。

 

  しかし、コンピュータはそうは簡単にいきません。なぜなら、

 

       コンピューターはすべてのデータを

       数字の『0』と『1』の

     2通りでしか表現できないから

  

  だからこそ、人間の都合をコンピューターの都合に合わせて扱う必要が

 あるのです。

  そのために「データ型」というものが必要になってくるのですが、

 続きはRecursionでどうぞ!!

 

 「演算」について

  前項で本質的なところをある程度理解できたら、今度はコンピュータの

 最も大きな仕事である「演算」を学習します。  

  ここは、私的には「プログラミング学習の復習」のような感覚で学習できた

 のですが、

 

          演算子」と呼ばれる

   演算に必要な記号一つ一つを丁寧に解説

 

 してくれているので、とても分かりやすくてためになる内容でした!!

  学習した演算子の一部を纏めてみたので、参考までに。

  ※ただし、演算子の役割は言語ごとに異なる場合があるので注意が必要です!

  詳しくはRecursionで!!

 

 「変数」について

  続いては、複雑なプログラムを記述していけばいくほど役に立つ「変数」

 の学習です!!

  私としては、「変数」というものをただの便利な道具としてしか感じていな

 かったのですが、学習してみて、仕組みから言語ごとでの違った使用法まで

 詳しく学習することができ、「変数」というものの重要性をしっかりと理解

 することができました!!  

 

 ●「関数」について

  無料プランの最後は、データを入力して演算子、結果を返すための処理を

 纏めた、「関数」の学習です。

  上述の通り、関数は今まで学習した「データとデータ型」、「演算子」、

 「変数」の知識をすべて使用していく内容なので、これまでの復習も含めて

 有意義な内容となっています!!

 

  ここでは、「引数」と「戻り値」がキーワードになりますので、

 学習をする方は注意して学習してください!!

 

3.Recursion(無料プラン)の全体的な感想

 無料プランの学習を通じて、特に素晴らしいと思ったのが、

 

     「充実したコーディング問題」

 

 が整っていることです!!

 コーディング問題では、その直前で学習した知識を使って問題を解くという

仕組みになっていることはもちろん、何より素晴らしいと感じたのが、

 

    「複数言語でコーディング問題ができる」

 

 という点です!!

 動的言語の「PHP」や「Python」、静的言語の「C言語」や「Java」など、

多くの言語でアウトプットできるので、言語ごとのデータの扱い方に関する知識も

深めることができ、より密度の濃い練習体験を積むことができたと感じています!

 

 それぞれの言語に詳しくなるというよりも、「複数言語を通してコンピューター

そのもののことをより詳しく理解できるようになる」という感覚を覚えました!

 

 無料プランはここまでですが、有料プランに入ると、

 

 オブジェクト指向型プログラミングの学習」

 「具体的な言語やフレームワークの学習」

 「チーム開発の経験」

 「課題アプリケーションの開発」

 

 など、より実践的な内容が盛り込まれてくるようです!!

 私も無料プランで学習したことを復習した後は、ぜひ有料プランを学習して

いきたいと考えています!!

 

 

 Recursion↓↓↓

recursionist.io

 

 ちなみに、今回私が学習した内容をより詳しくアウトプットしたものを

「Qiita」に投稿していますので、ぜひそちらもご一読ください!!

 

 データとデータ型

qiita.com

 

 演算子

qiita.com

 

 変数

qiita.com

 

 関数

qiita.com

 

 

4.テクノシップ第18号プチ編集後記

〜おうちタイムが増えているせいか、趣味の「俳句」の進みが芳しくありません

 早く外出して色々な刺激を受けていきたいものです〜

 

CS(コンピューターサイエンス)奮闘記②【第17号】

こんにちは!

テクノシップブログです!

 

先週からCS(コンピューターサイエンス)基礎を学び始めており、

その経過を「奮闘記」としてお送りしています。

 

ちょうど1週間経過したので、前回立てた目標の確認と、その成果をアウトプット

したいと思います!!

 

 

1.前回の目標の確認

 前回の目標は以下の通りでした。↓↓

gyazo.com

 

 結果はどうだったのか、、、

 

 目標未達成です、、、、

 

 「スタートしていきなり未達成かい!!」という感じですが💦💦

 

 実は、学習教材を変更したのです。

 

 スタート時には、「CS50」というハーバード大学で講義として提供されている

動画教材を使用して学習を進めていく予定でいましたが、いざ受講してみると、

 

 「説明スピードが早すぎてついていけない💦💦💦💦💦」

 

 日本語字幕がついているから大丈夫だろうと思っていたのですが、思った以上に

そもそもの話すスピードが早く、理解が追いつきませんでした。

 途中、実際に実験をしながら説明を行うなど、理解を助ける要素はふんだんに

盛り込まれてはいるのですが、私はスピードについていけませんでした。

 

 しかし、「動画」という力はかなり大きいと思いますので、後々この教材に

シフトしていこうとは考えています!!

 

 もう一度、「CS50」の概要です↓↓↓

 

CS50(全て無料でCS基礎が学べるオンライン学習サービス)

 こちらは、ハーバード大学で講義として提供されているものを誰でもオンライン

で学習できるようにしたサービスです。しかも「無料」で提供されているので

手を出しやすいですね!!

 

 講義ノートを見ながら該当の講義動画をYouTubeで視聴することができ、

万全の学習環境が整っていると言えそうです。やはり動画の力は強いですね。

 

 講師の話すスピードが速く、日本語字幕対応をさせても文字を目で追うので

精一杯になりそうですが、そこは慣れていけば楽になると思います!!

 

 CS50↓↓↓

cs50.jp

 

 ということで、私は学習教材を変更したのですが、変更後は

「Recursion」を使用していくことにしました!!!

 

 以下、概要です↓↓↓

 

Recursion(CSを基礎から学べるオンライン学習サービス)

 こちらは「無料プラン」と「有料プラン」の2種類があります。

 カリキュラムに沿って基礎から学習を進めていき、コーディング問題やクイズに

答えながら知識を定着させていくスタイルをとっています。Facebookの現役エンジ

ニアの方がカリキュラムを作成しており、現場で通ずる良質な知識が習得できそう

ですね。

 

 最終的にはチームで実践的なアプリケーションを開発する経験を詰めたり、

途中で分からない点は質問し放題だったりと、非常に有意義な学習体験が

詰めそうなサービスですね!!

 

 ただ、使えるサービスを増やすには「有料プラン」にする必要があり、

月額7,000円くらいするので、少し手が出しづらい印象が私にはあります。

 

 Recursion↓↓↓

recursionist.io

 

 最初は「使えるサービスを増やすには月額7,000円の有料プランに切り替える

必要がある」という点に尻込みしましたが、無料プランで学べる内容もそれなりに

豊富にあると改めて感じたので、アウトプットの機会も豊富にあるという点も

加味して、こちらを使って学習を始める方向にシフトすることにしました。

 

 

2.今週のアウトプット(Recursionの凄さ)

 1週間で学んだ内容は、

 「データとデータ型」について

 演算子」について

 「変数」について

 の3項目です。

 

 それぞれ本当に内容の濃いものでした。

 

 私はCS基礎を学ぶ前に、RubyPHPなどの個別のプログラミング言語を学んで

いたのですが、このCS基礎の学習を通じて、

 「そもそもプログラミングで記述したコードはどのように処理されているか」

という点を詳細に理解することができました。

 

 特に、このRecursionでは、「コーディング問題」において、

複数の言語でコーディングすることができます。それぞれに特有の表記ルールなど

が定められていますが、それらはあくまで、プログラミング言語ごとにデータの

扱い方法が異なるだけであり、「データにはこういう種類があり、こういう扱われ

をする」という基礎的な部分を押さえておけば、言語は違っても容易に理解して

いけるということを教えてくれます。

 

 今後もさまざまなアウトプットを通じて、基礎を理解していこうと思います!!

 

 1週間で学習した内容は「Qiita」でアウトプットしていますので、

以下から参照ください!!

 

 データとデータ型

qiita.com

 

 演算子

qiita.com

 

 変数

qiita.com

 

3.次回の目標

 次回の目標は、「初級」完了 とします!!

 

 次回もお楽しみに!!

 

 

4.テクノシップ第17号プチ編集後記

〜この1週間で一人暮らし用の家具や家電の準備が整いました。

 あとは車を手配して引っ越しの準備を進めるのみです。

 やはりヒト世帯持つというのは大変なものですね💦〜

 

CS(コンピューターサイエンス)奮闘記①【第16号】

こんにちは!

テクノシップブログです!

 

先週で転職活動が終了し、入社まであと1ヶ月となっている私ですが、

入社までの期間、どのようなことを学習しようかと色々考えました🤔

 

「新しいプログラミング言語を学習するか、、、」

「何か資格の勉強をしようか、、、」

「とりあえず何もせずこれまでの復習をしようか、、、」

 

そして、

「CS(コンピューターサイエンス)の勉強をしよう」

 

ということになり、1ヶ月間を使ってCSの基礎を満遍なく勉強していこうと

思っています!!

 

「コンピューターの中身はどうなっているのか」

「ネットワークの仕組みとは」

「ハードウェア、ソフトウェアの違いは」

 

などなど、基礎を身につけていこうと思っています!!

 

そこで、またお決まりの「奮闘記」をお送りしていこうと思いますので、

どうぞご一読ください!!

 

 

1.学習教材

 学習を始めるにあたり、学習教材はどうしようかと考えましたが、

「とにかく分かりやすく」を基準に選ぶことにしました。

 

 候補として挙がったのは以下のようなサイトや書籍です。

 

①Recursion(CSを基礎から学べるオンライン学習サービス)

 こちらは「無料プラン」と「有料プラン」の2種類があります。

 カリキュラムに沿って基礎から学習を進めていき、コーディング問題やクイズに

答えながら知識を定着させていくスタイルをとっています。Facebookの現役エンジ

ニアの方がカリキュラムを作成しており、現場で通ずる良質な知識が習得できそう

ですね。

 

 最終的にはチームで実践的なアプリケーションを開発する経験を詰めたり、

途中で分からない点は質問し放題だったりと、非常に有意義な学習体験が

詰めそうなサービスですね!!

 

 ただ、使えるサービスを増やすには「有料プラン」にする必要があり、

月額7,000円くらいするので、少し手が出しづらい印象が私にはあります。

 

 Recursion↓↓↓

recursionist.io

 

②CS50(全て無料でCS基礎が学べるオンライン学習サービス)

 こちらは、ハーバード大学で講義として提供されているものを誰でもオンライン

で学習できるようにしたサービスです。しかも「無料」で提供されているので

手を出しやすいですね!!

 

 講義ノートを見ながら該当の講義動画をYouTubeで視聴することができ、

万全の学習環境が整っていると言えそうです。やはり動画の力は強いですね。

 

 講師の話すスピードが速く、日本語字幕対応をさせても文字を目で追うので

精一杯になりそうですが、そこは慣れていけば楽になると思います!!

 

 CS50↓↓↓

cs50.jp

 

③書籍類

 「CS 入門 書籍 おすすめ」という具合でインターネット検索を掛け、

いくつか書籍をピックアップしてみました。

 

教養としてのコンピューターサイエンス講義

  -今こそ知っておくべき「デジタル世界」の基礎知識-

gyazo.com

 

入門 コンピュータ科学 ITを支える技術と理論の基礎知識

gyazo.com

 

イラスト図解式 この一冊で全部わかるWeb技術の基本

gyazo.com

 

決定版 コンピュータサイエンス図鑑

gyazo.com

 

みんなのコンピュータサイエンス

gyazo.com

 

 以上、5冊基礎から分かりやすく学べそうな書籍を選んでみました。

 

 さて、ここまでピックアップした中で、私は

「CS50」を使ってひとまず学んでみることにしました。

 

 動画形式というのが理解を助けてくれると思いますし、スピード感を持って

学びたいと思ったので、これに決めました。

 

2.次回の目標

 次回は「CS50のweek3まで完了」を目標にしたいと思います。

 

 次回もお楽しみに!!

 

3.テクノシップ第16号プチ編集後記

〜この1週間でこれから都内で暮らしていくための物件探しが完了しました!

 これから家具などを調達して引っ越し予定を組まないと、、、〜

 



Tech Campのすすめ【第15号】

こんにちは!

テクノシップブログです!!

 

私はTechCamp109期生としてプログラミングの学習をしておりますが、

本日転職活動までの工程を全て終了し、スクールを卒業いたしました🎉🎉

 

半年という期間の中で嬉しい時、悲しい時、苦しい時、様々な瞬間を経験

しました。

 

この経験を無駄にしないためにも、この記事を持って振り返ってみたいと

思います。

また、少しでも興味のある方にさらに関心を高めていただけるように、受講しての

感想をお伝えします!!

 

TechCamp↓↓↓

tech-camp.in

 

1. TechCampを受講するに至った経緯

 私はTechCampの存在を元エンジニアの母親から聞いて知りました。

 前職を2社連続で入社してすぐ退職しなければならなくなってしまい、

精神的にも追い詰められ、先行きを見失いかけていた私に対し、母親が

「次の一歩のきっかけになれば」と勧めてくれたのです。

 

 母親がエンジニアとして働いていた時の話は聞いていましたし、

受講してみるだけでも得るものは大きい分野だろうと思いました。

 

 そして、エンジニアを仕事としてやっていきたいという思いからではなく、

「何かのきっかけを掴めればよい」という軽い気持ちで受講を始めたのです。🤔

f:id:technoship0329:20220313121954j:plain

 

 

2. 受講前半戦

2-1. 受講前半戦の内容と成果

 一言でまとめると、「基礎の習得期間」でしたが、

「振り返り」の部分にもあるように、

「どのように処理が行われ、結果的に何ができるのか」という視点を大切に学習

していくと、理解しやすくなりますね!!

 

2-2. 前半戦の感想

 前半戦は「基礎の習得期間」でしたので、インプットで得た知識をアウトプット

することで、記憶の定着につなげていくことが重要でした。

 そこで本当に役立ったのが、「チャット形式でのアウトプット訓練」

「ドリル」です。

 受講をある程度まで進めたら、他の受講生も一緒にいるチャットグループで

他の受講生にも伝わる文章を心がけて学んだことをアウトプットする、その後

で学習の成果を図るために小さな問題ドリルを解く。

 この作業を繰り返してアウトプットの場数を増やしていったことで、記憶の

定着が進んだと考えています!!

 

 

3. 受講中盤戦

3-1. 受講中盤戦の内容と成果

f:id:technoship0329:20220313125128p:plain

 一言でまとめると、「実践的な開発体験」でした。

実践的なアプリケーションの開発ということは、それを使うユーザーのことを

考慮した開発ということになります。

 その分ただ作るだけではなく、「企画」、「要件定義」や、

「テストコード実装」など、あらゆる手順を踏むことが求められることを知り、

エンジニアとして一つのサービスを作り上げることの大変さを実感しました。

 

 そして、その分だけ興味関心も増していった期間になりました!!

 
3-2. 中盤戦の感想

 実際に手を動かしながら開発者の視点に立って実践的な作業を体験できたことは

非常に有意義だったと考えています!!

 特に「エラーにぶつかり、その解決手段として技術質問をする」という作業は

かなり頭を使いながらの作業でしたので、その分緊張感を持った実践的な内容に

なったと思います!!

 

4. 受講後半戦

4-1. 受講後半戦の内容と成果

f:id:technoship0329:20220313131142p:plain

 一言でまとめると、「自走力を高め、ユーザーに応えることができた3ヶ月」

です!!

 自走力に関しては、振り返りにも書いた通り、「エラー対処の流れの固定化」

をしたことによって高まったと考えています。

 

 具体的には以下のような流れでエラーに対処するようにしました。

 

f:id:technoship0329:20220313132251p:plain

 

①:エラー文を解読できたら上、できなかったら下

②:それぞれ手前のフェーズで解決できなかったら進む

③:手前のフェーズで解決できなかったら進む

 

 このように仕組み化しておいたことで、割とスムーズに解決できました。

 

 ちなみに、ほとんどのエラーが以前のエラーと同じことの繰り返しでした。

実際に記録してみるとわかりますが、頭ではもう繰り返さないと思っていても

繰り返してしまうものなのですね。

 

4-2. 後半戦の感想

 やはり「オリジナルアプリを作成する」という経験はかなり力になったと

思います。自力で構想を練る企画力、エラーを自力で解決する自走力など、

あらゆる力を向上させることができたと考えています。

 ここで作成したオリジナルアプリを数年後に見返したときに自分自身で

どう感じるのだろうと考えるだけでワクワクしてきます!!

 

 今回作成したオリジナルアプリに関する開発の工程を

『週刊』オリジナルアプリ奮闘記①~④」として4本だてで記事にしたので、

もし興味がありましたら覗いてやってください!!

 

 以下からご覧いただけます!!

technoship0329.hatenablog.com

technoship0329.hatenablog.com

technoship0329.hatenablog.com

technoship0329.hatenablog.com

 

5. 転職活動期間について

 私は「転職支援サービス」にも登録していたので、受講完了後は専任の

キャリアアドバイザーの方と一緒に転職活動へとシフトしていきました。

 

 私の転職活動の流れについては以下の記事で詳しく書いているので、

ぜひ参考にしてみてください!!

technoship0329.hatenablog.com

 

 私の転職活動をサポートしてくださったキャリアアドバイザーのSさんは、

自己分析で「自分自身の思ってもいなかった強み」を発掘してくださったり、

少しでも状況が良くなるように頻繁に前向きな言葉を掛けてくださったりと、

迅速かつ丁寧なサポートをしていただきました!!

 一番印象に残っているのは、自分自身が面談の中で何気なく言った、

「私はこれまで新しい環境に飛び込むことで自らギャップを作りに行っていたの

かもしれない」という言葉をしっかりと覚えていてくださり、

それを使った一つのPR方法を教えていただいたことです。

 こうした細かな点まで拾い上げていただき、本当に感謝の念でいっぱいです。

 

6. 全体の振り返りと今後について

 このTechCampの学習前は、「エンジニアにちょっと関心がある」

という程度の思いでいましたので、学習開始初期は「エンジニアを仕事にして

いこう」などとは思っていませんでした。

 

 しかし、学習を通して、「エラーとの向き合いによる苦しみ」、

「学びがすぐ形になる喜び」などを経験していくうちに、徐々に仕事としての

エンジニアというものへの興味関心が高まっていきました。

 

 そして、決定打になったのが、

「オリジナルアプリの開発を通じて身近なユーザーの課題を解決できた経験」

でした。

 私は母親を対象ユーザーとしてオリジナルアプリを作成したのですが、

この経験を積んだことにより、

 

エンジニアとして働き、

 世の中の『できない』を

 Webサービスの力で解決したい

 

という強い思いへと変化しました。

次なる未来に向けて今後も前進していきます!!

 

もし少しでもTech Campに興味があるという場合は、以下からどうぞ!!

TechCamp↓↓↓

tech-camp.in

 

7.テクノシップ第15号プチ編集後記

〜Tech Campで得たものは数え切れません。

 この記事に書き切れないことがたくさんあります。

 もし聞きたいことがあれば、お気軽にどうぞ!!〜

 



転職活動を終えて(ITエンジニアとして転職を実現するまで)【第14号】

 こんにちは!

 テクノシップブログです!!

 

 私はITエンジニアとして転職を実現するため、この3月初旬から本格的に

転職活動を始めました!!

 

 そして、この度見事希望先の企業様から内定を頂きました!!!

 

 ここまでかなり長い道のりでしたが、この経験を忘れず今後の活動の糧とする

ため、また私の転職活動の経験がどなたかの参考になると良いと考えているため、

本記事で転職を実現するまでの経緯をアウトプットしたいと思います。

 

 

 

1. 転職活動初期(2022.3.14 ~ 2022.3.27)

 まず、最初の2週間で行ったことは以下の通りです。

 

 ①転職サイトへの登録とプロフィールの充実

  まずとにかく多数の転職サイトへの登録をすることから始めました。

  私が登録した転職サイトは以下の通りです。

 

  ○IT/WEB業界特化求人サイト「Green」  www.green-japan.com

  ○ITエンジニア求人が比較的多めの「Type

type.jp

  ○総合転職サイト「DODA

doda.jp

  ○総合転職サイト「en転職

employment.en-japan.com

  ○やりがいや環境で求人者と求職者をマッチングする「Wantedly

www.wantedly.com

 

 以上、5つの転職サイトへの使用に加え、TechCampの転職支援サービスを活用

しておすすめの求人を紹介してもらうようにして、活動を開始しました。

tech-camp.in

 

 求人への応募にあたっては、「プロフィールの充実」がとても大切ということ

を教わったので、キャリアアドバイザーの方に添削してもらったり、充実させる

ためのノウハウの掲載されたサイトを参考にしたりしながらプロフィールを作成

していきました。

 

 こうしてまずは「企業様に自分を見てもらう場所作り」に取り組みました。

  

 自社開発企業、受託開発企業、SES企業の中で絞らずにとにかく応募する

  いよいよ応募を開始することになったのですが、当初自分は

 「お客様の要望に細かく応えながら開発していく『受託開発』の企業様へ

 行きたい」と漠然と考えていたものの、様々な業態を知らずして初めから絞る

 のも良くないと考えました。 

  

  そこで、キャリアアドバイザーの方に相談して、

 まずは業態を絞らず「1日3社で週に20社を目安に応募を続ける」という目標

 を立てて、応募を始めることにしました。

 

  「応募した中で書類通過率が10%行けばいい方だ」と言われていたことも

 あり、未経験で書類を通過させるのは結構難しかったです。

 

  3/14~3/27までの応募数の推移と選考の進捗具合を示したのが以下です。

gyazo.com

  1周目で応募した時の書類通過率が思った以上に高く、面接の日程調整も

 立て込んでしまったため、2週目は新規応募を少し減らしながら面接に臨んで

 いきました。

  書類通過率が思った以上に高いと言っても、通過した企業の8割がSESの

 企業様であり、自社開発や受託開発企業様にはほぼ書類選考で落選でした。

  未経験ならではの厳しさをこういうところで体験できました。

 

 ③学習の積み上げとアピール手段の準備

  企業への応募に加えて重要だったのが、自分自身のプログラミング学習の継続

 とその成果のアピールです。

 

  スクールを卒業しても自分自身で学習を継続していける自走力を持っている

 ことをアピールするために、この行動はとても重要でした。

 

  私は「PHPの基礎学習」と「PHP Laravelを使用したWebアプリケーション

 実装」を次なる学習テーマに定め、学習を始めるとともに、

  「週に最低6日はGitHub更新」というノルマを課し、学習継続の証を残して

 いくことにしました。

  

  このようにして、GitHubの継続的な更新」と「オリジナルアプリケーション

 の公開」を通じて学習成果をアピールすることに努めました。

 

  私のGitHub↓↓↓

github.com

 

 

2. 転職活動中期(2022.3.28 ~ 2022.4.10)

 この期間で行ったことは以下の通りです。

 

 ①面接へ臨みつつ、新規応募も進める

  面接の予定がいくつか入ってはきたものの、まだ絞り込む段階にはいない

 と判断し、新規の応募も同時並行で進めていきました。

  しかし、ただ闇雲に新規応募をしていくのではなく、前週で受けた企業様で

 「良いな」と思った企業様を起点として、それより魅力的かそうではないかで

 判断して応募を進めていくようにしました。

 

  この期間の応募数の推移と選考の進捗具合を示したのが以下です。

gyazo.com

 

 ②応募媒体をWantedly中心にして可能性を広げる

  ここまで応募を続けてきて、1週目と同じく、やはり自社開発や受託開発系の

 企業様には書類を通してもらいづらい状況が続いていました。

  そこで、キャリアアドバイザーの方に再度相談し、

 「経歴やスキルではなく、その人のやる気や個性で企業にアピールができる

 Wantedlyでの応募を増やしてみる」という手段をとることにしました。

 

  プロフィールを充実させていったところ、4/4~4/10の週に3社からスカウト

 を受け取ることができ、しかも全て自社開発や受託開発系企業様から頂くことが

 できました!!

 

  Wantedlyの力を改めて実感できました。

 

  私のWantedly↓↓↓

www.wantedly.com

 

 ③企業研究、就活軸の整理、志望順位の整理などを進める

  2週目はこの行動が最も重要でした。

  まだ絞る段階にはいないとは言いましたが、「企業を知り」、「自分を知る」

 という行動を通じて少しずつ的を絞っていくという作業も必要な期間だったと

 認識しています。

 

  企業研究に関しては、面接が決まるたびにその企業様のホームページやSNS

 などあらゆる媒体を用いて研究し、エクセルシートに書き出して比較するように

 しました。

  

  就活軸の整理に関しては、「自分が何を大切にするのか」という視点で考えて

 いきました。

  私の場合は、

  ①企業理念「挑戦する姿勢が強く表れているか」

  ②仕事内容「開発業務に多く携わることができるか」

  ③働く人「腹を割って積極的に意見を言い合える関係性があるか」

  という3つの軸を作りました。

 

  志望順位の整理に関しては、就活軸に沿って順位づけしていきました。

 

 

3. 転職活動後期(2022.4.11 ~ 2022.4.19)

 この期間で行ったことは以下の通りです。

 

 ①新規の応募をストップし、選考が進んでいる企業様に集中する

  前週で徐々に自分の中での判断軸と志望順位も固まってきたので、新規の応募

 をストップし、その時点で選考が進んでいた企業様の対策に集中するように

 シフトしました。

 

  最終的に5社内定を頂きましたが、自分の判断軸と照らし合わせて決めていく

 ようにしました。

 

 ②自分の判断軸と照らし合わせて決定していく

  自分の就活軸と照らし合わせ、最終的に2社まで絞り込むことにしました。

 

 ③企業様に最終面談を申請し、悔いの残らぬ決断へ

  どうしても2社のうちどちらの企業様へ行きたいのか決めきれなかったので、 

 それぞれの企業様に社長様との最終面談を申請し、その結果で決めることに

 しました。

 

  最終的に「受託開発とSES事業を主にしていらっしゃる企業様」に入社させて

 頂くことを決め、転職活動を終了することになりました!!

  最後の最後まで念入りに企業様とのコミュニケーションを行い、満足のいく

 決断を行うことができ、非常に有意義な転職活動だったと納得できました!!

 

 

4. 転職活動を経て学んだこと

 ①理想と現実のギャップ

  転職活動前は、「自分はTechCampを卒業し、オリアプまで携えているから

 引く手数多なのではないか」と甘く見ていました。

  しかし、実際に転職活動を始めてみると、思った以上に評価が厳しく、未経験

 で転職を実現させることの厳しさを痛感しました。

 

 ②自社、受託、SESという業態の違いのみで企業様を判断するべからず

  実際は、自社、受託、SESのうちどれか一つのみという業態ではない企業様も

 多くありますし、よくよく企業様とコミュニケーションをとってみると、

 一般的に言われているようなそれぞれの業態のデメリットが当てはまらない

 企業様も数多くありました。

  「その企業様が何を大切にしているのか」という視点で固定観念を取っ払って

 接していくことの大切さを知りました。

 

 ③最後の最後まで粘り強くコミュニケーションをとるべし

  最終面接を終え、内定をいただいた後だとしても少しでも疑問点や不安な点が

 あれば企業様へ問い合わせてみる。

  その粘りや勇気が自ずと満足のいく決断へと繋がるのではないかという自信を

 持つことができたと考えています。

 

 

5. 今後の抱負

 入社までは時間があります。

 この期間でもできることはあるはず。

 それを見つけ出し、愚直に毎日積み上げていきたいと思います。

 

 

6. テクノシップ第14号プチ編集後記

 〜土日で実家の農業を手伝う羽目に、、、

  久々に鍬などの旧式道具を使って作業してところ、二の腕の裏や太ももの裏

  などとんでもないところが筋肉痛になりました。

 

  油断は禁物ですね。

  これから体を鍛えないと、、、〜

 

 

『週刊』PHP+Laravel6 奮闘記⑤【第13号】

f:id:technoship0329:20220320090005p:plain

 

こんにちは!

テクノシップブログです!

 

先週から「『週刊』PHP+Laravel6 奮闘記」と題しまして、

オリジナルアプリケーション第2段の開発記録を記事にしています。🔥

 

今回は前回から1週間が経過したので、目標の達成の有無の確認と

学習の振り返りをしていきたいと思います!!!

 

f:id:technoship0329:20220320094901p:plain

 

 

1.前回の目標の成果の確認

前回立てた目標は以下の通りでした。↓↓↓

---------------------------------------------------------------------------------------

gyazo.com

---------------------------------------------------------------------------------------

 

結果はどうだったのか。

 

目標達成です!!

 

herokuへのデプロイが完了し、挙動に問題がないかどうかを確認するまでにかなり

手こずりましたが、何とか実装を終えることができました🎉🎉

 

以下のURLから制作したアプリケーションにアクセスできます!!

haiker575.herokuapp.com

 

2.目標達成の要因

 目標達成の要因を自分なりに分析してみると、

 

 エラーを細かく分解し、段階的に解決していく手段を徹底できたから

 

 この1点につきます。

 

 laravelで制作したアプリケーションをデプロイするのは中々難しく、

エラーに出会い、そのエラーを調べているうちに分からない用語と出会い、、

 

 結局負のループに陥りそうになるということの繰り返しでした💦💦

 

 しかし、エラーに出会ったときにどのように対処するのか、、

 

 自分の中で以前から決めていた方針をもう一度思い出し、なんとか切り抜け

ました!!

 

 それは、

 

 「エラー内容の分解と段階的な解決」

 

 です。

 

 エラーが起こると焦って頭が混乱しがちです。

 しかし、そのような時こそまずは「紙とペン」を取り出し、現在起こっている

エラーを書き出します。そして、その中で解決する順番を考え、解決したら線で

消していくということを愚直にこなすのです。

 

 遠回りなように見えて、この方法が一番近道だと信じています。

 

 「分からない点が視覚的に理解でき、尚且つ解決するたびに消していく」

 

 この感覚を持てるだけでエラー解決がかなり楽になるはずです!!

 

 「焦った時こそ原点に帰る」

 

 ということを今後も徹底していきたいと思えました。

 

 

3.ワンポイントアウトプット

 ここでは、先週1週間の中で力を入れた部分や難しかった部分について

アウトプットしておきます。

 

 今回は「Herokuへのデプロイ作業」です。

 

3-1. Herokuへの基本的なデプロイ手順

 まず、herokuにデプロイするまでの基本的な流れを説明します。

 

①laravelアプリケーションを実装する

 composerを用いてlaravelアプリケーションの雛形をインストールし、

自分の作りたいアプリケーションを実装していきましょう。

 

laravelプロジェクトインストールコマンド

composer create-project laravel/laravel --prefer-dist アプリケーション名

「アプリケーション名」のところには自分の好きな名称をつけましょう。

 

②laravelアプリケーションに「Procfile」と呼ばれるファイルを設定する

 自分でもこのファイルを設定しなければならない理由は深く理解できていないの

ですが、これを設定しておくことで、Webサーバーにアクセスしたときに、正しい

方法でアプリケーションを表示できるようになるそうです。

 

 以下、heroku公式ページの説明↓↓↓

アプリケーションを Heroku にデプロイするには、正しい設定で Web サーバーを起動するために使用するコマンドを Heroku に指示する ​Procfile​ を最初に作成する必要があります。

デフォルトで、Heroku は、PHP とともに Apache Web サーバーを起動して、プロジェクトのルートディレクトリからアプリケーションを提供します。

ただし、アプリケーションのドキュメントルートは ​public/​ サブディレクトリであるので、​正しいドキュメントルートを設定​する ​Procfile​ を作成する必要があります。

 ということで、以下のコマンドを打ち、設定を完了します。

echo "web: vendor/bin/heroku-php-apache2 public/" > Procfile

 

③Heroku上にアプリケーションの雛形を用意する

 ご存じのように、HerokuではGithub上にpushしたアプリケーションの内容を

Heroku上のアプリケーションの雛形に流し込んでアプリケーションを完成させます。

 そのため、Heroku上にアプリの雛形を作成しましょう。

heroku create アプリケーション名

 

④Laravel暗号化鍵の設定をする

 Laravelアプリケーションに関する情報を暗号化して安全に使用するために

「鍵」を設定します。

 まず、以下のコマンドで「APP_KEY」を設定します。

//keyを生成し、生成したkeyを表示
php artisan key:generate --show
//表示されたkeyを=...に打ち込み設定完了
heroku config:set APP_KEY=…

 

⑤デプロイする

 ここまで設定を終えたら、デプロイします。しっかりとGitHubのコミットが全て

pushされていることを確認した上でデプロイしましょう。

 デプロイのコードは以下です。

git push heroku master

 

3-2.私が出会ったエラーの数々

 ここまで、基本的なデプロイの流れをアウトプットしましたが、私自身一筋縄

ではいきませんでした。勿論デプロイの途中でいくつものエラーに出くわしました。

 今回は私が出会ったエラーを洗いざらい共有しようと思います。

 

①「A post-autoload-dump script terminated with an error」

 これは、「git push heroku master」で最初にデプロイを試みたときに起きました。

 インターネットで検索すると、「composer.json」にいくつか不要な記述がある

ことを知り、以下のサイトを参考に解決させました。

qiita.com

 こちらでは、「clear DB addon」を利用したmySQLのデータベース設定の

方法も詳しく記載されているので参考になりますよ!!

 

②「During inheritance of ArrayAccess」

 これは、「heroku run php artisan migrate」コマンドでマイグレーション

行おうとした時に出たエラーです。

 調べてみると、「開発環境でのPHPのバージョン」と、「herokuでのPHPの      バージョンが合致していないこと」が原因だと特定。heroku側のバージョンを      合わせるため、「composer.json」のバージョン記述を修正。

stackoverflow.com

 私は、「php -v」コマンドで自分のphpのバージョンを確認し、

composer.jsonに記載されていたバージョンをそれに合わせたところ、解決。

 

③デプロイ後のアプリケーションのURLが「HTTPS化」されていない

 phpアプリのデプロイが完了し、アクセスすると、URLが「https」ではなく、「http」になっており、情報が保護されておらず、特定のページにアクセス      できなくなってしまう。

 「herokuでデプロイ時にURLをHTTPS化する方法」と検索したところ、       このようになる原因は、「プロキシ」、「ロードバランサー」という機能が関係    していると判明。公式ページに書いてある対処法を実践し、解決。

 以下、参考にした公式サイト。

devcenter.heroku.com

 

④デプロイも完了し、https化もできたが、cssファイルの内容が反映されていない

 画面を確認すると、Laravelに元から用意されていたBootstrapのcssファイルに

後から追記した分の内容が反映されていないことに気づきました。

 調べると、「Bootstrapのcssファイルに直接追記したことが原因」と断定。

 なぜなのか理由は分かっていませんが、「public/css/app.css」のファイル以外  にファイルを作成し、そちらに追記分を記述して再度試したところ、見事解決!!

 

 エラーの対処法が分かっても原因を理解しきれていない部分も多々あるので、

今後の課題として取り組んでいきたいと思います。

 

 

4.この1週間のまとめ

 この1週間を一言でまとめると、

 

 「焦った時こそ原点に立ち戻れ」

 

 ということです。

 

 学習が進んでいくと、いつの間にか自分のやり方というものを見失っている自分

に気がつく瞬間が来ました。それがまさにこの1週間でした。

 エラーの対処法一つとっても、自分なりの方法があったにも関わらず、焦りから

見当違いの方法をとってしまったりと、危ない状況でした。

 

 しかし、この経験をしたからこそ、

 「焦ったら原点へ」という教訓が得られたと考えています。

 

 これにて、『週刊』PHP+Laravel6 奮闘記

 は終了させていただきます!!

 

 ありがとうございました!!

 

 

5.テクノシップ第13号プチ編集後記

〜先日久しぶりに東京に出てきたのですが、歩くスピードの速さに改めて驚き

 ました。「都会で暮らせば痩せる」。そう思えた1日でした。〜

 

f:id:technoship0329:20220102193453p:plain