マイマイ’s エンジニア日記

アラフォー女マイマイの現役エンジニアとしての成長記録

エンジニアとして発信していくこと

先日、こんな記事がUPされているのを見ました。

プログラマだったら当然知ってるよね?という知識一覧 | anopara

 

とても的を得た記事だと思いました。ここに書かれてあること、確かにエンジニアとして仕事をする上では必要な知識です。表現が難しいですが、仕事中、無意識に意識していることばかりで、これらの知識を持ち合わせていると、ある程度一人で問題解決しながら業務を行えるレベルです。

 

私は約13年前に情報系の高専を卒業しました。少なくとも私が通っていた高専では、最近話題の統計・機械学習系以外は、ほとんど授業でやったことある内容ばかりです。じゃぁ果たして、ここに書かれてあることのどれくらい覚えていて正しく理解出来ているのだろうと不安になりました。「このキーワード知ってる!けど、どんな意味だったっけ?」と思うものが多数見られ、もう少し学生の頃にまじめに勉強していればよかった、とただただ反省するばかりです。エンジニアとして働いで十数年、忘れてしまっているところもあるのかもしれません。

 

知識の棚卸、というほど大袈裟なものではないですが、エンジニアとして復帰して半年、 ここで一度、現在のエンジニアとしての自分が持っている知識、スキルを見直すことが必要なのかもしれません。

ちょっと話は逸れますが、今色々と勉強に取り組んでいますが、自分自身をマネジメント出来ていないのが現状です。多分、自分の性格上、きちんと計画を立てて準備が整わないと実行に移せない、というなんとも融通が利かない性格が原因なのは分かってます。この性格が活かされる時がくるでしょう、でも今じゃないよねって話。時間がもったいないです。なので、とりあえず始めてみて、試行錯誤しながら、自分のやり方を見つけていく方がきっと効率いいよ?と自分に言い聞かせながら、これからやっていきます。

あと、アウトプットの場として、色々考えてはいたのですが、結果ブログサイトは使わず、今借りていて放置状態のレンタルサーバーにWPを入れてそこを私のアウトプットの場としたいと思います。運営する時間がもったいなくね?という意見もあるのですが、サイト運営も併せて勉強する、という目的のもと、決めたものです。


私が今後発信する情報としては、

  • バックエンドエンジニアのロードマップに沿った技術の習得
  • エンジニア基礎知識の棚卸
  • 語学の勉強(英語、韓国語)
  • 簿記の勉強

を、メインとします。語学と簿記については教養のための取り組みで、ほぼ初心者レベルからのスタートです。

ひとまず、今の会社での試用期間が終わる9月末まで、勉強が習慣化するように2日に1記事(INPUTに1日、OUTPUTに1日)、4記事/週を目標に続けていきます。

文章があっちこっち飛んで纏まりがなく申し訳ないのですが、今後記事を書く経験を積んで、読みやすい記事になるよう心掛けていきます。そして、しばらくは、エンジニアとしてスキルを上げるために勉強に集中します。そのため、勉強しながらもダラダラと呟いてしまうTwitterも自制しています。

 

今私がやるべきことはエンジニアとして成長すること。30代後半に差し掛かり、今後のキャリアアップには、勉強し続けることが重要になってくるので習慣化するために、頑張ります。

 

目標とするエンジニアの方々に追いつくために。

これからをどう生きるか

とうとうGW最終日となりました。マイマイです。Twitterも復活です。

10連休という長い休み、どう過ごそうかと連休前はワクワクしていたのですが、蓋を開けてみたら始まりと終わりは体調を崩してベッドを上で過ごし(ちなみに現在進行形)、中間は英会話教室の無料体験に行ったり、図書館や自宅で勉強三昧の日々を過ごしておりました。えぇ、お分かりの通り、1人で過ごしておりました。でも、寂しいというような感覚はなく、なんだかこんな休みでも悪くなかったな、というような連休でした。

 

