こんにちは。
この記事を読んでいるあなたは、

プログラマーに必要な適性って何なんだろう・・・?
自分に適性はあるんだろうか・・・?
このように考えたり、悩んだりしていないでしょうか?
プログラミングは非常に難しい作業なので、エラーが大量に出たりすると

自分には適性がないのかもしれない・・・
このように思ってしまう気持ちもよく分かります。
この記事でわかること
この記事を読んでいただくことで、以下のことを理解することができます。

・実体験をベースにした、プログラマーに本当に必要な適性がわかる
というのも、一般的に言われる「プログラマーの適性」だと、以下の部分を理解するのが難しいのではいかと思います。
”新しいことを吸収できる”というが、毎日どのくらい新しいことが出てくるのか?そして、自分の吸収力だと「適性がある」と言えるのだろうか?
そこで、この記事では僕が実際にプログラマーとして働いていて、リアルに感じたプログラマーに必要な適性を紹介します。
結論
まず、この記事の結論をお伝えします。
以下の特徴は、僕がプログラマーやプロジェクトマネージャーとして働いているときにリアルに感じたものです。

・1: プログラミングの本質を理解している人 / 考えられる人
・2: 自分のこだわりを持てる人
・3: プログラミングが楽しいと思える人
この3つは、一般的に言われる「プログラマーに必要な適性」として語られることは少ないかと思います。
ただ、僕はこれらが非常に重要だと思っているので、その理由を説明していきたいと思います。
この記事の信頼性: 何故僕がプログラマーの適性を知っているのか?

僕には、はっきりと言ってプログラミングに対する適性はあまりないと考えています。
その辺の人並にはプログラムを書けていたし、ある程度、いろいろな言語を勉強してきました。
ただ、それと適性は別だと考えています。
僕は、プログラミングをやっていて最後の詰めがあまいことがあります。
一人でサービスなどを作っているときに、「動けばいいか」と思ってしまうことがあります。
このあたりが、僕自身、「あまり適性がないな・・・」と感じるポイントです。
また、僕が前職で「人並の」プログラマーとしてやっていたとき、アーキテクト (システム全体の責任者)の知識レベルを隣で見る機会があり、本当に思考のレベルが違いすぎると感じたからです。
そういった同僚を見て、「これがプログラマーに適性がある人なのか」と思った記憶があります。
こういう、いろいろな角度から「プログラマーへの適性」を考えてきた経験を、この記事ではみなさんにお伝えしたいと思います。
とはいえ、僕の意見ばかりにならないように、まずは一般的に言われる「プログラミングへの適性」を説明したいと思います。
(前提) 一般的にプログラマーに必要と思われている適性
一般的には、以下のようなものがプログラマーに必要な適性だと思われています。

・論理的思考能力
・体力
・新しいことの吸収力
・コミュニケーションスキル
・忍耐力
簡単にこの一般的に言われる適性をそれぞれ、簡単に紹介したいと思います。
論理的思考能力
プログラミングは、全てロジックが必要です。
プログラムの流れや影響範囲を論理的に考える力は、プログラマーとして必須の力になります。
体力
プログラマーが働くプロジェクトの中には、納期やリリースまでのスケジュールが非常に短期間だったりすることがあります。
そういった場合、夜遅くや休日も含めて働くことがあります。
プログラマーには、長時間労働に耐えられるだけの体力が必要です。
新しいことの吸収力
IT技術は日々進化しています。
今、最新の技術は、1年後にはほぼ間違いなく時代遅れのものになっています。
そのくらい早い流れに追いつき、技術を自分のものにする吸収力が必要になります。
コミュニケーションスキル
プログラマーは1人で働くことができる仕事、と思われがちですが、実際は、大勢の人と常にコミュニケーションをしながら働きます。
仕様やスケジュールを理解したり、自分のプログラムを他のプログラマーに説明することもあると思います。
プログラマーには、いろいろな人とやりとりできるコミュニケーションスキルが必要です。
忍耐力
プログラミングは、そんなにサクサクと進むとは限りません。
ときには、1つのエラーに丸一日ハマることもあります。そんなケースでもイライラせずに、着実に原因を特定できるような忍耐力も必要です。
元・落ちこぼれプログラマーが選ぶ、「プログラマーに特に必要な適性」3つ
それでは、僕が考える、「プログラマーに特に必要な適性」を3つ、紹介します。
あらためて、僕は、プログラマーには以下3つの適性が必要だと考えています。

・1: プログラミングの本質を理解している人 / 考えられる人
・2: 自分のこだわりを持てる人
・3: プログラミングが楽しいと思える人
プログラミングの本質を理解している人 / 考えられる人

