仕事でソフトウェア開発をするのでしたら、開発が始まる前に学習しておくのが本来でしょう。実際は…ある意味予想通り…開発の現場で学習する、という事態になっています。わたしは、当然のように、この事態は間違っていると信じています。しかし、これがエンジニア不足の、悲しい現実なのかも知れません。
仕事では、現在、C++を使っています。C++は、確かに、オブジェクト指向を覚えるのに最悪な言語の一つのようです。C言語としても機能するC++は、新しい概念を覚えなくても、動くものを作ることができてしまいます。しかも、関数オーバーロードやテンプレートといった、オブジェクト指向以外の便利な機能も満載です。開発の現場でC++を学ぶエンジニアは、オブジェクト指向言語の一つを覚えることはできます。でも、その延長でオブジェクト指向を学ぶのは、とても難しいような気がします。
人がなにか劇的に新しいことを学習するときは、大きな気づきがあると、わたしは考えています。仕事の現場で、動くものを動くものを…といかに実装するかということばかりを求めて、C++を使い続けていても、C言語として使うことができてしまうために、C言語との差に気がつけないのかもしれません。
かく言うわたしがC言語とC++の差に気づいたのは、Delphi(Object Pascal)という異なる様相のプログラミング言語に触れたときです。そのときの衝撃を、わたしは友人にこう伝えました。「目から鱗がぼろぼろぼろぼろ落ちて、足下にたまってぬらぬら光ってる」。まだ気づきに至っていないかもしれない、一緒に働いている若いエンジニアにも、そんな驚きの瞬間を味わってもらいたい、と願って止みません。ぬらぬらとは光らなくても、よいですけれど。