この連休は、ひたすら自分と見つめ合う時間にしました。「令和」という新しい元号に変わったのもそういう時間を持つきっかけになったのかもしれません。今までの自分の生き方、これからの自分の生き方を考えていました。

ちょっと話は逸れますが、私は亡くなった母にだけ打ち明けていた自分の考えがありました。その考えは決して私1人だけで感じていたものではなく母も感じていたものだと分かり、その日から母は私の本当の意味での唯一の理解者になりました。そんな母が亡くなり、私が考えていたことは決定的なものとなり、その考えのもと、私はその人生を受け入れなければならないものだということをここ数か月の色んな出来事の中で忘れてしまっていました。なぜ今の私がこういう状況にあるのか、十分過ぎるくらいな理由で、その現実を受け止めるにはちょうどいい連休だったかと思います。

体調改善

連休初日から風邪を引いて寝込み、そして今日を含め2日程前から嘔吐と下痢のため寝込んでいて、せっかくの休みをベッドの上で過ごしてました。体調には気を付けていましたが、幸い、試用期間中なので、体調崩したのがこの連休だったのが救いだった、と思うようにしています。風邪から復帰した後は、運動のために一日一万歩を目標にウォーキングを行いました。そこで気づいたのは、自分の体力の無さです。本当にこれほどまで自分の体力は落ちているのかとショックを受ける程に。なので、今月末には人間ドックもあることですし、日々の生活に運動を取り入れていこうと心に固く誓いました。

スキルアップ

連休中の勉強は、ほぼ語学の勉強に時間を使いました。取り組んでいるのは、韓国語と英語です。ど素人が多言語習得は難しいとも思いましたが、仕事で必要なので、仕方ありません。お蔭で、韓国語の基本は習得出来たのではないかと感じています。この連休中に勉強の進め方も確立出来てきたので、また明日から仕事をしながらの勉強方法も徐々に確立していこうと考えています。

また英会話教室の無料体験にも行ってきました。オンライン英会話も探しているので、まだ通うかどうか決めていませんが、今って結構無料で英語の学習方法を公開していたり、無料の学習アプリなんかがあるので、それらを駆使して、会社の補助をうまく利用しつつ、出来るだけお金をかけずにやれたらいいなというところで今情報収集中です。

エンジニアとしては、先週からロードマップに乗っかる予定でしたが、体調不良等により予定が狂い、まだ手が付けれてないので、1週間遅れて、今週から着手しようと思っています。いや、着手します。

プライベート

体調面、スキル面以外では以下のようなことを考えてました。

私の趣味は手芸なのですが、最近、まったく趣味に時間をかけれてません。まぁそれでも心が疲れたりしていないので、問題はないのですが、せっかく手芸道具もそろっているので、創作活動に時間を持ってもいいのかなと思うので、趣味の時間を作って色々作っていきたいです。

あと、周囲に婚活を宣言しておりましたが、早速ですが積極的に出逢いを求める活動はしばらくお休みしようと思います(笑) 自分磨きなどの自分で続けれれる範囲では続けますが、今の私は上記に書いた通り、体質改善や勉強をやろうと思うので、単純に時間がないからです。自然の出逢いに期待します。

 

長々と書いてきましたが、この連休中に新たな目標も見つかり、それに向けて日々精一杯生きていくのみです。「令和」という新しい時代、これまでの自分の生き方を改め、しっかりと誠実に生きていこうと心に決めた連休となりました。

 

転職して環境が変わったばかりなので、連休明けは五月病にならないようにと前々職の後輩が心配してくれていますので、五月病にならないよう、日々を楽しんで過ごしていけたらと思います。優しい後輩を持ちました。ありがとう。

 

明日から仕事に勉強にプライベートに頑張ります!

 

ロードマップから計画を立てる。

先日、バックエンド開発のロードマップに乗っかる宣言をしました。

