はじめに
IT業界は常に進化を続けており、最新技術を習得しなければ時代に取り残されてしまうというプレッシャーを感じている方も多いでしょう。しかし、時間をかけて学んだ知識がすぐに廃れてしまうことも多く、学習コストに見合うリターンを得られる知識を選ぶことが重要です。
そこで本記事では、時間経過の影響を受けにくく、投資効率の高いIT知識について解説します。
目次
- SQL
- バージョン管理システム
- 2進数
- 正規表現
- Linux
- まとめ
SQL
SQLはツールによって微妙な違いはありますが、基本的な構文は一緒です。
これまで、MySQL、PostgreSQL、SQLiteを使ってきましたが、使うツールを変えたからといってSQLの知識を学び直さなくてはならない、ということはありませんでした。
ウェブ開発においてバックエンドエンジニアにとって必須のスキルであるSQLですが、ORM(オブジェクト関係マッピング: Object-Relational Mappingの略。)に頼りすぎてSQLの知識が不足しているエンジニアが多く見受けられます。ORMはSQLの複雑さを抽象化し、開発者の生産性を向上させてくれますが、あくまで抽象化ツールであり、効率的な開発にはSQLの深い理解が不可欠です。
SQLを学ぶことで、データベースの構造を理解し、効率的なクエリを書くことができるようになりますし、データベースのパフォーマンスをチューニングしたり、トラブルシューティングしたりすることができるようにもなります。
SQLを深く学べば他のエンジニアと圧倒的な差がつきますし、今後のキャリアにおいて長く使える知識なので、地味に思えても学習時間を取ってきちんと学ぶべき分野だと考えています。
バージョン管理システム
コミット、ブランチ、マージといったバージョン管理システムの核となる概念は、どのツールを使用しても共通しており、一度理解すれば陳腐化することはありません。
私個人の体験では、最初に覚えたバージョン管理システムはSubversionで、そこでバージョン管理システムの基本的なコンセプトは一通り覚えました。その後に関わったプロジェクトで採用されていたCVS、Mercurialを覚え、Gitにたどり着きましたが、基本的なコンセプトを理解していたのでツールが変わってもすぐに対応することが出来ました。
また、上記のようなコンセプトは陳腐化しない可能性が高いですが、ツールは陳腐化することが良くあるので、特定のツールで基本操作以上に学習コストをかけてコミットするのは一定のリスクがつきまといます。
例えば、私はCVSを最低限使えるように基本的なコマンドは覚えましたが、現在CVSを使っているプロジェクトはほとんどないでしょうし、私も10年以上使っていません。要は知識が陳腐化した、ということです。もしCVSに多大な学習コストをかけていたら、ほぼ無駄になっていたことでしょう。
ちなみにSubversionもMercurialもCVSと同じ状況で、個人的に使う機会がなくコマンドも忘れてしまうので、以前のレポジトリーはすべてGitレポジトリーに変換してしまいました。
このような前置きをした上で矛盾しているように映るかもしれませんが、バージョン管理システムに関しては、特定のツールとしてGitに深くコミットしても良いと個人的には感じており、アーキテクチャや低レベルのコマンドまで学習に時間をかけています。タイトルにあるように普遍的とまでは言えませんが、Gitを覚えておけば間違いないと思えるほどにこの10年でデファクトスタンダードになりました。もちろん将来のことは誰にもわかりませんし、もしかしたらより良いバージョン管理ツールが出てくるかもしれませんが、しばらくGitが主流であり続けることはかなり確率が高く、かける学習コストに対するリターンが高いと感じています。
2進数
ウェブ開発におけるスクリプト言語では直接意識することは少ない2進数ですが、以下のような場面で理解が役立ちます。
例1:Unixファイル権限
Unixシステムでファイル権限を設定するとき、4が読み込み権限、2が書き込み権限、1が実行権限を表し、全ての権限が揃っていると7になります。これは3ビットで0から7までの数字を表現できるという2進数についての理解があれば自然に頭に入ります。
例2: DBカラムやAPIパラメーター定義
DBカラムやAPIパラメーター定義でバイト数の記載があるとき、2進数を理解していないと、それがいくらまでの数なら表現出来るのかがわからなくなり、アプリケーションの用途に適切かどうかが判断できません。
例えばbig intが8バイトという記載があったなら、2進数を理解していれば8バイト=64ビット= 2**64 = 18446744073709551616となることがわかります。
例3: バイナリーサーチ
2進数を理解していると、バイナリーサーチを使ったときに総ノード数に対してどの最大どのくらいの時間がかかるのが理解できます。
例えばバージョン管理システムのgitでは、git bisectという特定のコミットをバイナリーサーチで探すコマンドがあります。このコマンドを使って3000コミットの中からバグの原因となるコミットを探す場合、2進数(と対数)を理解していると、log2(3000) = 約12回でコミットを発見できることが事前にわかります。一方、どのくらいの実行回数が必要なのか事前にわかっていないと、3000という数は途方もない数に見えてしまうかもしれません。
2進数はITの根幹となる知識ですし、数学的な真理なので廃れることもありません。一度覚えれば、キャリアを通して役立つ知識と言って良いでしょう。
正規表現
正規表現は、プラットフォームや言語によって多少の違いはありますが、基本的な構文は共通しており、Ruby、JavaScript、bashなど様々な言語で活用できます。
正規表現の使用例としては、電話番号やURLなど一定のバターンを持ったテキストデータのバリデーション、Webスクレイピングなどがあります。
ウェブに限らず様々な場面で使えますので、投資効率の高いIT知識であると言えるでしょう。
Linux
近年コンテナ技術の普及により、サーバー周りの知識の重要性は以前ほど高くありません。しかし、コンテナを効果的に運用するためには、ファイルシステムやネットワークに関する理解が依然として必要です。
シェル、ファイル権限、ネットワーキングなど、数え切れないほどのIT知識をLinuxに触れることで覚えることが出来ました。
ちなみに筆者は、半ば強制的にLinuxの知識が身につくように、ITエンジニアになりたての頃にあえてデスクトップOSをLinuxにしました。
まとめ
せっかく学習時間をかけても、技術が陳腐化して得られるリターンがすぐになくなってしまうのではタイパが良いとは言えません。投資した時間に見合うリターンを得られる知識こそ、長期的に価値を発揮するIT知識と言えるでしょう。
あれもこれもと最新のトレンドを追いかけるのではなく、長く使えて投資効率が高いIT知識の取得に時間を投資して、エンジニアとしてスキルアップしていきましょう。
