ここから本文です

オブジェクト指向なんて分かんない!――エンジニアに「基礎力」は必要か?

5/26(金) 7:10配信

@IT

 進化が早いIT業界では、経験のない技術やプログラム言語を学ばなければならないことが多いものです。そのたびに、「また、新しい言語を覚えなくちゃいけないのかよ。めんどくさいなー」と、技術の習得にストレスを感じていませんか?

 もし、「あー、この技術は大体こういう感じね」と、早い段階で大枠をざっくりと把握できたら、それほどストレスを感じなくて済むかもしれませんし、「これは便利そう」「面白そう」と、技術の習得に興味が湧いてくるかもしれません。

 その肝となるのが、「基礎力」です。基礎力が身に付くと、初めて触れる技術やプログラム言語でも、概略が直感的に分かるようになります。また、技術職以外でも、エンジニアの経験を生かせ、今まで以上に仕事が楽しくなります。

 でも、どうやったら「基礎力」が身に付くのでしょうか?

●また新しい言語を覚えなくちゃいけないのか……

 「基礎力」の話に入る前に、私が「あのおかげで、エンジニアの基礎力が身に付いたな」と思った経験をお話しさせてください。1999~2001年ごろのお話です。当時私はプログラマーで、あるシステム開発会社に常駐していました。

 当時のシステム開発と言えば、クライアント/サーバ型のシステムが一般的で、開発言語はC言語やVBなどが主流でした。

 そんな時代に、一緒に仕事をしていたKさんが、次のシステム開発のプログラム言語に選んだのが「Java」でした。

 Kさんは、新しい技術やプログラム言語への関心が高い優れたシステムエンジニアでした。早い段階から「Write once, run anywhere(1度書けばどこでも動く)」という理念の下に作られたJavaの可能性に期待を寄せていて、事前に調べたり、コードを書いて試したりしているようでした。

 当時日本ではまだ、Javaの黎明期だったと思います。けれどもKさんは「Javaは面白いよ。書き方はC言語とあまり変わらないから、C言語が分かる竹内ならできると思う。今度の開発、Javaでやってみない?」と言います。

 私は「分かりました」と答えました。けれども、心の中では「また新しい言語覚えなくちゃいけないのかー。めんどくさいなー」と思っていました。

 けれども、仕事ですし……。

●「オブジェクト指向」って、意味分かんない

 Kさんが言う通り、Javaのコードの書き方はC言語に似ていました。条件文や制御文はすぐに理解できました。

 けれども、最も私の頭を悩ませたのが「オブジェクト指向」でした。「クラス」「継承」「カプセル化」などの目的や意味が全く理解できなかったのです。

 情報がないのも困りました。今でこそ、インターネットを検索すれば、さまざまな情報が手に入ります。しかしかつては、技術的な情報を学習するとしたら、英語のWebサイトを読み解くか、1冊数千円もする本を買うしかなかったのです。

 しかも、本には「犬と猫を抽象化すると、動物になり……」など、理解が難しい説明しか書かれていません。「犬と猫がどうしたって?」――一体どういうことなのかチンプンカンプンで、何度も挫折しそうになりました。

 しかし、それでは仕事になりません。私は意味が分からぬまま、サンプルコードを書いては動かし、書いては動かしを繰り返しました。

●神様は突然舞い降りた

 言語が理解できない。でも、仕事は進めなければならない……切羽詰まった状況の中で、キーボードをたたきながらモニターとにらめっこ。

 そんなときです。プログラミングの神様が、突然舞い降りたのは。「あ、オブジェクト指向ってこういうことか!」――全く意味が分からなかったオブジェクト指向が感覚的に理解できたのです。

 言葉で説明するのは難しいのですが、今まで頭の中に入れるだけ入れて、全くつながっていなかった情報が一瞬でつながった感じ。それまで、胸の辺りでずっとモヤモヤしていたものが、スーッと流れていくようなあの感覚は、今でも忘れられません。

 C言語やVBでコードを書いていたときも、仕事はそこそこ楽しいと感じていました。けれども、このときの体験からプログラミングの楽しさが何倍にも増しました。

 コードを書くのが楽しくなったことで、最適なコードの書き方、最適な変数やデータの管理、メモリ管理、例外処理なども意識するようになり、「なぜ、そうするのか?」「なぜ、そうしなければならないのか?」を考えるようになりました。

 また、その後.NETやPHPなど、他の言語も触れましたが、C言語やVBを身に付けた時よりも短時間で、「あー、大体こういう感じね」が分かるようになりました。

 私はエンジニアの「基礎力」を手に入れたのです。

