10年間のエンジニア生活と勉強したこと、いま考えていることを振り返る

#はじめに
最近、新人を教えることが何件か続き、社内でも勉強会をやることになったので、思ったことを思いついた順に書いていきます。
自身の振り返り兼どんなことを勉強したのか、どんな本を読んだのかを書いていきます。

# 自己紹介
エンジニア歴12年
大手SIerにてシステム開発 6年
アフリカ（タンザニア）でコンピューター教師 2年
ベンチャーにてシステム開発 4年
### 大手SIer時代
大手飲食チェーンPOS開発
大手カード会社基幹システム開発
大手放送会社基幹システム開発　など
重厚長大、予算○億、開発工数○000人月みたいなプロジェクトで働く。
スキルセット：Java,OracleDB,OracleEBSなど
###アフリカ時代
現地の職業訓練校の先生、生徒にPCの使い方、Webサイト作成などを教える
壊れたPC10台もらってきて3台の動くPCを作る　など
###ベンチャー時代（現在）
フィリピンからリモート開発
月間500万PVのWebメディア運営
ECサイト作成
LP作成
Wordpressでサイト作成　など

スキルセット：
PHP（Laravel、Symfony,EC-Cube）
mysql
AWS
Wordpress
Shopify　など

#苦労したこと。勉強したこと。
SIer時代に入ったプロジェクトが常に大きいプロジェクトだったので、全体感を掴むのに苦労した。
暇さえあればドキュメントを読み、他の人のコードを読み、今自分が何をやっていて全体として何をやりたいのかを知る。
とりあえず今やっている言語の本を読む。言語以外にもDB,ソースコード管理,ネットワークなどの本も読んで見る

#師匠を見つける
聞いたら教えてくれる優しい人を見つけ、尊敬できる師匠を見つける。
幸いなことに、入社してすぐに2人の師匠が見つかった。一人はバリバリのエンジニアで聞いたら何でも教えてくれるすごい人（気は短い）
もうひとりはプロジェクトマネージャーとしてすごい人、業務知識が豊富でお客さんの業務に精通していた。

#好奇心を持つということ
なんでプログラムは動いているのか。ユーザの登録ってどうなっているんだろう。決済の仕組みってどうなっているんだろう。
いろいろなことに興味を持って、調べてみる、聞いてみることが一番の成長につながったと思う。
ボタンがあったらとりあえず押して見るのが良い。でも本番ではやらないように・・・


#基本情報、応用情報技術者試験
新人〜3年目くらいまでに学んで一番役に立ったものは基本情報、応用情報技術者試験。
システム開発に必要なことが網羅的に学べ、現在までそれらの知識が役に立っている。
一見不要そうな論理演算、数学なども今振り返るとif文がさらっと書けたり、ちゃんと基礎として身についていると感じる。
データベース、ネットワークなどすぐに役立ちそうなものから、プロジェクトマネジメントなど後々まで活きる知識も学べる。

基本情報技術者試験の出題範囲:https://www.fe-siken.com/fehani.html
#フローチャートを書いてみる
最近、何人かの新人を教えていて感じるのは全体の構造がわかっていないでプロジェクトに入ってしまうことがあるということ。（自戒も込めて）
とくにパッケージを使用するプロジェクトだと（大半だと思いますが）今触っているコードがどこから呼ばれているのか、後にどこのソースに行くのかがわかっていない状態で何をどう改修すればいいのかわからずにフリーズしていることが多いと思う。
一度フローチャートを書いてみて、画面でボタンが押されたらどのソースに行くのか、そこからどのソースに飛んで、画面が遷移するのかを書いてみる、プロジェクトのメンバーに書いたフローチャートを見てもらうということが理解の近道になる。

#IPOの原則
2つ目のプロジェクトが炎上していて、ヘルプで入ってきたプロジェクトマネージャーに教えてもらったこと。
システムはすべてIPOで成り立っている。
Input
Process
Output
自分のやっていることのInputは何か、どういうOutputが必要なのか、ではやらなければいけないProcessは何か。
これらをはっきりさせてから作業に取り掛かかる。
これがわかっていると、今何に悩んでいて、わからないことなのはInputなのかOutputなのかそれともProcessなのかがはっきりとする。
質問するときにちゃんと答えを得られる質問ができるようになる。

#質問をする方法
質問をしてちゃんと欲しい答えが帰ってくるには質問のスキルが必要。
知りたい答えは何で、今どこまでできていて、なにがわからないのかをはっきりさせる必要がある。
そのためには上のフローチャートとIPOを作っておくと質問の助けとなる。
「いまやりたいこともゴールもなんもわかりませーん」と言っても怒らない人を探しておくと精神がとても落ち着くので早急に探しましょう。

#検索をする
Googleも自分のわからないところがちゃんとわかっていないと何も教えてくれない。
こっちはちゃんと聞かないと教えてくれないので、がんばろう。
「Wordpress　固定ページ　編集」などで求める答えが出なかったら、
「Wordpressで固定ページを編集する方法」などフルセンテンスで書くと意外と見つかったりする。
教えるときも、答えの載っているサイトを共有すると共にどんなワードで検索したかも伝えるようにしている。（最近できていない）

#英語
なくても生きていけるが、読めるとなお良い。
特にShopifyや最近の言語だと英語のマニュアルのほうが多いので、Google翻訳で読むくらいのことはしておきたい。
でもOSやツールをとりあえず英語にするのはおすすめしない。それよりも、ツールのいろいろなものを日本語で読んでどんな機能があるのかを知っておくほうがはるかにいい。

#読んだ本
https://www.amazon.co.jp/dp/B07KXPWSQT/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

システム開発の上流から下流まで網羅されていて、ざっと読めばなんとなくシステム開発がわかった気持ちになれる本。

https://www.amazon.co.jp/dp/B07QL464C2/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

名著と言われている古典。とりあえず本棚に飾っておきたい1冊

https://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AF%E3%81%AA%E3%81%9C%E5%8B%95%E3%81%8F%E3%81%AE%E3%81%8B%EF%BD%9E%E7%9F%A5%E3%81%A3%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A8%E3%82%A2%EF%BC%86%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A8%E3%82%A2%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98%EF%BD%9E-%E7%9F%A2%E6%B2%A2-%E4%B9%85%E9%9B%84/dp/4822281655

”なぜ”シリーズ。『プログラムはなぜ動くのか』と合わせて読んでおきたい。
知識として知っておくと何かと便利。新人時代に勉強として読むも良し、何年か経ってから復習として読むも良し。

https://www.amazon.co.jp/gp/bestsellers/books/548102

オライリーシリーズ。動物の本。電子書籍ではなく本で持っておきたい。
今必要としている知識（言語なり技術なり）を深く学べる。