自分が新人だった時を振り返る
情報系の大学でHTMLやC++を使ってたりしました。新卒で受託系のシステム会社に入社しました。
授業で開発があるぐらいにはPCに触れたことがあるレベルが新人のころにつまづいたことを思い出してみました。
3年目ぐらいまで新人だと思って書いてみます。
サーバーってなんですか?
サーバーがなにものかさっぱりわかりませんでした。どこか知らない場所にサーバーがあって、店舗には売ってないような機械があるんだろう。とか思って不思議におもってました。
学生時代も課題提出でサーバーにプログラムをアップするためにtelnetでアクセスをしていましたが、よくわからずコマンドを覚えていました。
サーバーという言葉を当たり前に使う先輩に「サーバー」ってなんですか?って普通に聞いて、「サービスに使うパソコン」と説明されても、「店舗には売ってない特殊なやつなのか」とか思ってたぐらいです。
理解したタイミングは自分でLinuxをインストールしたパソコンを作ってテスト環境を作った時です。サーバーは普通のPCの構成と同じだと一気に理解した記憶がありますね。
Linuxのインストールですら、CUIでインストールしていく作業は不思議でしたが、仮想環境が簡単にできる現代は理解が早いかもしれないですね。
データベースってなんですか?
よくアプリケーションの構成図でデータベースの単語が出るたびに、「これはどこに保存されているものなんですか?」と聞いていました。「データベースです。」とか言われてもさっぱり理解できませんでした。
保存された実態がないのに、なぜ安心して使えるのか。たとえばPCを切ったらデータって無くなるのか??とか、アプリを落としたらなくなるのか??とかいろいろと聞いたけど、納得できる答えがどこになかったから時間がかかりましたね。
SQLを初めて触ったときに、使い方が全く理解できなかったのもデータベースの不思議さを深めた理由だと思いますが、質問したときは全員ぽかーんとさせてしまった記憶があります。
プログラムを書けばソースファイルができるのでイメージできていましたが、データベースをインストールしてSQLを打つとなにか出てくるけど、どこにあるかわからずデータベースが何者かすごく不思議でした。
これを理解できたタイミングはたぶんなく、使っているうちに不思議さがなくなっていき、SQLの便利さを理解していったと思います。
SQL自体の難しさ、奥深さは5,6年エンジニアをやったときにサービスの開発を行なったタイミングで複雑なSQLを扱うようになり、1年ぐらいSQLを勉強していたと思います。
サブクエリに理解するのに時間がかかりましたが、理解してからはSQLを書くのがおもしろかったですね。
それまではORMの簡単なデータ取得しかやっていなかったのと、少しでも複雑になると任せてもらえてなかったんだと自分の技術レベルを思い知らされましたね。
最近ではデータベースがない開発のほうが早く動くので、どうにかデータベースを減らした開発がしたいと思っています。
インスタンスってなんですか?
プログラムに関する用語もあやしいのばかりで、オブジェクト思考ですら難しいもの。と捉えていた時代で、継承されたソースがあるだけで理解できなくなる仕末でした。
classは書けるけど使い方がよくわからずstaticにして使ってたり、カプセル化など理解して使えるレベルではなかったです。
「インスタンスってなに?」と同期に聞かれたときも適当に答えていた記憶があります。
クラスを実体(newして)にして使えるようにしたのがインスタンスです。
よく仕事ができていたなー。と思うから、もっとフォローしてもらう必要があったんでしょうね。
プログラミングが好きな社員はほとんどいなかったから、仕事の進め方で教えてもらうことは多かったけどペアプロすらしなかったなぁー。gitもよくわからなかったし。
ちなみにセキュリティホールのXSS、SQLインジェクション、ディレクトリトラバーサルを埋め込んだことがあるほど知識と対策が弱いプログラマだった。
あとでコードを読んだ人に指摘され修正されたけど、あの時代があるから今があると思えるぐらいミスをしていたなー。
雑記
まじめに取り組めば2,3ヶ月ぐらいで超えそうな内容ですが、仕事しながら超えれなかったのは勉強不足だよね。
きっと必要な知識が違ったんだと思うけど、仕事をこなすことで必死だったんでしょう。
必要な知識はむずかしいですね。