プログラミングのコーディング能力を上げるためには?

前回、コーディングの基本について触れました。

前回記事へ

コーディングに悩む初心者エンジニアは、非常に多いことでしょう。

今回は、更にコーディングを上手くなるための方法について触れていこうと思います。

この記事を読んで実践していけば、着実にプログラマーとしてレベルアップしていけるでしょう。

コーディングを上手く行うためには

さて、続いて
「コーディングが上手くなりたい」
という人のために、開発の際に意識したいポイントをまとめます。

そもそも何を作りたいのかを把握する

まず重要なのが、
「そもそも何が作りたいのか」
を理解することです。

特に初心者の内は、
「必要だと言われたから作る」
という人が多いです。

しかし、どんなプログラムも目的があって作られます。

・そのシステム全体で、顧客のどの様な問題を解決するのか
・全体の中で、自分が開発している部分はどのような役割か
・これを実際に使うユーザーはどの部署のどのような人か
・一般ユーザー向けの機能か、それとも管理者用の機能か

など。

コーディングには関係ないように見える事柄も、実は関係している事が多いです。

そのため、こういった部分を意識してから開発をするのがおすすめです。

開発する言語や環境について理解を深める

次に、開発する言語や環境に関する理解です。

開発する言語が何かは、恐らく理解していると思います。

それに加えて、どのような環境で開発しているのかも知っておくと良いです。

例えば、最終的に本番で利用する際には、Windowsサーバーなのか、Linuxなのか。

初心者の内は、こういったことにまで目がいきません。

そのため、自分が今使っている環境(フレームワークやテンプレートファイルなども)についての理解を深めておくと良いです。

必要な機能を細分化して考える

コーディングをスムーズに行う際には、必要な機能を細分化して考えることも重要です。

例えば、Webアプリケーションを開発する場合を考えてみましょう。

大まかには、
・ユーザー認証
・データベースの操作
・画面の表示
などの機能が必要ですが、これらを細分化して考えることで、よりスムーズな開発が可能となります。

ユーザー認証機能を細分化すると、
・ログイン画面の表示
・ログイン情報の認証
・ログイン後の画面遷移
などの機能があることが分かります。

これらの機能を個別に開発することで、機能の単位ごとにテストや修正を行うことができます。

データベースの操作機能を細分化すると、
・データベースへの接続
・クエリの実行
・結果の取得
などの機能があります。

これらの機能を個別に開発することで、データベース処理に関する問題を特定し、修正することが容易になります。

画面の表示機能を細分化すると、
・HTMLの生成
・CSSの適用
・JavaScriptの処理
などの機能があります。

これらの機能を個別に開発することで、UIの問題を特定し、修正することが容易になります。

このように、機能を細分化して考えることで、プログラムの設計や開発を効率的に行うことができます。

また、細分化された機能は、単体テストにおいても容易にテストすることができ、品質の高いプログラムを作成することができます。

共通で使えそうな処理が無いかを考える

次に、共通で使える処理が無いかを検討します。

共通で使える処理は、関数化しておくことで、リリース後の修正などが効率的になります。

例えば、
・データベースへの接続
・SQLの実行
・画面で入力された項目のエラーチェック
・ファイルの読み込み処理
・メール送信

などが、共通処理として作れる可能性があります。

この時に、
「複数箇所でメールは送っているものの、その内容や送り先は毎回違う」
などのような場合には、送り先や本文・タイトルを関数の引数にしておくのが効果的です。

小さく分けて取り組む

次に、作業そのものを小さく分けて取り組むのがおすすめです。

例えば、先程の例だと
「メールを送る」
という部分だけを作る。

次に、「SQLに接続する処理」を関数として作る。

その次に、「SQLでログインしているユーザーの情報を取得する」関数を作る。

この様に、小さい単位で関数を作っていくと、最終的にメイン処理では、関数の呼び出しをしていくだけで処理が完成します。

これを、関数化しないでどんどんと記述してしまうと、いわゆる「スパゲッティコード」のようになってしまいます。

適切にコメントを残す

次に、適切にコメントを残していきます。

コメントは、他者が見たときだけではなく、自分が後から処理を振り返ったり、テスト中にバグが見つかった場合などにも有効です。

コメントの仕方は、会社のルールやプロジェクトのルールがあるケースが多いです。

また、新規の開発ではなく、修正などの場合には、過去のコメントを参考にしながら書くのがポイントです。

修正の際には、一般的には
・修正日
・会社名
・個人名
・対応番号(案件番号やプロジェクト名)
・修正内容

を記載する事が多いです。

また、関数を新しく作る場合には、その関数に関する情報をコメントしておきます。

入れるべき内容としては
・関数の処理概要
・引数とそのデータ型
・返り値
・作成/変更履歴
などです。

例外処理を入れる

次に、例外処理を入れていく必要があります。

例外処理を入れるべき内容の例としては次のような物があります。

【ファイル操作】
ファイルを開いたり、読み書きする際に、
・ファイルが存在しない
・アクセス権限がない
・ファイルが破損している
という場合があります。

【データベース操作】
 データベースへのアクセスやクエリの実行など、データベース操作中に問題が発生する可能性があります。

【ネットワーク通信】
ネットワーク通信中に、サーバがダウンしたり、通信エラーが発生したりする場合があります。

【ユーザー入力】
ユーザーが画面上から何かを入力する場合、想定していない文字が来るようなケースがあります。

