スキル棚卸し(2020/5)

スキル棚卸し(2020/5/20)
以下の記事を読んでとても良いと思った人が、現時点での、「自分のできること、できないこと」を正直にリストにまとめみた。という記事をTwitterで見かけたので自分もやってみた

どうやってテクノロジーを追いかけていますか?ジュニアソフトウェア開発者として応募したときにCI/CD、クラウドコンピューティング、Dockerとか大量のことを要求されました。もういっぱいいっぱいです。 - Quora
jp.quora.com


自分の現在のスキルマップとして把握して、今できるできないに限らず、自分の進みたい方向と環境に応じて伸ばしていきたい。

分類は記号をつけた
A
使い方を知っていて、最小限の調査で済むテクノロジー(例:「CI/CDパイプラインのセットアップの仕方を知っている」)
B
企業のインフラで使われていることを知っているテクノロジー(例:「Dockerをいつ、何故使うかは知っている。だけどDockerfileは書いたことがない」)
C
聞いたことはあるけど何者なのか見当がつかないテクノロジー(例:「Kubernetesというのは聞いたことがあるけど、何のために使うのか見当がつかない」)




フロントエンド
A
Javascript
 細かい部分を除いて理解しているが、TypeScriptで書きたい。
TypeScript
 最近あまり触っていないので、本気で書くときにはググりながらになる
 型を意識して書くことで安心感があるので基本的にTypeScriptで書きたい

B
jQurey
 業務で少し使った程度
React
 ほとんど書いたことない。
 4年前、少し触って非同期でレンダリングするテーブルコンポーネントを自作したりした。
Angular
 ほとんど知らない。チュートリアルはやったことある。
node.js
 Expressは少し触ったことがある
 npm用に色々使うイメージが強く、これで何かをするイメージがあまりない
CSS / SASS
 クラスなどを設定して装飾できるのがCSS、SASSはそれをうまく管理できるようにしたものという認識だがSASSは実際に使ったことないのでよく知らない
 FlexBox、Grid Layoutは存在は知ってる
WebPack
 モジュールを管理するときに使うことは知っている
Prettier / Linter関連
 自分で設定を少し変更したくらいであまり使ってない

C
Vue.js
 触ったことない
CSSアニメーション
 アニメーションができることは知っている
 やり方やメリットは知らない
WebGL
 触ったことない

バックエンド
A
Spring
 昔触っていたのである程度は理解している
 最近のものは復習しながらでないと何もできないと思っている
Python
 競馬の機械学習Pythonで実装したのでさまざまなものをフルスクラッチで書くことができる
 テストも実装できる
Java
 さまざまなものをフルスクラッチで書くことができる
C#
 さまざまなものをフルスクラッチで書くことができる

B
WebSocket
 アプリケーションのデモで利用した
Ruby on Rails
 チュートリアルでユーザー管理アプリなどを作った
SQL
 簡単なSQLは使える
 重複レコードの抽出など少し難し目のSQLはググれば作成できる
データベース設計
 複雑なシステムを設計したことがない
 正規化したテーブル設計をすることやインデックスなどを適切に利用することなどは知っている
 データベースはデータ量を考慮した設計をするなどするのは知っている
 ビジネス課題の変化によってデータ量やデータ構造は変わるので最初から最良の設計はできないというイメージがある。
F#
 簡単なCUIアプリケーションを作ったことがある
.Net Framework / .Net Core
 環境に合わせて使うということは知っている
組み込み系 
 Aruduinoでごく簡単なIoTデバイスを制作できる
Go
 Progateのチュートリアルをやった程度
WebAssembly
 Webでネイティブアプリ並のパフォーマンスを発揮できるような技術ということは知っている
機械学習
 競馬の機械学習をやった程度
 Kaggleは使ったことがない
 どういうものに機械学習が向いているのかは分かる
 どういう場合にどういう手法を用いれば最適なのか分からない
認証認可
 Oauth
  セキュリティ対策は詳しくない
  GoogleTwitterなど他サービスのIDを利用してアプリケーションのユーザ認証の代わりにする仕組みという認識
 SSO
  複数サービスで同一IDを利用してログインなどが可能になる仕組みという認識
  Azure ADなどを利用していたが詳しくはない
  ユーザーのグループでの権限管理とかがあるイメージ
 2段階認証
  詳しくない
 ロールの設計
  設定したことがある
設計
 DDD、クリーンアーティクチャ
  名前しか知らない
 デザインパターン
  いくつかは知っている
 Webコンテンツアクセシビリティガイドライン
  アメリカなどで利用するアプリケーションにはしっかりと対応する必要があると聞いたが、対応したことはない
 Swagger
  APIを作成する場合にテスト、API定義の公開などで利用するために少し触った
  詳しくはしらない
 多言語対応
  翻訳は別の人がやっていたため、実際の難しさはよくわかっていない
  アプリケーションやサービス単位のようなある程度大きいくくりで表記ゆれを避ける必要があり、大規模なものであれば専任のチームがあったほうがいいということを前職で感じた
