見出し画像

ビジネス職の人間がエンジニア職の理解を深めるためにアプリ作ってみたら見えてきたこと

初めに、普段の自分の業務を紹介させていただきます。現在サイバーエージェントのAI事業本部にて、世界Tpo5の規模を誇るアパレル企業のCRMシステム及びアプリ開発のプロジェクトマネージャーをさせて頂いております。
その中で、開発に関する知識をつけないとやばいなという危機感を感じたので、実際に自分でコーディングをしてみようと思い、Pythonを使ってwebアプリの制作をしてみました。
今回はその際に得ることができたインサイトを記載していこうと思います。
なるべくIT企業の方全般に通じる内容なるように頑張りますので、是非最後まで読んでください!

まず、今回何をしたのかということを簡単に記述します。
今回は、Pythonというプログラミング言語のdjangoというwebアプリ開発のためのフレームワークを使って、ブログ投稿ができるwebアプリを開発しました。Python以外にも、マークアップ言語のHtml,CSSも利用しました。また、開発環境を用意するために、Macのターミナルで仮想環境も作成しました。開発の中では、ユーザーが投稿できる機能と、コメントできる機能と、それぞれ削除できる機能と、admin用の管理画面を作りました。もちろんデータベースと連携もしています。
おそらく、ここまで読んでわかると思うのですが、具体的な開発の話をしても専門性が高くて退屈になると思いますので、早速本題に移ります。

目的意識あり開発の重要性

開発を行うにあたって、あなたの関心事項はなんですか?
コスパですか?ビジネスインパクトですか?運用時のコミットですか?技術的な挑戦ですか?個人の自己実現ですか?・・・
この関心事項の引き出しを増やすことが今回の開発の目的でした。
この引き出しの多さが、開発の多面的な成功をもたらすと考えているからです。
実際に開発をしてみて思ったことは、ただただコードを書くのは退屈であるということです。このコードを書いた先にどんな未来が待っているのか、そしてそれが意味するものはなんなのかを考えながら作ることがとても重要であり、それのあり方次第でアウトプットの質も変化するだろうと思いました。
これは結構当たり前のことで、開発とは表現と捉えることができます。我々は普段バーバルやノンバーバルで様々なことを表現しています。アーティストは音楽や絵します。作家は文章で表現します。エンジニアはコードで表現するということです。

今から、「あーー」って発声してみてください。

どのくらい続けることができましたか?ほとんどの人が発声すらしなかったもしくは、3秒程度じゃなかったですか?
なんの目的意識もない表現といいうのは退屈であるということです。
これと一緒で、無意味なコーディングは退屈であり続けることができません。
では、今回の自分の仕事における開発において、エンジニアの方々が目的意識を持てるようになるには何が必要なのでしょうか。
それは引き出しを見つけてあげることだと思います。仕事はビジネスで成り立ちます。なので、ビジネスの引き出しを共有することで、仕事における開発の目的意識が見つかるのです。個人で開発するときは場合によってはビジネスの引き出しは不要ですが、仕事の場合は必要です。
この開発を達成することで、こんな未来が待っていて、それはつまりこういうことです。改めて、ビジネスとエンジニアの密なコミュニケーションが必要であることがわかりました。
自分の知っているビジネス職に、エンジニアは理解できないから話せないという人がいました。そんな方は、別に技術的な話をする必要はないので、是非目的意識を話してみてください。
「自分はコーディングが好きなんだ!」という方にはあまり必要ないかも知れないので、そこはケースバイケースです。

エンジニアの職種理解

開発を行うときは、複数人で開発します。そのため機能が論理的物理的に分離することで、システムの性能と開発・保守効率が向上する3層アーキテクチャで行うことが多いです。
3層アーキテクチャとは、2層のクライアントサーバー型システムを「プレゼンテーション層」「ファンクション層」「データ層」の3層に分割して構築するシステムのことです。
ざっくりですが、この層ごとに専門のエンジニアが存在します。
しかし、アウトプットは三位一体です。なので、上記の目的意識の話は全員に通ずる話だと思います。
では、それぞれの職種ごとの関心事項は同じなのでしょうか?
それは違います。UIを構築するエンジニアの皆さんは、基本的にデザイナーの作成したデザインを実装します。つまり明確な正解が存在します。もちろん、仕様によってはエンジニアのチャレンジにある部分はあると思います。
自分の感覚としては、ジグゾーパズルをやるのと似ています。最終的に出てくる絵は同じなのですが、端っこから攻める人もいればまばらに作る人もいます。どちらが効率的なのか、基本的な関心事項はそこになると思います。
それ以外のデータに関するエンジニアの皆さんに関しては、考え方が全く異なると思います。より論理的になます。感覚としては高度な数学を解くイメージです。答えを求める方法は何通りも存在しますが、人によってセンスが違いますし、順番を途中で間違えれば正しい答えは出ません。(UIに関してはどこから実装しても基本的には問題ないということ)関心事項としては、リクエストの処理速度だったり、安全性、保守性と高度な要求はこちらが重要になります。
実際にエンジニアさんと話すときも、フロントエンドの話は割と万人が理解できる内容ですが、バックエンドの話の場合は専門性が高いように感じると思います。
これも抽象化してみると当たり前かも知れません。

hanaを表現してください

と言われたらあなたは何をアウトプットしますか?鼻や花の絵を描いたり、触ったり、漢字にしたりする人もいるでしょう。どれもアウトプットする方法が決まれば簡単なことです。(水生で描くか油性でかくかとか、細かい部分を決める必要はあるが、目に見えるし特性もわかるから理解しやすい)
多少強引かも知れませんが、フロントエンジニアはこの表現部分。バックエンドエンジニアはアウトプットの実現方法を考える人だと思ってもいいかもしれません。
そんなことを開発をしてみて感じました。

このようなことを実際に開発をしてみて感じました。技術的に関する理解や挑戦についてはまだ理解は浅いですが、具体的にどんなことを考えて、何をしているのかという全体感の理解に繋がるいい機会だったと思っています。
引き続き趣味の領域で開発をして行ってみたいと思います。

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