おはようございます。九条です。
布団には入っていたものの、眠れずに徹夜してしまいました。
今回は、プログラミングの話題をします。
特にこんな方向けの記事です。
- 就職したは良いが、ネット上のサンプルのつぎはぎでプログラムを作っていて実力が上がっている気がしない。
- 情報工学の卒業生なのでプログラミングの理解は多少あるが、バグに悩まされている。
初心者と言うと未経験者のことを指していましたが、今回は実務経験者のことも含みます。
では、見ていきましょう。
やるべきことは3つ
やるべきことは3つ、どんな言語を使っていても言えることです。
- メインで使用している言語の文法を完璧に押さえる
- 開発方法論を勉強する
- 資格を取る
メインで使用している言語の文法を完璧に押さえる
つぎはぎをやめましょう
ネット上のサンプルコードをつぎはぎしたプログラムを作っていないでしょうか?
これは非常に危険な仕事の仕方です。
ネット上に公開されているコードの断片は誰が作ったものでしょう?素人が作ったものかもしれません。素人が作ったコードを鵜呑みにしてそのまま自分の製品にしてしまうようでは話になりません。プロとしての自覚を持ちましょう。
また、そのサンプルコードには悪意あるコードが紛れ込んでいるかもしれません。極端な話、サンプルを実行したらCドライブをフォーマットされてしまうかもしれませんし、SQLインジェクションが意図的に作り込まれているかもしれません。
何より、ある状況で動いていたコードを、そのまま別の場所に当てはめて動くとは限りません。
つぎはぎをやめるためには
それでは、つぎはぎを辞めるためにはどうすれば良いでしょうか?
サンプルコードを参考にするのは悪い事ではないのです。問題はそれをそのまま自分のプログラムにコピペしてしまうことです。
サンプルコードを参考にする場合は、必ず公式のドキュメントで裏付けを取るようにしましょう。
そうしているうちに、標準ライブラリの理解も進んでより効率よく仕事ができるようになります。
しかし、公式のドキュメントを読んでも分からないということがあると思います。
なぜそうなるかと言うと言語の文法を理解していないからです。
逆に文法が分かれば公式のドキュメントを読んで理解できるようになります。
文法を完璧に押さえる
公式のドキュメントを読んで理解するためには、言語の文法を完璧に理解しておく必要があります。
基本書は端から端まで読んで完全に内容を覚えましょう。
例えば、C#を利用している人であれば、次の文法事項について説明できるでしょうか?
- プロパティとインデクサ
- 演算子のオーバーロード
- ref と out の違い
- デリゲート
- カスタム属性
- ポインタ
どこまで理解しておけばよいかと言うと、私のように、何も見なくても専門書を書けるレベルです。
標準ライブラリの仕様を暗記する必要はない
標準ライブラリの仕様を全部暗記する必要はありません。
文法事項が分かれば、標準ライブラリの仕様はフィーリングで一気に理解できるようになるので、使うときになって調べればよいのです。
例えば、C#のボタンにどんなプロパティがあるかを全部言える必要はありません。
ただ、ライブラリのコンセプトは理解しておきましょう。特に .NET Framework のライブラリは少々複雑な面があります。
例えば、こういったことは、予め理解しておくべきだと思います。
- SqlConnector と DataAdapter の違い
- DataTable の行を削除した時の動作(削除フラグが立つだけ。)
- Windows Forms は階層構造になっていて、Controls プロパティを通して下位の階層にアクセスできる。
周りに合わせてはいけない
この書き方は明らかに間違っているとか、業界標準とされているコーディング規約を無視しているとか、仕事をしていると不味いプログラムをたくさん見かけることがあります。
例えば、こんな感じです。
- getter/setter しか関数の無いクラスを見かけることがあります。
- Check…() のような関数名を Chk…() と略していることを見かけることがあります。
- 配列を代入して複製している気になっているプログラムを見かけることがあります。
- 何故かグローバル変数ではないローカル変数に glb_ と言うプリフィックスが付いていることを見かけることがあります。
間違ったコードが社内標準として定着しているかもしれません。
これは、先輩が書いたコードをつぎはぎし続けた結果です。
先輩がやっていること、周りがやっていることが正しいとは限りません。
プログラミングは科学です。習慣ではなく科学的に正しいことを実践しましょう。
文法事項を勉強するだけで優位に立てる!
案外、プロのプログラマでも、こうした文法事項をきちんと理解されていない方はいます。
文法事項を理解しているだけでも一目置かれる人物になれる可能性が高いです。
開発方法論を勉強する
文法事項を理解しました。標準ライブラリの使い方を学びました。これでつぎはぎせずに自分でコードを書けるようになったはずです。
品質の壁
しかし、次の壁があります。品質です。
- プログラムがバグる
- 機能を追加したらバグる
- バグを直したら別のところがバグる(デグレード)
- 仕様モレが起きる(仕様書通りに開発したのにお客さんが求める製品にならない。)
特に、デグレードはお客さんの信用を著しく失ってしまうことになるため、絶対に避けなければなりません。
また、品質には含めない考え方をする場合もありますが、こんな問題も出てくるでしょう。
- 見積りが大きく外れる
- セキュリティ上の脆弱性を作り込む
解決方法
こういった問題で伸び悩んでいる時は、開発方法論を勉強することが有効です。
私もこういうとき、開発方法論に関する本を読んで急激にスキルが伸びたのを覚えています。
開発方法論とは
さて、開発方法論とは何かということになります。
これは具体的な用語を挙げた方が分かり易いでしょう。
例えばほんの一例ですが、次の事項について説明できるでしょうか?
- ウォーターフォールとアジャイルの違い
- テスト駆動開発
- リファクタリング
- 解放閉鎖原則
- 分岐網羅、条件網羅、複合条件網羅
こういう用語を全く知らない場合、開発方法論がまるで意識できていないことになるので要注意です。
また、ドキュメントを書くための技術も開発方法論に含まれると言えるでしょう。
例えば次のような技術です。
- UML
- USDM
開発方法論を身に着ける
開発方法論を身に着ける方法ですが、これも文法事項の理解と同じで本を読むことです。
また、文法事項のところで説明した「周りに合わせてはいけない」ということは、開発方法論にも言えることです。
とは言え、周りと違うことをやろうとすれば目の敵にされることもあります。
と言うのは開発方法論の場合、周りを巻き込むようなタスクも出てくるからです。
例えば、テスト駆動開発を実施しようとすれば、テストツールをプロジェクトにインストールしたり、テスト専用のプロジェクトを作ったりしなければなりませんが、テスト駆動開発をやっていない人から見たらどう見えるでしょうか?
これで品質が上がって、仕事の効率が上がると説明しても納得してくれないかもしれません。
周囲との摩擦が出てくるかもしれません。
貴方がプロジェクトリーダーなら勉強したことを実務に活かせるかもしれませんが、周囲と摩擦を起こしていては、協調性が無いと思われてプロジェクトリーダーに昇格させてもらえないかもしれません。
ここへ来て人間関係の問題が出てきます。
これを乗り越えるには信用を勝ち取って周りを説得しなければなりません。しかしこれは非常に難しい事なのです。
次はその方法について考えてみます。
資格を取得する
信用を勝ち取るために
信用を勝ち取るひとつの方法は資格を取得することです。
資格を全く評価しない採用担当者や上司が多数派です。
しかし1割ぐらいの人は評価してくれます。
会社に100人いるとしたら10人ぐらいは評価してくれます。そしたら信用に繋がるので、新しいことを始めやすくなります。
お勧めの資格は、基本情報技術者、応用情報技術者、情報処理安全確保支援士、Oracle Master 等です。
資格に限らず、新しいことを勉強したら、社内勉強会を実施して知識を共有していくのも有効です。
文章力を付けるために
応用情報技術者試験では記述式の問題が出題されます。
こういうスキルは仕様書を書く上で必要になってきます。
「仕様モレ」を防ぐことが出来るのです。
幅広いスキルを身に着けるために
言語の文法と開発方法論だけでもプログラマとしての通常業務はかなりこなせるようになりますが、プロジェクトリーダになるには、もっと幅広い知識が必要になります。
例えば次の用語について説明できるでしょうか?これらは応用情報技術者の試験範囲です。
- ISMS
- CMMI
- システム監査
また、ちょっとカテゴリ違いかもしれませんが「トランザクション分離レベル」と言う用語を説明できるでしょうか?これはデータベースの範囲です。
システム監査は多くの人にとって全く馴染みのない概念なので、不要だと思われるかもしれませんが、そんなことは有りません。
システム監査では人が如何に信用できない生き物であるかを学ぶことができます。
例えば、上司が保身に走っているかもしれません。
そういう行動を見破って、会社全体のためになることを考えるきっかけをくれてくれるでしょう。
まとめ
プログラマ脱初心者を目指す場合は次のことを実践してみましょう。
- 文法事項を完璧に押さえる
具体的には本を読みましょう。 - 開発方法論を勉強する
具体的には本を読みましょう。 - 資格を取得する
信用を勝ち取るために必要です。
コメント