![見出し画像](https://assets.st-note.com/production/uploads/images/28953688/rectangle_large_type_2_1550ec723d4dc96dc80e98ee328f1301.jpeg?width=1200)
クレバーなエンジニアになれ
* 初心者は狭く深く
* 中級者は広く深く
まず最低条件として深く知っているということ。
これは専門職をやるうえでの共通項かも知れない。
現代、エンジニアは【供給<需要】という構図になってはいるが、もし一朝一夕の知識で物足りるなら、どこの会社も手が空いている社員にちょこっとエンジニアリングを学習させれば済む話だ。
実際、HTMLのコーディングなどもプログラミングと呼んで良いのなら今や赤児だってエンジニアになれる。
なぜなら現代では小学校でプログラミング教育が始まっているからだ。
少し話が反れるが、皆がプログラミングを学ぶこと自体は良い傾向にあると思う。
しかし、もちろん全員がエンジニアになる必要はない。
では、プログラミングとは大人になってから一部の人しか使わない高校数学のような代物なのか?
否、プログラミングとは【考えること】の道なのだ。
茶道や剣道で学ぶこととは【礼儀】であると言われているように、プログラミングは考えることに剣道の如く【型】を与える。(ダブルミーニングになっていることに気づいただろうか・・・)
考えるということを極限まで極めたいのなら究極の学問と言えるかも知れない。
初心者は狭く深く
まず、一つの言語についてで良い。
その言語だけは自分の知る限りの周囲の人間誰一人にも負けないというくらいまで深めること。
少なくともその程度モチベーションは必要だ。
幾ら需要のある職業とはいえ、時代も人材を選ぶ。
本当にエンジニアはピンキリだが、底辺になってはいけない。
そして一つを深くまで極めれば、それを横に広げるという努力をするだけで中級者になれるのだ。あなたを追い詰めるのは、あなたしかいない。
あなたを追い込めるのは、あなたしかいない。
自分に厳しく、1日ごとに進歩を求めるのだ。
中級者は広く深く
広く深くとは、多くのエンジニアリングスキル、言語、フレームワーク、デザインパターン、考え方、そしてアーキテクチャ(設計)についての知識を出来るだけ多く、しかもそのそれぞれを、さわり程度でなく最低限自分の力で進行していけるレベルまで深めるということ。
自分が遂行可能なものを(上記のものごちゃ混ぜでよい)30-40個くらい挙げられたらひとまず良いのではないだろうか?
まず、深く知らないことには意味をなさない。見聞を広げておくことはプラスにはなるのだが、そこからあまり深くもない知識を実用的な領域へ広げていけるだろうか?
そしてなぜ、知識の広さを求めるのか?
それは、最適解を導く術を得るためだ。
これは個人でエンジニアをやるならとても大切で、チーム開発に参画する者にとっても、一目置かれる存在となるための必要条件である。
まず、最適解とは何か?
費用対効果の高い開発を行うことだ。
費用対効果の高い開発を行うにはどうすればよいか?
プロジェクト開始以前、または進行中においても、どの技術体系や言語、フレームワークやサービスを用いて開発をすれば最短の時間や手間(人月)で成果物を完成させられるか?
それを導き出すには、それらを比較しないといけないので、それら多くの知識のひとつひとつを用いて最初から最後まで小さなものでもいいので作るという経験をしておかなくてはならない。
これは地道に時間をかけてやるしかないのだ。
そして、広く深くの真の意味。それは自分の得意分野や知っていることで、事を済まそうとするのではなく、これからやろうとすることに合わせて最も向いているものを選ぶのだ。
自分の場合、むしろ自分が既に深めているスキルを意識的に使わないようにしてきた。
そうすることで、より広く深いエンジニアになれるからだ。
言語によっては、ある分野にひどく精通しているもの、中にはその分野のためだけに作られた言語もあるし、これから作りたいものが最初からほぼ出来ちゃってるようなフレームワークだってある。
すごく極端で分かりやすい例を挙げると、PHPで一からブログサイトを作るよりも、ワードプレスをベースにするほうが早い。
多少カスタマイズが必要なら自家製プラグインを開発すればよい。
この例で言えば、前提としてワードプレスを知っていなければこんな発想は生まれてこないだろうし、深く知らなければ、痒いところに手が届かないから使わない、だとかサイトの構成が作りたい物と全く違う、で終わってしまう。
だが、実際深く知っているとサイトの構成もテーマの作成で何とでもなるし、プラグイン作成を行えば何にだって化ける。
実際自分の場合、ウェブサイトではなくスマホアプリのバックエンドにワードプレスを使ってみた。
ワードプレスのダッシュボードやコントロールパネルのインターフェース、権限周りの仕様が作りたい物の需要を満たしていた。
そこに柔軟性が加われば、ブログサイトとしてでなくとも、コンテンツをJsonなどの形式で配信できるAPIサーバーとして使うという発想も出てくる。
また、さらに広く深く知ることで、選択も異なってくるかも知れない。
ワードプレスの悪い面だって沢山あるし、グラフィカルなコンテンツを提供しないのなら、もっとそれに特化したものだってある。
しかし敢えてこれを選んだのは、手っ取り早いし「ダサい」やり方だからだ。
ダサいということは、ワードプレスというよく知られいて、カジュアルで、エンジニアでなくとも制御できるものを敢えて使ったという意味だ。
これは少し哲学的な話に聞こえるかも知れないが、専門的なスキルや知識を使わずに済むなら、それにこしたことがない、という発想だ。
言い方が悪いかも知れないが、生半可にエンジニアリングを嗜んだ者ほど、特に難しいことや自分が精通している知識を総動員したがる傾向にある。
つまり話を戻すと、最適解とは「可能なら何もやらないこと」だ。
これが実のところ本質なのだと思う。
可能なら何もやらない。
可能な限り何もやらない。
可能な限り最小限に。
可能な限り簡単に。
可能な限り普遍的に。
可能な限り汎用的に。
ここから別の例も考える。
一定数の人に、とあるイベントについて告知するためにウェブサイトを立ち上げようという話になったとする。
でも、その一定数というのがたったの百人程度だったならどうか?
それなら自分はサイトなんか作らない。
SNSでつぶやけば良いだけのことだし、SNSが無い時代ならA4用紙に手書きで一枚作成し人通りのあるところに貼らせて貰うのも、エンジニア自らポケットティッシュを100個配るのも代替案としては機能するし、サイトを立ち上げるほどコストがかからないはずだ。
エンジニアリングスキルを活用するより、誰にでも出来るポケットティッシュ配りをやったほうが専門知識を使わないから良いのだ。
だが、実際はそんなことにはならないと思うので安心してエンジニアを目指して欲しい。
たとえば、あなたが派遣や常駐で企業に出向いて働いているとする。
すると、お茶くみもごみ出し当番も回ってこないとほぼ断言できる。
なぜか?
またしても費用対効果の話になるのだが、企業からすればエンジニアは単価が高いのでそんなことをさせるのは割に合わないからだ。
現に自分自身は勤務時間中はお茶くみでも肩もみでも喜んで致します!というスタンスだった。
専門知識を使わないで報酬を得られる方がスマートだと分かっていたからだ。
でも一度もそのような雑務を任されることはなかったし、直接こう言われたこともある。
給与の面で割に合わないから雑務は頼まない、と。
だから、あなたもエンジニアになって誇りを手に入れて欲しい。
この記事が気に入ったらサポートをしてみませんか?