文系ですけど何か問題でも・・経理マンのシステム開発体験談

はじめに

経理マンの起業体験記No.2・・Webサービスの記事で詳細を書きましたが、私はプログラミングを一から勉強しながら、システムを開発してWebサービスで起業を試みたことがあります。

この記事を読んでいる読者の中にも、プログラミングに興味がある方もいらっしゃると思いますし、プログラミングを始めようと思われる理由はいろいろあると思います。

ある程度の大きさの会社で経理をやっていると、会社の組織の中に情報システム部があり、情報システム部との関わりが重要になってきます。
しかし、情報システム部に作ってほしいちょっとしたシステムなどがあっても、情報システム部内の仕事の積まれ具合によって、システム開発の要望が無視され続けるといったことも私は経験しました。

しかし、Webサービスを作り上げた今思うことは、当時情報システム部に作ってほしいと思ったちょっとした機能などは、今の私であれば10日くらいあればできたのではと思っています。
このような訳で、プログラミングを勉強することはとてもいいことだとは思うのですが、勉強する前にいろいろ考えなければならないこともあると考えています。

目的もなくプログラミングを勉強するのは時間の無駄

プログラミングの勉強に関して、私は過去ものすごく無駄なことをやっていたと思うことがあります。
それは、プログラミングの本を買って、パソコンを使って本に書いてあることをひたすら試すといったことです。

これはプログラミングの勉強には違いないのですが、本を一冊読み終えた時残るのはただ勉強を終えたという満足感だけです。
プログラミングの本の構成は驚くほど個性がないというかどれも同じです。
一番初めの課題は、画面に「Hello, world」と表示させるといったものではないかと思います。

ちょっと考えれば分かるのですが、画面に「Hello, world」と表示させたいシステムなど欲しいと思う人はこの世にいない訳です。
「こんなこと勉強して何の役にたつの?」と学生の頃に感じたことがない人がいないくらい、役にたつのかたたないのか分からないものを学ぶことほど苦痛なことはないのです。

私が個人でプログラムの勉強を始める時に絶対必要だと思うのは、こんなシステムをどうしても作りたいという具体的な欲です。
エンジニアとしてお金をもらいながらシステムを作るのであれば、できないとお金がもらえなくなるので、こういった欲はなくてもプログラミングの勉強は自然とやるようになると思います。
しかし、システム開発には縁のない人間がプログラミングを身につけるには、どうしてもシステムを使って叶えたい欲が必要になります。

私はTechAcademyというプログラミングスクールで勉強したことがあります。
TechAcademyの「Webアプリケーションコース」というカリキュラムを受講すると自分の考えたオリジナルのWebサービスを開発することができます。
しかし、どうしても作りたいというシステムが自分の中にないと、結局カリキュラムに出てきた課題のうちの一つを適当にまねて作って、スクールを終了することになります。

私の場合はガチでWebサービスを立ち上げて起業しようとしていたので、こんなサービスを考えていると講師の方に話してみると、カリキュラムを遥かに超えた範囲のプログラミングについて、いろいろ教えていただくことができました。

最後には、カリキュラムを遥かに超えすぎて「サポートの範囲外」とか言ってきた講師が現れたのはちょっと困りましたが、どうしても作りたいという欲があると、頑張ってインターネット上にある情報を組み合わせて何とか完成させることができました。

プログラミングは理数系の専門分野ではない

私は商学部会計学科という理数系とは縁遠い学部を卒業しました。
Webサービスを作ろうと思った時は、プログラミングは理数系の人ではないと無理ではないかと考えていました。

しかし、システム開発を始めてみると、あまり理数系の知識が必要ないことが分かりました。
それよりも、自分がコンピュータにこんなことをしてほしいということを説明する力の方がずっと必要ではないかと思いました。

これはどういうことかというと、プログラミングスクールの講師などにいろいろ質問をすることが多いのですが、この時に講師の方に自分が何ができなくて困っているか伝える必要があるのです。
こういうことを言うと「何を当たり前なことを・・」と言われるかもしれませんが、エンジニアなる人種はちょっと日本語能力が欠けているのではないか、とたまに感じてしまうことが多いのです。

TechAcademyで私を担当していただいた方は、営業マン上がりの方のようで、私の作りたいことを理解して、分かりやすいアドバイスをいただけました。
しかし、普段チャットとかで、あまり担当してもらったことがないエンジニアの方に質問すると、「こいつ、ちゃんと質問を読んでいるのか」と思うような反応が返ってくるのです。
二、三度「そんなことを聞いているのではなく、こういうことを聞いているのです」と質問して、やっとお目当ての答えが聞けるといったことも珍しくありませんでした。

