最初の線をひくために

今年の最後のエントリだけれども、「です・ます」調をやめてエントリを書きたい。
結構、長い間ブログを書いてきたけれど、やはり違和感があるからだ。

普段の話し言葉が「です・ます」調なら良いのだけれど、そんな丁寧な話し方はしない。
そのため、「です・ます」調の文章を書いていると素直に思ったことは書けないと感じている。

今回は、特に自分の思ったことを素直に書きたいと思ったので、タイミングとしては中途半端だけれども、「です・ます」調をやめてエントリを書こうと思う。

最近、優れたプログラマになるにはどうしたら良いか、ということを考えるようになった。
きっかけは単純で、仕事でスキルチェンジを迫られたことだ。

僕は、つい半年ぐらい前まで、仕事では汎用機でCOBOLを書いていた。
それが、今年の7月からJavaやらCentOSやらEclipseやら、俗にオープン系という技術を仕事で触るようになってきた。
現在では、C#とVisualStudioを使って、いままで汎用機で動いているプログラムをオープン化する仕事をしている。

こうしたスキルチェンジを迫られる事態は想定していたため、私生活ではほそぼそとJavaやEclipseを触っていたけれども、役に立つものではなかった。

わかっているつもりになっていたことが多く、プログラムを書く指は動かない。
動くプログラムを書くことができても、「もっと良い書き方があるのではないか」という猜疑心にかられ、書いたプログラムの品質に自信がもてない。

今でも、自分の生産性は高いのか、保守性を満たしたプログラムを書けているのか、という疑問を押し殺しながらC#のコードを書いている。

そんな状態だからこそ、先輩だろうが後輩だろうがお構いなしに、「優れたプログラマ」だと思う人のあとを追って、本を読んだり、プログラムを書いたりしてきた。

そんななか、僕なりに「優れたプログラマ」と感じる人、感じる人なので厳密な定義などないのだけれど、お手本にしている人、アドバイスを求める人たちの共通はだた1つだ。

それは、プログラムを書くことを恐れない人、だ。

僕は汎用機で仕事をしながら、オープン系の技術を私生活で学んできた。
それは、上でも書いたようにいずれ迫られるであろうスキルチェンジに備えていたからだ。

だから、TDDも、テストの自動化も、リファクタリングも、オブジェクト指向も、本を読んだり、勉強会で人の話を聞いたりして学んできた。

本で読んだり、人の話を聞いて学ぶことは悪いことじゃない。
でも、本を読んだり話を聞いたりして学んでいるだけだ、座学だけだと、頭でっかちになって、行動が伴わなくなるのだ。

座学だけだと思考だけが先行する。
分かったような気になって、自分が優秀になったよう気分になる。

そして、頭のだけにある理想の状態にとらわれる。
頭のなかにある理想から離れるのが怖くなる。理想を壊すことに恐れを感じる。

最初からうまくやりたい。
失敗して笑われたくない。
妙なプライドに取りつかれて、最初の一歩が踏み出せなくなるのだ。

妙なプライドにとりつかれたプログラマは、プログラムを書くことを恐れる。
特に新規開発でまっさらな状態からプログラムを書くことを恐れる。

最初の一手、最初の一行から「うまくやりたい」という妄執に駆られるからだ。

しかし、ちょっとプログラムを書いている人はみんな知っている。

最初から完全なプログラムを書くのは無理だ。
プロジェクトが進むにつれ、システムが少しずつ出来上がってくるにつれ、プログラムはその目的に合わせて洗練されてくるものだ。

ただ、最低を避ける必要はある。
プログラムを書き慣れていないと、勉強を怠っていると、この最低を避けることすら難しい。
今の僕は、「最低のプログラムを書いていないか」ということを気にしているレベルだ。

そして、自分の仕事は最低ではないか、という心配もプログラムを書くことを恐れさせる。

プログラムを書くには、勇気が必要だ。
うまくやりたいというプライドを捨て、失敗するかもという恐れを踏み越え、プログラムを書く勇気。

優れたプログラマは、「うまくプログラムを書かなくては」というプレッシャーをいとも簡単に乗り越える。

優れたプログラマは、頭の中にだけある理想に逃げ込まず、理想を実現しようとする勇気を持っているのだ。

優秀なプログラマでもなく、勇気ももたない、技術力ももたない僕がプログラムを書くのはどうしただろうか。
それには2つのことが役にたった。

