人見知りで日本一周、未経験でエンジニアになった人の成長記録

新米学生エンジニアが学んだことを気ままにアウトプットしていくことで誰かのためになったらなー

【超初心者向け】オブジェクト指向がすごい3つの理由

オブジェクト指向とは

そもそも、オブジェクト指向ってなに?

よくプログラミング初心者が詰む概念。それがオブジェクト指向

 

オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方である。英語の object-oriented (直訳は、「対象物志向の」「目的重視の」という意味の形容詞) の日本語訳である。

オブジェクト指向の枠組みが持つ道具立ては、一般的で強力な記述能力を持つ。複雑なシステム記述、巨大なライブラリ(特に部品間で緊密で複雑な相互関係を持つもの)の記述においては、オブジェクト指向の考え方は必須である。

オブジェクト指向 - Wikipedia

 

クラス(カプセル化

サブルーチンと変数をまとめて管理

1) サブルーチン と 変数 を「 まとめる」

2) クラス の 内部 だけで 使う 変数 や サブルーチン を「 隠す」

3) 1つ の クラス から インスタンス を「 たくさん 作る」

ポリモーフィズム

サブルーチンでうまく対処できない重複したコードを一本化する①

1)呼び出される側が増えても、呼び出す側は修正する必要ない

継承

サブルーチンでうまく対処できない重複したコードを一本化する②

1)継承するだけでスーバークラスの変数とメソッドをすべて定義する

【AWSの基本編】新しくサブネットを作成した時にすること

サブネットとは

サブネットとは、大きなネットワークをわけた時に生まれる小さいネットワークたちのことを言います。

なぜ小さく分割するかと言うと、1つの大きなネットワークとして管理すると大変だからです。そのため、複数の小さなネットワークの集まりとして管理します。

サブネットとは、機器やアドレスの数が多い大きなネットワークを、管理しやすいよう小さく分割したネットワーク。特に、TCP/IPネットワークで一つの組織に割り当てられた大きなアドレスブロックを、組織内で管理しやすい大きさに分割したもの。

e-words.jp

サブネットを作成した時にすること

AWSで新しくサブネットを作成した際に通信を正常に接続させるために設定すべきことが3つあります。

  • インバウンド(セキュリティグループ)
  • アウトバウンド(セキュリティグループ)
  • ルーティング(ルートテーブル)

インバウンドとは、新しく作成したサブネットの中にあるEC2に通信してくる対象のことを指しています。設定するのは、対象のポート番号と通信形式とIPアドレスです。

次にアウトバウンドです。

アウトバウンドとは、新しく作成したサブネットの中にあるEC2が通信する先の対象のことを指しています。設定するのは、EC2が通信するために通るセキュリティグループと通信形式とポート番号です。

最後に、ルートテーブルです。ルートテーブルはサブネットに付随するもので、ここにルーティング内容を書き込むことができます。

ルーティングとは、そもそもどこからの通信を許可するかを示しているものです。つまり、パブリックな通信を許可している場合は、ルーティングはインターンネットゲートウェイをつながっていることになります。

 

f:id:engineer-traver:20180801011331j:plain

オブジェクト指向におけるクラス(カプセル化)の役割とメリット

クラス(カプセル化)とは

クラスには、オブジェクトを作成する時のデータやメソッドを定義してあって、つまり、クラスとはオブジェクトの設計図です。

クラスclass)は、クラスベースオブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。クラスから生成したオブジェクトのことをインスタンスという。

クラスには、インスタンスの保持するデータメンバ変数フィールドUMLでは「属性」ともいう))と操作(メソッドメンバ関数)が記述される。アクセス範囲(public、private、protectedなど)や可変かどうか(final、 constantなど)等についても記述されている。[要出典]

クラスは、継承ポリモーフィズムカプセル化などの、オブジェクト指向プログラミングにおける重要な概念を実現する強力な手段である。

クラス (コンピュータ) - Wikipedia

クラス(カプセル化)のメリット

クラスの役割は、「まとめる・隠す・いっぱいつくる」の3つの役割があります。

「まとめる」のメリット

  • 部品の数が減る
  • メソッド( サブルーチン)の名前づけが楽になる
  • メソッド( サブルーチン)が探しやすくなる

