お疲れ様です。バスクリンです。
今日は最近流行りの「AI」に焦点を当てて、未来のエンジニアに求められる技術について考えてみたいと思います。
AIの歴史
AIの歴史は古く、1956年夏にダートマス大学の会議から学問的分野が確立されました。
日本でも1980年代の終わりから人工知能学会も発足され活気のある議論が繰り返されていました。
私も1990年代から学会のメーリングリストに参加し、様々な手法を学んでいましたが、AIが一般に普及する時代がこんなに早く到来するとは思ってもいませんでした。
(またオマエか)
では、AIがもっと進化すると私たちエンジニアはどうなるのでしょうか?
AIがプログラムを作る?
.NET Frameworkが登場してすぐに私はMSDNのUniversal Subscriptionに飛びつきました。
当時は一人でシステム開発をしていたので色々なことを試してみたかったのです。一番有益だったことはプログラムをプログラムに作らせることでした。
- お客様の要求を分析してテーブル設計、SQL Serverにテーブル構築
- テーブルレイアウトから動的にエンティティクラスを自動生成
- 厳密に型指定されたコレクションクラスも自動生成(ここ作るのがめんどくさかった)
- 列にFKがあればエンティティ間の親子関係を自動生成
- エンティティクラスのCRUDもCodeDOMで自動生成
- INSERT文やUPDATE文を発行する前は、Nullチェックやデータ型に応じた範囲チェック
- 汎用的なカスタムコントロールを作成しバインドさせるコードも自動生成
- マスタ画面はベース画面のクラスを継承して自動生成
これらを全てCodeDomで自動生成していました。VB.NET, C#どちらのコードも生成できました。
これのおかげで設計やビジネスロジックの実装に集中できました。
今でいう「ORマッピング」です。
- 自動生成されるソースは事前に全てテスト済み
- コードやコメントも自動生成しているので統一性があり可読性・保守性が高い
- 仕様変更や機能追加はあったけど10年以上安定稼働
業務システムの大半はデータ加工と更新処理、出力に要約されるので、一人でも十分システムを短期間で作成することができます。帳票系もデバイスコンテキストへ直接描画していたので、設定だけで通常のプリンタ、ドットプリンタ、ラベルプリンタ用へ罫線を引いて小計や合計出力していました。この仕組みで数万種類の商品を販売する問屋さんの販売管理・営業支援システムや自動車部品メーカーの生産管理システムを一人で作っていました。
定型のプログラムは、プログラムに作らせた方が速くて品質の良いものになります。重要なのは、この自動生成ツールの性能を最大限に引き出す設計能力でした。
エンジニアのお仕事
ORマッピングやフレームワークが登場し、昔に比べるとコードを書く量は減っています。
今から20年くらい前、私はAIXというUNIXでコンビナートで使われる原材料の流動量を調整するシステムを作っていました。Oracle等の商用データベースはまだ高価なものでした。
x-window上にリアルタイムにモニタリングしながら流動量を調整するため、高速なデータアクセスと障害耐性の必要があったため、C言語で簡易なデータベースを作成しました。インデックス化されたデータをソート・抽出・更新するだけのものでしたが、基本的な内部処理は商用データベースと似ていました。
今は業務でデータベースを自作しようとする人はいないと思います。それだけ当たり前の時代になりました。エンジニアに要求されるスキルは、データベースを正しく構築できる技術と、高速かつ正確なCRUDが書けるSQLのスキルになりました。
「作る側」と「使う側」の二極化が進んだということです。
インフラエンジニアのお仕事
インフラ関係でもクラウド化が進み、詳細を知らなくてもサーバ構築や基盤設計ができる時代になりました。
本の付録についているフロッピーディスクから最新版のFreeBSDをインストールして、全ての設定を自分で書き換える必要もなくなりました。冗長化やバックアップ、分散化の仕組みやルーティングテーブルのCIDRのマッピングや、障害発生時の通知バッチを自前で作成する必要もありません。ブラウザから必要なものを選択して設定するだけです。
クラウドエンジニアに求められるスキルもAWSやAzure等のサービスを理解して組み合わせて設計していくスキルに変化しています。
これも「提供する側」と「利用する側」の二極化と言えます。
AIの台頭
2018年の5月に新しいVisual Studioの機能が発表されました。IDEに機械学習が組み込まれ、コーディング時のアドバイスなどをしてくれます。変数の誤った使い方などをすると検知して修正を促してきます。
AIでコーディングを改善する「Visual Studio IntelliCode」とは?
今後さらに機械学習やAIの進化は加速して、プログラマの代わりにコードを書いてくれる時代が来るかもしれません。プログラマは残業や徹夜でプログラムを書くことは減っていくと思います。設計の仕事も、要件を指定すればAIが類似のシステムを探し出し、正規化や最適化をして仕様書やドキュメント作成してくれるようになる時代が来ると思います。クラウドサービス、自動生成機能が進化すれば、システムの規模や仕様、画面レイアウトをテンプレートから選択するだけでシステムが完成する時代も来るのかもしれません。
これからのエンジニアに求められること
データベースを自作する必要がなくなったように、SQLが書ければ中身を知らなくてもデータベースを操作することができます。SQLが書けなくてもORマッピングのフレームワークを使いこなせればシステムは構築できます。
これからはAIがプログラムを生成してくれる時代になると定型業務はフレームワークやAIに代わっていき、プログラムのスキルよりサービスやAIの特徴を理解して使いこなすスキルが要求されます。クラウド業界ではこのスキルのことを「クラウドオーケストレーション」と言います。サービスを組み合わせて「調和」させるスキルです。
フルスタックエンジニアと呼ばれる人たちは、要求分析や企画を行い、適切なクラウドサービスやフレームワークを選定し、基盤設計やネットワーク設計・セキュリティ設計を行います。そしてシステム設計からテーブル設計、UIデザイン、プログラムまで全て1人でやってしまいます。
IPA(独立行政法人 情報処理機構)は2018/10/18に「ITSS+」の更新を行っています。ITSS+は第四次産業革命に向けたエンジニアの在り方を定義したものになります。
これからも求められる人材は「分業・専門分化」から「フルスタック・マルチロール」の時代へと変化しています。
「提供する側」のエンジニアに求められるスキルは、今よりさらに多くの問題領域を解決できる専門性の高いスキルが要求されてくるでしょう。一方「利用する側」のエンジニアに求められるスキルは広く浅くなっていき、多くの知識と問題に対する解決方法の選択が重要になっていきます。
未来は不透明だけど創り出すこともできる
コンビナートのお仕事が終わってデータベースに興味があった私はとみたやすひろさんの主催していた日本MySQLユーザ会に参加しました。当時は無償で使える日本語のデータベースがなかった時代だったので、SJIS対応のお手伝いをさせてもらいました。その時はこれだけMySQLの知名度が上がって、大勢の人に使ってもらえるとは予想もしていませんでした。
みなさんがやっている仕事や小さなアイデアも、もしかしたら将来すごいことになるかもしれません。失敗なんか気にせずに興味のあることはどんどん挑戦してみてください。