別にしんどくないブログ

技術のことや読書メモを書いています

僕ができないこと 2019年版

エンジニアを数年やっているとある一定レベルから自分がどれくらいスキルアップしているのか、本当にスキルアップしているのかわからなくなることがあります。
仕事や興味を持ったことに対して調べてコード書いてとしているので、知っていることや経験は日々増えていると思います。
しかし、どういったスキルが身についたかをチェックできておらず漠然と不安があります。

そこで、自分もスキルの棚卸しと毎年スキルアップできているのかを確認するためにもできないことを書き残しておきたいと思います。
内容に関しては、エンジニアとしてあった方がいいだろうなと思うことに絞り込んでいます。
完全に個人的なことなので、興味ない方はそっと閉じていただければ・・・。
手助けできることがあるかもしれないと思う優しい方はさらっと目を通して勉強方法やオススメの本などアドバイスいただけると嬉しいです。

僕ができないこと

インフラ知識はありません

OSのセットアップやnginxなどWebアプリケーションの環境構築。DockerもWebサーバー構築などWebのバックエンドに関しては不自由なく構築できます。あと最近AnsibleでMySQL用のサーバーを構築しました。しかし、運用を考えたインフラ設計や必要なサーバーのスペックを考えることはできません。また、k8sも触ったことがありません。

モバイルアプリ開発はWebほど自信がありません

iOSアプリの開発に関しては仕事でもやっているけど、元からあるやつを改修しているだけ。プライベートでも作ったことはあるけど、とてもストアに配信できるほどの代物ではなかったです。でもSwiftは好きな言語の一つです。

コンピューターサイエンスは自信がありません

情報系の教育を受けていません。そのため、大学などで学んできた人に比べると劣等感を感じることが多いです。僕のコンピューターの基礎知識はIPA基本情報技術者試験応用情報技術者試験を合格したレベルですが、それが役立っているとも思えません。

セキュリティに関する知識はありません

XSSやCORSなどWebに関する知識はたぶん大丈夫だと思いますが、暗号化技術に関する勉強はしたことないです。MD5SHA1はヤバイということは知っていますが、表面的な知識しかありません。
仕事でOWASPのチェックシートとかIPAのチェックシートとかをもとにアプリケーションの脆弱性を調べたことは勉強になりました。

システムプログラミング言語は使いこなせません

C、C++、Rustは触ったことありますが、どれも使いこなせていません。元々プログラミング言語Javaから覚えたのでポインタの概念を理解するのに苦労した覚えがあります。Cは仕事で使いましたし、C++はNode.jsの開発で使いますし、今はRustの勉強を少しずつしています。でもJavaScriptJavaなどWebエンジニアとして仕事でよく使う言語に比べるとかなり能力不足を感じます。

機械学習に関する知識はありません

CNNをふんわりイメージできる程度にしか知識はありません。いや、それもかなり怪しいものです。Tensorflow.jsが出てきたときにちょっとやってみたり、社内の勉強会でjupyter notbookを使って言われるがままに写経したことはありますが、もう覚えていません。

ネットワークに関する知識はありません

家のWifiのセットアップはできます。しかし、ネットワークに関しては苦手意識があります。前述の基本情報技術者試験の合格したとき自己採点したところネットワークの問題はすべて間違えていました。
勉強も全くできていません。社内のネットワークに関してもどうやって構築されているのかわかりません。

OSの知識はありません

OSをインストールすることはできます。Linuxコマンドもある程度知っています。しかし、カーネルの知識やOSがどう作られていて内部的にどう動いているのかは知らないです。勉強がてらGentooのセットアップをしてみたことはありますが、それでOSの内部を学べた感覚はあまりありませんでした。

関数型プログラミング言語は書けません

ScalaHaskellはコードを読んでみたことはありますが、書いたことありません。なんとなく良さはわかりますが、オブジェクト指向と比較できるほどの知識はありません。

監視ツールの使い方は知りません

会社の監視ツールはインフラチームの方が設定してくれました。ダッシュボードを見たりすることはあってもセットアップはしたことがありません。

データ構造とアルゴリズム情報処理技術者試験レベル

クイックソートや2分探索は知っています。でも今すぐコードで書けと言われるとうまくできる自信はありません。基本情報・応用情報技術者試験に合格するぐらいの勉強はしましたが、最近はほとんど忘れたと思います。資格試験の勉強レベルなので当時のレベルもたかが知れていると思います。

GCに関する知識はほぼありません

世代別やmark&sweep、コンパクションがあるのは知っています。それらについて140文字程度なら説明できるかもしれません。しかし、実装はできません。また、詳細を説明するのも自信ありません。

英語は自信がありません

プログラムを書く仕事をする前は英語翻訳の仕事をしていたのですが、その頃も今も英語がうまく話せたと思ったことはありません。翻訳の仕事をしていたときは英語で会話することも多かったですが、いつも自信はありませんでした。留学に行ったことが無いことが劣等感になっていました。一度書いた英文に自信がないので一度Google翻訳で英日して意図通りの日本語になっていることを確認したり、同じような構文や言い回しがないか調べたりしています。同僚にアメリカ人がいたときはチェックしてもらったりしていました。
OSS活動やカンファレンスで海外の方とコミュニケーション取ることがありますが、たまに齟齬が発生します。

デザインの知識はありません

デザインに関して勉強したことはありません。もしデザインの知識があればもうちょいUIとか工夫できたりするのかな、と思うことはあります。

ハードウェアの知識はありません

自作PCとか組んだことありますし、何か不具合があれば多少のことなら修理できる自信はあります。
しかし、CPUやメモリの内部の動作に関しては前述のIPAの試験対策のために勉強した程度の知識しかありません。

ブロックチェーンに関する知識はありません

以前は勉強するモチベーションもありましたが最近の動向は全く追えていません。
ブロックチェーンやっているエンジニアは何をしているのかも想像つかないです。

フロントエンドのFWの一部は書けません

Reactは不自由なく書けると思います。VueもReactほどではないですが書けます。しかし、Angularは動向を追っていません。AngularJS 1.5は会社で書くことありますが、最近のAngularは@angular/cli叩いてFirebase Hostingにホスティングしてみた程度のことしか経験はありません。
Polymerに関しても全く追っていません。Polymer2から3になるときぐらいに少し触ったことがある程度です。今Polymerが生きているのかどうかも知りません。 Backbone、emberは触ったことありません。
jQueryはかなり忘れてますが使えます。

最後に

他にももっといっぱいあると思いますが、今自分に足りていないけどあればいいのになと感じるものをリストアップしました。
雑に書いた部分はありますし、他にも足りていないことはあると思うので随時更新していきたいと思います。
一つでもスキルアップして自信を持てるようになれればと思います。
OSS活動するうえでも必須だし他の方面でも活きるので、まずは英語かな・・・。