[ポエム]良いエンジニア・強いエンジニアとは?

!!注意!!

この記事はボク個人の思いの丈であり、誰かをdisるとかそういうものではないし、エンジニアとはこうあるべきとかそういうものではないです。

あくまで個人の意見なのでまあ参考程度に。
こういう人もいるんだな〜とかそういうので。

あと「エンジニア」とかそういうワードも個人の定義的なアレがはいってくるのであしからず。

良い・強いエンジニア?

いきなりだが、「良いエンジニア」「強いエンジニア」とはなんぞや?というの皆さんはどうおもっていますか?
いきなり結論てきなアレなんですが、個人的には「課題解決にまっすぐむいている人」みたいな感じでおもっています。

どういうこと?みたいな感じがあるかもしれないのでなんか例をだして、それについてアレしながら書いていきたいと思う。

ドリルと穴のはなし

有名な話ですね。
マーケティング?コンサル?とかのアレでよく聞くような話。

「ドリルを買う人が欲しいのは『穴』である」

っていうやつですね。
ドリルがほしい理由は穴を作りたいからであって、ドリルを求めてきたからと言ってドリルだけをすすめるのではなく「穴をあけるためのサムシング」も勧めていこうな。
というようなやつ。

同様なことが「エンジニア」についても言えると考えていて、
「良いエンジニア」「強いエンジニア」は、「ドリルがほしい」と言われて「ドリルを渡す」のではなく、「穴がほしい」ということを理解をして更に「なぜ穴がほしいのか」までちゃんと考え解決までできるのが「良いエンジニア」「強いエンジニア」ではないかとおもっています。

「穴がほしい」についてそもそもなぜ穴がほしいのか?
何かを固定するために穴が必要なのか?
であればどれぐらいの重量のものを固定するのか?
そもそも穴が開けられる方の材質は?厚さは?

いろんなものが考えられるかと思います。
結果によってはそもそも穴いらないのでは?となることもあるでしょう。

技術がどうかという話以前に、「本当にやりたいことはなにか」「それを実現するにはどうするのがよいか」をよくよく考えることが大事だと思います。

かんがえるために

どう実現するかということより先に、まず問題・課題を理解する必要があります。
そのためにも文章を読み解く力、聞き出す力、理解する力というのが必要になってくると思っています。

ドリルの話でもそうだけど、「ドリル。なるほど。」で終わってしまったら何がやりたいのかわからないですよね。
なので聞き出さないといけないはずです。

昨今の事情でリモートワーク等になっているところもあるかと思うので、文章でのやりとりも増えたと思います。
なので同様に文章を読み解きなにをしたいのかと言うのを理解するというのも必要ですね。(まあこれはリモートワーク云々関係ないんだけどね)

このあたりができていないと「顧客が本当に必要だったもの」の風刺画のようになってしまいます。

画像1

顧客等々が説明する「ほしいもの」が「ドリル」だとしてそのままドリルを渡すと、木に穴をあける用のドリルを渡してしまって実際は鉄やコンクリートに穴をあけたかったため使えない。
であったり、そもそもビスを止めたかっただけで、ドリルはいらなかった。とかがおきてしまうかもしれません。

つまり、根本的な問題・課題の解決ができないことになってしまいます。

じつげんするために

では問題・課題を理解して次にどうするかというと実際に技術を使っていくわけです。

ここで重要なのは解決する方法を絶対に一つでは無いということです。

フレームワークを導入することが絶対に正しいわけではないし、最新の技術を使うのが絶対に正しいわけではありません。
かと言って古い手法が絶対に正しいわけでもないです。
それぞれ向き不向きがあります。

例えば、
一切動くところがないし一週間後には捨てる静的ページを作りたいだけなのに React.js をぶっこんでみたりとかは、明らかにやりすぎですよね。
(個人の勉強のためとかならわかります)

なので知識として、「どういうフレームワークがあるのか」「どういう言語があるのか」「どういう設計手法があるのか」「どういう開発手法があるのか」というのを知っておくと良いでしょう。

そして各々の技術について、どう使うのかだけでなくそれがどういう仕組で動いているのか、どういう利点がありどういう欠点がありというのをある程度把握しておくのが大事だと思います。
具体的にどういうコードが書かれているのかは理解する必要はありませんが、どういう思想なのかどういう背景があるのかというのは知っておきましょう。(もちろんどういうコードが書かれているか知ることは重要です)

そういうのを知っておくと、どういう"穴"をつくるときにどういう"ツール・技術"を使うべきなのかが選択しやすくなります。

さまざまなちしきをえるために

そういったことを理解・把握するために、基礎的な知識が重要だと個人的には考えています。
もちろん手を動かすことは重要です。ですが、それだけでは知識が深まることはあまりないと思います。

例えばHTMLを書きまくって、HTMLの書き方を覚えたとしましょう。
でもそれだけでは良いHTMLを書けることにはなりませんよね。
セマンティックな書き方、アクセシビリティ、各種リソースの読み込みのための最適化等々は、HTMLを書きまくっても身につきません。

特定のプログラミング言語の関数とかを覚えたとしても、別の言語に変えたらその関数は存在しません。
それがなにをするものなのかどういうアルゴリズムなのかという基礎的な知識を持っていれば、大体問題なく使うことができるはずです。

また基礎的な知識をもっていれば何をしたいのか検索するのも容易になります。
例えば「配列をきれいに並べたい」と考えたとして、知識があれば「ソートだ」となるわけです。なので「Array sort [特定のプログラミング言語の名前]」みたいな検索ができるわけです。
これはかんたんな例なので、「きれいに並べる」とかでも多分出てきますが、別のものではどうかはわかりませんね。

なので基礎的な知識を身につけていくと良いと思います。

まとめ

"どの技術を使う"というのが先ではなく"なにをするのか"を理解して最適であると思う技術を選定するのが大切だと思います。

そのためにも基礎的な知識を固めて置くのがよいかな〜と思います。
そうすることで、課題解決にまっすぐむくことができるようになるかな〜と思います。

この記事が気に入ったらサポートをしてみませんか?