プログラマーのおしごと
今日は成人の日。日付も成人年齢も自分の頃とは違ってしまいましたが、将来について考えている方もいらっしゃるかと。そこで、30年近くいわゆる「プログラマー」をしていた立場から、プログラマーのお仕事を紹介しておきます。なお、諸説ございます。
そもそもプログラマとは?
実は一口で「プログラマー」と言っても、具体的にどんな立場でどんな仕事をするかはかなり違います。「プログラマー」の解釈自体が人によっては大きく違い、論争になる程。そのためよくある小学生とか高校生とかに聞いた「なりたい職業ランキング」に出てくる「プログラマー」も実際にはかなりざっくりしたものになります。
すごくざっくり言えば何らかのコンピュータープログラムをつくる人というところくらいまでなら何とか多くの人と合意できるかと思います。
なお、プログラマは自身を「プログラマー」とは呼びませんが、ここでは一般的な末尾の長音をつけた表記をしておきます。
プログラムをつくるためにすることは?
小学生くらいの言う「プログラマー」と言うのは、おそらくSwitchやスマホなどのゲームをつくる人のことでしょうか。あるいはマイクラですかね。もうちょっと歳をとるとそれ以外にも様々なプログラムがあることに気づくかと思います。
いずれにしろ、プログラマーの仕事はプログラムをつくることと思っていると思います。こういう時によく思い浮かべるのはドラマやマンガなんかでよくある、いきなりキーボードをすごい勢いで叩いてプログラムをまさに書いていくような行動かもしれません。
まあ、勢いはともかくとして、ソースコード、あるいは単にソースと呼ばれるプログラムの元を書かなければ話にならないのは確かです。でも、それだけで終わると思ってませんか。
普通はそこから始まらないし、そこで終わりません。
プログラムを書く時間は実は2割程度
プログラムのつくり方にはいろいろあるのですが、一般的には5つの工程に分けて考えます。そのうちの一つが実際にプログラムを書く部分となります。単純に工程数で言ってもプログラムを書くのは全体の1/5に過ぎないことがわかります。
では、実際の時間的にはどの程度の割合でしょう。もちろん、ケースバイケースですが、情報処理推進機構(IPA)で統計をとっています。それによれば、期間的には全体の2割程度となっています。
情報通信業向け最新開発プロジェクトデータ 238件に基づく業種別定量データ集
2018年のちょっと古いデータではありますが、大きな変化はないと思います。
あくまで平均ですが、プログラムをつくる全体の作業の中で、プログラムを書くのは全体の2割なのがわかっています。ちょっとがっかりしましたかね。
では何をしているのか?
すごくざっくり分けるとプログラムをつくるための5つの工程はこんな感じです。
基本設計
詳細設計
制作
結合テスト
総合テスト
ただ、これも考え方はそれぞれな上に呼び方もそれぞれなので、諸説ございます状態。ひとまず先ほどのIPAの資料に合わせています。
なので、超ざっくり言えば ・設計、 ・制作、 ・テスト の3つと言ったほうがわかりやすいかと思います。
この全工程に関わるかどうかは、またその現場の考え方やその人の持っている知識や経験などにもよります。
設計はしないとしても書いて終わりということは無く、プログラムを書いたら(制作)、テストは必ず必要となります。
書いてできた!で終わるのは初心者まで
最近はオンラインでいろいろプログラミングを学ぶことができる時代です。限られた情報を書籍や雑誌で追いかけていた時代と比べると、すぐに最新情報が入手できるのですから良い時代になったものです。
ただ、その手のオンラインの教材(行ったことないのでわかりませんがプログラミングスクールとかも?)でやるのはお題に沿ってプログラムを作るだけ。まあ、ちょっとは動かしてみるでしょうから、テストはしていると思うかもしれません。
が、実際の開発現場のテストはそんな動作確認レベルのものではありません。隠れた問題がないかどうかを徹底的に確認します。ま、それでもいわゆるバグが残っているのはご存知の通りです。が、それならテストしなくていいとなれば、その数倍、数十倍のバグに遭遇することになります。
いや、書いたプログラムの確認だからそんなに時間なんかかからんだろ、とか思いました?
残念。実際には書いた時間の1.5倍から2倍は普通にかかります。
自分が関わったプログラムでも、一通り出来上がって動く状態になったところから、数人がかりで2、3ヶ月とか普通です。全体で半年とかのうちの2、3ヶ月とかです。もっと大規模なプログラムならばさらに多くの人数や期間をかけるでしょう。
まとめ:書き終わった後が本番
というわけで、プログラマーの仕事の半分以上はプログラム(ソース)を書くことではなく、その準備(設計)と問題ないかどうかの確認(テスト)に費やされます。
例えば、作家にしろ俳人や歌人にしろ、とりあえず作品や句、歌をつくること自体はそれほど難しくないのではないかと思います。ただ、それをより良いものへと洗練させていく過程が重要なのではないでしょうか。知らんけど。
プログラマーも同じです。とりあえず動くものをつくること自体はプロなら当たり前です。できて当然のことです。
問題はそこから
いかに問題ないかを確認でき、
いかに効率的に処理でき、
いかに後から理解しやすい
ものにできるかが重要になります。
まとめのまとめ
プログラムをつくるのはプログラマーの仕事の2割程度
その準備(設計)や、問題ないかの確認(テスト)に時間がかかる
特にテストは一番大事
おまけ(蛇足)
よくプログラマーになりたいという人が細かいことにこだわったことを言ってたりします。WindowsとMacのどちらが良いか、英語配列のキーボードが良いのか、タイピングが早いほうがいいのか?
そんなのは瑣末な問題に過ぎないというのが私の見解です。もちろん、全体の2割もあるからそこを効率良くするというのも一つの考えです。
ただ、そんなのは残りの8割が十分できる人がはじめて考える部分です。
変にこだわってカスタマイズしたがる人が多い業界ですが、私は若い頃はともかく、途中からはあまりカスタマイズしなくなりました。いつも自分の環境を使えれば問題ありません。ただ、別の環境を使わざる得ないことなんていくらでもあるので、あまりカスタマイズしすぎるとそれが使えない時の効率が悪くなるのです。
2023年の10月から3ヶ月、とある企業の中途採用者向けのプログラミング研修の講師をしました。その中で受講者さんがプログラミングが楽しいと言ってました。その気持ちはわかります。自分もそうでした。
一方で、テストが面倒とも言ってました。他の講師は知りませんが、私はテストに関してはそれなりに厳しく(とは言え本当の現場レベルからいえばゆるゆる)しましたので。ただ、それができないのであれば「プログラマー」にはなれません。いやまあ、その程度の「プログラマー」が少なくないのは知っていますけど。
プログラミングをしていると動いて楽しい、それを喜んでもらえて嬉しいという場面も多いです。一方で、そのためにはテスト、テスト、ひたすらテスト、という現実があります。できる人は、そのテストをいかに楽にするか、いかにバグを出さないようにするか、見つけやすいようにするかを考えるようになります。それができる人が「プログラマー」です。
この記事が参加している募集
拙い記事でございますが、サポートしてもよいよという方はよろしくお願いします。著者のやる気アップにつながります。