最近、開発で壁にぶつかっている。
ソフトウェア開発で、私がアプリケーションを開発し、メンターとなる方からフィードバックを頂くという形で開発を進めているのだが、メンターから受けたフィードバックを適当に理解してコードを書くものだから、「そういうことではない」としょっちゅう怒られるのである。フィードバックというのは具体的には、プログラム上の定数の命名の付け方や、画面のデザインの仕方についてである。
メンターの方には「フィードバックの理解に時間を長く取ってもいいのでちゃんと消化してください」と言われているにも関わらず、私は「何か成果を出さないとまずい」と思ってしまい、受けたフィードバックをしっかり解釈しようとせず、浅い理解で次に進もうとしてしまう。その結果怒られる。
ここで私が反省すべき点は2つある。
①そもそも厳密で正しいプログラムを書くことは自分には向いてないと鼻から諦めているところがある。
②プログラムの理解や書き方に時間を使うより、プログラムを作ることを進めたほうが良いと思っている。
今回はこの2点を反省しつつ、プログラマーとしての技能に関わらず、技能をどうしたら伸ばすことができるのかについて考えてみた。
①そもそも厳密で正しいプログラムを書くことは自分には向いてないと鼻から諦めているところがある。
これについては結構根深い。というのも私は人生の中で「自分が得意な分野」を好きになることで、なんとか人生を乗り越えてきた。周りの評価から「どうやら自分が得意らしいこと」を見つけ出し、それをやってるうちにそれ自体が好きになり、更に得意になり、周りからの評価を得るという方法で人生をなんとかしてきている。そして、今回の「厳密で正しく論理的なプログラムを書く」ことは客観的に見ても主観的に見ても得意なことではないのである。どちらかというとシステムの要件定義をしたり、デザインをしたりするほうが得意である。なので、厳密で正しいシステムを作るのは他の誰かにやってもらえばいいや~と開き直っているところがある。
しかし、今回は一人で開発しているため全て自分でやらなければならない。また、今まで自分が開発してきたものを振り返ってみても、厳密性や拡張可能性を考えず、適当な開発を行って微妙なものが出来上がるということがあった。よく考えてみれば、誰かが面白いと思ってくれるものを作るためにも、使ってて快適だと思ってもらえるものを作るためにも、理路整然としたプログラムを書く能力は必須である。正しいプログラムを書く能力が最低限のレベルを超えていないと、ユーザーが使える十分なソフトウェアは完成しない。
目的を達成するためには、得意だろうが不得意だろうがやるしかないのである。そして「やるしかないなぁ」と気づいたのが最近である。つくづく自分が愚かに思える。というわけでDRY原則について学ぶため今更ながら「達人プログラマー」を読み始めた。超名著らしい。よりプログラマーになるためのコーディングの仕方などを教えてくれる本だと思っていたが、そのような知識はもちろん、達人プログラマーはどのようなことを考えているか?どういう心構えでいるか?という部分から入っていて、とても読みやすいし面白い。またどこかで書評を書きたい。
②プログラムの理解や書き方に時間を使うより、プログラムを作ることを進めたほうが良いと思っている。
これについても結構根深い。私はちゃんと基礎知識や周辺知識を勉強してから何かを作るより、さっさと作り始めたほうがよいと思っている。なので、なにか作りたいと思い始めたら勉強する前にさっさと作り始めてしまう。結果、クオリティとしても微妙になるのだが、その失敗を反省することなく、別のプロジェクトに移行してしまうことがよくある。
しかし、これもよく考えてみれば非常に愚かである。というのも、失敗を反省せずに次に進んでしまうので自分の技能が向上していかないのだ。最近思うのだが、世の中のすごい技能がある人は、失敗しない人だと感じる。彼らは常に正しい行動ができたり、正しい一手が打てるので周りの人よりも優れているのである。でも彼らも最初から失敗しない人ではなかったはずである。恐らく彼らは失敗から他の人よりも多くのことを学び、次の機会では失敗しないようにするので、結果的にすごい能力が身につくのだと思う。
なので大事なのは、失敗した時に、失敗を分析する時間を長く取ることである。そこで失敗を放置したまま、次に進んでも同じ失敗をするだけである。だから同じ轍を踏まないように、徹底的になぜ失敗したのか?何が足りなかったのか?次はどう改善するのか?を考えることが必要である。そうやって一歩ずつ階段を上がっていくように継続的に、新たな知識を得て改善していくしか技能を伸ばす方法はないのかもしれないと最近思っている。私の場合には、次同じ失敗を繰り返さないように、プログラムの書き方や失敗しない設計の仕方をきちんと基礎から勉強することが大事である。
以前、「世界一流エンジニアの思考法」という本を読んだが、そこでも世界最高のマイクロソフトのエンジニアでもチュートリアルのビデオを10回は見て理解していると書かれていた。理解に徹底的に時間をかけることにより、その後で爆発的な生産性向上を得ることができるらしい。一流ですらそれだけ理解に時間をかけて一歩一歩進んでいくのに、彼らの能力の100分の1にも満たないであろう私が反省もせず、理解にも時間をかけずにとにかく進めるなんて許されるわけがないのである。
多分「そんなの当たり前だろ」と思われた方も多いと思うのだが、最近つくづく感じていることなので書いてみた。