不勉強で自分の職種を端的にどう説明すればいいのかよく悩むのですが、この記事では「WebアプリやスマートフォンアプリのWebAPI開発を担当するにあたり必要になった/なるであろう技能」をまとめているとご理解いただければ幸いです。
一応実装技術に関するものをメインに据えているので、設計に関する技術とかはあんまりというかほとんど言及ないです。
この記事を書いた人のスペック
- 10年目のソフトウェアエンジニア
- 国内の四大卒(CS学士)
- 2012年(5年目)あたりで本格的にJavaからPHPに転向、地道にLaravelとお友達関係を築こうとしているお年頃
- 現在のメインフィールドはスマホゲームのWebAPI開発と運用
レベル1・エンジニアとして業務をするならおそらく必須になるもの
- 案件で使っているプログラミング言語、フレームワークの基礎技能
- RDBの使い方(というかつまるところSQLの書き方)、プログラム(フレームワーク経由含む)からのCRUD操作方法
- 案件によっては上記と同じようなノリでNoSQLのCRUD操作方法
- 個人的経験ではRedisを使うことが多い。SortedSet無しではもう生きていけません。
- WebそのものとWebAPIというものに関する基礎知識、JSONもしくはXMLの基本仕様に対する理解
- ssh接続の方法とLinuxコマンドとシェルに関する基礎知識
- 応用編としてシェルスクリプトの書き方とcronの使い方
- ごく基礎レベルのフロントエンド技能(HTML+CSS+JS)
- ある程度環境が整備された状態からユニットテストを書いて実行できるレベルの理解
- バージョン管理システムの基本的な操作方法
- 2018年1月現在ではgitが主流
レベル1.5・あると何かと役に立つもの
- 正規表現の知識と技術
- やたらと使いたがる人って「ものすごく使いこなせる人」と「てんでダメな人」の両極端な気がする(偏見)
- とはいえ、腕で勝負する系のエンジニアなら一度は拗らせる時期がある気がする(超偏見)
- スプレッドシート(もしくはExcel)に関する簡単な技術
レベル2・実装に対して裁量を持つなら必要になるもの
- プログラミングのパラダイムに関する知識
- プログラミング言語やフレームワークのコアに関する知識、ライブラリに関する知識
- ソースコード全部読めとは言わないが(私も全部は読んだことないし)、必要になったらコア挙動を読んで理解できる能力は必要
- どうしても必要とあらば自分でライブラリ書いたるわ、という気概があるとなお良し
- セキュアプログラミングの知識
- Webアプリでのセキュアプログラミングならまずは徳丸本いきましょう
- 自案件環境にユニットテストを導入するための知識とやり方
- ライブラリはともかく、サービスのコードに、となると意外と一筋縄でいかない(私の技術力が足りないだけかもしれませんが…)
- (1/17追記)CIツールの運用に関する知識
- デプロイのやり方
- 負荷試験のやり方
- SQLチューニングを含めたパフォーマンスチューニングの知識とやり方
- なんとなくレベルのミドルウェアの知識
- CSSフレームワークの存在と使い方
- バックエンドの人ならbootstrap知ってて簡単にでも使えれば十分じゃないかなぁ(懇願モード)
- 外部サービスと通信するときの基礎知識
- 使っている環境でのWebAPIのたたき方とか、認証方法とか
- その他Webの通信仕様に関する知識
- ステータスコードの厳密な意味合いとかそういう類
- (余談)メールアドレスの仕様については「厳密に運用するとすごく面倒」ってことだけ把握していればOKかと思う
- バージョン管理システムを使ったリポジトリの運用、付随してレビューツールと運用方法の知識
- OS等のプラットフォームへアプリを出す場合、プラットフォームの仕様や規約
- スマホアプリの場合、課金まわりやプッシュ通知に関するあたりはポイントかと思う
- 新しく技能が必要になった際、正しく情報収集する力とそれを自分の状況に合わせて取捨選択できる判断力(大体これに集約される気がする)
レベル3・何故か要求されることがあるもの
追記:「何故か」と言ってはみたものの、ここで言及しているものに関しては特に理不尽なものではないです
- 「表示汚い」「どこに何があるか分からない」と言われない程度のデザイン知識というか、画面上の情報を整理する技術
- 担当サービスに関係する法律知識
*1:というか、そもそも管理ツールのUI構築工数とか(下手すると管理ツールの実装工数自体を)誰も意識していないので、管理ツールを作るチームが意識して計算しないと大変なことになります