LAMPエンジニアってこういうもんでしょ

こういうもんでしょって話をつらつらと

「エンジニアに向いている人」ってどんな人なのか

最近エンジニアリングの教育資料をアップしているエンジニアを多く見かけるようになりました。
対象者は現職エンジニアと言うよりは、これからエンジニアになりたい人や、他職種ではあるけどエンジニアリングの勉強をしたい人、という切り口です。
システムやITというものが一般化してきて、システムやエンジニアリングに理解があった方がより質の高い生活が出来る、ということだと思います。
実際に学校教育の場でもプログラミングが必修科目になったりしていますし
時代の流れとしてはあっているのかなと思います。

ただ少し思うのは、仕事以外で関わるエンジニア以外の人は漠然と「必要になるかもしれない」という感覚はあるものの
自ら知識を取得しに行っていないということです。
エンジニアがエンジニアとして成立し続けられる理由は自ら学習し続けることにあると思いますし
それをしてこなかったエンジニアが新卒研修と現場での経験という貯金を切り崩し35歳で定年を迎えるのだと思っています。

開発業務はある意味孤独で、実験と発明と応用の繰り返しです。
過去のナレッジを使いまわせる事も多分にありますが、広い世の中から次々に新しい発明が生まれ
それを取り込めるのか、応用出来るのか、あるいは採用しないのかを日々考えながらの作業になります。
そうして作られた製品は一般化していき、ゆくゆくは「当たり前にあるもの」になっていくのだと思います。
プログラミングは日々簡単に書けるように進化していき、もうすぐ非エンジニア職の人がプログラミングをする時代になっていくのだと思いますし
その時にエンジニアリングのスキルがある事は大きなビハインドになるとは思うのですが
その一方で「新しい知識を習得し続ける」というサイクルが作れない人はあっという間に時代に置いていかれると思うのです。
逆に、今から職業エンジニアとして頑張りたいと思っている人は、最低限そこがクリア出来れば大きく可能性が広がるとすら感じます。

 

よく「頭の良さ」とか「論理的思考」とか「数学的な知見」とかが議論に上がりますが
職業エンジニアの多くは研究職ではなく作業者の側面が大きいです。
いかに製品を速く正確に出し続けられるかと、作った製品がどれだけの利益を生み出すかが給料に反映されていきます。
まだシステムエンジニアはたゆまぬ努力でお金が稼げる時代なのかなと思う一方で
エンジニアが夢見るエンジニアはもう少し先の時代に淘汰された先にあるのかなと思ったりします。

Railを捨てて荒野に繰り出す決断をした話

久しぶりの技術ネタです。
今の会社で1年前にRuby on Rails(以下RoR)を採択して
今まさにPHPへの移行を行おうとしています。
技術選定におけるあれこれについての反省を書き連ねて行ければと思います。


前提としてRoRはとても素晴らしいFWです。

RoR disってんのかよこのクソPHPerが!」
という声が聞こえてきそうなので念のため書いておきますが
RoRは本当に素晴らしいFWです。
基本をPHPとしつつPerlもJSもPythonも触ってきましたが
とてもしっかりとしたレールが轢かれていて
ライブラリも豊富にあり
web開発においてとても有力な選択肢のうちの一つだと思いました。
勉強しながらの開発ではありましたが
レールに乗って開発をする楽しさはなかなか面白いと感じる事が出来ました。


でも乗り換えるには理由がある

RoRにおける最大の問題としては
処理におけるブラックボックスが発生しやすいという事だと思います。
これはRubyの問題ではなくFWにおける問題の一つです。
うまくFWにはまっている開発を行う分には良いのですが
FWから逸脱した要件が発生した時にフルスタックフレームワークは牙を剥いて襲ってくるなと感じました。
PHPにおけるLaravelやSymfonyにおいても同様の問題は発生しがちです。
もちろんあらゆる問題を解決するために様々なモジュールやライブラリの開発が行われていますが
根本の解決に繋がらないケースやフレームワークの根底に対してチャレンジングな実装をしているものも多々あると感じます。
特に外部インスタンスに依存するようなAPI開発やNoSQL接続に関しては
かなり神経質にならないといけない上に
ライブラリに合わせて開発を進めてしまった後でライブラリの不具合や仕様要件不足
はたまた開発停止などでライブラリを乗り換えなくてはいけなくなった時に
本当の地獄の始まりをひしひしと感じます。


乗り換えにあたって重視した点

現在のシステムはAWS上で稼働しており
RDS、ElasticsearchService、mongoDB、外部API(http)との接続があります。
データが複数インスタンスに跨って管理されているものを
ひとつの業務システムのデータとして扱わなくてはいけないので
割とゴリゴリとした実装になりがちで
データの複雑性に耐えられる、かつ実装のスピードが確保出来る保守性の高いシステムでなくてはいけません。
技術選定にあたって今回気にしたのは

  • ライブラリの変更が容易である(フレームワークにロックインされない)
  • 技術情報が豊富にある(メジャーである)
  • エンジニアの誰かが中心になれる(詳しい人が内部にいる)
  • 採用が容易である(メジャーである)
  • ソースを追いやすい(困った時には外部から取り込んだライブラリでもソースを追うため)

という点です。


採択にあたっての決め手

選定における条件の中で「ライブラリの変更が容易である」という点を重視したため
今回はマイクロフレームワークを中心に考えることになりました。
社内のエンジニアの技術スタックの中で共通している言語はPHPとJSでしたが
「詳しい人がいる」という点でPHPが有力視されました。
また、過去の職場でマイクロフレームワークでの開発実績があり
今回の要件にマッチしそうという事でSlim3が最終的に選ばれました。
SlimはPHPフレームワークでroutingしか無い、という
マイクロフレームワークの中でもかなりマイクロな構造です。
過去のプロジェクトや個人的な開発のノウハウを投入して移行先のベースは作りましたが
各オブジェクトが疎結合な状態でテストをちゃんと回せる状態になっており
かつライブラリと自作部分を組み合わせて一般的なMVC構造になっているので学習コストも割と低いと思います。


