仕事でプログラムを本格的に書き始めて半年が経ちました。

3 min read読了の目安(約3400字

初の記事ですが、アウトプット的なものも少しずつ書いてみようかなという気持ちになったので
誰かの参考になればいいなと思い、自分の備忘録も含めて現状のスキル感や、
気持ち的なものを書いてみようかと思います。

注)当然ですが個人にかなり依存した記事になるので、全員が全員同じ状況だったり気持ちになる事はないです! あくまで、こういう人もいるんだなぁという参考にしてもらえたら嬉しいです!

プログラムを書く前は何をしていたか

半年前くらいからプログラムを書くようになりましたが、
それ以前は何をしていたかをサラッと書こうと思います。

仕事でシステム開発の一環としてプログラムを書き始めたのは半年前なんですが
プログラム自体はそれ以前から少し書いていました。

具体的には、自分で勉強時に書いていたのはもちろんですが、
web制作の仕事をしていたのでWordPressのテーマを作ったりなどの時に多少のプログラムを書いていました。
あとは、画面の動きを少し付けるためにjQueryなどを使うようなプログラムも書いていました。
なので、使用言語はPHPとJSという事になります。

そんな僕が転職して、SESとしてシステム開発で行った業務はシナリオテスターでした。
なので、システム開発に携わった期間としては2年弱になりますが、1年半くらいはひたすらテストばっかりの日々でした。
もちろん、他の人が書いたコードを見る事はありましたが、自分がプログラムを書く事はほとんどなかったです。

現状のスキル感

この半年でやってきた事としてはバックエンドの開発になります。
以下がざっくりとバックエンドとしてやってきた事です。
(フロントとしてJSを書いていた事もありますが、かなり自己流な所が多かったので割愛しています。)

  • CRUD
  • CSV読み込み機能(一括登録など)
  • API開発
  • AWSクライアントを使った開発
  • 検索機能
  • SAML連携

ざっくりとこんな感じになります。
多分基本的なプログラマーがやってきた(いる)事とそんな変わらないと思います。

個人的には、やっている事は同じだとしても、中身(コード)はかなり違う気はしています。
僕のコードは本当に動く事を目的にした書き方になっていると個人的に思っていて
まだまだ、他の人が見た時の事や、保守性や拡張性や命名などに
未熟さをかなり残しているコードや構成になっていると思っています。

一緒にやってる方のコードをかなり参考にして実装する事が多く、デファクトスタンダードなものなどを知っている訳ではないので、参考がないコードの部分に関してはかなりオレオレな感じが出ていて正直自分でも気持ち悪いコードだという自負はあります。

気持ち悪いコードとは

以下の3つが個人的にまだまだだなと感じた所でした。

  1. 命名
  2. 機能の分割
  3. 関数の切り分け

一つ一つ具体的にいうと

  • 命名
    機能に沿ったうまい命名ができていない事を指しています。
    つまり、実装していく中でどんどんその命名から遠ざかる機能になってしまっていっているという事です。
    これの原因としては、今自分が実装しようとしている事に注目しすぎている事に気付きました。
    もう一つ抽象の階層を上げる事で、その命名からどんな機能を持つのかというのを想像しやすくなるのではないかと思いました。
    ただ、この勘所というのも経験だと思うので、もっと実装を行う事で勘所を身に着ける必要があるかと思っています。(他の人のコードを参考にするのも含めて)

  • 機能の分割
    これも命名に近いのですが、どんどん機能が追加されて、結局Fat Controllerのような役割になってしまう事が多いです。
    これも持ってると便利だな、これもあると便利だなっていうのは多分誰もが考える事なんですが、便利だからって詰め込み過ぎる事は切り分けができていない状態なのかなと思います。
    しかし、詰め込まないように別のクラスに切り分け過ぎると、依存性の高いクラスがいくつも量産されてしまう事も怖い事でした。
    このクラスがないと動かないとかあるとかなり使い辛いクラスができてしまう事になります。
    そこら辺のうまい切り分けができていないのを実感しました。

  • 関数の切り分け
    またまたこれも機能の分割に関係するのですが(恐らくこういう事になってるのが綺麗にコード書けない理由なんだろうなと今思いましたw)
    同じ関数に詰め込みすぎてしまう事が多かったです。
    foreachで回すだけの処理を呼び出し関数に含めるべき処理ではないのに、気を抜くと残してしまうという事が多かったイメージです。
    DBへの登録する関数は切り出したり、formatするだけの処理なら切り出してもいいと思うのですが、慣れないうちは全部コミコミで一つの関数に書いてしまっていました。

こういった面でプログラムを書くだけならできるけど、考えるべきところを考えれていなかったというのを意識する事ができたのが、この半年プログラムを書いた中で気づけた事でした。

多分、要領の良い人や地頭が良い人は最初から気付けるのかもしれないですが、僕みたいにすぐ気づけないプログラマーの人も少なからずいると思います。そういう人には僕のような躓き躓きを経験する人もいるんじゃないかと思います。

苦しんだ日々

ここからは自分の気持ちも交えて話して行こうと思います。
僕自身、僕よりもできる他のプログラマーやエンジニアの方の昔の話を聞いて、自分を鼓舞したり頑張ろうという気持ちになるので、僕を参考にしてくれる人にも勇気を与えられたら嬉しいです。

プログラムを書き始めて半年になりましたが、半年前から現在までずっと頭を悩ませる事ばっかでした。
というのも、上記にあげた機能というのは今まで制作会社で働いていた頃には全くやった事がない上に、テストもすでにプログラムとしてはできているものをテストするものだったので、自分で実装する事など考えた事がないものでした。

調べても調べても解決が出ない時、思うようにデータが渡らない時、ググっても出ないエラーの時
全てにおいて都度頭を悩ませていました。
もちろん、ググってすぐ解決できる問題であれば特に問題にはならなかったですが、プロジェクト固有の問題や、自分の凡ミスで出たエラーっていうのはググってもすぐには出てこないんですよね。
自分のミスというのをどこで起こしているのかっていうのを理解するのは、僕はLaravelというフレームワークを使っていたのですが、割とフレームワークの知識が問われていたように思います。

一つのエラーで1時間とか悩む時が一番苦しく、人に聞く事もできないのでどうしようもない時でした。
ただ、そのエラーを解決できた時は、かなり自分の成長を感じる事ができます。その経験の積み重ねがないと成長できないのかなと今となっては思うのですが、やはり詰まるたびに辛い思いをするのはもう嫌だと感じる事は今でも多々あります笑

先輩エンジニアの人達は、何も苦労せずポンポンプログラムを書き、ポンポン実装していっているので、世の中にのエンジニアは全てこんな感じで実装していけてるんだと錯覚してしまっていました。
実際そんな人ばっかだとは思わないですが、自分の周りを見ていると苦労せずに実装できている人ばかりのような気がして、かなり精神的な焦りを感じる事が多かったです。

半年過ごした今

正直辞めたい気持ちがない訳ではないです。
この苦しい状況から抜け出せるなら…と考える事もあります。

しかし、抜け出したあと自分には何が残る?
次にやりたい事はなんだ?
プログラムを書き終わった時の爽快感をもう味わえない?

いろんな事が頭をよぎります。
この苦労の先に見える物も、今少し見え始めているものがどんどん広がっていくと
きっとまた自分の世界観も変わると思います。

少しでも自分の世界観が変わる事を体験してしまった今、
プログラムを書くという仕事を自分はもうしばらく辞める訳にはいかないというのは感じます。

またさらに半年後、自分がこの記事を見た時に
自分を元気付ける事ができればいいなぁと思います。