プログラマーが作るサービスやプロダクト、システムは基本的に多くの人に使ってもらうことを想定しています。
ですので、「何となく動く」というレベルのプログラムだとNGです。
また、プログラマーは基本的に複数人で1つのものを作ります。
つまり、頻繁に他の人のソースコードを読んだり、自分の書いたソースコードを読まれたりします。
そういった観点から、以下のようなプログラムが書ける必要があります。
・パフォーマンスがいい
・他のプログラマーからも読みやすい
こういった要件を満たしたプログラミングをするには、その本質を理解している必要があります。
例えば効率のいいメモリの確保方法やWebサーバがどのように動いているか?などの知識が該当します。
こういう本質的な理解がないと、
ということになってしまいます。
ただ、そのレベルで書いたプログラムは大抵の場合、不十分です。
もちろん最初の頃からそのレベルのプログラムを書くのは難しいと思います。
ただ、少しずつでもいいので「本質を理解した」プログラムを書けるようにしておくべきです。
具体的には、以下のような部分を理解した上でのプログラミングが該当します。

オブジェクト志向プログラミングの、オブジェクト生成時に起こっていることを知っている
JavaであればString型の中身を知っている
こういった部分に対する理解があると、以下のようなメリットがあります。
意図しない不具合を混入させることがない
あなたが「プログラミングの本質を理解している人/考えられる人」の適性があるかどうかの判断ポイント
あなたが仮にプログラミング初心者だった場合、こういったプログラミングの本質を理解することは難しいかと思います。
ただ、まだプログラミング勉強中であったとしても、
こう考えて終わらせるのではなく、
「何故自分の書いたプログラムは良くなかったんだろう」
このように考える習慣をつけておくべきです。
特にプログラミング初学者の場合は、こういう考え方のクセをつけられるだけでも、「プログラミングの本質を考えられる人」の一歩目は踏み出していると思います。
逆に、
と、考えてしまう人は、この適性がない (あるいはプログラマーとしてうまくいかない)可能性があります。
最初の頃は何とかなるかもしれませんが、実務の複雑なプログラムは、本当に細かいレベルが勝負になってきます。
その細かい部分を決めるのが、プログラミングに対する本質的な理解です。

ちなみに、昔からプログラミングをやっている (やっていた)人は、この本質を理解している人が多いように思います。
それは、単にプログラミング歴が長いとかだけではなく、昔のPCの劣悪な環境で工夫して「効率のいいプログラミング」をやっていたからではないかと思います。
少なくとも僕のまわりだと、「PC-98の頃からプログラミングをやってました」というような人は、全体的に理解が深い傾向にあります。
自分のこだわりを持てる人

僕は、プログラマーなど、プロジェクトにかかわっている人のこだわりがベースになって、「いいサービス、いいプロダクト」が生まれると考えています。
今の時代、どのサービスもどのプロダクトも基本的に全て「いいもの」です。
余程の場合を除けば、

これはハズレだった・・・
というケースは、あまりないかと思います。
言い換えると、「問題ない」レベルのサービスやプロダクトがたくさんある中、エンドユーザやクライアントに選ばれるかどうかを決めるのは、「最後のちょっとしたこだわり」です。
「ちょっとしたこだわり」があるからこそ、あなたの手掛けるサービスやプロダクトは他のものと差別化することができ、選ばれるようになります。
この「こだわり」は(チーム内のコーディング規則などを侵さない限りは)何でもよいと思います。
プログラマーの観点だと、例えば以下のようなものが候補になるでしょう。

・誰が見ても分かる変数名やクラス名の定義
・アニメーションをスムーズに見せるための工夫
・不具合を出さないようなチェック
・チームメンバーと認識齟齬を生まないコミュニケーション
逆にこういったこだわりがないと、以下のような弊害やリスクがあります。

・いいサービスやプロダクトを作れない (最後のひと工夫ができない)
・まわりのコメントに流されてしまう
・あなたであることの価値が生まれない (プログラマーはあなたの他にもたくさんいる)
ここまで説明してきた通り、こだわりがないと「いいサービスやプロダクトを作れない」のはもちろんです。
それに加えて「あなたの価値」を示すことが難しい、という弊害もあります。
冷たい言い方になってしまうかもしれませんが、あなたの他にもプログラマーはたくさんいます。
その中で、いかに自分の価値を高めて、他のプログラマーと差別化していくか?を考えることは、これから生き抜いていく上で重要です。
もちろん「圧倒的な技術力」があれば差別化はできますが、そんなに簡単なものではありません。
ですので、「自分なりのこだわり」を持ち、それを貫くことで、「自分なりの価値」や「クライアントから選ばれる理由」を作ることができます。
さらにあなたがチームのリーダーやアーキテクトなど、より責任のある立場になったときは、「自分の中だけに閉じずに、サービス / プロダクト全体として「ここだけは守るべき」というこだわりをもつ必要があります。
これを持たなかった場合、以下のような状況が起こる可能性があります。