これは人に対する時の問題ですが、コンピュータに対してもコミュニケーション能力が重要ではと思いました。
プログラミングをするのは、語彙が少なく、かなり融通が利かない人に何かやってと頼むようなものです。
語彙が少ないので「OK」か「ダメ」としか反応しないし、システムを回した時の処理結果は出してくれるが、何ゆえこういう結果を出したのかと聞くと「お前がそういう命令を出した」としか答えない、頭脳は優秀だけど使えない部下みたいに感じます。

こういった時に、怒ってディスプレイを殴ってしまうパワハラ行為はご法度で、「何があったんだ・・」「ここをこうすればどうなる・・」という感じで、少ない語彙をフル活用しながら、コンピュータからの反応を根気よくみる粘り強さが必要なのです。

初めは質問できる人を確保しておく必要があります

プログラミングを始めて三か月くらいは、自分が作っているシステムについて真面目に聞いてくれる方が必要だと思います。
この「真面目に」というのがミソで、簡単に分かるエラーであればすぐ教えてくれる方もいるとは思いますが、だんだんプログラムが複雑になってくると、他人の書いたプログラムコードを読むのはめんどくさいことになります。

めんどくさいけど答えてくれる人がいないと、その時点で壁にぶつかって挫折・・というような事態になるかもしれません。
私の場合はTechAcademyで担当していただいた講師の方がいい人だったので、結構いろいろ相談にのってもらいました。

私は利用したことはありませんが、私が勉強したrubyという言語の勉強会が結構あるようです。
こういう勉強会でもいろいろ教えてもらえると思うのですが、参加したことがない私があれこれ言うのも何ですが、自分が作成したコードについてタダでいろいろ教えてもらうのは限界があると思います。

お金を払ってプログラムコードを見てもらう利点は、答える相手もお金をもらっているので真剣に答えざるを得ないことがあると思います。
すぐ見て簡単に答えられることならば、それなりの経験者であればすぐ気づいて教えてくれるとは思うのですが、それ以上のものになるとめんどくさくなって「ちょっとごめんなさい」といった話になるかも・・と思います。

完成までどれくらい時間がかかるか人に聞くのは無理

私がWebサービスを作った時、当初想定した期間を大幅に超えてしまいました。
最初TechAcademyに見積もりをもらった時の回答は「頑張れば一か月、普通で二か月くらい」でした。
これは何も考えていない、ふざけた見積もりでしたが、何も知らない素人が聞くと「こんな期間で大丈夫なんだ」とちょっと本気で思ってしまいました。

Webサービスをリリースする前に、この道十年というプロのエンジニアの方に私が作ったシステムを見てもらいました。
その時に言われたのが、私が作ったWebサービスを彼が作っても6か月はかかると言われました。

しかし、この6か月でも短いと思います。
この6か月というのは「こんなシステムを作ります。これ以上変更はありません。」といった状態からの話で、ここまで決めるのに何度も修正を重ねながらWebサービスを作りました。

この「こんなシステムを作ります」というのを決めるのは「要件定義」と呼ばれています。
会社がシステムを作る時も、この「要件定義」を適当にした結果、システム開発がトラブってしまうことも多いようで、こちらのサイトをみるとどんな風にトラブるのかいろいろ書かれています。

私がこちらの会社に勤めている時に、この「要件定義」という仕事で、結構な額のお金をお客様に請求しているのを見て「なぜ?」と思ったことがあります。
普通に考えたら、どんなシステムを作りたいかなんて、システムの発注者の方は分かっているはずなので、それを単に説明すればいいのでは、などと思っていました。

確かに技術的な要件などはプロのシステム屋にしか分からないところもありますが、それを除いても、最初に全てを決めてしまえるかと言えばそんなこともありません。
どういうことかと言うと、作ったシステムを実際に使っているうちに、ここが使いづらい、ここ思ったように動かない、などということが腐るほど見つかるということなのです。

おそらく経験豊富なプロのシステム屋さんであれば、ここら辺のことも考慮に入れて見積もりを出されるとは思います。
しかし、今まで作ったことがないシステムを受注してしまったといった会社さんにお任せすると、当初の見積もりからかなりずれるか、最悪の場合「ごめんなさい。できません。」と途中でギブアップといった話にもなるのではと思います。

