2016 新人研修 基本技術講座 (1)
TRANSCRIPT
0
基本技術講座
エスキュービズム・テクノロジー
April, 2016S-cubism Technology Inc.
1
0.導入
エンジニアとして必要なスキルとは?
2
0.導入
エンジニアとして必要なスキルとは?
・プログラミングができて・テストができて・設計ができて・プロジェクトの管理ができるようになること
3
0.導入
エンジニアとして必要なスキルとは?
・プログラミングができて・テストができて・設計ができて・プロジェクトの管理ができるようになること
これだけでエンジニアの仕事はできません!!!
4
0.導入
エンジニアとして必要なスキルとは?
・プログラミングができて・PHP・JavaScript・Python
・テストができて・単体テスト・結合テスト・システムテスト
・設計ができて・外部設計・詳細設計
5
0.導入
エンジニアとして必要なスキルとは?
・プログラミングができて・PHP・JavaScript・Python
・テストができて・単体テスト・結合テスト・システムテスト
・設計ができて・外部設計・詳細設計
PMとか夢のまた夢。。。
6
0.導入
結論
一つずつしっかり学んでいきましょう。
教えてもらっているのにメモを取らないとか論外。メモを取るポーズだけなのも論外。どうしても覚えられないなら覚え方が悪いのでできる人に学びましょう。
会社では誰かが教えてくれることは稀なので「人のやり方を見て盗む」こと。「守破離」の精神を常に心がけておくこと。https://ja.wikipedia.org/wiki/%E5%AE%88%E7%A0%B4%E9%9B%A2
7
アジェンダ
1.技術スキルa. OSb. ミドルウェアc. アプリケーションd.開発ツール
2.管理スキルa. タスク管理b.スケジュール管理c. チーム管理
3. コミュニケーションスキルa.報告・連絡・相談b.やるべきかどうかc. 根回し
8
1. 技術スキルa. OS
サーバ
OS
ミドルウェア
アプリケーション
クライアント
アプリケーション
OS
ハードを動かすための操作が抽象化されたプログラム群。一般的なOS・Windows・MacOS・Linux・RedHat・AmazonLinux・CentOS
・Debian・Ubuntu
・etc...
モバイルOS・Windows Mobile・iOS・Android・ChromeOS
9
1. 技術スキルa. OS
サーバ
OS
ミドルウェア
アプリケーション
クライアント
アプリケーション
OS
WindowsとMacはGUI特化。LinuxはCUIが多い。→用途の違い
Windows ServerはCUIのみのエディションがある。CentOSでもGUIメインで利用可能。
入出力の種類CUIキャラクターユーザインターフェース。コマンドのみで操作を行うモード。
GUIグラフィカルユーザインターフェース。マウスとキーボードを併用して視覚的に操作を行うモード。
特定の領域に特化していて、他のミドルウェアやアプリケーションと協調して動作させるソフトウェア。
・Webサーバ・apache・nginx
・DBサーバ・MySQL・PostgreSQL・Oracle
10
1. 技術スキルb. ミドルウェア
サーバ
OS
ミドルウェア
アプリケーション
クライアント
アプリケーション
OS
・ロードバランサ・Linux Virtual Server
・リバースプロキシ・pound
・ファイアウォール・iptable・firewalld
ビジネス領域に特化していて、ユーザが求める機能を提供するソフトウェア。
・EC・Amazon・楽天・(ECOrange)
・ソーシャルプラットフォーム・Line・facebook・twitter
11
1. 技術スキルc. アプリケーション
サーバ
OS
ミドルウェア
アプリケーション
クライアント
アプリケーション
OS
バックエンド(サーバサイド)コアな処理を行う部分。
フロントエンド(クライアントサイド)ユーザからの情報の入出力を行う部分。
12
1. 技術スキルc. アプリケーション
サーバ
OS
ミドルウェア
アプリケーション
クライアント
アプリケーション
OS
フロントエンドユーザが直接接する部分。・API開発・ネイティブアプリ開発・ブラウザアプリ開発・デスクトップアプリ開発・UI / UX・etc...
バックエンドサーバサイド全般かつ外部に直接接しない部分。・ビジネスロジック・アプリケーションサーバ・インフラ・冗長性・スケールアウト・アップ・etc…
→ 全く違うスキルが必要になる
13
1. 技術スキルc. アプリケーション
フロントエンド
クライアント
アプリケーション
OS
ユーザが直接接する部分。・API・必要なデータの連携が簡単にできる
・ネイティブアプリ・どこでもユーザに快適な操作性を提供できる
・ブラウザ・端末フリーでユーザに同一な操作性を提供できる
・デスクトップアプリ・ユーザの用途に特化した操作性を提供できる
→ 目的がそれぞれ異なる。
14
1. 技術スキルc. アプリケーション
アプリケーションを実装するための言語
言語名 サーバ クライアント 入門難易度 特徴 用途 プロダクト
コンパイル言語
C++ ◯ ◯ 高 高速 システム操作、パフォーマンス特化 IoT(組込み)
C# ◯ ◯ 中 書きやすい、Windows特化 Windowsアプリケーション、Webアプリケーション OrangePos
Swift ◯ ◯ 中 モダン iOSアプリ OrangeClub
Objective-C
◯ 高 iOS特化、C互換 iOSアプリOrangePos, Orange Reserve, etc…
Java ◯ ◯ 中 多くつかわれている Androidアプリ、Webアプリケーション、ミドルウェア OrangeClub
Go ◯ 中 書きやすい、コンパイル速い ミドルウェア、ツール DECIDE API Server
インタプリタ言語
PHP ◯ 低 動かすだけなら簡単 Webアプリケーション ECOrange, EcopaServer
JavaScript ◯ ◯ 低 動かすだけなら簡単 Webアプリケーション、ブラウザアプリケーション DECIDE Controller Server
Python ◯ 中 科学計算が得意 Webアプリケーション、分析 オウンドメディアエンジン(あかもん)
Ruby ◯ 中 国産言語、文法をいじれる Webアプリケーション、ツール エンジニアの自作ツール
15
1. 技術スキルd. 開発ツール
・エディタ・IDE・VisualStudio(Windows開発)・VSCode(Web開発)・Xcode(iOS開発)・PHPStorm(PHP開発)・Intellij(汎用)・SublimeText(汎用)・Atom(汎用)・Netbeans(Web開発、Java開発)
・バージョン管理システム・Git
・仮想マシン・VitualBox(+Vagrant)・VMWare・Docker(厳密には違うけど)
・ブラウザ・MS Edge・Google Chrome・Firefox・Safari
・ビューワー・MySQL WorkBench・Robomongo・A5 SQL・WinSCP
16
2. 管理スキルa. タスク管理
仕事を振られた時の思考ロジック
1. とりあえずやる2. 何をやればいいかわからなくなる3. とりあえずわかるところだけやる4. できたと報告したら怒られた
17
2. 管理スキルa. タスク管理
仕事を振られた時の思考ロジック
1. とりあえずやる2. 何をやればいいかわからなくなる3. とりあえずわかるところだけやる4. できたと報告したら怒られた
→怒られて当たり前
18
2. 管理スキルa. タスク管理
仕事を振られた時の思考ロジック
1. とりあえずやる→取り掛かる前に準備する
2. 何をやればいいかわからなくなる→何をやればいいか洗い出す・聞く
3. とりあえずわかるところだけやる→わからないところをまとめてなるべく早く聞く
4. できたと報告したら怒られた→作業終了条件を聞いておく
19
2. 管理スキルa. タスク管理
作業を洗い出して実施するまで※あくまで一つの例です
1. 作業を振られる2. 期限と作業内容を聞く3. 作業ツリーを作成する
a. 振られた作業を細かいタスクに分解するb. 分解する目安は作業内容が明確で人に説明できるくらいc. 不明な点はすぐに聞く
4. 最下層のタスクに作業時間を当てる5. 全体にかかる時間を足してどのくらいかかるか検討をつける6. この作業内容で足りているか念押しする7. 作業進捗報告のタイミングと作業終了条件を聞く8. 実施する
20
作業を洗い出して実施するまで※あくまで一つの例です
1. 作業を振られる部長「ちょっと座席移動の実行委員やってくれない?」
2. 期限と作業内容を聞く私「それっていつですか?なにやればいいですか?」部長「2日後の夕方にやる予定。移動する順番とタイムテーブル作って誘
導してあげて」
2. 管理スキルa. タスク管理
21
2. 管理スキルa. タスク管理
作業を洗い出して実施するまで※あくまで一つの例です
3. 作業ツリーを作成するa. 振られた作業を細かいタスクに分解するb. 分解する目安は作業内容が明確で人に説明できるくらいc. 不明な点はすぐに聞く
→移動する順番は移動する人がわからないと決められない→タイムテーブルは移動する順番がわからないと決められない→当日の移動はタイムテーブルに沿って行わないといけない→移動対象の人に事前にタイムテーブルを共有しないといけない→移動するときに何を持っていくかわからない→一人でやるのは無理なので協力者を集めないといけない→協力者と情報を共有しないといけない
・座席移動・準備・移動する順番の洗い出し・タイムテーブル作成
・当日・移動
22
2. 管理スキルa. タスク管理
・座席移動・準備・持っていくもの洗い出し・協力者決める・依頼・打ち合わせ・移動対象洗い出し・移動する順番の洗い出し・タイムテーブル作成・事前告知
・当日・リマインド・事前打ち合わせ・移動
作業を洗い出して実施するまで※あくまで一つの例です
3. 作業ツリーを作成するa. 振られた作業を細かいタスクに分解するb. 分解する目安は作業内容が明確で人に説明できるくらいc. 不明な点はすぐに聞く
→移動する順番は移動する人がわからないと決められない→タイムテーブルは移動する順番がわからないと決められない→当日の移動はタイムテーブルに沿って行わないといけない→移動対象の人に事前にタイムテーブルを共有しないといけない→移動するときに何を持っていくかわからない→一人でやるのは無理なので協力者を集めないといけない→協力者と情報を共有しないといけない
23
2. 管理スキルa. タスク管理
作業を洗い出して実施するまで※あくまで一つの例です
3. 作業ツリーを作成するa. 振られた作業を細かいタスクに分解するb. 分解する目安は作業内容が明確で人に説明できるくらいc. 不明な点はすぐに聞く
→誰に聞く?→依頼してきた部長→誰に協力してもらう?どう依頼する?→何を打ち合わせする?→どこを担当する?
→その時間に移動できない人はどうする?→誰にどんな内容で告知する?
→何を確認する?→誰が何をする?
・座席移動・準備・持っていくもの洗い出し・協力者決める・依頼・打ち合わせ・移動対象洗い出し・移動する順番の洗い出し・タイムテーブル作成・事前告知
・当日・リマインド・事前打ち合わせ・移動
24
2. 管理スキルa. タスク管理
3. 作業ツリーを作成する
・座席移動・準備・持っていくもの洗い出し・部長に持っていくものを確認・持っていくものをまとめる
・協力者決める・依頼・協力者検討・部長経由で協力者に依頼
・打ち合わせ・打ち合わせ内容決める・打ち合わせを協力者のスケジュールに登録・打ち合わせの出席依頼を出す・打ち合わせ実施
・移動対象洗い出し・洗い出しを分担・洗い出してまとめる
・移動する順番の洗い出し・大まかに移動する人をグループ分けする・グループの関係から順番を決める
・タイムテーブル作成・事前告知・だれに何を送るか検討・文面作成・告知
・当日・リマインド・事前打ち合わせ・状況確認・すり合わせ
・移動・誘導・トラブル対応
25
2. 管理スキルa. タスク管理
4. 最下層のタスクに作業時間を当てる
・座席移動・準備・持っていくもの洗い出し・部長に持っていくものを確認(10分)・持っていくものをまとめる(5分)
・協力者決める・依頼・協力者検討(10分)・部長経由で協力者に依頼(20分)
・打ち合わせ・打ち合わせ内容決める(20分)・打ち合わせを協力者のスケジュールに登録(5分)・打ち合わせの出席依頼を出す(10分)・打ち合わせ実施(30分)
・移動対象洗い出し・洗い出しを分担(10分)・洗い出してまとめる(60分)
・移動する順番の洗い出し・大まかに移動する人をグループ分けする(5分)・グループの関係から順番を決める(10分)
・タイムテーブル作成(20分)・事前告知・だれに何を送るか検討(10分)・文面作成(30分)・告知(5分)
・当日・リマインド(10分)・事前打ち合わせ・状況確認・すり合わせ(10分)
・移動・誘導(5時間)・トラブル対応(5時間)
26
2. 管理スキルa. タスク管理
5. 全体にかかる時間を足してどのくらいかかるか検討をつける
・座席移動・準備(260分=4時間20分)・持っていくもの洗い出し・部長に持っていくものを確認(10分)・持っていくものをまとめる(5分)
・協力者決める・依頼・協力者検討(10分)・部長経由で協力者に依頼(20分)
・打ち合わせ・打ち合わせ内容決める(20分)・打ち合わせを協力者のスケジュールに登録(5分)・打ち合わせの出席依頼を出す(10分)・打ち合わせ実施(30分)
・移動対象洗い出し・洗い出しを分担(10分)・洗い出してまとめる(60分)
・移動する順番の洗い出し・大まかに移動する人をグループ分けする(5分)・グループの関係から順番を決める(10分)
・タイムテーブル作成(20分)・事前告知・だれに何を送るか検討(10分)・文面作成(30分)・告知(5分)
・当日(5時間20分)・リマインド(10分)・事前打ち合わせ・状況確認・すり合わせ(10分)
・移動・誘導(5時間)・トラブル対応(5時間)
27
2. 管理スキルa. タスク管理
6. この作業内容で足りているか念押しする
・座席移動・準備(260分=4時間20分)・持っていくもの洗い出し・部長に持っていくものを確認(10分)・持っていくものをまとめる(5分)
・協力者決める・依頼・協力者検討(10分)・部長経由で協力者に依頼(20分)
・打ち合わせ・打ち合わせ内容決める(20分)・打ち合わせを協力者のスケジュールに登録(5分)・打ち合わせの出席依頼を出す(10分)・打ち合わせ実施(30分)
・移動対象洗い出し・洗い出しを分担(10分)・洗い出してまとめる(60分)
・移動する順番の洗い出し・大まかに移動する人をグループ分けする(5分)・グループの関係から順番を決める(10分)
・タイムテーブル作成(20分)・事前告知・だれに何を送るか検討(10分)・文面作成(30分)・告知(5分)
・当日(5時間20分)・リマインド(10分)・事前打ち合わせ・状況確認・すり合わせ(10分)
・移動・誘導(5時間)・トラブル対応(5時間)
28
2. 管理スキルa. タスク管理
7. 作業進捗報告のタイミングと作業終了条件を聞く
・座席移動・準備(260分=4時間20分)・持っていくもの洗い出し・部長に持っていくものを確認(10分)・持っていくものをまとめる(5分)
・協力者決める・依頼・協力者検討(10分)・部長経由で協力者に依頼(20分) 報告
・打ち合わせ・打ち合わせ内容決める(20分)・打ち合わせを協力者のスケジュールに登録(5分)・打ち合わせの出席依頼を出す(10分)・打ち合わせ実施(30分)
・移動対象洗い出し・洗い出しを分担(10分)・洗い出してまとめる(60分)
・移動する順番の洗い出し・大まかに移動する人をグループ分けする(5分)・グループの関係から順番を決める(10分)
・タイムテーブル作成(20分)・事前告知・だれに何を送るか検討(10分)・文面作成(30分)報告・告知(5分)
・当日(5時間20分)・リマインド(10分)・事前打ち合わせ・状況確認・すり合わせ(10分)
・移動・誘導(5時間)・トラブル対応(5時間)
・作業完了報告 報告
29
2. 管理スキルa. タスク管理
8. 実施する
・座席移動・準備(260分=4時間20分)・持っていくもの洗い出し・部長に持っていくものを確認(10分)・持っていくものをまとめる(5分)
・協力者決める・依頼・協力者検討(10分)・部長経由で協力者に依頼(20分) 報告
・打ち合わせ・打ち合わせ内容決める(20分)・打ち合わせを協力者のスケジュールに登録(5分)・打ち合わせの出席依頼を出す(10分)・打ち合わせ実施(30分)
・移動対象洗い出し・洗い出しを分担(10分)・洗い出してまとめる(60分)
・移動する順番の洗い出し・大まかに移動する人をグループ分けする(5分)・グループの関係から順番を決める(10分)
・タイムテーブル作成(20分)・事前告知・だれに何を送るか検討(10分)・文面作成(30分)報告・告知(5分)
・当日(5時間20分)・リマインド(10分)・事前打ち合わせ・状況確認・すり合わせ(10分)
・移動・誘導(5時間)・トラブル対応(5時間)
・作業完了報告 報告
30
2. 管理スキルb. スケジュール管理
スケジュール管理の要素・タスク管理・優先度管理
タスク管理は大前提。プラスで何のタスクを優先するべきなのかを考える。
31
2. 管理スキルb. スケジュール管理
優先度管理
・期限一番大事。期限を守ることは大前提。
・後続のタスクへの影響度早くタスクを終わらせれば、その分先行できるなら優先度をあげる。
・作業者のスケジュール作業者のスケジュールが埋まっている場合調整する必要がある。
32
2. 管理スキルb. スケジュール管理
優先度管理
・期限一番大事。期限を守ることは大前提。
・後続のタスクへの影響度早くタスクを終わらせれば、その分先行できるなら優先度をあげる。
・作業者のスケジュール作業者のスケジュールが埋まっている場合調整する必要がある。
スケジュールを管理するためには、・タスク・作業時間・作業者・タスクの依存関係・期限が明確になっていないといけない。
33
2. 管理スキルb. スケジュール管理
WBS(WorkBreakdownStructure)作業分解図。さっきのスライドで示した「作業ツリー」のこと。
ガントチャートWBSに日時を加えて、どの作業がいつ進んでいくか可視化したもの。なぜかこの会社ではこちらをWBSと呼ぶ。
34
2. 管理スキルc. チーム管理
チームマネジメント
組織の中で働く場合、必然的に他の関係者と一緒に働くことになる。それぞれの役割の中でできることを各々が行って、それを統合することで組織としてコミットできる。
最も重要なのは、メンバーが継続して結果を出せるようにすること。チームリーダーはメンバーのモチベーションを高めるために尽力するべき。チームメンバーは自立して、指示を受ける前に自分で考え、行動する準備ができるようにならなければいけない。
お互いの考えを理解し、同じ方向性を向いたチームは、そうでないチームと比べて、作業効率や問題解決能力に大きな差がある。まずは、自分の意見を持ち、それをチームメンバーで議論するところが第一歩となる。
35
3. コミュニケーションスキルa. 報告・連絡・相談
よく聞く「報・連・相」でも誰に何を報告したらいいかわからない。そもそも連絡って何を連絡するのか。相談しても自分で何とかしろって言われる。
36
3. コミュニケーションスキルa. 報告・連絡・相談
報告自分の状況を前後関係を含めて上司に伝える。この時は事実だけ話すこと。憶測や感情を交えないようにする。憶測は相談で行う。
連絡上司に報告した内容から必要最低限の事実だけ周知する。詳細を省いて、いち早く関係者にどういう影響を与えるかが伝わればいい。また、誰が関係者なのかを知っておく必要がある。
相談自分では判断しかねる内容に対して、判断材料を増やしてもらう。決して決断を丸投げすることではない。また、相談した人にはそのあとどうなったか共有する。聞くだけ聞いてそのままなのは失礼。
質問の仕方
基本的にはある程度まとまってから聞くこと。質問のボリュームと内容を整理してから聞かないと、まともにとりあってもらえないこともある。
報告してから相談する→相手に前提知識がある状態で質問する。
質問して待っている間は他のタスクを進めておく。
その質問が帰ってこないとすべてのタスクが止まる時はすぐに聞かなければいけない。
37
3. コミュニケーションスキルa. 報告・連絡・相談
38
3. コミュニケーションスキルb. やるべきかどうか
「相談」する内容として重要なものの一つ。
世の中、絶対にやってはいけないことさえしなければ取り返しはつく。そのために重要なのは、絶対にやってはいけないことを判断できること。
ただ、社会人になったばかりで何をすればいいかわからない状態だと何が絶対にやってはいけないかもわからない。
そういう時は、やっていいこととダメなことの判断基準を知っておくことと相談できる人を見つけておけばいい。
39
3. コミュニケーションスキルb. やるべきかどうか
例)本番DBにアクセスしてもいいか
普通に考えたら、個人情報が盛りだくさんかつ、下手したらシステムが止まるため、絶対にやってはいけないこと。
ただし、本番DBにアクセスしなければいけない理由によっては部分的に許可される。
× 本番データをテストデータとして欲しい○ 障害調査のため(ただし、ベテランエンジニアの監視付き)
40
3. コミュニケーションスキルc. 根回し
人間、誰しも客観的な判断は難しいものであり、いつもならOKが出るはずなのに、タイミングや伝え方によってはNGが出たりする。
根回し会議や交渉を円滑,有利に運ぶために,非公式の場で合意の形成をはかること
事前にOKをもらっておく、周囲に情報を共有し決定する場で味方してもらう、先に情報をもらった上で検討する等、エンジニアに限らず必須のスキル。
41
仕事をする上で必要なスキルは仕事によって異なるため、スキルが多い人がいいのではなく、必要な時に必要なスキルを身につけられる人がいい。数年後には大きな差となって現れてくる。
今だけを見るか、今後を見据えて行動するかは自分次第。