自分はプログラマに向いているのだろうか?
プログラマの三大美徳はどこまで有効なのだろうか?
プログラマ歴が長い方でも、この質問に即答できる人は少ないのではないでしょうか?
ラリー・ウォール氏掲げた三大美徳を解説しながら、どのように身につけていくかを解説していきます。
この記事を読むと下記のことがわかります。
- 三大美徳の解説
- 三大美徳をどのように身につけていくか?
こんなに人の質問に実際の経験をもとに答えます!
本記事の信頼性
- 正社員リモートワーカー。リモートワーカー歴日本国内国外合計3年。
- IT関連歴21年。プログラマ、ブリッジSE、プロダクトオーナー
- 使用言語C++、Javaがメイン。PHP、Ruby、Pythonも経験あり。
- PMP(Project Management Professional)。
- ServiceNowの3種類。AWSクラウドプラクティショナー取得。
- 海外生活合計6年
プログラマの三大美徳は、「怠惰」「短気」「傲慢」です
結論から言ってしまうとプログラマの三大美徳は「怠惰(Laziness)」「短気(Impatience)」「傲慢(Hubris)」です。
これはPerlの産みの親でもあるラリー・ウォール氏が提唱したことで有名です。
Perlは今ではそこまで使われなくなった言語ですが、最近活用されているPerlやRubyなどに多大な影響を及ぼした言語です。
一般的に、美徳とは思えない性質がプログラマには美徳になってしまうところに面白さがありますね。
結論だけだと味気ないので、私の実体験も交えて解説していきます。
この記事を読んでプログラマに興味を持った方は下記の記事も参考にしてください。
怠惰(Laziness)
The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don’t have to answer so many questions about it. Hence, the first great virtue of a programmer.
全体的なエネルギー消費を削減するために多大な努力を払う品質。他の人が役に立つと思うような労力を節約するプログラムを作成し、作成したものを文書化して、それについて多くの質問に答える必要がないようにします。したがって、プログラマーの最初の大きな美徳です。
Larry Wall 氏著書の プログラミング Perl(翻訳 by Google)
仕事をしたくない人が、プログラマに向いているとは、一見おかしいと思えるかもしれません。
正確に言うなら、無駄な仕事をしたくない人が、プログラマに向いています。
そもそもプログラムは、繰り返しの仕事を置き換えるために開発されています。
例えば電話です。今は当たり前ですが、電話番号を押せば自動的に相手につながります。
電話のサービスが始まった1890(明治23)年、交換手は東京に11人、横浜に4人だけでした。
この後、10年後の1900(明治33)年には、東京だけで430人の電話交換手が働くようになりました。
この交換手は、自分の電話と相手の電話を繋げる人です。
昔は、交換手が誰に繋げるかを聞いて、手動で電話線を繋げていました。
めんどくさいですよね。しかも、電話交換手を雇うコストも大きいので、
現在のような大量の接続を低コストで実現するのは不可能です。
センスのいいプログラマ、、いえ今なら誰でも自動化しようと考えますよね?
そういう発想がプログラマに必要です。
プログラムは、コストを下げるかつ、処理数を上げて、処理速度もあげるという矛盾したことを同時に実現するのです。
プログラムには、DRYの法則という言葉があります。
DRYとは、「Don’t Repeat Your Self」の頭文字をとった言葉です。
日本訳すると「同じことを繰り返さない」です。
つまり同じ処理を繰り返すような場合は、処理を一箇所にして他の場所でその処理を呼び出すだけでにすることです。関数化やライブラリ化のことを指しています。
これがプログラマに「怠惰」が必要な理由です。
余談ですが、もう一つの具体例は、私の体験談です。
ある先輩がいて、入力された文字が、半角英字かを判断するコードを書いていました。
(今ならライブラリがあるとは思いますが、当時はなかったのか自作でした。。。)
その先輩は、if文を使いa,b,c,d,e……zと全てのアルファベットの文字を書いていました。。。。。
私なら、半角英字と数字に変えて、ある範囲になるかどうかを判断します。
正直この話は、社内で伝説になってましたが、、、、
もう一度言います。
これがプログラムに「怠惰」が必要な理由です。
「怠惰」を身につける方法ですが、正直「怠惰」は誰でも持っている特性だと思います。
すごい働き者の人でも、実はすごい「怠惰」だという人はいると思います。
見つける方法というよりは、自分に素直になることが重要だと思います。
「仕事でも無駄なことしているな」と思うことはたくさんあります。
もう一歩踏み込んで、「その無駄なことをしなくて良い方法はあるだろうか?」と考えてみることが重要だと思います。
プログラムだけではなく、今はGoogleスプレッドシートとかさまざまなツールが存在します。
さまざまなツールを使って業務を効率化提案する人は、「怠惰」を持っているし活用できています。
短気(Impatience)
The anger you feel when the computer is being lazy. This makes you write programs that don’t just react to your needs, but actually anticipate them. Or at least that pretend to. Hence, the second great virtue of a programmer.
コンピューターが怠けているときに感じる怒り。これにより、ニーズに反応するだけでなく、実際にそれらを予測するプログラムを作成できます。または、少なくともそのふりをします。したがって、プログラマーの 2 番目の大きな美徳です。
Larry Wall 氏著書の プログラミング Perl(翻訳 by Google)
この短気に関しては、分かりづらいかなと感じています。
「ニーズに反応するだけでなく、実際にそれらを予測するプログラムを作成できます。」とは、ニーズを受けてから開発するのではなく、ニーズを予見して先回りして機能を作っておくことを指しています。
つまり、拡張性を考慮しておく人がプログラマに向いているということです。
拡張性とは、自分の作成したプログラムを複数の人の好みや使う場面に対応できることです。
具体的な拡張性とは、ウェブ作成で言えば、カラーデザインを設定値で用意をしてようなことです。
拡張性の無いプログラムは、RGB表記で色々な場所で記述します。
拡張性のあるプログラムは、ソースコードの先頭や設定ファイルなどで色を定義します。
その色を変更することによりさまざまな人の要望に対応することが可能です。
呑気なプログラマであれば、要求が来てから対応すればいいと、要求を待っているでしょう。
プログラムの質問をされる前に、予見して回答のドキュメントを作ったりすることも当てはまるでしょう。
「コンピューターが怠けているときに感じる怒り」とは、要するにCPUの活動率100%になっているのに、期待通りの要望や処理スピードが満たされないことを指すのかなと思ってます。コンピューターの能力をフル活用できないことに対しての怒りです。
コンピューターの能力を活かすのは、プログラムです。
私も以前シミュレーションプログラムを作っていたことがあります。
シミュレーションの内容は、図面にある図形間の距離が、
ある特定の距離以下の部分を算出すると言うものです。
一つずつ図形を距離を測るとNの指数乗の計算が必要で膨大になります。
そのため、計算をする前にある程度図形を分類して遠い図形は計算せずにしたりする処理を考えます。
プログラムの組み方により処理スピードが100倍になるのは日常でした。
プログラムは、指示待ちです。指示したことしかやりません。
遅いプログラムと言うのは、それを作った開発者の考え方で実施した結果遅いと言うことになります。
プログラマは、コンピューターの能力を最大限活かせないことに対して怒りを感じる必要があるというです。
如何に効率よくコンピューターの能力を活かすプログラムを書くかが、プログラマの腕の見せ所です。
これが「短気」がプログラマの美徳になる理由です。
短気も人間が本来持っている特性です。
私も自分の知っていることを他人に説明するのが下手かつ嫌いです。
これも「短気」だけで終わらせずに、一歩先にどうすれば怒らずに済むだろうということを考える必要があります。
そこまで昇華できる人は、良いプログラマになれるでしょう。
私も「短気」の活用という点では、足りてないので今後のエンジニア人生気をつけます。
傲慢(Hubris)
Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won’t want to say bad things about. Hence, the third great virtue of a programmer.
過度のプライド、ゼウスがあなたを攻撃するようなもの。また、他の人が悪いことを言いたくないようなプログラムを作成 (および維持) する品質。したがって、プログラマーの 3 番目の大きな美徳です。
Larry Wall 氏著書の プログラミング Perl(翻訳 by Google)
プロ意識を持たないといけないということだと私は解釈しています。
プロ意識を持つことは、プライドを持つこと
品質の悪いプログラムを書かないこと
プログラマーは、いかにシンプルにわかりやすく障害が少なくプログラムを作るかを考える必要があります。
しかし、実際の現場は、プログラマの自信過剰は、問題になる可能性もあります。
例えば、プログラム開発している途中で、より良いプログラムを思いつき修正したら、デグレード(改善した部分に障害が発生してしまいそもそも満たしていた機能が満たせなくなってしまうこと)が発生してしまい大変なことになります。
この傲慢については、過信をせずに自分の技術に自信を持つことが重要だと言っているのだと思います。その上で、自分の知識を他人と議論をしてさらに上に昇華させていく必要があります。また、納得できなれば、時にはとことん議論する必要があります。
ソースコードに対して絶対の自信を持つほどのプロフェッショナルであるべきという点はかなり同意できます。
上記の意味で、「傲慢」はプログラマにとって美徳になる理由です。「傲慢」になるためには、努力が必要です。努力をして、他人に文句を言われない覚悟を持つ必要があります。
覚悟を持つためには、自分で開発したり学習したり実績を積み上げるしかありません。実績もなく「傲慢」なのは、ただの我儘です。
私も「傲慢」になれるほどの努力という意味では、足りてないので今後のエンジニア人生気をつけます。
三大美徳以外のプログラマに必要な素質
三大美徳以外のプログラマに必要な素質
- 論理的思考能力
- 粘り強さ
- 好奇心
- チームワーク能力
- エンドユーザーへの理解
論理的思考能力
プログラミングは論理的思考が求められます。プログラマは、問題解決に向けた分析力や推論力が必要です。
粘り強さ
コンピュータプログラムは細かなミスが許されず、エラーがあるとプログラム全体が動かなくなってしまいます。そのため、プログラマには、エラーを見つけ出し、修正するために、粘り強さが求められます。
好奇心
プログラマは、新しい技術やツールに対する好奇心があることが重要です。新しい技術やツールを習得することで、より効率的なプログラムの開発が可能となります。
チームワーク能力
プログラマは、多くの場合、複数の人と協力してプロジェクトを進めます。そのため、チームワーク能力が求められます。
エンドユーザーへの理解
プログラマは、プログラムを作るだけでなく、エンドユーザーのニーズを理解する必要があります。そのため、エンドユーザーとのコミュニケーション能力が必要です。
以上のような素質がある人は、プログラマに向いていると言えます。ただし、素質だけでなく、学習意欲や継続的な学習能力も重要です。また、プログラミングには専門知識が必要なため、関連する学問や技術の理解が求められます。
プログラムに向いている人
「怠惰(Laziness)」「短気(Impatience)」「傲慢(Hubris)」が自分に当てはまると思った人はいますか?
現役のプログラマの人でも足りてないと思った方もいらっしゃると思います。
大丈夫、私も足りてないですが、20年以上IT関連で職を得てきました。
まさに自分は当てはまるなと思った人、きっとプログラマに向いています。
いえ、もっと言えば、優秀なプログラムになれる可能性があります!
プログラマになって、その特性を活かしましょう!
すでにプログラマーで仕事を探している方は下記のページもぜひ立ち寄りください
最後まで記事を読んでいただきありがとうございます。
記事を読んでリモートワークプログラマになりたいと思った方は下記の記事も参考にしてください
これからもリモートワークのプログラマーに有益な情報を提供していきたいと思います。
フリーランスの情報を集めています!30分〜60分ぐらいのリモート会議をしていただける現在フリーランスで働いている方を募集しています。1000円の報酬をお支払いします!希望者は、私のtwitterアカウントにDMください!
この記事で興味を持っていただいた方は、是非Line公式アカウントにも登録お願いします。
コメント