前回は、スキルがフルスタックに求められる背景、単一のスキルのみのエンジニアより、マルチなスキルを持つエンジニアが人気となる構図を説明した。そして、現場ですべてを素早く正確に遂行する「1人でなんでもやってくれる人」が「フルスタックエンジニア」として呼ばれる。“やってくれる”を大きくとらえると、以下のようなアクションの実行である。
- 機能やサービスレベルを理解し、複数案から最適なシステム構成を考えられる
- 各種手配をおこない、システム構築に必要なリソースを揃える
- 手を動かして環境を構築、プログラミングをし、システムを作り上げる
- 求められるレベルへ改良を重ねられる
では、具体的に何のスキルをどれぐらいスタックすればよいのか。今回は若手エンジニアがフルスタックを目指すにあたって、どうしていくべきかに触れる。
どこまでやればスタックしたと言えるのか?
システム構築全体を考えるとOS、ミドルウェア、ネットワーク、プログラミング、デザインの5つのセグメントがスタックするべき範囲である。また、各セグメントで「使いこなせる」レベルを目指していくべきだ。「使いこなせる」レベルとは、各セグメントにおいてどうすべきかという考えを自分で持っており、他人に対して堂々と主張できるレベルを指す。
「使いこなせる」レベルとは、どこまでのことなのか。各セグメントについてもう少し具体的な例を交えて説明する。
プログラミングではJavaを例にするが、命名(パッケージ名、クラス名など)に一定のルールを持たせ、いくつかのクラスを読めば他クラスの役割を簡易に想像できるなど、可読性と可予測性に配慮することがあげられる。機能追加が予想される箇所は、あらかじめ抽象クラスやインターフェースを作成しておくなど、追加開発の生産性に配慮できることも必須である。「自分が書いたソースコードは他人がメンテナンスする」という、お作法が身に染みついているのである。
また、QCDのバランスを意識してテストのスコープを決められ、何故そのスコープなのかを説明できること、パフォーマンスを意識しなければならないポイントに鼻が利き、パフォーマンスやハードウェアリソース使用効率を意識したプログラミングができることも必要だ。
ミドルウェアではOracle Databaseを例にするが、プログラミングと同様に可読性の高いテーブル設計やSQLを記述できることが最低限必要だ。また、DBはパフォーマンスのボトルネックとなりやすいため、常にパフォーマンスを意識したテーブル設計やSQLを記述し、パフォーマンスチューニングはできるようになっておくべきである。この際は、実行計画を参照するだけでなく、システムビューやAWR(Automatic Workload Repository)レポートなど製品個別の各種レポートを駆使して、素早く適切な原因調査と、問題解決するための十分な引き出しが求められる。
デザインでは、可読性や操作性を考慮しての情報やボタンの配置と、どのような技術を利用すればどのような操作性が実現できるかを知っていれば十分だろう。「色や形で購買意欲を掻き立てる」という専門的な話は、それだけで一つの仕事として成り立つ。それは専門のデザイナーに任せた方がよいだろう。色や形は巷のウェブサイトを閲覧して、どのようなデザインが多いかをチェックし、認識しておくぐらいで問題ない。
OSやネットワークは、クラウドサービスの発展など技術のコモディティ化によって意識しなくてよいタイミングが増えてきた。今後も、その傾向は続くであろう。ひとまずはクラウドサービスを利用して環境構築し、それらを使いこなせるレベルにしておき、今後の動向にあわせて、必要と判断すれば深く学ぶとよい。
これらを身に着けるには、クラウドサービスの利用をお勧めする。サーバ構築が容易であり、比較的取り組みにくいOSやネットワークを詳細まで意識する必要がなく、またさまざまなプログラミング言語やミドルウェアを扱う経験を積みやすいためである。
まずはプログラミングに5000時間
スタックすべきスキルは多岐に渡る。このため、どこから着手するかを考えすぎて集中できなかったり、幅は出たが深みが出なかったりする場合が多い。初めからすべてを網羅的に身につけようとするのではなく、まずは何か一つの技術を深く身につけて、そこから周辺の技術にも目を向け、スタックする範囲の徐々な拡大をお勧めする。
まずはプログラミングをスタックする。ビジネスニーズをシステムで実現するにはプログラミングは必須スキルであるためだ。パッケージ製品を利用する場合でも、プログラミングの経験をしっかり積んでいるかどうかで、製品内の仕組みに対する理解の深さが変わってくる。
具体的な時間に触れると5000時間はかかることを覚悟しなければならない。この時間を費やせば「使いこなせる」レベルまで到達できるだろう。プログラミング言語にはPHPやPython、Scalaなど色々あるが、やはり、制限がある静的型付き言語のJavaおよびSpringまたはJavaEEを利用したシステム構築は経験しておいた方がよい。