【未経験】【中途】プログラマー1年目の実務内容と感想

　僕は2021年の9月から中途のエンジニア採用枠でIT企業に就職しました。就職はできたものの、僕には社会人経験も実務経験も情報系の資格も学歴もありませんでした。そこで、情報系の学部卒の新卒1年目とは異なる目線から、プログラマー1年目の実務内容をお伝えしたいと思います。


|期間  |業務内容  |
|----|---|
|1ヶ月目~  |研修(Python) |
|2ヶ月目~  |シナリオテストの実行(テスター) |
|6ヶ月目~  |バッチ・画面の設計書修正・機能改修・テスト(Java,C#,Angular, PostgreSQL,Linux)  |
|8ヶ月目~  |画面・実行機能の詳細設計・新規開発・テスト(Python,Django,PostgreSQL,AWS)  |
|10ヶ月目~  |バッチ・画面の設計書修正・機能改修・テスト・保守運用(Java,C#,Angular,PostgreSQL,Linux, AWS)  |

　業務内容はざっくりとこんな感じです。1ヶ月ほど研修を受け、2ヶ月目から4ヶ月間ほどテスターとして現場で働きました。そして6ヶ月目から本格的に開発現場に配属され、主にJavaでのバッチ開発に携わっています。また間で2ヶ月ほどPython、Djangoでの新規開発プロジェクトにも参画しました。

 では具体的に業務の詳細を紹介したいと思います。

[1. テスターとは](#1-テスターとは)
[2. 初めての開発現場の業務内容](#2-初めての開発現場の業務内容)
[3. 初現場にバッチの改修はおすすめ](#3-初現場にバッチの改修はおすすめ)
[4. 初めてで難しかったこと](#4-初めてで難しかったこと)
[5. 高難度の画面開発](#5-高難度の画面開発)
[6. 保守業務](#6-保守業務)
[7. プログラマーの資質](#7-プログラマーの資質)





## 1. テスターとは
　初めての現場ではテスターとして働きました。テスト設計者が作成した仕様書に従ってテスト実行を行い、エビデンス採取、バグの起票などを行う仕事です。実務未経験の中途採用だと初めはこういった現場に配属されることもあるかと思います。

## 2. 初めての開発現場の業務内容
　テスターとして4ヶ月間仕事をした後、初めて本格的に開発現場への参画という機会をいただくことができました。業務内容はバッチ処理の機能強化です。

　バッチ処理とはデータの一括処理のことであり、ATMでの取引データや在庫の増減などを定間隔で記録するような場面で使用されます。

　実際に僕が実装した内容としては、新しいデータの抽出条件の追加に伴い、既存のモジュールに新しいロジックを組み込んだり、取り込めるデータの種類を増やす目的で、既存項目の設定ファイルへの外だしや新しい設定値の追加などを行い、ロジックを組み直したりしました。バッチの開発言語はJavaと一部C#が使用されており、それらのデータの編集条件の入力やマスタの管理など行う画面ではAngularが用いられており、その改修も少し行いました。

　改修内容の設計書への反映、製造、単体試験項目書作成、単体試験実施、結合試験実施などが担当フェーズになります。


　
## 3. 初現場にバッチの改修はおすすめ
　バッチ開発で重要なのは、アルゴリズム問題で求められるような基礎的なロジックの組み方でした。特に新規開発ではなく既存モジュールの改修であったため、環境構築やフレームワークの使い方に悩まされることはなく、ロジックの組み方を考えることに専念できました。アルゴリズム問題を解くといった勉強がそのまま活きるため、初めての開発現場としてはとてもやりやすいと感じました。

## 4. 初めてで難しかったこと
　初めての開発現場で1番頭を悩ませたのが仕様と要件の理解でした。改修してほしい要件を初めに提示されましたが、設計書を見ても、そもそも元の仕様がどうなっているのか、プログラムがどういう作りになっているのか全くイメージができませんでした。一般用語に関しては自分で調べながら、1つ1つ情報を噛み砕いて質問を重ねて理解を深めていくしかありませんでした。

　そして初めての実装では、メソッドの階層構造になかなか理解が追いつきませんでした。1つの変数が1つのメソッドの引数になり、さらにそのメソッドからできた変数がまた別のメソッドの引数になるといった階層が幾重にもなっているため、ロジックを組む前に、1つの変数がどこからやってきたのかを理解するのに時間がかかりました。

　また「定数ファイルによく使う変数をまとめたら確かに修正が楽だし分かりやすいな」、「なるほど、設定ファイルやマスタに項目を外だしすれば、ユーザーの裁量で処理内容をコントロールできるのか」といった初歩的なことも開発現場で初めて学びました。


## 5. 高難度の画面開発
　バッチの機能改修を経験した後は、2ヶ月間ほどPython、Djangoでの画面の新規開発に携わりました。アプリの概要は、ユーザーの入力結果と、それをベースにしたAIの解析結果などをもとに最適な仕様を提示するといったものです。

　僕が担当したのは入力項目が50以上あり、1度のフォーム送信で5テーブル以上のデータを更新させる、新規入力兼編集画面です。1画面内の情報量が圧倒的に多く、動的表示項目が多かったり、入力項目の選択肢やラベルが複数のマスタに紐づいていたり、リーダーも難易度が高いとおっしゃる実装内容でした。

　また設計者にも実装者にもPythonとDjangoに精通している人がいなかったことによる問題もいくつか起こりました。例えば複数PKもしくはPKなしでデータベース設計書が作られていたことによる問題です。Djangoでは複数PKを設定することができず、PKは1つで、複合ユニークキーを設定するのが基本だったといったのです。

　この2ヶ月に関しては休む暇なく作業をしているにもかかわらず、全く思い通りに実装できず、どんどんスケジュールも後ろ倒しになっていくことへの無力感と焦りに苛まれました。


## 6. 保守業務
　Python、Djangoでの画面の新規開発をひと段落させてプロジェクトから離れた後は再度、バッチの機能改修に戻りました。メインは機能改修ですが、保守業務として、機能改修に伴う影響調査や、脆弱性診断、性能負荷テスト、インストール媒体向けのマスタデータの作成といった仕事も行っています。結合試験や総合試験フェーズ、保守業務となると、SQLやLinux、AWS等を扱う場面も多く、現場ならではの勉強になりました。
　プログラム改修以外の作業だと、個人的にはAngularのバージョンアップとビルドがとても厄介でした。ビルドエラーが何度も起きるだけでなく、バージョンアップにものすごい時間と容量を使ってしまうことにとてもやりづらさを感じました。


## 7. プログラマーの資質
　ここまでプログラマー1年目の実務内容を紹介しましたが、最後に、働いた中で感じたプログラマーの資質についてお話ししたいと思います。

　IT業界で1年以上働いて痛感したのは、<font color="Red">プログラマーに最も必要なのは「技術」であり、プログラマーに向いているのは「技術オタク」だということです。</font>当たり前と言えば当たり前のことだと言えるでしょう。美容師や料理人と同じで、お客さんが満足できるように仕上げる「技術」さえ信頼されれば、他の要素はそこまで重要視されないと思います。というよりスケジュールや人件費などの管理のように、他の要素に関しては他の役割の人が果たすべき仕事です。

　技術に加えて他に必要な要素を挙げるとするなら、設計書通りに漏れなく実装を行う「忠実さ」だと思いました。また「ユーザー目線」と「プログラムのあるべき姿」の双方の視点から設計書を読み取り、後々問題になりそうなことは事前に課題上げする「意識の高さ」などがあるかもしれません。
　「コミュニケーション能力」とはハキハキすぐになんでも答えられる能力ではなく、相手がどこまで理解しているかを考えた上で言葉を選び、意図を確実に伝える能力のことだと思うので、その能力に関しては技術力が高い人ほど備わっている印象を持ちました。設計や製造をする上では、話し方の上手さよりも意図が正確に伝わることの方が大切です。