先日、チーム内ミーティングでメンバー全員が今期の自己啓発目標を発表していました。その中で多く目立ったのが「C#を習得する」とか「Perlを習得する」というような新しい開発言語を習得する目標でした。最初は「新しい言語にチャレンジするのはいいことだよね〜」と思っていたのですが、後になってみると「ん?本当にそれで大丈夫かな?」という気持ちにもなりました。新しい言語を習得したといっても、今まで使っていた言語と同じことを別の言語でやってみたって大して意味がありません。COBOLをやってた人がVBで開発して、その後C#を使うようになったとしても、作ったプログラムがすべてCOBOLチックなものなのであれば、「C#ができます」というのは「C#の基本的な文法は理解しています」ということであって、「C#の特性を活かしたスマートなプログラム」や「C#らしいコーディング」ができるという証明にはなりません。Formなどのフレームワークに関する知識も不可欠になってきます。MVCだの、WPFだの、新しい.NET標準フレームワークが山ほど出てきているので、C#の文法だけでなく業務で必要となりそうなフレームワークも勉強する必要があるでしょう。大事なのは言語を問わずに使える「ポータブルなスキル」なんじゃないかと思います。オブジェクト指向を理解していればJavaでもC#でもRubyでも、ある程度簡単に理解できます。「ホワイトボックステスト技法やブラックボックステスト技法を理解しています」というのは「XXXの言語ができます!」というのに比べると地味ですが、ちゃんとしたテストを設計できないエンジニアが作るプログラムはどんな言語を使ったところで結局バグだらけ、ということにもなりかねません。そんなわけで、色々な言語をつまみ食いすることよりも、もっと重要な「ポータブルなスキル」、「エンジニアとしての基礎体力」を挙げてみます。以下のリストは基本的に情報システム開発者を対象とします。きれいなコード、保守性や拡張性の高いコード、堅牢なコードが書けるリファクタリングを理解し、実践できる構造化プログラミングができるオブジェクト指向プログラミングができる達人プログラマーに載っているようなプラクティスを理解し、実践できる代表的なテスト技法を理解し、実践できるテスト駆動開発を理解し、実践できるSQLを理解し、つかいこなせる正規表現を理解し、つかいこなせる文字コードを理解し、文字化けが発生しても慌てずに対応できるHTTPを理解し、ブラウザやWebアプリケーションフレームワークの背後に存在する処理が想像できる基本的な見積り技法を理解し、単なる勘だけに頼らない見積もりができるまた、業務経験が3年以上あるような中級以上のプログラマであれば、以下のような技術や技法を理解し、「やろうと思えば一人でもシステム全体を構築できるようなスキル」をそろそろ身につけておきたいところです。開発プロセスプロジェクト管理いかがでしょう?新しい言語やフレームワークを学ぶのは楽しいですし、「新しいスキルを身につけた!」という実感もわきやすいです。反対に上で挙げたようなスキルは地味ですし、本を読んでいても若干退屈になることがあります。使用する言語や開発する業務対象ががらりと変わっても使い回しがきくのは絶対に「ポータブルなスキル」の方です。おいらはこういう勉強はスポーツで筋トレをしたり、毎日走り込んでスタミナを付けたりすることに似てるんじゃないかなあと思います。華麗なドリブルや格好いいシュートを決めること(=色々な言語やフレームワークをバリバリ使いこなすこと)をしようと思うなら、毎日シュートを撃つ練習ばかりしててもダメですよね?先日のミーティングで「C#とオブジェクト指向プログラミングをマスターする」みたいに「ポータブルなスキル」とセットで勉強しようとしている人はいいと思いますが、「とりあえずC#ができたらいい」とぼんやり考えている人がいたとしたら、少し目標設定を見直した方がよいかもと思いました。本」で探してもらうと色々出てくると思います。はてなブログPro株式会社ソニックガーデンで働くRubyプログラマ。2017年11月に「プロを目指す人のためのRuby入門」を出版。blog)はてなブログをはじめよう!JunichiItoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。