「隠す」のメリット

  • クラスに定義した変数とメソッドを、他のクラスから「 隠す」ことができる→privateを使用
  • プログラムの保守性悪化の原因となるグローバル変数 を使わずにプログラムを書くことが可能になる

「いっぱいつくる」のメリット

  • 一度クラスとして定義すると、実行時にそこからいくつ でもインスタンスを作成可能
  • ファイル・文字列・顧客情報など、同種の情報を複数 同時に扱う処理であっても、そのクラス内部のロジック をシンプルにできる→インスタンスを作成すればいい

人に説明するのが難しい!クラス・関数・メソッドの違いって?

クラス・関数・メソッドの違い

関数(function)は、オブジェクト指向(OOP)的に作らない単発的なかたまりです。

クラス(class)は、オブジェクト指向的に作成されたメソッドなどのかたまりです。

メソッド(method)は、インスタンス変数などのかたまりでできたサブルーチンです。

f:id:engineer-traver:20180731001638j:plain

初心者必見!「Webを支える技術」で学んだHTTPの超基礎

HTTPの基礎

HTTPってなに?http://.....comとかいう感じでURLの前の方についている印象しかないですよね。

ここでWikipediaでHTTPで検索してみると、

Hypertext Transfer Protocolハイパーテキストトランスファープロトコル、略称 HTTP)とは、HTMLなどのコンテンツの送受信に用いられる通信プロトコルである。主としてWorld Wide Webにおいて、WebブラウザWebサーバとの間での転送に用いられる。日本標準仕様書ではハイパテキスト転送プロトコルとも呼ばれる。

HTTP/1.1 が RFC 7230 から RFC 7235 で規定されている。かつては RFC 2616 が HTTP/1.1 を規定していたため、こちらもよく参照されている。また、HTTP/2が RFC 7540 で規定されている。

って感じて正直専門用語が多くて難しいっすね。。。

HTTPとは

もっと噛み砕いて言うと、HTTPとは「Webサーバクライアントがデータをやり取りする通信手段」のことを意味しています。

例えると、はてなブログ(=Webサーバ)を読者(=クライアント)が見るためのパソコン間のデータのやりとりをするためのものです。

転送できるデータ

送ることができるデータは、

などさまざまで、てかつまりデータならほぼなんでも送ることができます!

HTTPの特徴

RESTという概念に準じでつくられたというのが特徴です。

RESTとは、

Representational State Transfer - Wikipedia

Representational State Transfer (REST) は、ウェブのような分散ハイパーメディアシステムのためのソフトウェアアーキテクチャのスタイルのひとつである。この語は2000年に、HTTPプロトコル規格の主要著者の一人であるen:Roy Fieldingが、ウェブについて書いた博士論文で初めて現れ、ネットワーキングコミュニティの中ですぐに広く使われることになった。

RESTは、初めはアーキテクチャの原則と制約の集まり(後述)を指していたが、次第に、XMLやHTTPを使った簡易なウェブベースのインタフェースのうち、WebサービスSOAPプロトコルのようなMEP(Message Exchange Pattern; SOAPノード相互のメッセージ交換のパターンを確立するための雛型)ベースの特別な抽象化をしないもののことを、大まかに意味する用語として使われるようになった。

といったようにような小難しいけどめちゃめちゃ大切なアーキテクチャスタイルです。これについてはまた別記事で詳しく説明しますが、簡単に大切なキーワードだけ示しておきます。

  • 統一インターフェイス
  • ステートレス性
  • キャッシュ
  • クライアント・サーバ
  • 階層化システム
  • コードオンデマンド

HTTPとは

リクエストとレスポンス

クライアントとサーバの間での通信にはこのような流れがあります。

  1. HTTPがリクエストメッセージを構築する
  2. クライアントがリクエストメッセージを送信する
  3. サーバがリクエストメッセージを受信する
  4. リクエストメッセージを解析する
  5. アプリケーションプログラムへの処理の委託
  6. レスポンスメッセージを構築する
  7. レスポンスメッセージを送信する
  8. クライアントがレスポンスメッセージを受信する
  9. レスポンスメッセージを解析する

