« 小さい会社で働くプログラマの労働時間 | トップページ | 自分に合った小さな会社を選ぶには »

プログラミングスキルを上げるには

プログラミングスキルというのは、その人の才能にもよるのだが、どれだけソフトウェアの本質を理解しているか、に依存する。では、どうしたらソフトウェアの本質を理解できるのか、と言えば、

できるだけ多くのプログラムを読んで書いて動かす以外に方法はないと思う。

入社直後のプログラマは、他人からプログラムを引き継いでいる可能性が結構あると思う。そうした人は、

そのプログラムの量が膨大である場合のもっとも効率的な勉強方法は、ソースコードをただ漫然と読むことよりも、そのプログラムのバグを修正することである

ということを体験的に習得すると思う。

なぜ、バグ修正でプログラムの理解が深まるかと言えば、まず、バグの原因が分からなくて繰り返し再現を試みているうちにプログラムの挙動の理解が深まる。そして、ブレークポイントを張ったり、ログを出力したりしてバグの原因を突き止めるためにソースコードのあらゆるところを、繰り返し読むことになる。そしてバグの発生箇所らしきところを突きとめたら、今度は、どうしてそのような現象が起きてしまうのかを検証することになる。簡単なバグであれば、バグの原因個所を突き止めた瞬間にプログラムの修正方法がはっきりすることもあるが、そうでない場合は、どうやって修正するのが一番良い方法なのかを考えることになる。

バグはランタイムエラーばかりではなく、フリーズや、パフォーマンスの極度の劣化もある。バグ修正がきっかけで、そのプログラムのパフォーマンスのボトルネックやオーバヘッドを見つけることもあるが、同時に、

どうすればプログラムが速くなるのか、そして遅くなるのかを経験的に学習することができる。

こうしたバグ修正を繰り返すとソフトウェアの本質が理解できるようになる。何にも替え難い経験であるし、本を読んだだけでは身につかないスキルが身につく。

やっかいなバグである場合は、非常に時間がかかることもある。やっているうちにわけがわからなくなって、整理して最初から考え直すこともあるし、深夜になるまでインターネットで情報をあさり、他人のブログからバグ修正のヒントを得ることもあるし、日本語のサイトでは解決方法が見つからないので、海外のサイトを調べることもある。

これを何回も繰り返すことにより、そのプログラムのソースコードの理解は嫌でも深まるし、バグが出やすいコードがどんなものかわかるようになり、プログラミングスキルが向上する。

また、バグを修正するということは、誰かの役に立っているという、わかりやすい図式に見えるので、修正した後は達成感を感じられる。逆に、修正できないうちはどうしてもモヤモヤした気分になって気が済まないので、途中で切り上げて帰る気分にならない人も多いのではないか。

しかし、この

バグ修正の達成感はビジネスとして考えた場合は必ずしも褒められたものではない。

というのは、バグ修正というのは、生産的な仕事ではないからだ。バグを修正すれば、お客さんからお金が貰えるなら別だが、そんな話は聞いたことがない。そもそもバグは初めから存在しない方が好ましいのであり、後から出てきたバグ修正という仕事は、言わば負の仕事なのだ。

したがって、

そんな負の仕事を減らすために、1つのバグ修正を起点にして、同じようなバグが起こりえる個所を同時に直すように気を配ることができるようになる

ことや、

いかにバグを減らすか、ということに目線を向けて開発体制を改善したり、バグ発生を未然に防ぐ仕組みを作れるようになったら、

プログラマとして、さらにスキルを上げたことになると思う。これをやるには、

あきらめない

ということだ非常に重要になってくる。1つのバグを修正したら、それで仕事を終わりにしたくなるものだが、どうしたらもっと良いソフトウェアにすることができるのかということをとことんあきらめずに考え、ソフトウェアと顧客と正面から向き合うことが大事である。本人はあきらめている実感はないかもしれないが、そこで思考を止めてしまう人がとても多いように思う。それは、結果的にあきらめたことと同じである。その違いが、その人のその後を大きく左右すると思う。

また、頭のいい人、要領のいい人は、そんなに時間をかけなくても高いレベルの仕事をこなすことができるが、しかし、やったらやった分だけ身に着くので、そうした優秀な人、センスのある人でなくても、かけた時間や馬力で、ある程度のところまで行きつくことができるのがプログラミングの良いところだと思う。

逆に言うと、

プログラミングがそこまで好きでない人は、小さい会社で頑張ろうと思っても難しいかもしれない。

