スキル棚卸し(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
セキュリティ対策は詳しくない
GoogleやTwitterなど他サービスの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
セキュリティ
XSS、CSRF
対策などを実施したことがあるが、内容を正確に覚えてはない
SQLインジェクション
知っている
アルゴリズム
多少分かる
AtCoderではまだ茶色
サーバーの設定
何度も設定した経験はある
C
OS
詳しくない
アセンブラ
詳しくない
ミドルウェア
Nginx
名前は知っている
Apache
設定をした経験はある
TCP/IP
IPアドレスが何なのか、DNSが何かは分かる
OSI参照モデルは理解している
http smtpなどプロトコルがいくつかあるのは知っている
暗号化周辺の話はよく知らない