・サービス / プロダクト全体のアーキテクチャが簡単に崩壊して、見づらかったり、メンテンナスのしづらいプログラムになってしまう。
・コードレビューの品質やルールがバラつくと、全体の品質が均一にならなかったりして、思わぬ不具合を生む可能性がある
リーダーやアーキテクトは、チーム全体の方向性を決めたり、品質を担保するための重要な役割になります。
ですので、今手掛けているサービス / プロダクトとして何を担保すべきか?というようなこだわりは非常に重要です。
一方で、「この部分はどちらでもいいかな」と思うポイントは他の人に譲るのも大事です。
全てに自分の意思を通そうとすると、それは単純に「めんどくさいやつ」になるので、このあたり加減はする必要があります。
「自分のこだわりを持てる人」の適性があるかどうかの判断ポイント
あなたがプログラミング初学者だった場合、それほどプログラムの書き方などにこだわりはないと思います。
ですので、まずは今あなたがやっている仕事や勉強で「これはこうすべき」というこだわりを持っているのであれば、「こだわりを持つ」に対する素養はあると考える。
もしそういったこだわりがないのであれば、自分の付加価値を高めるためにも、「自分として譲れないポイントは何か?」を考えてみるのがよいと思います。
プログラミングが楽しいと思える人

そして、最後は一番重要な「プログラミングが楽しい」と思える人です。
プログラマーになって、実務が始まると、必ずしも楽しいことばかりではありません。
例えば、
・長時間労働になり、体力的にしんどい
・自分が書いたプログラムが原因で市場不具合を起こしてしまった
・自分があまり好きではないプロダクトやサービスの担当になってしまった
このようなケースは本当によく起こります。
時には心が折れそうなこともあります。
そんなときに最終的に頼れるのは、
と思う気持ちです。
あなたが「プログラミングが楽しい」の適性があるかどうかの判断ポイント
このような説明をすると、

自分が「プログラミングが楽しい」と思えているかどうかわからない・・・
という人もいるかもしれません。
特にプログラミングの勉強を始めたばかりのタイミングは、いろいろなところによくハマります。
「もう疲れた・・・」と思うこともあります。
これを読んでいるあなたは今、すでにそうなっているかもしれません。
そんなあなたが改めて「プログラミング楽しい」と思えているかどうかの判断ポイントは以下のような点です。

・プログラミングの勉強をやろう、と思える
・プログラミングの知識をつけること自体が楽しい
・プログラミングの勉強をした結果、得られる結果 (プログラマーとしての転職とか案件獲得など)を考えると楽しくなる
このように思えるのであれば、十分、「プログラミングを楽しい」と思えています。
今はエラーが出て苦しんでいるかもしれませんが、それを乗り越えればまた楽しくなってくるはずです。

ちなみにエラーは、プログラマーになっても本当によく直面します。
プログラマーの作業 = エラー解決と思ってもいいくらいよく発生します。
こういった作業を続けていれば少しずつエラーが出ることにも慣れてきます。
僕としては、日々の作業で、自分のスキルが伸びているのをこれだけ確実に実感できるものは他にはないと思っています。
この「スキルが伸びている実感」が「プログラミングを勉強する楽しさ」の1つだと思います。
適性を知った上でプログラミングの勉強をしてみよう
ここまでで、プログラマーに必要な適性が分かったかと思います。
次に気になるのが

どうやったらプログラマーになれるんだろう
ということではないかと思います。
そんなあなたには、以下の記事をオススメします。
プログラミング初心者は何から始めるべきか?【ド素人だった僕の経験談】
参考までに、この記事のまとめは以下の通りです。
・プログラミングを勉強するときは、あなたが「心からやりたい!なりたい!」と思うゴールや姿を想像する。
・プログラミングの勉強は、オンラインのプログラミングの学習サイトで勉強
・その後、(あれば)チュートリアルを1回〜2回、周回
・最後に、そのチュートリアルで書いたプログラムをベースに自分の作りたいものに改変する
まとめ
それではこの記事のまとめです。
プログラマーに適性のある人の特徴は、以下の3つです。

・1: プログラミングの本質を理解している人 / 考えられる人
・2: 自分のこだわりを持てる人
・3: プログラミングが楽しいと思える人
これらの適性は、以下の点で重要です。

1: プログラミングの本質を理解している人 / 考えられる人
・製品レベルのプログラミングをするために必要
2: 自分のこだわりを持てる人
・最終的に選ばれるサービスやプロダクトを作るために必要
・プログラマーとして、自分を差別化するために必要
3: プログラミングが楽しいと思える人
・エラーが発生したり、辛いときでも継続するために必要
この記事は以上です。
あなたがこの記事を読んで「プログラマーとしての適性」を理解し、「いいサービスやプロダクト」を作れて、「他のプログラマーと差別ができる」ような人になれることを願っています!
ここまで読んでいただき、ありがとうございました!
コメント