僕は、プログラミングスキルをあまり身につけていない状態で入社してしまったが、学生時代に「プログラミングって何か良いな」と直感的に思っていて、学生なりにプログラミングに打ち込んでいたので、入社後にそこまで真剣に取り組むことは、当たり前だと思っていた。(これは後から記述するが、単に好きなだけでプログラマをやっていると、最初は良いが、あとで行き詰ることになるのだが)

以前、入社したばかりの若い社員に、深夜2時に寝て6時に起きることは珍しくない、と話したら本気で驚いていた。その社員は9時から18時まで働くのですら、疲れてしまい、土日はずっと寝ていなければ体が持たない、と言っていたが、ほどなく会社を辞めてしまった。

ちなみに、僕が一番忙しかった時期は、入社6年目くらいで新機能の開発項目が僕に重なってしまい、2~3ヵ月ほど、ほとんど毎日、26時まで働いていた時がある。そのころは10時出社だったので、まだ良かったのだが、終電がなくなった後、原付で家まで帰った。

もっとしんどい労働をしている人が世の中にはたくさんいるのは知っているが、それでも僕には身体的にも精神的にもしんどくて、そのときは、10000枚の布団の下に押しつぶされていて、進んでも進んでも布団の中、という感じだった。さすがに、その年の健康診断ではいろんなところが悪くなっていた。しかし、仕事自体は嫌ではなかった。他のプログラマに仕事を分けることも可能だったのだが、成長する機会を失いたくなかったので、それだけはしたくなかった。なので、やらされているという感じはまったくなかった。

やはりプログラマとしては、プログラミングは夢中にでできる楽しい仕事だったし、小さな会社ということで、仕様作成からプログラミングまでほとんどすべてを任せてもらえたのが良かった。やはり重要なことは、プログラミングが好きだ、ということと、本当のプロと呼べるところまで行きつきたいという向上心だと思う。

実際、そこまでやって、そしてそれを積み重ねることが、着実にその人のプログラムスキルを上げる道につながると思う。たまに、残業が多いという話をすると、「それは労働基準法に違反している」という話をする人がいるが、それでは世の中で成功していると言われる人は、定時で帰っているだろうか?大企業のトップは?今売れている芸能人は?日本の首相は?残業どころか、ほとんど土日なしで働いている。そうしたほとんどの人は、やりたくて仕事をしているし、そうしないと他人より秀でた仕事ができないのだと思う。もちろん、小さな会社のプログラマが、皆、土日なしで24時間働かなければいけないわけではないが、いわゆるプロフェッショナルと呼ばれるプログラマが学ばなければならないことは非常に多くあり、短期でプログラミングスキルを上げるには、

時間を忘れるほど打ち込む時期が必要だと思う。

そのときの給与に見合わない場合もあるかもしれないが、そのときに打ち込んだことは必ずその人のその後に影響してくる。小さな会社は、そうした下積みの機会にあふれており、その後の成長の可能性を広げてくれる。

ただし、やりすぎは良くない。この見境は難しいのだが、やりすぎてしまって、それがストレスになり始めてしまうと、ちょっとしたきっかけでモチベーションを激しく失ってしまうことがある。それが極度にひどくなると鬱のきっかけになってしまうので、要注意だ。僕も、頑張るだけ頑張っているのに、本人にその意図がなくても、ちょっとした意見を受け取っただけで、それが猛烈に心ない批判の一言だと感じてしまって急激にモチベーションを失ってしまったことが2回くらいある。やりすぎてしまうと、プログラミングや同時並行でしている仕事のパフォーマンスが劣化するようになるので、それを1つのサインと見て良いだろう。

2010年5月16日

(続く)

にほんブログ村 就職バイトブログ 就活・就職活動へ にほんブログ村 転職キャリアブログへ にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村

|

« 小さい会社で働くプログラマの労働時間 | トップページ | 自分に合った小さな会社を選ぶには »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1356817/34717514

この記事へのトラックバック一覧です: プログラミングスキルを上げるには:

» システムトレードのプログラミングの基本 -リンク集- [トレード環境構築ブログ]
ほとんどプログラムの知識がない私が自作のシストレプログラムを書き始めてかれこれ1年近くたちました、空いた時間で少しずつ書き足してきたプログラムですが、何もかもが手探りでフローチャート等はたまにしか書かず設計図の大部分は頭の中というようなものが多い状態です、、 最近それらの総ファイル数がかなり増えだんだん収集がつかなくなってきましたので、ここでプログラミングの基礎について始めて調べてみることにしました。 何も知識が無くプログラミングを始めて困っている事 バグの修正方法 バージョン管理 主にこの2つの事... [続きを読む]

受信: 2010年11月19日 (金) 07時50分

« 小さい会社で働くプログラマの労働時間 | トップページ | 自分に合った小さな会社を選ぶには »