trapemiyaの日記

hatenablogが新しくなったんで新規一転また2019年1月からちょこちょこ書いてます。C#中心のプログラミングに関するお話です。

T4でコード生成の自動生成化を進めていて思うこと

ずーぅつとやってることなのだが、C#でコーディングする際に、T4というツールを使ってソースを生成する機能を進化させ続けている。
大体、事務的なプログラミングのパターンは決まっているので、比較的こういうことには事務用アプリの作成には向いている。

今は私はC#を用いてWPFでMVVMデザインパターンでそういったアプリを開発しているが、これに沿った独自のフレームワークを作成し、それに沿ったコードをT4で自動生成している。

単純にコーディングすれば良いところをT4で自動生成させることを開発しているのだから手間がかかる。でも、それは次からはちゃんと省力化につながっている。決まりきった画面ならパラメータをT4に与えるだけで一つもソースを直すことなく一通りの動作をする。そんなに簡単な画面ではなく、ちゃんと実用レベルに耐えれるぐらいの画面である。

もちろん、T4で自動生成するよりも時と場合によってはまるごとソースファイルをコピーし、それを修正した方が早いこともある。あまりにも似た画面の場合などだ。これは場合によって使い分けている。

で、こうやってT4で自動生成していくと、どうしてもT4に与えるパラメータが増えてくる。もっとも人間が管理できないほどは多くないのだが、今後増えることはあっても減ることはないだろう。
なので、ソースの自動生成に限界を感じる時がくるかもしれない。そんな時、AIが役に立たないかなぁと思ったりしている。

今のように論理的に毎回間違いなく同じ動作・処理をするプログラムというものは無くなることはないだろう。そういったものは必ず必要だからだ。人間は応用も効くが間違えてもしまう。なので、間違いを犯さないプログラミングは必要なのだ。もっと言えば、論理的なことは必ず論理的に動作するということは不変であり、無くなるわけがない。

なので、AIはAIとして自己判断するという分野の発展は求められていくだろうし、その一方で今のようなプログラミングはプログラミングとして求められ続けていくだろう。

であれば、T4の限界をAIによって突破できるかもしれないと考えてみたりする。こういうアプリを作ってという依頼をAIに渡せば、AIが作ってくれるのが理想である。どうアプローチすればそれが実現できるのか?
その意識は忘れないようにしようと思う。

プログラミングがプログラミングを生み出せるようになれば、さらにAIがプログラミングをするようになれば、そこから人間では到底できなかった思考が生まれ、科学は指数関数的に発展するのではないかと思う。反重力エンジンなんかもできちゃうんじゃないかな?大統一理論とか完成して。

確かにプログラミングは進化し続けていると思う。ただ、30年以上もCOBOLPASCALの頃からプログラミングを続けている僕から見れば、根本的なものは何も変わっていないと思う。やり方が変わっただけだ。

だから、オーセンティックでないものを求めてT4に手を出しているのかもしれない。あー、でも思い出した。30年前からそういう発想があったし、実際に僕もやっていて実用化してたんだ。COBOLでね。
なので、やっぱりAIが入らないと僕の中では何も変わってないように思っちゃうんだろうな。
こう書くとAIがプログラマに取って変わるように思うけど、じつはそうじゃなくてAIに教えるのは、そして指示を出すのはあくまで人間であって、そういう人間にはやっぱりシステム的な高度な知識が求められる。

#と、仕事の合間のコーヒーブレークに書きなぐってみました。これからの世界を担う若い世代に期待も込めて。