misc

Web系エンジニアとしてのスキルポートフォリオをWeb Developer Roadmap2019でチェックしてみる【バックエンド編】

投稿日:2019年6月18日

はじめに

フロントエンド編の続きです。

自分のスキルがどれだけ時代にキャッチアップ出来ているか確認していきます。引き続き、Kamran Ahmedさんのスキルロードマップに従って追って行きます。

Thank you for making a gread roadmap, Mr. Kamran.

チェック時のルール

  • 青い実線に沿って進んでいき、破線の選択肢から経験済みのものをリストアップ。
  • 仕事で使ったことがなくても勉強したことがあるものはカウントしてOK。
  • 載っている技術要素だけチョイス。

チェック開始

サーバサイドはフロントエンドと違い、技術要素というよりはスキル習得の仕方のロードマップになっています。意訳ベースで内容を確認していき、自分の場合はどうなのか当てはめていきます。

1.Pick a Language

「言語を選んで」

Scripting Language

  • 〇 Python
  • 〇 Ruby
  • 〇 PHP
  • 〇 Node.js(TypeScript)

Functional Language

  •   Elixir
  •   Scala
  •   Erlang
  •   Clojure
  •   Haskel
  • 〇 Java
  •   .NET

Other Options

  • 〇 Golang
  •   Rust

私の場合、リストの中で普段使いしている言語はこれくらいです。

2.Practice what you learnt

「勉強した言語を実際に使って練習しよう」

勉強したことを練習し、選んだ言語でコマンドラインアプリケーションをいくつか作成します。

サンプル例。redditのポストを取り出して保存する。ディレクトリ構造のJSONを扱う。それらのJSONを読み込み、ディレクター構造を作成する。毎日行っているタスクを自動化する。

覚えたら使いたくなるのでこれはやりますね。データフォーマットはJSON推しです。

3.Learn Package Manager

「選んだ言語のパッケージマネージャについて学ぶ」

PHPにはcomposer、Node.jsにはnpmとyarn、Pythonにはpip、Rubyにはgemなどがあります。

パッケージマネージャを使用すると、アプリケーションに外部の依存関係を取り入れたり、独自のパッケージを配布したりできます。

どの言語にもライブラリ追加する仕組みがあって使わない方が難しいです。使っている内に自然と覚えてしまうことが殆どかと。

4.Standards and Best Plactices

「標準とベストプラクティスを学ぶ」

それぞれの言語には、独自の標準とベストプラクティスがあります。 それらを勉強してください。 例えば、PHPにはPHP-FIGとPSRがあり、Node.jsには、コミュニティーなどに運営される多くの異なるものがあります。

Node.jsも一時期io.jsに分裂したりしてどっちが正になるのか分からない時期がありました。派生したプロジェクトやよく用いられないパターンよりもまず基本を抑えた方が良い、ということでしょう。

5.Make and Distribute Some Package / Library

「パッケージやライブラリを作って公開する」

いくつかのパッケージ/ライブラリを作成して配布するパッケージを作成して配布し、他の人が使用できるようにします。これまでに学んだ標準とベストプラクティスに従うようにしてください。

作ったライブラリを公開する際も社内的であればNexus3を立ち上げることで、多くの言語をカバーするリポジトリになってくれます。

6.Lean about Testing

「 テストについて学ぶ」

テストの種類はいくつかありますが、ここでは選択した言語で単体テストと統合テストを記述する方法について学びます。 モック、スタブなどのさまざまなテスト用語を理解しましょう

境界値、回帰テスト、同値分割、カバレッジ、ユニットテスト、結合テスト等々の意味が分かっていれば大丈夫ということですかね。採用した言語で使われるテストツールのマジョリティも把握しておくべきですね。

7.Write Tests for the practical steps above

「上記の実用的なステップのテストを書こう」

先に進み、前の手順で実装した実用的なタスクのための単体テストを書いてください。

カバレッジの穴埋めゲームとして楽しんでます。

8.Learn Relational Databases

「リレーショナルデータベースを学ぶ」

いくつかの選択肢がありますが、一つのデータベースを学べば他のデータベースもかなり簡単に理解できるようになります。選択出来なければ取りあえずMySQLを選んでください。でもそれらの違いやユースケースも学んでください。

  • 〇 Oracle
  •   MySQL(MariaDB)
  • 〇 PostgreSQL
  •   MSSQL

私の場合はクリティカルな案件はOracleが多くて、今はそれらもコスト面からPostgreSQLに移行させてるような状況です。

9.Practical Time

「実践する」

これまでに学んだことすべてを使用して簡単なアプリケーションを作成します。 登録、ログイン、そしてCRUDが必要です。 たとえばブログです。 誰でも公開プロフィールページを登録して取得でき、投稿を作成、更新、削除します。公開ページには、作成した投稿が表示されます。

この手の実践はTODOメモなんかも多いですね。

10.Learn Framework

「フレームワークを学ぶ」

選択したプロジェクトと言語に応じて、フレームワークが必要な場合と必要でない場合があります。 いくつかの異なるオプションがあります

PHPならLaravel、Symphony。Node.jsならExpress.js、Hapi.js。KamranさんはGoはフレームワーク使わない方が好みだそう。

私は仮想的なホテル予約サイトを作っていて、各言語のマジョリティフレームワークで同じように実装してみる、とかやっています。

11.Practical Time

「実践する」

9で作ったアプリケーションを10で選んだフレームワークで作成する。

最初はServletを直書きして作っていたものをStrutsやSpringを使って作り変える、とか確かに自然とやってきました。便利だなと思うだけでなくフレームワークがブラックボックスにならないようにしたいです。

12.Learn a No SQL Database

「No SQL Databaseを学ぶ」