バックエンド開発のロードマップに乗っかってみる。 - 復活エンジニア!マイマイ's BLOG

 今日は、原本からこの1年でやるべきことを洗い出して、スケジュールを組み立ててみましたので、ご報告。

 と、その前に。勉強に取り組む今の私の状況を整理します。

  • 基本、残業はない(あっても1時間程度(今のところ))
  • 土日祝日はちゃんと休み
  • 昨年個人で請け負ったシステムの改修案件を立ち上げ中(夏リリース予定)
  • 勉強時間は、平日:4h(2h/d、2d)、土日祝日:8h(4h/d、2d)

 というところを踏まえて立てた計画です。

23Stepあって、長いですが、お付き合いください。

 

Step1.Pick a Language

概要 言語の選択
対象 スクリプト言語Python, Ruby, PHP, Node.js)
・機能的言語(Elixir, Scala, Erlang, Clojure, Haskell)
・その他(Java, .NET, Golang, Rust)
今回やること Node.js
期間

2week
2019/4/29 ~ 2019/5/12

 

Step2.Practice what you learnt

概要 コマンドラインアプリケーションを作ってみる(ls)
対象 Step1で選択した言語。
今回やること Node.js
期間 2week
2019/4/29 ~ 2019/5/12
(Step1と同時実施)

 

Step3.Learn Package Manager

概要 パッケージマネージャーを学ぶ
対象 スクリプト言語(NPM(Node.js))
・機能的言語(Leiningen(Clojure))
・その他(maven(Java), Cargo(Rust))
今回やること NPM(Node.js)
期間 1week
2019/5/13 ~ 2019/5/19

 

Step4.Standards and Best Practices

概要  標準とベストプラクティス
対象  調査中(コミュニティで探す)
今回やること  -
期間

 1week

2019/5/20 ~ 2019/5/26

 

Step5.Security

概要 セキュリティについてのベストプラクティスに目を通す 
対象

 OWASPのガイドラインを読む

(様々なセキュリティ上の問題とそれを避ける方法を理解する)

今回やること  -
期間

 1week

2019/5/27 ~ 2019/6/2

 

Step6.Practice

概要

パッケージを作成し、ほかの人が使用できるように配布する

GitHubからいくつかプロジェクトをピックアップして、プルリクエストを送ってみる

対象  スクリプト言語(Npm registry(Node.js))
今回やること GitHub
Npm registry(Node.js)
期間

2week

2019/6/3 ~ 2019/6/16

 

Step7.Learn about Testing

概要

テストの種類、目的の違いを理解する

スタブ、モックなどのテスト用語も理解する

対象  自作アプリに単体テスト結合テストを導入する方法を調べる
今回やること  -
期間

 1week

2019/6/24 ~ 2019/6/30

 

Step8.Practical

概要

単体テストを導入する

カバレッジを分析する(テストカバレッジの計算方法についても学ぶ)

対象  Step6の実践的アプリ
今回やること  -
期間

 1week

2019/7/1 ~ 2019/7/7

 

Step9.Learn Relational Databases

概要

RDBにデータを保存する方法を学ぶ。

まずは、DB用語(キー、インデックス、正規化、タプル等)を知る。

対象  MySQL, MariaDB, PostgreSQL
今回やること  MySQL
期間

 2week

2019/7/8 ~ 2019/7/21

 

Step10.Practical Time

概要  Step1~9までの知識を使って、簡単なアプリを作る
対象  Node.js
今回やること  例)ブログ
・ユーザアカウント。登録とログイン。
・ユーザは自分のブログを投稿できる。
・ユーザは自分のブログ投稿を全部閲覧できる。
・自分のブログ投稿は削除できる。
・非公開ブログ投稿は自分だけが閲覧でき、他者からは見ることができない。
単体テスト結合テストが書かれている。
・クエリにはインデックスが適用されていることをクエリ分析で確認する。
期間

 3week

2019/7/22 ~ 2019/8/11

 

Step11.Learn a Framework

概要 フレームワークを学ぶ
対象 ・Laravel, Symfony(PHP)
・Express.js, Hapi.js(Node.js)
今回やること  Express.js(Node.js)
期間

 1week

