Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

今⽇のタイムスケジュール

Slide 3

Slide 3 text

今⽇のタイムスケジュール s  ガイダンス 10分 s  講義 40分 s  質疑応答 10〜20分 s  懇親会

Slide 4

Slide 4 text

今⽇の勉強会の概要

Slide 5

Slide 5 text

今⽇の勉強会の概要 s  ⾃⼰紹介 s  初現場でしくじった話 s  オブジェクト指向を考える s  マクドナルドとシステムの類似性 s  オブジェクト指向のメリット s  (時間あれば)正しい現場での振る舞い⽅

Slide 6

Slide 6 text

⾃⼰紹介

Slide 7

Slide 7 text

簡単な紹介 s  板東 祐太朗(バンドウ ユウタロウ) s  業務系フリーランスエンジニア -主にバックエンド(Java、C#メイン) s  新卒で塾講師                -中学⽣に英語の指導や模試の作成 s  模試づくりをしている際に「ものづくり」の楽しさに気づく -エンジニアへ                  

Slide 8

Slide 8 text

簡単な紹介その2 s  IT業界のキャリア  ・Webセキュリティサイトの開発(2ヶ⽉)  ・銀⾏業務のペーパーレス化開発(半年) ・⾃動⾞サイトの保守開発(半年) ・⾦融系新規Webサイト構築(今ココ!) -開発経験は1年半くらい s  暇さえあれば⼤体せんべろ巡りをしている

Slide 9

Slide 9 text

フリーランスはいいよって話 s  お⾦について  中⼩SIer時代: ⽉給25万(ボーナス雀の涙)  フリーランス:⽉給50万  -倍になる s  休みについて  準委任契約なら⼤体140〜200時間の時間契約  -⽉2回くらいなら休んでもOK

Slide 10

Slide 10 text

初現場でしくじった話

Slide 11

Slide 11 text

当時の私 ・2ヶ⽉の研修終わったばかり ・For⽂やif⽂といった基本的な⽂法はマスター ・クラス?メソッド?オブジェクト指向? ・⾃社の先輩とセットで⼊場  →まぁなんとかなるか・・・?

Slide 12

Slide 12 text

結果

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

⼤ 炎 上

Slide 16

Slide 16 text

当時の⼼境 s  クラス多すぎてどこからソース追えばいいかわか らない s  クラス⾒つかってもメソッドがどこから呼ばれて るのかわからない s  デバッグする時はどこにブレークポイント置けば いいの? s  API?Json?バッチ?

Slide 17

Slide 17 text

なぜそうなったのか? s  単純な勉強不⾜ s  スキルが無いため質問がうまくできない s  何がわからないのか⾃分でもわからない s  調べてもそのままコピペするくらいにしかできな い s  膨⼤なソースの量に思考停⽌する

Slide 18

Slide 18 text

根本的な原因は? 1.システムの全体像が⾒えていない 膨⼤な量に圧倒されてシステムが不可解な塊にしか⾒えない 2.システムを作る上での決まりごとを理解していない コーディングにはオリジナリティ・独創性が必要だと勘違い

Slide 19

Slide 19 text

1年半経った今わかること

Slide 20

Slide 20 text

エンジニアは コーディングする際に ある種の共通認識 を持っている

Slide 21

Slide 21 text

その共通認識とは?

Slide 22

Slide 22 text

“オブジェクト指向”

Slide 23

Slide 23 text

オブジェクト指向に ついて考える

Slide 24

Slide 24 text

そもそも オブジェクト指向って? s  オブジェクト指向(オブジェクトしこう、英: object- oriented)は、ソフトウェア⼯学理論の⼀つであり、 ソフトウェア設計とプログラム記述の際に⽤いられる 考え⽅である。元々は特定のプログラミング・パラダ イムを説明する為に考案された⾔葉だった。object- oriented programmingのように修飾語として⽤いられ るのが常であり、それ単体で扱われる事はない漠然と した設計構想でもある。 (引⽤元:https://ja.wikipedia.org/wiki/ %E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3 %82%AF%E3%83%88%E6%8C%87%E5%90%91) 詳細は「オブジェクト指向プログラミング」を参照

Slide 25

Slide 25 text

???

Slide 26

Slide 26 text

そもそも オブジェクト指向って? s  オブジェクト指向(オブジェクトしこう、英: object- oriented)は、ソフトウェア⼯学理論の⼀つであり、 ソフトウェア設計とプログラム記述の際に⽤いられる 考え⽅である。元々は特定のプログラミング・パラダ イムを説明する為に考案された⾔葉だった。object- oriented programmingのように修飾語として⽤いられ るのが常であり、それ単体で扱われる事はない漠然と した設計構想でもある。 (引⽤元:https://ja.wikipedia.org/wiki/ %E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3 %82%AF%E3%83%88%E6%8C%87%E5%90%91) 詳細は「オブジェクト指向プログラミング」を参照

Slide 27

Slide 27 text

そもそも オブジェクト指向って? s  オブジェクト指向プログラミング(オブジェクトしこうプ ログラミング、英: object-oriented programming、略 語:OOP)は、オブジェクト指向の考え⽅[1]を取り⼊れたコ ンピュータプログラミング⼿法である。オブジェクトとは ⼤まかに⾔うとデータ(変数またはプロパティ)とコード (関数またはメソッド)の複合体を意味しているが、その 詳細については様々な解釈が存在する。OOPに基づくプロ グラムはこのオブジェクトの集合として組み⽴てられる事 になるが、その実装スタイルもまた千差万別である。 (引⽤元:https://ja.wikipedia.org/wiki/ %E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82% AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83 %AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3% 82%B0)

Slide 28

Slide 28 text

???????

Slide 29

Slide 29 text

わからないので 聞いてみよう s あなた「先輩!オブジェクト指 向って何ですか?」

Slide 30

Slide 30 text

Answer s 先輩A 「オブジェクト指向ね!ああ、あ の継承とかカプセル化とかプログ ラミングをやりやすくする⽅法だ よ!」

Slide 31

Slide 31 text

Answer s 先輩B 「え?そんなことも知らないの? 勉強不⾜にも程があるよ。まぁま ず⾃分でググって調べなよ」

Slide 32

Slide 32 text

この説明の 何がいけないのか s  先輩A 「オブジェクト指向ね!ああ、あの継承とかカプセ ル化とかプログラミングをやりやすくする⽅法だ よ!」 -専⾨⽤語を使って何となく返答しているパターン --実務に活かせる回答では無い -そもそも本⼈も理解がアヤシイ

Slide 33

Slide 33 text

この説明の 何がいけないのか s  先輩B 「え?そんなことも知らないの?勉強不⾜にも程が あるよ。まぁまず⾃分でググって調べなよ」 -謎にマウンティングされるパターン -こういう⼈とは先輩でも仲良くしない⽅がいい -⾃分⾃⾝が先輩になった時反⾯教師にするべき - SIerに多い

Slide 34

Slide 34 text

私たちが知りたいのは

Slide 35

Slide 35 text

「理念より、まずは 実務で使える考え⽅」

Slide 36

Slide 36 text

オブジェクト指向とは

Slide 37

Slide 37 text

“部品化“

Slide 38

Slide 38 text

マクドナルドとシステム の類似性

Slide 39

Slide 39 text

部品化を紐解くために

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

オーダーから提供まで 1.レジで注⽂を受ける 2.オーダーが⼊る 3.オーダーを作る 4.商品をまとめる 5.お客様へ提供する

Slide 42

Slide 42 text

検索システムに 置きかえる

Slide 43

Slide 43 text

1.レジで注⽂を受ける s  マクドナルド: 「ハンバーガーセット1つ」のオーダーを受ける ⇅ s  検索システム: 「社員番号から経理部の佐藤さんの情報が欲しい」 との命令を受ける

Slide 44

Slide 44 text

1.の役割 s  役割1 マクドナルド:オーダーを記録する 検索システム:⼊⼒情報を保持する s  役割2 マクドナルド:オーダーを厨房に届ける 検索システム:情報を内部(サーバ)に伝達する

Slide 45

Slide 45 text

レジ=クライアント

Slide 46

Slide 46 text

クライアントとは s  ユーザー(利⽤者)と直接やり取りを⾏う ≒マックでいうレジのお姉さん的役割 s  ユーザーとシステムの橋渡しをするインターフェース s  ユーザーが⼊⼒した情報をバックエンド (サーバ側) に渡す →サーバにリクエストを投げる(HTTPとか)

Slide 47

Slide 47 text

2.オーダーが⼊る s  マクドナルド:  オーダーの内容を厨房の担当者が理解する           ⇅ s  検索システム:  「社員番号」という検索条件の⽂字列を  サーバ側が受け取る

Slide 48

Slide 48 text

3.オーダーを作る s  マクドナルド:  オーダーを厨房の担当者が処理していく   EX) パンを焼く、⾁を焼く、ポテトを作る ⇅ s  検索システム:  検索キーワードの「社員番号」から佐藤さんの  情報を⽣成する   EX) DBにアクセスする、⼊⼒チェックを⾏う

Slide 49

Slide 49 text

4.商品をまとめる s  マクドナルド:  ハンバーガーやポテト、ドリンクをまとめて  1つのセットにする           ⇅ s  検索システム:  DBから抽出してきたデータを画⾯で表⽰  できるよう情報を整形する

Slide 50

Slide 50 text

2.〜4.の役割 s  役割 マクドナルド:オーダーを厨房担当者が調理する 検索システム:検索条件の⽂字列から        サーバがDBに問い合わせをし、        取得したデータを⽣成する

Slide 51

Slide 51 text

厨房=サーバ

Slide 52

Slide 52 text

5.お客様へ提供する s  マクドナルド:  完成した「ハンバーガーセット」をお客様に提供する           ⇅ s  検索システム:  DBに登録されていた「経理部の佐藤さん」の情報を   ブラウザに表⽰する

Slide 53

Slide 53 text

各々の役割は? マクドナルド: Aさん: レジ打ち担当 Bさん: ドリンク作り担当 Cさん: オーダーされた商品の取りまとめ担当 Dさん: ポテト・フライ作り担当 Eさん: パンを焼く&盛り付け担当 Fさん: クレーム担当

Slide 54

Slide 54 text

各々の役割は? システム: クラスA: 画⾯表⽰担当 クラスB: ⼊⼒チェック担当 クラスC : クライアントとサーバの橋渡し担当 クラスD: DBの接続担当 クラスE: データの整形担当 クラスF: エラー処理担当

Slide 55

Slide 55 text

⼀つのシステム≠⼀つの機能

Slide 56

Slide 56 text

⼀つのシステム=各部品の集合体

Slide 57

Slide 57 text

部品=オブジェクト

Slide 58

Slide 58 text

オブジェクト指向とは

Slide 59

Slide 59 text

システム全体を 機能ごとに部品化して ⼀つのシステムを作る思想

Slide 60

Slide 60 text

オブジェクト指向の メリット

Slide 61

Slide 61 text

オブジェクト指向を 考慮しないと・・・ https://twitter.com/minodriven/status/ 1127539251761909760 アカウント:ミノ駆動@MinoDriven

Slide 62

Slide 62 text

オブジェクト指向 のメリット s  改修しやすい s  可読性が⾼い(=誰もが⾒ても読みやすい) s  バグが⽣じにくい  -クラスに機能がまとまっている  -原因追求がしやすい

Slide 63

Slide 63 text

最後に

Slide 64

Slide 64 text

質疑応答Time s Twitter bandy@yudetamagonnn