今後の展望

PHPにおいて容易で学習コストが低い故に
低スキルエンジニアを量産してきた歴史がある事は否定できませんが
容易で学習コストが低いからこそ高度な事に手を出しやすいのが今のPHPの良い所だと思います。
もっと綺麗で見通しの良いコードが書ける言語も出てきていますし
どうしても言語特有のバグの問題や
WEBの世界にロックされがちでPHPのタグが気に入らないという意見も受け止めるべきだとは思いますが
食わず嫌いだけでPHPを避けるより
言語選定においてまだまだ有力な選択肢のひとつであるという事を知ってもらえればと思います。


いや本当はRuby使うならSinatraとか使えば良かったじゃんって話なんですけどね。
CodeIgniterじゃなくてSlimってところが今のシステムの悩ましいポイントです。

「自分はこの仕事に向いていないかも」と思った時に読むポエム

新年度が始まって1週間が経ちました。
新卒社員の方は研修まみれの1週間だったり
いきなりOJTという名の元に現場でバリバリ仕事をしていたりするでしょう。
あるいは後輩が出来て振る舞い方がわからなくてまごまごしていたり
教育担当に任命されてビビったりしている先輩もいるかもしれません。
就職にしても転職にしても
環境が変わってしばらくするとたまに出てくる疑惑があります。

「もしかしてこの仕事向いていないんじゃないか」
「この職場でこの先やっていけるのか」

向いている仕事や職場に巡り会える事はとても幸せなことです。
100%向いている環境に身をおける人の方が少ないです。
だからと言って諦める必要は無いと思います。
こういう疑問が湧いてくるタイミングはある意味では大きなチャンスです。
自分を見つめなおし環境を整理してより良い生き方を模索する転機だと思って
向き合っていく必要があると思っています。
なぜなら我々システムエンジニアは課題を論理的に解決していくプロなのですから。
(格好いい事言ったと思っている)


■根底の問題を突き止める

「向いていない」感じる原因は「理想」と「現実」のギャップだと思います。
自分が、あるいは職場がもっとこうだったら良いのに
という想いがどこかにあるために出てくる
理想と現実とのギャップに対する危機感です。
今の環境に対してどういう人が「向いている人」だと考えているのか
という事を一度整理してみた方が良いです。
その時になるべく具体的なエピソードを作って考えましょう。
「明るい人」というのは非常に漠然としています。
「忙しい時に話しかけられても笑顔で対応できる人」なのか
「出社してきた時に誰よりも大きな声で挨拶をする人」なのかで
ニュアンスが大きく変わってきます。
これを洗い出す事によって環境に対する本当に自身が抱いている「不満」が透けて見えてくるはずです。
また採用や配置の際に何を周囲に求められてのものなのかも一緒に洗い出していくと
本当に求めなければいけない「理想」が見えてきやすいかなとも思います。


■今とのギャップを明確にする

理想の状態に対して今の状態というのがどうであるかを洗い出していきます。
誰に見せるものでもないのでなるべく正直に並べていきましょう。
「清潔でオシャレな職場」を求めていても
実際には「食べかけのパンが上司の机の上にずっと置いてある」のかもしれません。
恥ずかしい事や目をそむけたくなる事もあるとは思いますが
正しく現状を認識することもとても大切なことです。
そしてまだ挫けないで下さい。


■どうすれば理想に近づけるかを考える

理想の人物像や職場像が洗い出せたら
そのようにするために自分が出来るアクションを考えていきます。
中には「どうしようもない」と思う事もあると思います。
それはなぜ出来ないのか、という事もきちんと理由をつける事がとても大切です。
具体的なアクションとして定められた事は
継続していくための指標を定めて
継続した時にきちんと理想通りになるイメージが沸くかもよく考えましょう。


■本当に実行するべきかを考える

ここまでの段階は全てこの段階を深く考えるための資料でしかありません。
自身の理想の生き方を比べてみて
実行するべきアクションが自身の美学に反していないかの検証をする必要があります。
圧倒的な実力を持って孤高の存在になりたい人が
「先輩上司後輩同僚分け隔てなくニコニコ接する」なんて目標を掲げても実現出来るはずがないですし
それこそ「向いていない」状態です。
もし自身の生き方が定まっていないのであれば
それはそれとして深く考える必要があると思います。
もしここまで来て今の環境が本当に向いていないと感じるのであれば
自身に向いている環境を獲得するためのアクションを定義して動き出すべきでしょう。
具体的には転職や職種の変更という事になりますが
ここまでの思考の中で新しい環境に何を求めていくべきかが明確になっているはずです。
自身がその環境に対していかに「向いている」人間かをアピール出来れば採用される可能性も高くなると思います。


■まとめ

キャリアカウンセリングでよくやる内容です。
就活セミナーの最初にやる自己分析や転職エージェントとの面談の中でやり取りする内容はこういう感じかなと思います。
大人として認められることもそうですし
プロとして仕事をすることにも共通すると思いますが
きちんと「筋を通す」ことと「腹を括る」ことがとても大事なように思います。
そのためにはきちんと自身と向き合い自身を知り
矛盾の無い生き方をしていかなければなりません。
自分を見つめなおしチャンスはなかなか気が付けないものですし
裸の自分を見つめる事は大きな苦痛を伴う作業でもあります。
しかし大きく成長できるチャンスだと捉えてきちんと向き合える人は
後々幸せになっていくんじゃないかなと感じていたりもします。