リクエストとレスポンス

HTTPメッセージ

では、そのリクエストメッセージとレスポンスメッセージにはどのような情報が含まれているのでしょうか。

両メッセージとも構造は、スタートライン・ヘッダ・ボディとなっています。

リクエストメッセージの構造

スタートラインには、メソッド+URI+プロトコルバージョンが記させています。

例えば、

GET https://engineer-traver.hatenablog.com/ HTTP/1.1

といったような感じです。

ヘッダには、データのタイプや文字コーディング方式などを記します。

ボディは補足情報を記し、POST送信時にクエリを添付したりします。

レスポンスメッセージの構造

スタートラインには、プロトコルバージョン+ステータスコード+テキストフレーズが記させています。

例えば、

HTTP/1.1 200 OK

といったような感じです。

ヘッダには、リクエスト同様データのタイプや文字コーディング方式などを記します。

ボディは取得した全データ、つまりHTMLファイルなどが添付されます。

HTTPメッセージ

HTTPのバージョン

HTTPは現在ver1.1が主流です。

HTTPのバージョン1

HTTPのバージョン2

TCP/IPとは

TCPIPとは

HTTPのステートレス性

HTTPステートレス性

超良書「Webを支える技術」を読んで学んだコードを書く前に知っておきたいこと①

「Webを支える技術」とは

Webを支える技術とは、Amazonの紹介文には以下のように記載されています。

Webは誕生から20年で爆発的な普及を果たし,17億人のユーザと2億台のサーバを抱える巨大システムへと成長しました。Webがここまで成功した秘密は,その設計思想,いわゆるアーキテクチャにあります。Webのアーキテクチャ,そしてHTTP,URI,HTMLといったWebを支える技術は,Webがどんなに巨大化しても対応できるように設計されていたのです。
私たちが作る個々のWebサービスも,Webのアーキテクチャにのっとることで成功へとつながります。Webのアーキテクチャに正しく適応したWebサービスは,情報が整理され,ユーザの使い勝手が向上し,ほかのサービスと連携しやすくなり,将来的な拡張性が確保されるからです。
本書のテーマは,Webサービスの実践的な設計です。まずHTTPやURI,HTMLなどの仕様を歴史や設計思想を織り交ぜて解説します。そしてWebサービスにおける設計課題,たとえば望ましいURI,HTTPメソッドの使い分け,クライアントとサーバの役割分担,設計プロセスなどについて,現時点のベストプラクティスを紹介します。

つまりは、「Webサービスの実践的な設計をするために必要な基本的な技術をわかりやすく紹介した」本というわけです。

この本に対する世間の評価

この本は、知る人ぞ知る良書です。

わたしが本と出会ったのは、わたしと同じく未経験でIT企業エンジニアをして入社した先輩から「周りは情報科学を専門にしてきた猛者ばかりだから最低限の知識をこの本から学んだほうがいい。俺もこれで学んだ。」とおすすめしてもらったのがきっかけです。

その後、twitterのフォロワーの方たちも良書という噂を聞きつけて、この本を手にしていた人は少なくありませんでした。

 

 

この本で学べること

この本で学べることがズバリ「コードを書く前に知っておきたいこと」です。

なにを言っているかわからないって?

もっと具体的な話をすると、PHPとかRubyとかPythonWebサービスを作る前にそもそもWebってどんな技術によって成立しているのかという言わば「Webの原理」のようなものです。

別にこれを知らなくてもコードを書いてWebサービスを作ることができます。

しかし、原理を理解していなければ解決した課題やエラーと直面する機会がエンジニアとして生きていくのであれば必ず訪れるでしょう。

その時に絶望しないためにコードを書く前にこれを読む意義は多いです。

それと個人的になんでWeb生まれて、どうして通信できているのだろうかっていうことを知りたいっていうのが本音です。笑

 

初心者から中堅エンジニアまでが認める良書「Webを支える技術」を読んで学んだことをこれからどんどん書いていくのでお楽しみに!

はじめまして&自己紹介

はじめまして

はじめまして。ゆざです。(@yuzajo_plan)

 

twitter.com

 

