PHPエンジニアの技術がJavaで通用するか?

PHPエンジニアの技術がJavaで通用するか?

PHPエンジニアの技術がJavaで通用するか?

こんにちはJAVAっちです!
いつもはジェフのマッチレポートを書いてますのでそっちも見てみてください!
今回はJAVAっちが「ちゃんとエンジニアなんだぞ!」ってところをお見せしたいと思います。
ちなみに本記事は、普遍的なことではなく、1人のエンジニアの技術的なエピソードです。
多くのエンジニアには当てはまらない可能性があります。
本件に関して興味のある方へ、1人のエンジニアのサンプルとして参考にしていただければ幸いです。

ほかの言語にチャレンジしたリアルドキュメント

「自分は他の言語のお仕事しても通用するのか?!」
「他のエンジニアは多言語を扱えるのか?」
などなど・・・
未経験の方に限らず経験者のエンジニアでも、意外と不安や疑問に思うことかと思います。

わたくしJAVAっちは、PHPをメインで扱っておりました。
WEB系なのでJavaScriptを扱ったり、たまに事務作業を効率化するために簡単なVBA(エクセル)をしていましたが、PHP以外のバックエンド言語で実務をしたことがありませんでした。

そんな私が、ひょんなことからJavaエンジニアに転身した際に感じたこと、技術的にどのくらい応用できたのかを共有させていただきます。

あれ?!思っていたより書けるぞ・・・!

最初はJavaでアプリケーションを作れるか?思っていたよりも言語の違いについてギャップを感じませんでした !
もちろん苦戦したこともありましたし、先輩からのフォローも多くありました。
すんなりと対応できた要因は少なからず、周りに恵まれたという外部的な要因もあると思います。
PHPエンジニアの私がJavaを意外とすんなり書き始められた要因を深掘りしてみたいと思います。

エンジニアに共通するアルゴリズムへの理解

まずは全てのエンジニアに共通する、プログラミングに対するアルゴリズムの理解があったことが要因だと考えます。
プログラムの処理において、どんなツールを制作する際も根本的な書き方は一緒ですよね。
PHPにしてもJavaでも、同じ動きをしたものを制作するとしたら、表面的な書き方は違えどもほとんど同じことを書いています。

現在、エンジニアとして活躍している方は、何かツールを制作する際にプログラムのコードがなんとなく浮かんでくると思います。
それぐらいの知識がある方は、おそらく問題なく言語の壁は超えられると思います。

偉大なエンジニアたちによる多くの情報

Javaという言語の情報の多さ。それはまさに言語界の王様。(韻を踏んでます!笑)
Javaを扱い始めた当初は、当然ながらわからないことが多くありました。
先ほどは「大体一緒だから思っていたより適応できた」と言いましたが、その裏には適応するまでの時間を多少ですが要しました。
その際に、WEBに情報を残してくれた先輩方には大変お世話になりました。
1つの問題に対して複数の解決策が出てきて困っちゃうくらい情報が豊富です!
エンジニアとして、あるいは社会人として必要な情報収集する能力は重要になってくるかと思います。
そして収集した情報を元に出来ないことを可能にする応用力があれば、別言語での開発も充分に適応できるかと思います。

もちろん苦戦したこともいっぱい

ここまではJAVAっちの感覚や外部的要因で「思っていたより適応できた!」というお話。
実際には言語の違いによるギャップは多くありました。
ここからは実際に扱ってみて、感じた難しいことや発見を共有します。

環境構築のハードル

PHPを触ったことがある方はご存じだと思いますが、PHPの環境開発ツールには「XAMPP」や「MAMP」といった素晴らしい環境構築ツールがあります。
ネットで調べれば比較的簡単に自身のPCで開発環境を整えることができます。
そして、PHPは多くのレンタルサーバーに標準で搭載されているため、WEBへのアップも少ない工数で行う事ができます。

それに比べてJavaは開発環境の構築が難しかったように思います。
PHPに触れるうえで、クラウドサーバーでのゼロからの環境構築や特殊な環境での構築を経験していたので、最初はJavaでの環境構築も難しくないと考えていました。

Javaにも「XAMPP」に似た開発ツールがあるのですが、それを使用するためにはJavaそのものを自身のPCにインストールしなくてはなりません。
しかもただインストールするだけでは動作せず、様々な設定が必要であり、初期動作をさせるまでが大変でした。
(Laravelをコマンドだけで構築するぐらいの方だったら問題ないかも?)

コーディングルール

PHPはコーディングする際にあまりルールがなく、規則性や保守性の薄いコードを書いていても動いてしまいます。
ネガティブな意味ではありません。
ですので多少粗削りなエンジニアでも、動くアプリケーションを制作しやすいです。

