「ちゃんとインプットしたら、ちゃんとアウトプットが出てくるところ」がプログラミングの面白さ
別の記事でプログラミングが面白くてこの道に入ったと話しましたが……
「設計する感覚が必要そう」と思われそうな、このプログラミング。
実は、「整理整頓する感覚」に近いですね。
コンピューターってこっちが言ったことしかできないんですよね。
なので、「いい感じにやっておいて」みたいな、いい加減な指示や設計はできないんです。
でも、ちゃんと命令したらちゃんと動く。
ちゃんとインプットしたら、ちゃんとアウトプットが出てくる。
そこが面白いポイントなんです。
だからプログラミングは、「道筋を立てる感じ」とでも言えばいいのでしょうか。
とにかく全部の要素を細かく分解して考えるんです。
たとえば自販機で飲み物を買うとします。
オフィスの席に座っているのなら、まず「席を立つ」「ドアの方を向く」「ドアのところまで歩く」「ドアが開いていなかったらドアノブをひねってドアを開ける」「ドアが開いていたらそのまま進む」「そのままエレベーターに向かう」「エレベーターが来ていたら開くボタンを押して乗る」「来ていなかったらボタンを押して呼び出して待機する」…etc
こんな感じです。
「論理的思考力」もすごく必要ですけど、「想像力」が求められる仕事だと思います。
先ほどの例で言えば、「扉は、開いているかもしれないし、閉まっているかもしれない」という細部まで、可能性のあるレベルまで落として、イメージしながら仕事をする必要があります。
なぜ「美しいコード」を書く必要があるのか?
「美しいコード」という言い回しを聞いたことがある人もいるかもしれません。
これは端的に言うと、すごく短く、スマートに書かれていることを指しています。
逆に「美しくないコード」はすごくごちゃごちゃしていたり、だらだら書かれていたりして、全然効率的な道筋になっていない。
そういうコードに対しては、同じことが繰り返し書かれていたら一つにまとめたり、効率の悪い部分を外に出して処理させる指示を盛り込んだりします。ですが、こうしたことがはじめから綺麗に整理整頓されていて、非の打ちどころなく組まれていると「美しいコードだな」と感じます。
たとえば、先ほどの自販機の例で言うと、オフィスから自販機に飲み物を買いに行く時も、オフィスから家に帰る時のどちらにおいてもエレベーターを使いますよね?
だったら、エレベーターから下に降りる時の動作=エレベーターが来ているか or 来ていないかは、その部分だけユニークなものとして外出し=選択肢が発生する処理を外に出しておくんです。
そうすれば、目的が異なる二つのコードを一つにまとめることができますよね。
これが美しくないコードの場合は、①自販機に行く ②帰宅する というそれぞれの目的に対して、一つひとつコードを書いた状態になっているわけです。なので、「工数と無駄が多い」と言うことになります。「同じ行程を踏むのなら、そんなところは一つにまとめてしまえばいいじゃない」という考え方をするわけです。
要するにですね「なんでシステムをつくるのか?」ということを考えてみるとわかりやすいんですけど、つまりは「ラクをするためにシステムをつくる」んですよね。
「手作業でやったら何十時間もかかるけど、システムを組んだら数時間でできるじゃん」みたいな。
めんどくさがり屋が全力で「ラクすること」を考え続けると「見える景色」が変わる
だから、エンジニアに向いているのは「めんどくさがり屋さん」がいいと思います。
いかにして、将来ラクをするために"いま頑張れるか"って考えられる人ですね(笑)
そういう人は、将来のキャリアのためにいま頑張って「勉強会」に来るのかもしれません。
一方で、こういった面白さがあるからこそ、「設計やりたいです!」といって入ってきてくれる方もたくさんいます。でも最初は、その「やりたいこと」がそもそもできるのかできないのか? 何日かかるのか? ということが、わからないんですよね。
だから最初は基礎的なところから学んでもらう必要があります。
たとえば、まず最初に学ぶことを先ほどの自販機の話に例えると、「自販機までの道筋を考えてみる」というところから細かく動作を分解して、洗い出す思考の訓練をするわけです。
そこに対して「じゃあこの場合はどうなるの?」といった形でやり取りしながらスキルを鍛えていきます。
その初級レベルのところからでも、はじめての人はとても新鮮に感じるでしょうし、面白く感じられると思いますよ。日常の見え方も変わって来るんじゃないでしょうか。
ファミレスの入り口にあるタッチパネルや回転ずしの回転レールを見て、いろいろ考えてしまうようになるのです。「回転ずしの、あのお寿司は、あのまま流れていくとどうなるんだろう?」みたいな(笑)
もう一つ、エンジニアとして働く上で知っておいてほしいことは、「コミュニケーション能力」が求められるということですね。
長い時間、PCの前で仕事をするので不要と思われがちなんですが、むしろPCの前でずっと仕事をしているからこそ、どこかで一つ認識がズレていると、時間が経ってから大きな差が生まれてしまいます。
完成するまで思い込みで作っていて、「できてから、その間違いに気づいた」みたいなことになれば、一からやり直しになってしまいますから、時間もお金も手間も全部が無駄になります。
ましてや「作り直していたら間に合わない」となると非常にまずいですよね。
だから認識のすり合わせ=コミュニケーション能力は必須能力なんです。
早め早めの判断が必要で、「●●日に完成させるスケジュールだったけど、ちょっと間に合わないな」と感じたら、すぐに誰かに相談するとか、別の手立てを考えるとか、そういう意味でのビジネス的なコミュニケーション能力がとても求められます。
そこがうまくいくと、クライアントからの評価に直結しますし、ラッキーな場合はクライアントから色々と教えてもらえることもあります。
その状態であれば、実績=一定期間以上のエンジニア経験が担保になって、次の仕事の時に高い単価で仕事を受けることができることもあるでしょうし、社内での評価があがって給与があがることにも繋がるでしょう。
ヴェシカは入った後は自分で意欲、やる気をもって「自分で上に行くぞ!」という気持ちが求められます。
でも、頑張ればその分、評価や昇給に繋がる環境があるのは間違いありません。
ぜひ、一緒にお仕事ができることを楽しみにしています。
お待ちしています。
◆木下さんのストーリーをもっと読む◆
株式会社ヴェシカでは一緒に働く仲間を募集しています