1つは矛盾するようだけれど、本を読んだり、人の話を聞いて理想を学ぶことだ。
理想を知ることは、最低を避けることに重要だ。
無知なままだと、容易に最低なプログラムを生む。
プログラムにたいする無知は、生み出されたプログラムが最低であることに気づく機会を与えない。

もちろん、理想を知っているだけでは最低を避けることはできない。
最低を避けるという行動を起こすためには、方法を知っていることが不可欠だ。

その方法を与えてくれるのがもう1つのこと、TDDとリファクタリングだ。

もう1つといっているにも関わらず、TDDとリファクタリングの2つを挙げているのは、TDDにとってリファクタリングが不可欠な要素だからだ。

TDDによってテストコードを書いておき、リファクタリングによってシステム全体を考慮してプログラムの構造の改善をはかる。

こうした手法をプログラミングに取り入れるメリットは、間違いを犯すことへの心理的なハードルを下げることだ。
「まず、書いてみよう」という勇気をプログラマに与えてくれるのだ。

テストコードがあれば、いざプログラムを洗練しようとしたときの補助をしてくれる。

テストコードを実行しながらプログラムを修正したり、リファクタリングを進めれば、失敗をしたときにすぐに教えてくれる。
失敗しすぐに気づき、やり直せる。

だから、自信をもってプログラムを見直し、修正できる。
自信をもってプログラムを見直し、修正できるのだから、最初の一歩を踏み出すのも気が楽になる。

また、リファクタリングをする機会を設けておけば、振る舞いを変えず、システム全体を意識しながらプログラミングを進められる。

プログラミングを進めてゆくごとに、プログラムが洗練されてゆくことを実感できる。
プログラマは自信をもって、最低を避け、徐々に完全へと近づいてゆける。

もちろん、ここでいう、完全には正確な定義はない。
自分の理想、自信をもってリリースできる、ぐらいの意味だ。
ただ、自信をもってプログラマはプログラムを書いてゆくことができる。

やり直しがしすい、失敗がしやすいという状況こそが、まっさらな状態からプログラムを書く勇気を与えてくれるのだ。

そして、この勇気こそがプログラマを優秀にしてくれる。
というのは、プログラムを書かずして、優秀なプログラマへといたる道はないからだ。

優秀なプログラマがプログラムを書かなくなることはあっても、プログラムを書かずして優秀なプログラマにはなれない。

本で読んだだけでは、人の話を聞いただけでは、プログラムを書くことの難しさ、プログラムを書くときの心理、思考は理解できない。

一流の選手が書いた本を読んだり、話を聞いただけで、平凡な一般人が一流な選手になれないのと一緒だ。
実践を伴わない理論の学習は、何も生み出さないし、成長を促しはしないのだ。

優秀なプログラマの定義も、優秀なプログラマへといたる道筋は僕にはよくわからない。
ただ、ひとつ言えることは、優秀なプログラマはプログラムを書くことなく育たない、ということだ。

子供の頃に、真っ白な紙を渡されると、なんの恐れもなく僕らは絵を描いていた。

しかし、成長するにつれ絵にも上手い下手があり、自分がうまく描けないことを知っていると、真っ白な紙に最初の線を引くのが恐ろしくなる。

最初の線をどこに引くかに迷い、一線を引くのに恐れすら感じる。

馬鹿にされないか。
笑われないか。
失敗しないか。
恐れが自分の行動を妨げるのだ。
こうして、僕らは喜んで絵を描く習慣を失ってゆく。

プログラムにせよ、他の行動にせよ、「うまくやらなきゃ」という意気込みこそが緊張を生み、行動することを妨げる。

学習を通じて、理想の姿を知っているからこそ、自分自身がその理想に至っていないことを知っているかこそ、行動しなくなる。

しかし、何かを学び、極めようするならば、失敗をすることを恐れてはいけない。
最初からうまくやろうなどと、気負いすぎてはいけない。

むしろ、最初からうまくやろうとするのではなく、徐々にうまくやろうと考えればいいのだ。

失敗への恐れから行動しないよりも、失敗前提でも行動した方がいい。
それだけ行動は尊い。

行動は、現実に影響を与え、成功と成長の端緒となるからだ。

今年は多くの時間を学習に費やした。
そして、学習だけに時間を費やす虚しさを知った。

なにより、学習を行動に活かす難しさと尊さを知った。

来年はその難しく、尊い作業に注力したい。
すでにちょっとしたものは頭のなかにある。

自分の頭のアイデアを行動として、サービスとして少しずつ表に出してゆく。
来年は、行動の年だ。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。