先が見えない世の中。自宅でも高収入を得られる仕事としてプログラマーに注目が集まっています。
副業プログラマーになるべく、プログラミングの勉強を始めた方も多いのではないでしょうか。
プログラミングに慣れ、なんとなくスキルが身に付いた気がしてもプログラマーとして自信を持つのは難しいです。「どのレベルなら客を取れるか?」判断に迷う人もいるでしょう。
実は「動くものを作る」だけであれば、プログラミングの難易度はそれほど高くありません。商用プログラムは「プログラムが正常動作しないパターンをどれだけ減らせるか」「動かない時に適切な処置ができるか」が重要なのです。
つまり、プロとアマの違いは「エラーにどう向き合うか」にあると言えます。
無数にあるイレギュラーに対処する
エラーとは動作が止まってしまってしまう、または意図した結果にならない動作や状態を指します。
例えばWebのお問い合わせフォームの場合。必須項目を入力せずに送信ボタンを押した際、そのままフォームが送信されてしまうのは正しい動作ではありません。
「必須項目が未入力」というエラーとし、フォーム送信を中断するのが正しい動作と言えるでしょう。
このような分かりやすいエラーであれば対処方法と合わせて仕様書に記載されると思います。しかし、プログラマーは仕様書にも表現されていないシステムレベルの「イレギュラー」にも注意を払わなければいけません。
イレギュラーとは、例えば以下のようなエラーのことです。
- ファイルが壊れていてデータの読み書きに失敗する
- ディスク容量がいっぱいでファイルが保存できない
- 他のユーザーがファイルを開いていて読み書きできない
- サーバと通信できない、または途中で切れてしまう
- 処理中にハードの電源が切れる
- PCのスペック不足で想定時間内に処理が終わらない
などなど。上げ始めたらキリがありません。
プロジェクトによっては、このようなイレギュラーケースも仕様に盛り込まれますが、プログラマーの作業範囲として言及されないケースも多いです。
そしてどうでしょう?「こんなのどうしようもできないし、パターンも上げきれない!」と思いませんか?
しかし、実際にこれらの問題に正しく対処できるのが「プロ」と呼ばれる職業プログラマーなのです。
プロ的な考え方と視点を持てば「プロ」になれる
どうしたらアマチュアプログラマーを卒業し、プロになれるのでしょうか。
重要なことはプロ的な考え方と視点を持つことです。
「if文の反対条件の時はどう動くのだろう?」「ループが無限ループするパターンはないだろうか?」といった点を気にするクセをつけましょう。
イレギュラーケースをコードレベルで検討できるようになるよう訓練するのです。
現在プログラマーとして会社に属している方であれば、実際の現場を通してそのような考え方や勘所を学んでいけるのですが、副業プログラマーでは難しいと思います。
そこで、私が思いつく範囲でプログラミングで意識すべきポイントをまとめてみました。これらの点に気を付けながらプログラミング学習を続けてみてください。
- ファイルの読み書きに失敗したらどうなるか?
- Webアクセスなど、ネットワークに繋がらなかったらどうなるか?
- Webからのファイルダウンロードなど、通信中に通信が切断されたらどうなるか?
- 時間がかかる処理中にタスクキルされたり、電源OFFされたらどうなるか?
- プログラムが二重起動されたらどうなるか?
- 複数ユーザーから同時アクセスされた場合どうなるか?
- モバイルアプリの場合、プログラム実行中に電話がかかってきたらどうなるか?
いかがでしょう。ファイルやネットワークなど、プログラムの外側の要素とのやりとりがポイントになっていることにお気づきでしょうか?
設計がしっかりしていれば、プログラム内のデータ(クラスや変数)で不整合が起こる可能性は低いです。
それよりもユーザーの行動や実行環境など、外的要因からイレギュラーケースに発展するケースが圧倒的に多いのです。
繰り返しになりますが、重要なのはイレギュラーケースに気づける「視点」です。
解決策は検索するなり、自分で考えるなり、ケースバイケースでどうにかすれば良いのです。
課題に気づけなければ解決策を調べることもありませんので、視点が育たない→プログラミングテクニックの引き出しが増えない→自信が持てない、という悪循環に陥ってしまいます。
プロによるコードレビューも効果的
プロ的な視点を養う上で、現役プログラマーによるコードレビューを受けてみるのも効果的です。
コードレビューはココナラのようなスキル売買サイトでも見つかりますし、私でよければ個別にご相談を受けつけています。(お問い合わせフォームからご連絡ください)
上述の視点の話だけでなく関数分割の考え方や名前のつけ方など、テクニック的な要素も合わせて指摘してもらえるので成長しやすいと思います。
ただし、あれもこれもと指摘の量が多すぎて頭がついていけない可能性もあります。それでプログラミングが嫌いになってしまったら元も子もありません。
ある程度自信が持てたタイミングで受けるか、「甘め」「辛め」など、レビューの質についてリクエストしてみることをおすすめします。
焦らず、自分のペースで楽しくプログラミングを学んでいけるといいですね。