まずは、はじめにこんな誰だかわからない男のブログをわざわざ拝見してくれて本当にありがとうございます!

この記事では、「ゆざってそもそも誰だ!?」ということを話していけたらと思っています!

このブログのタイトルのようにざっくりとわたしをラベリングするなら「人見知りなのにバックパッカーに憧れてヒッチハイク日本一周をした人」か「大学院まで行って脳神経科学を研究していたのに未経験領域であるITベンチャーエンジニアとしての人生を選んだ人」ですね。なが!!笑

これまでの経歴

では、わたしの歩んできた人生を少しずつざっくりと話していきます。 

わたしの幼年期

わたしの育ったのは、両親ともに企業に務める共働きのどこにでもあるごく普通の家庭で姉弟は1人姉がいました。

姉は天真爛漫でどんな人とも友達になれるようなすんごく「陽」のオーラを纏っている人でした。

一方、わたしは人見知り・内弁慶・根暗とまさに対称的な姉弟でした。ただ、そんな姉がいたのでわたしは社会的にあぶれることなく「ゆざの弟」として可愛がられていました。

この当時からすでに人見知りだったんですね。笑

ただ好奇心旺盛で取ってきたカブトムシを家で飼育して100匹に増やしたたりとか取ってきたオタマジャクシを100匹増やしたりとかしてました。笑

わたしの少年期

この時期のほとんどを「スマブラ」、「モンハン」、「剣道」に捧げていました。笑

おかげでメジャースポーツには疎くて、別に足も取り立てて速いわけではないのでモテませんでした。。。

ただ、64とゲームキューブスマブラの腕だけはめちゃめちゃ上がりました。笑

剣道は、従兄弟の影響と当時読んでいた初年ジャンプの影響をモロに受けて「剣士!武士道!かっこいい!」ってノリではじめました。

ですが、剣道を習いに行ったのが警察署の中の道場だったのでぬるま湯にいたわたしには今までには想像できないくらい厳しい場所でした。

怒鳴られ、しごかれは日常茶飯事。まあそのおかげでヘタレだったわたしにも少しは根性がつきました。 

わたしの青年期

 高校時代は「部活」(剣道部)中心の生活で、たまに人並み以下の恋愛と死ぬほど楽しかった文化祭くらいの思い出しかないです。

大学受験に失敗したわたしは、大学1-2年生時には学生団体の立ち上げに参加して意識高い系(笑)な学生をやってたり、中途ハンパに剣道を続けたくないと思って入ったスポーツチャンバラサークルでそれよりも10倍中途ハンパな活動をしてたりしました。

そんな中途ハンパは自分が嫌でなんとなく青春18きっぷで一人旅をすると、楽しいことも苦しいことも新しい出会いもある「旅」にハマってしまった。

そこからは東南アジア1周→セブ留学→台湾大学留学→ニュージーランド縦断旅→香港・クロアチア・モロッコサハラ砂漠で年越し・・などなど

旅にハマって人見知りなのにヒッチハイク日本一周もしてしまった。

ヒッチハイク日本一周している人の中では一番根っこに人見知りの精神が根付いていると思う。笑

 

こんなわたしがITベンチャーのエンジニアとして就職することになったのは「旅」の楽しさを通ずる物があると思ったからだ。(これだけが理由ではないけど)

  1. 新しいとの出会いに溢れている(エンジニアは常に新しい技術の学習や人との出会いが欠かすことができない)
  2. 大きな目的を達成することの喜び(エンジニアは自分の手で今まで世界になかった価値を創造することで社会課題を解決できる)
  3. 人に還元できる(エンジニアは人のためになるものを創造できる)

 

まあまだ初心者中の初心者が偉そうに語ってますけどね。笑

 

これからのこと

長くなってしまいましたが、このブログで書いていきたいのは「わたしがエンジニアとして、人として成長していく軌跡」です。

だからどんな些細なことでもアドバイスや意見をくださるとめちゃめちゃ喜びます。

わたしが来年の3月に卒業するまでにどれだけ成長するか自分自身も楽しみです。

ここまでつたない文章を読んで頂きありがとうございました!

これからもよろしくお願いしますm(_ _)m