Help us understand the problem. What is going on with this article?

プログラムを書く前にやっとくべきこと

More than 3 years have passed since last update.

まえがき

おはようございます!

HAL名古屋ゲーム製作学科2016年卒の0Delta(ぜろでるた)です。
「HALAdventCalender2016」が面白かったので勝手に2017を作った張本人で、現在はインフラエンジニアとして某A社で働いています。

そのプログラム、迷子になっていませんか?

僕が学生の時、
「バブルソートのプログラム、組んだ気がするけど… どこだったっけ。まぁ探すの面倒だしまた書き直そう。」
こんな感じで、やった覚えはあるんだけど見つからなくて結局書き直すといったシーンがいくつかありました。
これでは非効率ですし、課題作成も遅くなります。
原因や解決策を考えた結果「俺は整理整頓ができていない」という結論に至ったのでその対策を共有したいなと。

というわけで本題です。

迷子にならないためにやっておくこと

用途を明確にする

まずそのプログラムが「何をするのか」を明確にしましょう。
大雑把に考えてはいけません。可能であればクラス/関数単位からはじめましょう。

例えば「ファイルを読む」では何のことかサッパリです。
「.ini形式の設定ファイルを読み込む」と言えば、それだけである程度予想がつきます。
これを更に細かく砕きましょう。おそらく次のようなフローになるはずです。

  1. 指定したファイルを読んで文字列を取り出す。
  2. 文字列から値を取り出す
  3. 取り出した値を内部に格納する

ここまで砕いたら、これを関数にすれば実現できそうです。

引数、返り値を明確にする

てっとり早くいえば、「関数宣言だけ先に書け」ということです。
例としては

# -- .cpp file --
# include <map>
std::map load_ini(char* filename){
}

とか

# -- .py file --
def get_vars(string):
  settings = {} # dict
  return settings

とかです。

Readmeを最初に書く

順序が逆になってしまいましたが、READMEは最初に書くべきです。
READMEには、「何をするプログラムなのか」と「使い方」を書きましょう。

……おや、もうほぼ完成ではありませんか!
さっき考えた「用途」と「引数、返り値」を記載するだけで完成です。

ちなみに「引数、返り値」に関しては、外枠だけでも構いません。
実際に使う時は内部処理を気にする必要はありません。
「何をどういった形式で投げれば、こう帰ってくる」とだけ認識していれば十分です。

実際、僕らはそういったモノを使いまくっていますからね。
例えばprintf()
「文字列を投げれば画面に出てくる」という知識しかないのに十分使い倒せているはず。

最初から整理して置く

さて、また順序が逆になってしまいました。
今度は「置き場所」についてです。

一覧性の高いディレクトリ構造を作る

「ディレクトリ」という単語が出てまいりましたが、要するに「フォルダ」です。
せっかく作ったREADMEファイルも、デスクトップにいてはほぼ意味を成しません(個人の見解です)
せっかく良い武器を作っても、使いやすい場所になかったら使われません。
一つフォルダを作成して、そのフォルダへのショートカットをデスクトップに置きましょう。
そしてその中で授業別、年度別等、区切りの良いフォルダを作ると更に良いでしょう。

実例

  • 学生時代のフォルダ構造、先頭に日付を書いて整列した時に見やすくしてます。
C:\zdelta\Documents\Data
  └ AT11
    ├ CL11
    │ ├ 170410_課題1
    │ │ └ <プロジェクトファイル>
    │ ├ 170412_課題2
    │ │ └ <プロジェクトファイル>
    │ ├ 170409_練習1
    │ │ └ <プロジェクトファイル>
    │ ├ 170410_練習2
    │ │ └ <プロジェクトファイル>
    │ ├ 170411_練習3
  :
  :
  • 現在仕事で使ってるフォルダ構造。複数の言語や環境を利用しているので言語別で分けてます。
C:\zdelta\Documents\Program
  └ Programs
    ├ C
    │ └ AttendanceLogger
    ├ python
    │ ├ bot-skype
    │ └ bot-slack
    └ shell
      ├ dism.bat
      └ wim_to_esd.bat

まとめ

つらつらと書きましたが、要するにこうです。

  • 設計書を作る
  • 作ったら整理して取っておく
  • 次の設計書で使えそうなら積極的に使おう

特に現役生へ、1,2年で習ったコードは基本的なコードが多いです。
今のうちにソースコードを整理してライブラリを作ると後々楽ですよ(楽とは言っていない)。

0Delta
インフラエンジニアからプログラマーへ再転生したひと。 Golangはいいぞ
infra-workshop
インフラ技術を勉強したい人たちのためのオンライン勉強会です
https://wp.infra-workshop.tech/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away