フロントエンド、サーバーサイド、インフラ構築

インターネットをあまり使わなかった時代には、MicrosoftのOfficeのように個々のパソコンにソフトをインストールして使うのが一般的だったと思います。
しかし、現在ではインターネットを利用して、パソコンにソフトをインストールしなくてもサービスを利用できるようになっています。

インターネットを利用したWebサービスを開発するエンジニアは、大きく分けて三種類います。
それは「フロントエンド」「サーバーサイド」「インフラ」の三つです。
名前だけ挙げても意味がないので、Webサービスのおおまかな内容を一緒に、三つのエンジニアの仕事を説明してみたいと思います。

インターネットをつないでURLを打ち込むと、大抵の場合、Topページが表示されます。
これはどんなことをやっているかというと、URLが「サーバー」というインターネットサービスを提供するコンピュータの場所の指定と、「サーバー」にパソコンに対してTopページを表示するような指示を返させることをしています。

「フロントエンド」を担当するエンジニアは、パソコンの画面を表示するプログラムを書く仕事をしています。
この部分の仕事は、難易度が超初心者から超上級者まで幅が広いものになります。
美術系の大学を出たり絵心があるデザイナーの方や、ゲームのような動きの激しい画面を作る方がこの仕事をするのは、ちょっとクリエイティブなまねのできない領域の仕事だと思います。
しかし、よく2~3か月勉強してしてエンジニアとして仕事をしているという方達は、おそらく作るのにそれほど難易度が高くないが、結構手間のかかるという領域の仕事をしているのではと思います。

「サーバーサイド」を担当するエンジニアは、パソコンから出された指示をサーバーに処理をさせて、処理させた結果をパソコンに返すプログラムを書く仕事をしています。
簡単なものだと先ほど説明したTopページ画面を表示させるプログラムを書く仕事から、複雑な計算をサーバーにさせてから結果をパソコンに返すなど、システムの重要な機能を担うプログラムを書く仕事をしています。

「インフラ」を担当するエンジニアは、サーバーの初期設定や、サーバーがきちんと動いているかチェックするなど縁の下の力持ち的な仕事をしています。

エンジニアさん達は基本的にこの三つの中のどれかに属しており、つまり、分業体制がとられています。
そのため、「フロントエンド」に詳しい人は「サーバーサイド」の仕事をよく知らなかったり、「フロントエンド」や「サーバーサイド」のエンジニアが「インフラ」の仕事を全く分からないといったこともあります。
つまり、システム開発を担当するエンジニアの仕事は奥が深く、三つの領域の内の一つの技術を習得するのも結構大変なのです。

しかし、チーム体制などとれない個人でWebサービスを提供するには、この三つの仕事を全て自分でなんとかしてやらないといけない訳です。
私がWebサービスを作った時は、「フロントエンド」と「サーバーサイド」の領域の仕事はやりましたが、「インフラ」まで自前ですることはできなくてHerokuというサービスを利用してしまいました。

ここで私が何を書きたかったというと、Webサービスを作るのは文系でもできないことはないけれど、基本的にそれぞれ習得に時間のかかる三つの領域の技術を身につける必要があるということです。
三つのうち「インフラ」だけは人任せにできるかもしれませんが、任せた会社さんが「インフラ」業務をミスってしまえば自分のところが責任を取らなければならないので、任せたとしてもドキドキする必要があります。

まとめ

今回は、私がWebサービスを開発した時にプログラミングについて感じたことについて、いろいろ書いてみました。
結局何が言いたかったというと、Webサービスをつくるのは、自分で一から開発するのでも、他の会社に開発を依頼するのでも、時間と手間と知識がものすごくかかるということです。

自分で一から開発する場合、これだけのことをやるのに数か月で済むわけがありません。
システム開発を専門にしている他の会社に依頼した場合でも、プロだからあっという間にできるわけでもなく、経験を積んだエンジニアの方がチームを組んだとしても、それなりの時間がかかり、それにつれてお金もかかるわけです。
こう考えるとシステムを作るというのは、とんでもない贅沢なことだなと思います。

ちまたでは、AIがどうのこうのとプログラマが将来なくなる職種だという方もいるようですが、それは私がこの世からいなくなるまで無理なような気がします。
実際に「バック・トゥ・ザ・フューチャー PART2」で2015年に流行っていた「ホバーボード」は、あと何日かで2020年が終わる今日を迎えても、世界中のどこにも存在していない訳ですから。

コメント