HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

「○○ができる」ということ

ここのところ、技術的ネタをまとめる(あらゆる意味での)余裕がないので、なんとなく思ったことを書いてお茶を濁してみるテスト(何)。

普段思っていてもなかなか言い出せない、「こいつを一人前の○○に鍛え上げてくれ‥1年で!」という無茶振りに対する「できるか!!」の一言。(もののたとえです、細かいことは気にしないように(謎))
そもそも一人前って何だよ、とか、一人前ってそんなに安いものだったのかよ、とか(以下略(謎))。

何かを一人前にできるようになるということは、つまりその道のプロになるということだと思うわけだよ。
そもそも自分だって発展途上なのに、人のことにまでかまってられるかっていうのがひとつ(指導などを放棄するという意味ではない)。
もうひとつ、人は、何かができるようにするということは、知識や操作手順、作業手順などのようなものを指してそれを習得させること、そのように勘違いしている人が少なからずいるような気がするということ。

例えば、自動車の運転

まさか、自動車運転免許を持っている人の中で、「初心者マーク」の意味が分からない人などいないだろう‥と信じたいところだが‥
一般的には、教習所に通って車の操作手順や交通規則などの知識を身につけ、教習所の課程を修了。その後、学科試験を受けて合格すれば運転免許証が発行される。
ただ、そんな知識や表面的な技術を身に付けただけでは、まだまだ危なっかしい。なので実際の路上で1年の間、初心者として扱われるわけだが、それを経てもなお足りないものがある。「経験」がそれだ。
運転免許証が発行されるまでにやっていることは、全員が守るべき「ルール」を叩き込むこと。これによって、路上で生き延びるための最低限の技術を身につける。
初心者マークが取れるまでにやっていることは、「危険」を知ること。さまざまな「危険」に遭遇すること。それでも「ルール」が叩き込まれていれば、最悪の事態は避けられるだろう。
そして、初心者マークが取れてなお身に付かないものが、危険を未然に避けるための「予見する力」。これは圧倒的な経験によってしか身に付かない(というのが私の持論)。

「あの車、動きがちょっと怪しいな、近づかないほうがいいかも」「あの横道、なんとなく何か飛び出してきそうだな、ちょっと離れておこう」‥そんなものは、教えて身に付くものではない。今までに自分がどんな危険に遭遇したか、それはどんな場面だったかということを積み上げることによって、初めて予見ができるようになるのである。
そうなって初めて「一人前」と言えるんじゃないだろうか。そんなの、1年じゃあ到底身に付かないし、人に教わるだけで身に付くものでもない。

例えば、医者

なぜ「医者」と思われるかもしれないが、それはドラマ「ドクターX」の影響‥という話は置いておくとして‥

医者の世界がどんななのかは知らないが、まぁ、最初は何も知らない一人の人がいるのだろう。
その人が、人体の組成やら治療の道具を使う技術やら薬の知識やらを習得し、手術や治療などの実施手順を覚え、いずれは一人の医者として実際の患者と相対するのだろう。
その時点で圧倒的に足りないものが「経験」である。
例えば外科手術、「メスで皮膚や肉を切り、患部を切り取って摘出し、皮膚などを縫合する」‥と手順を示すと簡単そうに見えるが、体は人それぞれ違うし、患部の状態も当然違うだろうから、そういった違いに臨機応変に対応できなければいけないし、場合によっては、皮膚を切って開けてみて初めて判明する衝撃の病状というのもあるだろう。そんな場合でも冷静に対処できる力を身につけるには、さまざまな経験を積んでいくしかない。
そんなの、どうしたって1年やそこらで身に付くものではない。

例えば、ITエンジニア

そこに何も知らない一人の人がいるとする。

最初は、「とりあえずこれはオマジナイだよ、こう書けば"Hello World!"って出力されるよ」から始まり、いろんなロジックを書くための構文を覚え、いろんなアルゴリズムやデータ構造を覚え、"オマジナイ"の意味も理解し、そうして、ある程度のプログラムが書ける人ができあがる。
さらに、与えられた設計を元にプログラムを書く力を身に付け、いろんなライブラリを探し使いこなす力を身に付け、そうしてさらに高度なプログラムが書ける人ができあがる。
この辺まできたら、その人のことはプログラマって呼んでいいのかな‥よく分からない。たぶん「経験」が足りないからなのだろう。
プログラムを書いて捨てる(違)だけならそれなりの人でもできる。既存のプログラムの挙動を見て、解析し、くさそうな所をすばやく見つけ出す、いわゆるコードレビューであったりトラブルシューティングであったりするわけだが、そういうことができるようになって初めてちゃんと「プログラマ」って呼んでいいんじゃないかなと思う。
それはさまざまな経験を積んでいくしかない。数をこなすしかない。(と私は思っている)
そんなの、1年やそこらで身に付くものではないし、人に教わるだけで身に付くものでもない。


そこに何も知らない一人の人がいるとする。

最初は、lsとかcpとかmvとかのファイル操作コマンドを覚え、viエディタを使えるようになり、プロセスの状態を見たり、ネットワークの状態を見たり、そんなことをするためのコマンドやら何やらを覚えていく。そうして、ある程度サーバー機の状態を知ることができる人ができあがる。
さらに、与えられた情報を元に、OSを入れたり、サーバーソフトウェアを入れたり、各種設定を要求どおりに行ったりする力を身に付け、そうしてサーバーを構築できる人ができあがる。
この辺まできたら、その人のことはサーバーエンジニアって呼んでいいのかな‥よく分からない。たぶん「経験」が足りないからなのだろう。
手順どおりにやるなら、手順書があればできるし、今はネット上にいろんな情報が転がっている時代。検索してちょっと試せばそれなりにサーバー構築はできてしまう。
運用中のサーバーに何かトラブルが起こったときに、原因と思われる箇所の見当をつけ、原因を探り、問題を見つけ出して対処する、ある程度は手順に従って解決可能ではあるが、経験と勘も非常に重要になってくる。急ぎで復旧させなければならない場合などはなおさらだ。
それにはさまざまな経験を積んでいくしかない。場数を踏むしかない。
そんなの、1年やそこらで身に付くものではないし、人に教わるだけで身に付くものでもない。

で‥

いろんな人の仕事ぶりを見ていると、少なからず「手を動かさない人」が存在する。
もちろん、仕事は遊びではないので、のんびり実験している暇なんてない場合もあるだろう。そういうときには、ネットで調べて得た情報をある程度検証して適用するということも必要である。
ただ、それだけになってしまうと、いざというときの対応力は身に付かないと思うのである。
ディスプレイを見ながらウンウンうなるよりも、さっさとチョンプロを作ってどうなるかを試したほうが、デバッグ出力を入れてみて状態を確認したほうが、たぶん解決は数倍数十倍早い。
若者も年寄りも、おじさんもおばさんも、お兄さんもお姉さんも、手を動かせ、エンジニアたちよ(謎)。



担(誰)「結局、使えない人をさっさと切り捨てる言い訳をしているだけじゃん」
私(誰)「うん、そうだよ」
担(誰)「えっ!?」
私(誰)「えっ!?」