●エンジニアの基礎力は他の仕事でも役立つ

 現在の私は、プログラマー時代のように、ゼロからプログラムを書くことはありません。Webサイトのサーバをメンテナンスしたり、CMSのコードを自分好みにカスタマイズしたりするぐらいです。ですから、プログラミングの技術力では、現役の皆さんには到底かないません。

 でも、エンジニア時代に身に付けた「基礎力」は、エンジニア以外の仕事でも大いに役立っています。

 例えば、私は今、職場のコミュニケーションやストレスを改善するための研修や講演、個人のコーチングなどを行っているのですが、企業や個人が抱えている「困りごと」をヒアリングするときに、「言葉ではこう言っているけれど、問題はそこではなく、これだな」と、問題の本質を見極めるのが得意です。

 問題の本質を見極めるのが得意なのは、オブジェクト指向の「抽象化」を身に付けたことが影響しているのではないかと思います。なぜなら「抽象化」とは、「異なる物事の共通点を探し、それを1つの概念としてまとめたり、物事を大局的に捉えて、その背景にある構造や目的、意味を見いだしたりすること」だからです。

 具体化が「これを実現するためにはどうすればいいか」を詳細にしていくのに対し、抽象化はその反対で「問題の共通点は何か」「そもそも、この目的は何か」「そもそも、何のために」など、物事を1つ上の視点から考えることです。

 「顧客の課題を解決する」という仕事をする上で、「抽象化」の概念は私にとってなくてはならないものです。プログラマー時代にオブジェクト指向を学んでいるときは、まさか将来こんな形で役立つとは思いもしませんでした。

 仕事って、みんなつながっているんですね。

●基礎力の習得は「1つのことを、とことん極める」

 最近、情報がたくさんありますが、「サルでもできるナントカ」「一瞬でできる魔法のナントカ」のような、ノウハウ的なものが多いですよね。

 私は、「基礎力」はノウハウ的なものよりも、「1つのことをとことん極める」ことで身に付くのではないかと思います。プログラマーなら、1つの言語をとことん極めればいい。

 私の場合はJavaでしたが、言語は何でもいいと思います。大切なのは、今の仕事を「とことん極める」こと。プログラム言語によって、コードの書き方に多少の違いはあっても、基本的な部分はそれほど変わりません。あなたが今いる環境でできることをやってください。

 「基礎力」を身に付ける過程では、多少の「分かんないよー」があるかもしれません。けれども、ある一線を越えると、プログラミングの神様が降りてきます。すると、見える世界が一瞬で変わります。それはまるで、水を熱し続けて、沸騰すると液体が一気に気化する瞬間のようなものです。

 基礎力が身に付いて、「あー、大体こういう感じね」が直感的に分かるようになると、他の技術やプログラム言語も簡単に理解できるようになります。そして、基礎力の本質的な部分は、エンジニア以外の仕事にも役立つことに気付くでしょう。

●今回のワーク

 静かな場所に行って、コーヒーでも飲みながら、紙とペンを取り出して考えてみてください。

1. 「今、最もはまっていること、面白いこと、楽しいこと」を書き出してみましょう
2. 併せて「今、最も困っていること、行き詰まっていること、めんどくさいこと」を書き出してみましょう
3. プログラミングの神様は、どちらの入り口からでも出会えます。どちらか一方を決めて、とことん突き詰めてみましょう

●筆者プロフィール
しごとのみらい理事長 竹内義晴
「仕事」の中で起こる問題を、コミュニケーションとコミュニティの力で解決するコミュニケーショントレーナー。企業研修や、コミュニケーション心理学のトレーニングを行う他、ビジネスパーソンのコーチング、カウンセリングに従事している。著書「感情スイッチを切りかえれば、すべての仕事がうまくいく。(すばる舎)」「うまく伝わらない人のためのコミュニケーション改善マニュアル(秀和システム)」「職場がツライを変える会話のチカラ(こう書房)」「イラッとしたときのあたまとこころの整理術(ベストブック)」「『じぶん設計図』で人生を思いのままにデザインする。(秀和システム)」など。

最終更新:5/26(金) 7:10
@IT