20代前半で実質技術部長を務めている私が、これまでどうITを勉強してきたかを振り返る
2015-10-08
どうも。
タイトルはちょっと盛りました。零細企業なので技術部長とか大したことないです。エンジニア数人しかいないので。
ただ、これまで結構「君は優秀だね!」と言われる機会が多かったので、そう言われるまでに至った経緯を、「勉強してきたこと」という面から語ってみたいと思います。
現状の私
まず振り返る前に、私の現状について記しておきます。
- 自称フルスタックエンジニア
- ベンダー資格数種類保持
- 営業トークもちょっぴり得意
- 新卒入社後2年連続で社内表彰を受ける
- 転職した2社目で、既に炎上していたトラブルを終結させたとして、英雄になる
こうなるまでの軌跡をこれから書いていきます。同年代の方は、参考にするなり見下すなりしてください。
小学校時代
私は、パソコンを小学校5年生のときに買い与えられました。忘れもしません。他の何よりも面白いおもちゃでしたから。
OSはWindows XPです。
そこで小学生にしてネットゲーム廃人となり、ネトゲ友人との交流の場として、「ギルド」と呼ばれるゲーム内のチームのポータルサイトやブログを始めました。
そこで、HTMLを覚えました。今思えば、初めての習得した情報技術です。
また、まだ当時はシステムのセキュリティがかなり弱く、とあるネットゲームのデータベースファイルを改ざんして、不正にパラメータを有利なものにしたりして遊んだりもしました(時効なので許してください)。
このときに、SQLよりも先に、データベースの構造について知りました。
当時は勉強だという気持ちは一切ありませんでしたが、振り返って考えてみると、学校で習う国語や社会の数百倍数千倍も役に立つ貴重な経験でした。今はどこもセキュリティガチガチで、そんなこと容易にはできませんからね。
そんな小学生でした。
高専時代
中学時代は部活ばかりしていたので何もありません。毎日動画を見ていたりはしましたが。
そして高専(工業高等専門学校という高校と専門学校が混ざったような学校)に入学し、ここからきちんとした情報技術を授業で学び始めました。
まずポケットコンピューター(ポケコン)というプログラミングができる高機能電卓のようなもので、BASIC言語を学びました。これが結構面白くて、ポケコンのドットの画面に点を打ったり、キー入力を受け付けて処理したりなどができるので、使いようによってはテトリスやスネークのようなゲームが比較的簡単に作成できます。カラーではないのでぷよぷよは無理です。
これが初めて学んだプログラミングでした。
次に学んだのがC言語です。
授業で取り扱っていたのは、標準偏差や円周率の算出といった数学的な式の近似値を求めるというものが多く、正直あまり面白い印象はなかったですが、C系の基本的な文法を学べた良い機会でした。
そんなこんなで、次、Javaを授業で学習しました。
初めてのオブジェクト指向言語で、「なんでオブジェクト指向である必要があるんだ??」なんて当時は思っていました。が、ここで学んだことも結果的には将来非常に役に立ちました。
授業で学んだのプログラミング言語は以上です。
情報系の学校だったので、プログラミングだけではなく、論理演算やコンピューターの基礎といったことも並行して学べ、今でも結構この学校に進んだことはいい選択だったと思っています。試験の内容も、そのまま基本情報技術者試験で出るような内容でしたし。ただ、情報系以外の文系や電気・電子系の勉強をさせられたのは、ほぼほぼ無駄だったと思います。
授業の他には、卒業研究でArduinoを使った研究を行ったためArduino言語を覚え、Arduino基板との連携にProcessing言語を使い、画面に出力するようにしたため、Processingも学びました。
これら2つの言語はCライクな文法で、なおかつ簡単な記述ですぐに動作するため、非常に面白かったです。機会のある方は是非やってみてください。普通に面白いですよ。
このような感じで順調に基礎知識を身につけ、高専を卒業後、就職しました。
新卒入社 中小企業 SIer
新卒入社後は、結構勉強しました。恐らく、学生時代の10倍以上はしました。学生時代はただ楽しいからやっていたし、元から就職する気だったので成績などどうでもよく、試験も赤点さえ取らなければいいやという気構えで挑んでいたので、本気で勉強したのは人生でここが初めてでした。
会社がネットワークやインフラ方面の事業を展開していたため、ネットワークについてただひたすらに勉強しました。おかげで、CCNAやCCNPといった資格を取得することができました。受検費を出してくれた会社に感謝です。
ただ、ネットワークというものは原理こそ勉強して、自由にネットワークを構築できるようになったとしても、それはネットワーク機器の機能でできる範囲でしかできません。つまりただネットワーク機器を"使う側"なのであって、"作る側"ではないのです。いざ何かトラブルがあったときに、ネットワークエンジニアはネットワーク機器を作っているベンダーに問い合わせることしかできません。
私は小さい頃からずーっと、何かを"作る側"になりたいと思っていたし、"使う側"で終わりたくはないと思っていたので、ネットワークの勉強がひととおり終了したと同時に、サーバの勉強を独学で開始しました。
また、この間、社内で業務効率化を推し進める制度があったため、Excel VBAをひととおりマスターし、様々な雑務を効率化していきました。マシンパワーが必要な割と大きなデータ処理は、C言語で書いたプログラムを動作させ、業務を効率化させました。
Excel VBAよりもGUIの拡張性を持たせたいという欲望に耐え切れず、Visual BASICやC#を勉強し、少しデスクトップアプリケーションを開発した時期もあります。
時には、AutoHotkeyやUWSCというWindowsのGUI操作を自動化することができるソフトを駆使して、極力機械に仕事をさせ、自分はサボるという能力を身につけていきました。
その成果もあってか、業務効率化の制度の社内表彰を2年連続で受け、会社からお小遣いを貰いました。
これらの経験から、「ただ長く働くことはバカのすること。頭を使ってサボることが重要。」という私の考え方が形成された気がします。
この間のサボれる時間を利用して、私はサーバの勉強を進め、LPICを取得しました。そして、サーバに関しても理解があると会社から評価されたからか、仮想化技術の研究会やVMwareの講習会に参加させてもらいました。ひととおり仮想化やクラウドコンピューティングについても、ここで習得しました(VMware, VirtualBox, KVM, Hyper-V, Vagrant, Chef)。
プライベートな時間には、PerlやPythonといったスクリプト言語を勉強して、CGIでHTML/CSS/JavaScriptを書き出すWebアプリケーションを作ったりもしました。このとき作成したのは、確か辞書API・変換APIを使って「しりとり」を無限に続けていく、という何の意味もないアプリだったと思います。
この頃にはもう、ネットワークだとかインフラだとかはもうどうでもよくて、プログラマーになりたくて仕方なくなってしまっていました。勉強って、「知る」って、怖いですね。
そして、転職です。
2社目 零細企業 Webアプリケーション開発会社
現職です。まだ23歳なので。ようやく"作る側"に近づいてきました。
と、思いきや。私が転職するちょうど1ヶ月ほど前に、納品しているWebアプリケーションを動かしているWebサーバでトラブルがあったらしく、最初の1ヶ月はその対応に追われました。
だって、"インフラできる人が私しかいない"んですもの。愕然としましたよ、そりゃ。Webアプリケーション開発会社なのに、サーバがわからない、デザイナー上がりの基礎も何にもなっていないPHPプログラマーばっかりなんですから。
ここで、世間のエンジニア不足、もとい優秀なエンジニア不足を痛感しました。今までこの会社にはインフラのできるエンジニアが入社したことがないようで、解決したときにはひどく感激された記憶があります。内心、こんなんでよく今までやってきたな、と思っていましたが。
そんなこんなで入社したもんですから、大体ひととおりの技術は広く浅く知っているから余裕だろう、と当時は考えていましたが、いざプログラマーになってみると結構知らないことが多かったです。
Gitなんて本格的に使ったことはなかったし、PHPは知っていましたがそのフレームワークについては全く理解がなかったし、Webアプリケーションに脆弱性を作りこまない基礎知識だとかWebサーバやデータベースサーバのチューニングだとかも、転職してから必死で勉強しました。
また、1社目と違って中小企業ではなく零細企業なので、サーバはホスティングかクラウドが主流で、オンプレミスなんて論外という環境だったので、その辺りのサーバ事情にも詳しくなりました。
おかげで、社内ではトップクラスのエンジニアとして認識されるようになりました。エンジニアの人数少ないから大したことないし、本当は知らないことも多いんですけどね。エンジニアは「自分より優秀なエンジニアがどれくらい優秀なのか」ということを認識できない生き物ですから、当然といえば当然です。
そうして今に至ります。
まとめ
今日はIT技術からみる個人的な経緯を書いてみました。こうやって振り返ってみると、いろいろ勉強してきたんだなぁ……という気になります。
そして、将来はどんな道を歩いているのか、期待しながらこれからも生きていきます。