「思考・科学・技術」3つの領域を効率的に学ぶには?
まず、1つ目の論理的・抽象的な「思考領域」では、しっかりと辻褄が合うように順序立てて考えて設計し、目標達成までにどのような開発方法を取ればよいかを考え、方法論などを用いて構築できること。そして、2つ目の「技術領域」はプログラミング言語やフレームワークを用いて、コンピュータで表現するための能力だ。そして、「科学領域」には、ハードウェアやOS、ネットワークやメモリなど、コンピュータサイエンスに関する勉強が求められる。
この三領域はそれぞれ独立したものではなく、お互いが大きく影響し合う。たとえば、「思考」と「技術」がつながれば、考えたことをコードで表現でき、逆に技術を利用して思考を抽象化できる。Webアプリケーションの作成においてフレームワークを利用しているため、リクエストなどを受け取るか、レスポンスを送るかを毎回悩まなくてよいのもこのおかげといえるだろう。
また「思考」と「科学」の組み合わせにおいては、たとえば、修正に対する知識がないと、設計など論理的な過程で把握しきれなかった例外が発生する可能性が高い。つまり、論理的には正しくてもコンピュータサイエンス的には間違っている可能性があるということだ。たとえば、数字2つを足す関数で、論理的には正しくとも、合計が32bitの定数と最大値を超えたら問題が発生する。科学的な知識が不足するために、こうしたことはよく発生する。
「技術」と「科学」も同じく、両者についての知識があることで、たとえば必要なメモリ量や計算時間などを判断しながら、安全で効率的なコードを作成できるというわけだ。
イ氏は、「エンジニアに必要な三領域をバランスよく学習することで、エンジニアとしての能力が上がることを実感した。一方、それまではこのバランスを考えず、すぐに必要な『技術』にフォーカスした学習をしていたことに気づいた」と語る。さらに、今後は設計などの上流のタスクをできるようになるために、計画的な学習を行えるよう行動を開始しているという。
「知らないことを知る」ために、カンファレンスなどに参加したり、上司や優秀なエンジニアに話を聞いたりすることからはじめ、「計画的に学習する」ために、ネットスクールや書籍、社内の資格支援制度で資格勉強するなど、足りない点を計画的に強化。また、そうして得られた知識をチーム内の勉強会で発表したり、意識して業務に取り込んだり、「アウトプットを出す」ことで自分のものにしている。
この結果、次の新規開発案件が始まるまでに、計画的にインフラ分野について学習し、業務でも対応できるようになってきた。また、学んだ知識を周囲のメンバーに共有することもでき、チームにも大きく貢献できたという。
イ氏は、「エンジニアとして成長するには、まずは知らないことを知ることが大切。自分がどういうエンジニアになりたいか、そのためにはどういうスキルが必要なのか。それを知ったうえで計画的に学習し、意識的にアウトプットすることが大切」と強調した。