そんな自由な言語だからこそ、実際にはプロジェクトで独自のコーディング規約を制定している事が多くあります。
私自身のキャリアでは、あまりコーディング規約が厳しくなかったので、いい意味で伸び伸びとプログラミングの基礎を学べたのかと思います。

それに比べてJavaは、言語としてのルールが多くあります。
乗りと勢いでコーディングしていると、エラーがすぐに出ます。
エラーが出るとそもそも動きません。(いわゆるコンパイルエラー)
でもこちらもネガティブな意味ではありません。
コーディング規約がなくとも、ある程度は保守性のあるコーディングが出来てしまいます。
Javaの開発ツールには、より保守性を向上するためのチェックツールも多くあります。
(もちろん他の言語もある)

上記に加えて、保守性の高い言語を扱うエンジニア達が制定したコーディング規約があったりします。
言語独自の特性と、世の素敵なエンジニアによって、素晴らしく保守性の高いアプリケーションを制作しているのも頷けます。
(Javaっちも頑張ってます!!もっと精進します!!)

シングルスレッドとマルチスレッド

これは本当に目から鱗でした。世界が広がりました。
プログラミングの処理にはスレッドでの処理という概念があります。
私はシングルスレッドしか知りませんでした。
もとよりスレッドでの処理という概念をよく理解していませんでした。
ですが、私たちの生活はほとんどがマルチスレッドの概念で考えられています。
知っていたのに、仕事であるプログラミングには落とし込めていなかったのです。

ここからは、初めての方でもわかるように説明してみますね。
PHPやJavaScriptは基本的に処理がシングルスレッド。(マルチにもできる)
1つの処理が終わってから次の処理が始まります。

【料理で例える】
カレーライスを作ります

野菜を切ります

煮込みます

カレールーが完成

コメを炊きます

コメが炊けたらルーを乗せます

【カレーライスが完成】

ちょとまてちょとまてお兄さん!
8.6秒バズーカじゃなくてもつっこんでしまいますよ!

「煮込んでいる間にお米炊けますよね?」
「お米を炊いている間に野菜切ったり煮込んだりできますよね?」
そう思いませんか?

シングルスレッドでは、1行ずつ上から順に処理を行います。
プログラミングを行う上で、人間にはわかりやすいのですが、多くの方が扱う大規模なシステムでは、大きな負荷がかかります。
マルチスレッドでは、処理を分散させられるので動作が早くなります。
「コメを炊いている間にカレールーを作る」ということができるのです。

しかしマルチスレッドの難しいところは、絶対に早くはなるわけではないし、過去の私のような理解していないエンジニアが開発してしまうと、逆に保守性が下がることもありえます。

「炊飯器に入れるもの=米」であるにも関わらず気が付いたら
「炊飯器に入れるもの=野菜」のようになっていたりする。
(変数が意図しない書き換えを行ってしまう)

意外と当たり前のように思えますが、プログラミングにあてはめると難しいですね。
でも知らないのと知っているのとでは世界が違います。
Javaに限らず他の言語でもスキルを流用できます。

ちなみにPHPやJavaScriptでもマルチスレッドや似たような処理を行うこともできます!
シングルスレッドとマルチスレッドに優劣はなく、実際の開発要件によって使い分けするといいと思います!
シングルスレッドはシンプルなので、マルチスレッドでしか構築できないという制約がなければ、シングルスレッドを意図的に使用するのも問題ないです。

さいごに

PHPエンジニアの技術がJavaで通用するか?
というテーマなのですが、結論1つの言語を扱えるエンジニアは、頑張れば他の言語も扱えると思っています。
その際のハードルはあるにはありますが、プログラミングの基礎は流用できると考えています。

元も子もない事を言いますが、これは言語やエンジニアだけでなく、人間は学習して習得する生き物なのです。
ですので、このブログを読んでいるエンジニア見習いさんも頑張れば出来ます!
私も数年前に「プログラミングは頑張れば出来るなんて嘘だろ!難しいよ!」と思っていました(笑)
しかし、小さな努力の積み重ねで今はエンジニアとしてアプリケーション開発の仕事に従事しています。
(結構さぼっている日もありましたし今でもさぼっている日はよくある)

追記

このブログを最後まで見ていただいたあなた!
Javaっちのジェフ観戦レポートも絶対読んでくださいね!
もし、MRPに興味があって入社することになったら一緒にスタジアムに行きましょう!

エムアールピーでは一緒に会社を盛り上げてくれる仲間を大募集中です!千葉で働きたいエンジニア、営業職の方はぜひ一度カジュアル面談でお話しませんか?あなたからのご連絡をおまちしています!

技術ブログカテゴリの最新記事