フリーランスプログラマーになるには 7プログラマーの適性
このノートはフリーランスプログラマーとはどういったものなのか、どうしたらなれるのか、またどのように生計をたてるのか等を、私の経験をもとに実情を解説するシリーズの一つです。
プログラマーの適性
どのようなことにでも言えることですがプログラミングにも向き不向きがあります。不向きなことを仕事にするのはしんどいですし、プログラマーは常に知識の更新が求められるので楽しいと思えないと続けていくのは大変です。
私が考えるプログラマーの適性はアルゴリズムを考えることが楽しいかどうかです。アルゴリズムというのは物事をどのような順序で処理していくかのかを考えることなのですが、日常生活を例に考えてみましょう。
朝起きてから出社するまでを考えてください。やることは無数にあると思いますが、洗顔、歯磨き、ヘアセット、食器の洗浄、朝食の用意、朝食、着替え、ゴミ出し、掃除、と人によって差異はあれどこのようなものでしょうか。これらを一番効率がよくなるように並べてみましょう。
1,洗顔
2,朝食の用意
3,朝食
4,食器の洗浄
5,歯磨き
6,着替え
7,ヘアセット
8,掃除
9,ゴミ出し
10,出社
どうでしょう?寝起きにすぐ歯磨きをしている描写を漫画などで見かけるのでそういった方もいらっしゃるようですが、朝食を摂るのであるならば歯磨きは朝食のあとのほうが良いでしょうし、朝食で出たゴミとか掃除した結果のゴミなどもまとめて捨てられるようにゴミ出しは一番最後が良いでしょう。食器なども朝食の前に洗うよりは後のほうが効率よく作業をまとめられそうです。ヘアセットも着替えた後に行えば服装と合わせてチェックできそうです。ゴミ出しはもしかすると出社のタイミングと合わせられるかもしれないのでそちらにまとめても良いかもしれません。朝食でこぼしたパンくずを処理するためにも掃除はゴミ出しの直前が良さそうです。
なんだこんなの誰でも考えつくだろし当たり前だろうと思われるかもしれませんが、物事の順序をもっとも効率がよくなるように並べて処理していくというのはアルゴリズムを考える上で非常に重要なことです。
それではもっとプログラミング的な例で考えてみましょう。
数字が5つあったとして小さい順に並べるアルゴリズムを考えてみましょう。
5 3 2 1 4
小さい順に並べたいのでまずは一番小さい数字を探しましょう。
1,5と3を比較して3のほうが小さいので3をとっておく
2, 3と2を比較して2のほうが小さいので2をとっておく
3, 2と1を比較して1のほうが小さいので1をとっておく
4,, 1と4を比較して1のほうが小さいので1をとっておく
ここまでで一番小さい数字が見つかりました。今度は1の次に小さい数字を探さなければなりません。どうしたら良いでしょうか?少し考えてみてください。
答え
また数字の比較をしていくのですが、今度は1以外の数字を比較しなければなりません。そのため1は比較する数字たちから抜き取ってしまいましょう。つまり以下の4つの数字で比較をします。
5 3 2 4
1, 5と3を比較して3のほうが小さいので3をとっておく
2, 3と2を比較して2のほうが小さいので2をとっておく
3, 2と4を比較して2のほうが小さいので2をとっておく
ここまでで1の次の数字が見つかりました。
後は比較する数字がなくなるまで処理を繰り返していけば小さい順に並んだ数列が手に入りますね。
先程の朝起きてから出社の例と何らの関連性もないじゃないか、と思われる向きもあるかもしれませんが、求める結果の「出社」と「小さい順に並んだ数列」を得るために順序を考えるという点で両者はアルゴリズムなのです。
「出社」するためには「洗顔」をして「朝食」をとって「着替え」てと準備を重ねていく必要があります(寝起きですぐ作業できるような自由業は横においておいて)。それは「小さい順に並んだ数列」を得るためにも言えることで、望んだ結果を得るためには数字を一つ一つ比較していくことが必要で、一足飛びに結果を得ることはできないのです。
アルゴリズムのことを知るには実際にプログラミングをしてみるのが最適です。次回以降いくつか練習問題をアップロードするので是非挑戦してみてください。
楽しくないと続けられない
なぜプログラマーの適性に「アルゴリズムを考えるのが楽しいかどうか」かと私が考える理由なのですが、プログラマーというのは考え続ける仕事だからです。プログラマーを取り巻く環境は広大です。そしてその環境は日々進歩していて、それに合わせて環境の情報も膨大になっていきますし、現にすでに膨大です。より良いプログラマーになるためにはそれらの情報へ常に触れ続けて自身をアップデートし続けなければなりません。つまりこのアップデート作業には終わりがないのです。
アニメを好きな方は新作アニメの情報が出るたびにチェックをしますし、サッカーや野球が好きな方は選手のトレードからプレシーズン、シーズンイン後には一試合ごとの状況をつぶさにチェックします。このように誰でも自分の興味のあることに対しては能動的に情報のアップデートを行うものですよね。
ではプログラマーとしての興味とはどういうものでしょうか?
ここから先は
¥ 100
Amazonギフトカード5,000円分が当たる
サポートしていただけると何か、こう、認められたようで大変嬉しいです。