C
C(C言語
 一通り型やメモリ管理などの面倒さを理解している
 ポインタの概念はわかる
 C++を学ぶときに少し復習する程度
C++
 少ししか知らない
 テンプレートというのを聞いたことがあって興味があるが内容を知らない
Kotlin
 JetBrains AcademyのTutorialで勉強中
PHP
 知らない
Elm、Rust、elixir
 名前は知っている

モバイル
C
何もかも触ったことがない
 React Native
 Kotilin
 Swift. Flutter

デスクトップアプリ
A
Eclipse RCP
 利用したアプリケーションを多数作成した
B
.Net Framework
 簡単な計算アプリケーションなどを作成したことがある
C
Unity
 チュートリアルは動かしたことがある
Electron
 名前しか知らない

Azure
Azureについては下記のカテゴリ毎に記載している
https://azure.microsoft.com/ja-jp/services/
A
DevOps
 以前の会社のスクラム開発で活用していた
チーム、個人の権限の管理をしていた
CI / CDパイプラインの作成や管理運用をしていた

B
ID
 以前の会社で複数のアプリケーション間で連携する際にAzure ADの認証を利用していた
 サンプルアプリを自作して連携を確認した
Web
 App ServiceにWebアプリケーションサーバをデプロイし利用していた
 App Service以外は詳しく知らない
コンピューティング
 Virtual Machinesを利用していた
 SSD、かつ良いCPUコアのものを使い通常の開発として利用していた
 Azure FunctionsについてはAzure DevOpsからCI/CDパイプラインの情報を抜き取って一覧化するものを作成した
 それ以外は詳しく知らない
ストレージ
 いくつかのサービスを利用していたが、正確にどれを利用していたかは覚えていない
 非常に簡単に利用できたということは覚えている
コンテナー
 以前の会社で利用しているのは知っていたが、触ることがなかった
 Azure のコンテナーに限らず、Kubernetes、Docker、Containerは使い方、使い勝手を含めて詳細を理解しておきたい
 Containerをうまく扱うためのエンジンがDockerでKubernetesはそのサービスやアプリケーションで複数のContainer同士がうまく連携させるるためのものという認識
セキュリティ
 アプリケーション連携にAzure Active Directoryを利用していた
 ストレージやアプリケーション連携など外部のリソースアクセスの際にAzure Key Vaultを利用していた
 どこまでが外部からアクセスできるかと、開発したアプリケーション間であっても、なんの情報を利用してよいのかという考えが理解されていれば大丈夫だと考えていた
 セキュリティは全般的に知識がないのでクラウドにおいても学習しておきたい
ネットワーク
 設定して利用はしていた
 セキュリティ面でよりよい設定などは完全に理解している
データベース
 Azure SQL Database、Azure Cosmos DBは利用していた
 Azureとはいえ、特に特別な意識なく利用していた
開発者ツール
 Visual Studio, Visual Studio Codeは利用していた
統合
 メッセージングサービスとして利用していた

C
AI + 機械学習
 触ったことがない
Windows Virtual Desktop
 触ったことがない
ハイブリッド環境
 マルチクラウドなどの環境になるほど他社サービスとの連携などをしたことはない
ブロックチェーン
 名前しか知らない
メディア
 趣味で動画配信をしたことがある
モノのインターネット (IoT)
 触ったことがない
モバイル
 触ったことがない
移行
 触ったことがない
管理とガバナンス
 存在は知っている
 実際の本番環境モニタリングはやったことがない
複合現実
 触ったことがない
分析
 触ったことがない

インフラ
A or B
CI/CD
 Jenkins、Azure DevOpsでジョブやジョブを連携するものを作成運用していた
 他のものはよく知らない
Docker
 チュートリアルを見ながら少し動かしたことはある
kubernetes
 コンテナーの運用や連携をやっていくためのものだということしか知らない
Git
 詳しくはないが使っている
 git-flowに則った開発をしていた
チーム開発
 ウォーターフォール開発では要件定義、設計、開発、テスト、運用保守まで一通り経験した
 アジャイル開発もスクラムで行った
スクラム開発
 スクラムマスターの役割での仕事もした
 スクラムマスターの資格はとってない
英語
 インドの開発企業と協力して開発を実施していた
 開発業務において、英語でのコミュニケーションはある程度可能
 細かいニュアンスを伝えたり感じたりするのは難しい

C

Firebase
 名前しか知らない
AWS, Google Cloud Service
 Azureと同様、または近いサービスがあることは知っている
 前職はAzureを使える限り使い、あえてマルチクラウドで運用した方がいい場面がなかったため、詳しくは知らない
IaC
 Teraform、Ansible
  名前だけしかしらない

低レイヤー
A or B
セキュリティ
 XSSCSRF
  対策などを実施したことがあるが、内容を正確に覚えてはない
 SQLインジェクション
  知っている
アルゴリズム
 多少分かる
 AtCoderではまだ茶色
サーバーの設定
 何度も設定した経験はある

C
OS
 詳しくない
アセンブラ
 詳しくない
ミドルウェア
 Nginx
  名前は知っている
 Apache
  設定をした経験はある
TCP/IP
 IPアドレスが何なのか、DNSが何かは分かる
 OSI参照モデルは理解している
 http smtpなどプロトコルがいくつかあるのは知っている
 暗号化周辺の話はよく知らない