Diary over Finite Fields

515ひかるの日記と雑文

プログラミングで仕事をし始めて感じたギャップ

プログラミングを学ぶのが流行っているらしい。とはいえ、たぶん流行っているのは僕みたいなしがない開発者のおかげではなくて、プログラミングスクールの経営者のブログとかTwitterとか、自分では観測できないような世界で流行っているのだろう。

動機や経過や結果はどうあれ、個人的にはプログラミングを学びたいと一瞬でも思ってくれたなら、それはありがたいことだと思う。無理だとやらずに諦める人のほうが圧倒的に多い(し、残念ながらその直感は正しいことが多い)。それに比べたら、Hello, World だけでもやってみるというのはとても意味があることだ。

一方で、プログラミングを学ぶことと、プログラミングで仕事をすることには結構大きな壁があるように個人的には思う。今日はそんな話。

他人の存在

当たり前だけれど、仕事をする以上一人だけで開発をするということはあんまりない。いや、開発はひとりかもしれないけど、例えば顧客との折衝を担当する人が居たり、スケジュール管理をするPMがいたりする*1。複数人でひとつのプロジェクトをこなすわけだ。

プログラミングをすることはひとりの作業だと思いがちだが、仕事だとそうもいかない。なぜならばシステム(ソフトウェアやプログラム)を欲しているのは他人だからだ。他人のためにコードを書くということがプログラミング学ぶことと決定的に違う。自分本位のプログラムであってはならない。

「運用」を考える

プログラムは作って終わりではない。作ったあとにうまく動くように人手が必要だ。セブンイレブンのレジシステムは新商品を作るたびにマスターデータを更新しているんだろうし、システムがうまく動くようにメンテナンスをし続けるのは当然のことだ。当然のことだけど、あまり明示的に教わることがない。

作った自分が運用し続けるとも限らない。社内システムでも開発者しか使わないならSSHしてサーバー内でコマンド実行というスタイルをとることも可能だけど、営業の人が使いたいともなればブラウザを介すなど工夫が必要かもしれない。

ユーザーは誰か、誰が運用するのか、どんな運用をするのか、ということを考えながら開発をしないといけない。これはとても難しい。なぜならばそれを考えている時点ではプログラムは完成していないからだ。思いついた運用方法が、実は使い勝手が非常に悪いなんてよくある話だ。

必ずしもプログラミングをする必要はない

常々主張していることだけど、必ずしもプログラミングをする必要はない。最近はノーコードとかローコードが流行りだ。誰でも使えるものかはおいておいて、自分でコードを書こうと思ったら書ける、というような人がこうしたツールを使うのは合理的だと思う。

例えば Slack にも Workflow Builder という仕組みがあって、イベントをフックに人にメッセージを送るとかを自動化できる*2。必ずしも Slack の API を活用して GAS とか AWS Lambda つかってコードを書く道を選ばなくてもいい。「プログラミングをしない」という判断もプロのプログラマーには必要だ。

思っているほどコード書かない

プログラミングができるようになればなるほど素早くコードを書けるようになるものだと、かつてはそう思っていた。しかし実際のところは、コードを書かずに済ませられる範囲がどんどん増えて、コードを書いたときに考えることややらなきゃいけないことはあんまり減っていない。コードを1行でも書き加えるのは今でもとても大変だ。

そして仕事ができるようになる、ということはコードを書くようになるからではなくてコードを書かずに済むようになるからだと思った。経験の蓄積で、「これはコードを書かないとどうしようもない」と判断する閾値があがったのだ。

あと「こういうコードは書かなくてもライブラリ(フレームワーク)があるはず」と予測する力も上がった。コードを書くことは難しい。書かなくて済む道をたくさん知ることが、コードを書くコツだ。とはいえ、こういうことはある程度たくさんプログラミングをした経験があるから活きることなのかもしれない(その辺はよくわからない)。

終わりに

思うことをダラダラと書いてみた。こういう記事最近書いてなかったし。

チーム開発の話とかGit使えないと人間扱いされないとかそういう話をしてもいいんだけど、ありきたりすぎてしなかった。ところで人類Git使えて当然と思いすぎじゃないですか。Gitめっちゃ難しいですよ。

IT業界っていってもいろいろありすぎて外野からみると意味不明だよなとか、人々そもそもV字モデルとか知っているのかなとか、思っているのでそういう話をしようと思ったんだけど力尽きたので主観の話になった。結局初心者向けの話ではない気がする。

はぁ、プログラミングって難しいよね。はやく引退したい。

*1:だけどそういうプロジェクトはとても小さなプロジェクトで、だいたいプログラマーの存在は(残念ながら)プロジェクトの成否にあまりかかわらない。こういうケースはたいてい、企画か要件定義が狂って大炎上するか、順当に進むかのどちらかしかない。開発フェーズに来た時には成否は決まっている。本筋とは関係ない。

*2:有料プランのみな気はする。調べてない。