2019/8/19 ~ 2019/8/25

 

Step12.Practical Time

概要 フレームワークを実践する
対象  Step10で作成したアプリ
今回やること  ※テストも含むすべてを移行する
期間

1week

2019/8/26 ~ 2019/9/1

 

Step13.Learn a NoSQL Database

概要

NoSQLについて学ぶ。(RDBとどう違うか、なぜ必要なのか等)

いくつか調べて、機能とその違いを比較する

対象 ・MongoDB
・Cassandra
・RethinkDB
・Couchbase
今回やること MongoDB
期間

1week

2019/9/9 ~ 2019/9/15

 

Step14.Caching

概要 アプリケーションレベルでキャッシュを実装する方法を学ぶ。
対象  Memcached
今回やること  Step12で作成したアプリをキャッシュする。
期間

 2week

2019/9/16 ~ 2019/9/29

 

Step15.Creating RESTful APIs

概要 RESTを理解し、RESTfulなAPIを作成する方法を学ぶ。
対象  Roy Fieldingの論文原著を読む。
今回やること  -
期間

 2week

2019/9/30 ~ 2019/10/13

 

Step16.Authentication/Authorization Methodologies

概要

認証と認可の方法について学ぶ。

それぞれが何か、どう異なるか、どのような場合に使うかを理解する。

対象 ・Oauth
Basic認証
トークン認証
・JWT
OpenID
今回やること ・Oauth
Basic認証
トークン認証
・JWT
OpenID
期間

 2week

2019/10/14 ~ 2019/10/20

 

Step17.Message Brokers

概要

メッセージブローカについて学ぶ。

(いつ、なぜそれを使うのかを理解する。)

対象 ・RabbitMQ
・Kafka
今回やること  RabbitMQ
期間

 1week

2019/10/21 ~ 2019/10/27

 

Step18.Learn a Search Engines

概要 サーチエンジンについて学ぶ。
対象 ・ElasticSearch
・Solr
今回やること ・ElasticSearch
・Solr
期間

 1week

2019/10/28 ~ 2019/11/3

 

Step19.Learn how to use Docker

概要 Dockerについて学ぶ
対象 Docker
今回やること Docker
期間

 1week

2019/11/4 ~ 2019/11/10

 

Step20.Knowledge of Web Servers

概要

各Webサーバの相違点、制限、利用可能な設定項目の違いを学ぶ。

上記の制限を最大限に活用したアプリケーションを作成する。

対象 Apache
・Nginx
今回やること Apache
・Nginx
期間

 3week

2019/11/11 ~ 2019/12/1

 

Step21.Learn how to use Web Sockets

概要 Webソケットを使ってリアルタイムWebアプリを作成する方法を調べて、それを使ってサンプルアプリをいくつか作る。
対象  前ステップで作成したブログアプリ
今回やること  投稿一覧に、リアルタイムで更新を反映する。
期間

 2week

2019/12/2 ~ 2019/12/15

 

Step22.Learn GraphQL

概要

GraphQLを使ってAPIを作成する方法を学ぶ。

(RESTとの違い、REST2.0と呼ばれる理由を理解する)

対象  GraphQL
今回やること  GraphQL
期間

 1week

2019/12/16 ~ 2019/22

 

Step23.Look into Graph Databases

概要 グラフモデルを理解する
対象 ・Neo4j
・OrientDB
今回やること ・Neo4j
期間

 1week

2019/12/23 ~ 2019/12/29

 

なかなかボリュームあって、ちょっと分かりづらいですね。。。これらは後ほど、自分用のBacklogで管理する予定です。

週単位で作業計画立ててたら、バッファ期間も含めて、年内でロードマップはほぼ制覇出来そうです。実際は、もう1、2Stepありましたが、まずは上記の23Stepで。

あと、やっぱり職場でもAWSを勉強するように言われているので、AWSも勉強の対象に入れようと思います。

 

具体的になりました。あとは、この計画を実行に移すのみです。

頑張ります。