例えば、環境依存文字と呼ばれる特殊記号などが挙げられます。

【メモリアクセス】
プログラムでのメモリのアクセスには、多くの問題が発生する可能性があります。

例えば、メモリの範囲外にアクセスしたり、割り当てられていないメモリにアクセスしたりすると、プログラムがクラッシュする可能性があります。

【外部ライブラリの使用】
プログラムが外部ライブラリを使用している場合、そのライブラリが想定していない入力値を渡した場合や、使用方法に誤りがある場合があります。

【スレッド処理】
プログラムがマルチスレッド処理を行っている場合、競合状態やデッドロックなどの問題が発生する可能性があります。

上記のようなパターン以外にも、「想定していないエラー」が起こる可能性は十分にあります。

そのため、適宜例外処理を入れておきましょう。

この時の注意点としては、
「エラーメッセージで、原因が特定できる必要がある」
ということ。

エラーメッセージは、システム的に自動で作られますが、それでは実際にエラーが出た時に、原因を探すのに苦労します。

例外処理を入れることで、任意でメッセージを作ることも出来るため、わかりやすいエラーメッセージを入れることが重要です。

全体を通して仕様通りになっているのかを再度確認する

最終的に、作ったものが仕様通りになっているかを確認します。

多くの場合、システムの開発の際には、「仕様書」というものがあります。

作る前に確認するのは当然ですが、完成後もきちんと仕様に沿っているのかを確認しましょう。

コーディングをスキルアップさせるには?

さて、ここからはコーディングスキルを上げるためにすることを説明します。

まずは出来るだけたくさん書く

最も重要なのは、色々なプログラムを書いてみる事。

本を読んでいても、プログラムは上達しません。

実際に数を書く必要があります。

特に、書籍などを見ながら書くのではなく、
「〇〇を作りたい」
というように、ゴールだけを決めた上で、試行錯誤しながら作るのがおすすめです。

過去に作った仕組みと同じ仕様で再度作ってみる

次に、過去に自分が作ったものを、そのソースを見ずに再度作ってみる事です。

そうすることで、今思いつく方法と過去に思いついた方法を比較することができます。

多くの場合は
「どうして前は、こんな非効率的な作り方をしたんだろう」
と感じることでしょう。

全く同じだった場合は、その処理が最適解である可能性もありますし、今回作ったものの方が非効率的なケースもあります。

この様に、比較していくことで、徐々にロジックを考える力が付きます。

他人のコードを読む

他人のコードを読むこともコーディングスキルを磨いてくれます。

レベルの高い人のソースを見せてもらうことも、もちろん有効ですが、レベルが低い人のソースを見て
「この部分、読みにくいし、不要じゃない?」
ということを感じながらソースを見ることも勉強になります。

他人にレビューしてもらう

自分のソースを他人にレビューしてもらうのも有効です。

レビューしてもらう際には、できれば自分よりもコーディングの経験がある人に見てもらうのが良いです。

ですが、それが出来ない場合は、後輩などに見てもらうのも良いです。

理由としては、
「人に見せるコード」
ということを意識して書くだけでも、普段意識できない
「キレイに書く・他人が読みやすく書く」
ということが実践できるからです。

世の中にある製品やサービスを、自分で再現してみる

次に、世の中にある製品やサービスを自分で再現する方法です。

例えば、Amazon。

商品を購入した後に、すぐに自動メールがきて、履歴ページでは配送状況が細かく載っています。

これを実際の処理として考えると、
・購入後の処理
・倉庫からピッキング後の処理
・運送会社の倉庫に届いた時の処理
・配達完了後の処理
などが考えられます。

更に細かく見ていけば、
・倉庫からピッキングした時に、バーコードリーダーなどを使って処理を開始しているかもしれない
・運送会社専用の管理画面があるのかもしれない
など、見えないところの機能が想像できます。

そして、これを実際に作ってみる。

同じ動きを実現しようと思うと、色々な事を勉強する必要があり、コーディングスキルが磨けます。

複数のフレームワークを使ってみる

これまで、スクラッチ開発しかしていない人にとって、フレームワークでの開発は非常に勉強になります。

反対に、フレームワークでの開発経験しか無い人は、スクラッチ開発が非常に勉強になります。

また、複数のフレームワークを使うことで、勉強になる部分も多いです。

フレームワークにも、
・MVCモデル
・MVPモデル
・MVVMモデル
など、色々な種類のモデルがあります。

フレームワークによって採用されているモデルが違い、それぞれに開発における特徴があります。

これらを意識しながら、過去に経験したことのないモデルで開発を行うのは、非常に勉強になります。

質の高いシステム開発はAMELAに

今回は、コーディングについての「上達の仕方」などを見てきました。

初心者の内や、他の業務を抱えながらの勉強だと、中々成長が感じられない事も多いでしょう。

しかし、数を重ねる内に、徐々にコーディング力がついていきますので、是非継続してチャレンジしてほしいと思っています。

AMELAでは、様々な業界のシステム開発を行っています。

オフショア開発により、国内の人材だけではなく、海外の人材もプロジェクトに参画できるため、開発のレベルが高いのが特徴です。

また、予算的にも比較的安価に提供できることもあるため、ぜひ一度ご相談いただければと思います。

また、前回の記事もコーディングについて書いた記事ですので、是非併せて御覧ください。