まず、それらが何であるか、それらがリレーショナルデータベースとどう違うのか、そしてなぜそれらが必要なのかを理解してください。 いくつかの異なる選択肢があります。さまざまな選択肢を見て、それらがどのように異なるかを見てください。 何か一つ選択しなければならないなら、MongoDBを選択してください

  • 〇 MongoDB
  •   RethinkDB
  •   Cassandra
  •   Couchbase

MongoDBしか使ったことないです。一時期経営難が噂されていましたが2018年末には株価が上がり、経営も大分回復したみたいです。

13.Caching

「キャッシュ」

RedisまたはMemcachedを使用してアプリレベルのキャッシュを実装する方法を学ぶ

  • 〇 Memcached
  • 〇 Redis

自分で使わなくてもGitLab他が使っていて知らずに使っていたりします。

14.Creating RESTful APIs

「REST APIを作る」

RESTful APIの作成RESTを理解し、RESTful APIを作成する方法を学び、Roy Fieldingの元の論文からRESTに関する部分を必ず読んでください。

この論文のCHAPTER5、CHAPTER6当たりですね。「RESTはレガシーシステムをラップする目的にも使えるよ」みたいなことも書いてあります。

15.Authentication / AUthorization Methodologies

「認証、認可の手法」

違いについて知り、それらの実装方法を学びましょう。

  • 〇 OAuth
  • 〇 Basic Authentication
  • 〇 Token Authentication
  • 〇 JWT
  •   OpenID

認証:あなたは~さんですね。
認可:あなたは~していいですよ。

16.Message Brokers

メッセージブローカーについて学び、「なぜ」を理解して1つ選ぶ。 複数の選択肢がありますが、私はRabbitMQまたはKafkaを選びます。 あなたが1つを選びたいならば、今のところRabbitMQの使い方を学びましょう。

  •   RabbitMQ
  •   Kafka

JMSやActiveMQなら「処理時間のかかる別システムへのリクエスト」「システム間の相互監視」用途で採用したことがあります。QueueとTopicの違いと基本的な書き方を知っていれば大丈夫かと思います。

17.Learn a Search Engine

「検索エンジンについて学ぶ」

アプリケーションが大きくなるにつれ、データベースに対する単純なクエリではうまくいきません。検索エンジンを使用する必要があります。 複数の選択肢があり、それぞれに違いがあります。

  • 〇 Elastic Search
  • 〇 Solr
  •   Sphinx

Sphinxはドキュメント生成にしか使ったことが有りませんでした。DBや文書の全文検索にFessを使っているのでESとSolrは自然に使っています。

18.Learn How to Use Docker

「Dockerの使い方を学ぶ」

インフラ屋さんだけでなくソフトウェアエンジニアにも必須になりましたね。一度自分で構築した経験があるミドルなら二度目からはDockerイメージを探すようになりました。

19.Knowledge of Web Servers

「Webサーバの知識」

いくつかの異なる選択肢があります、異なる選択肢を見、それらの違いと制限を理解しましょう。

  • 〇 Apache
  • 〇 Nginx
  •   Caddy
  •   MS IIS

CaddyはHTTP2サーバらしいです。初見でした。多分使うことないかな・・・。

20.Learn how to use Web Sockets

「Web Socketsの使い方を学ぶ」

サーバ側で時間が掛かる処理の進捗をクライアントに伝える為に使ったりしています。

21.Learn GraphQL

必須ではありませんが、気軽に見て、その内容と新しいRESTと呼ばれる理由を確認してください。

イマドキ要素が出てきました。来年あたりにやるプロジェクトでは導入したいと思って勉強中です。

22.Look into Graph Databases

これも必須ではありませんが、Graph Databaseが提供しするものについて少し理解するべきです。

勉強もまだしていません。使いどころがまだ分からないというか。。。

22.All the things that weren’t mentioned above

「上記で述べていない全てのこと」

プロファイリング、静的解析、データドリブン開発、SOAP。

結局全部なんかーい。まぁそれだけ幅広い知識が必要ということですかね。

まとめ

サーバサイドは技術ピックアップではなくスキル習得の仕方を教えてくれました。フロントエンドに比べて流行り廃りが少なく、デファクトスタンダードはある程度決まっています。

「おっ」と目を引くようなビジュアルを作るのがフロントエンド学習のモチベーションとするなら、特定分野の知識を掘り下げ、技術を使ってプロダクトを実現したり問題を解決するのがサーバサイド学習のモチベーションでしょうか。

-misc

執筆者:

関連記事

「エニアグラム」をチームレクリエーションに取り入れてみる

目次1 目的2 エニアグラムって何?3 やってみた結果4 潤滑油としてオススメ5 おまけ 目的 ITプロジェクトに限らず、上司部下関わらず、他人と仕事をしているとこんな状態になることがあります。 新規 …

「TIOBE Index」「RedMonk」「DB-Engines Ranking」のランキング調査方法

何かの裏付けを取りたくて自分でシェアの調査をする時があったりします。 Googleで汎用的な数値を出して、Githubのスター数、npm trendsなど、その分野に特化した数値をプラスアルファしてい …

Web系エンジニアとしてのスキルポートフォリオをWeb Developer Roadmap2019でチェックしてみる【フロントエンド編】

目次1 はじめに2 ロードマップ3 チェック時のルール4 チェック開始4.1 1.HTML、CSS、Basics of JavaScript4.2 2.Package Manager4.3 3.CSS …

Web系エンジニアとしてのスキルポートフォリオをWeb Developer Roadmap2019でチェックしてみる【DevOps編】

目次1 はじめに2 ロードマップ3 チェック時のルール4 チェック開始4.1 1.Learn a Programming Language4.2 2.Understand different OS C …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯現役技術者を目指しています。健康第一。