ビジュアルプログラミングの先へ

巷ではビジュアルプログラミングが話題になっている。すごくいいと思う。

Web方面は非常にがんばっているなぁ。

双方向という言葉でハッとしたが、昔C言語で30日OS開発したことや他の言語でGUIを開発して行くうちに双方向でプログラミングしたいと思うようになったのを思い出した。

という一方向だけでは足りなくて、UIを変更するならばUIの方からも変更を行いたいとずっと思っていた。 色とか変更するのはUIから右クリックして変更したい。 UIだけではなくロジックも書き換えたい。 それも動いているソフトウェア上で書き換えたい。 SmallTalkでは上記が可能だった。よしやるか!と思って2ヶ月。停滞中。頑張りたい。 ちなみに基礎を勉強するならこれがおすすめ。相当前の書籍だけど内容は色褪せない。公開ありがとうございます。 swikis.ddo.jp そういえばIoT機器を操作したいんだけど組み込み機器用Smalltalkはないのかな?SmallTalk環境から遠隔でIoT機器を書き換えたい。SmallTalk言語で。

あと、ソフトウェアの動作中に書き換えて変更することを hot swapping と言うらしい。 日本語Wikipediaには活線挿抜の情報しかなかった。
Hot swapping - Wikipedia

Only a few programming languages support hot swapping natively, including Pike, Lisp, Erlang, Smalltalk, Visual Basic 6 (Not VB.net), Java and most recently Elm and Elixir. Microsoft Visual Studio supports a kind of hot swapping called Edit and Continue, which is supported by C#, VB.NET and C/C++ when running under a debugger.

つまり以下の言語はhot swapping あり

他の言語もっと頑張れ。 全体的なニーズはないのかもしれんが、個人的に非常に欲しい。Visual StudioC/C++でどうやっているんだ。デバッグ時だけじゃなく標準化してくれ。

ユーザーが動作を双方向で書き換えられるようになってほしい。動作させながら自分専用にバージョンアップしたい。 IoTなどの組み込み機器に接続して再プログラミングしたい。 UIの方から書き換えるのはビジュアルプログラミングとはちょっと違うかもしれないけど、その先はそうであって欲しい。


話は変わるが、私は普段ソフトウェア開発で様々な開発をしている。がなぜかときどき工場へ行って自動化の様子を見る機会がある。今では当たり前の光景だが初めて見たときに非常に驚いたことが、PLC(プログラマブルロジックコントローラー)によるラダー言語が圧倒的に自動化の中心にいることだった。

ラダー・ロジック - Wikipedia

工場のどんなロジックを変えるにもPLCのラダー屋さんにお願いする必要があって色々変更してもらうのだけれど、端からみるとものすごく変更が面倒くさい。まずラダー言語自体が面倒くさい。ロジックが全て並列に動いてるから混乱する。脳内メモリ足りなくなるわ。(ラダーの人ごめんなさい。でもこれ触れるなんてすごい。小並感) また、データを保存するメモリ番地を決めてラダーを書き換えて実際に動かす→悪かったらもう一度やり直し。という爆弾処理のような変更とデバッグをしている。ラダーが特殊すぎてバグ取りに時間もかかる。テスト駆動開発なんてできない。 なぜこの大昔から使われているラダー言語が未だに幅を利かせているのかと思っていたけど、以下のメリットがものすごかった。

  1. PCとPLCをつなげて同期するだけで内部メモリの情報変化をリアルタイム可視化可能
  2. ラダー表示画面上でも、リアルタイムにロジック動作が見える
  3. プログラムを動かしたまま、内容を書き換えるRUN中書き込み対応 (hot swapping)
  4. PLCリンク/CCLink(IE) の規格により通信による他機器との連携が非常に楽
  5. タッチパネルと連携し、GUI追加とメモリとの紐付けも非常に簡単(なように見えた)
  6. 安定性や信頼性がバツグン。何年放置してても不可解な現象がない

可視化は正義。ラダー言語はビジュアルプログラミングの一つの到達点だと思う。 また、最後の安定性に関しては、2020年現在でもWindowsLinuxは不明な現象が発生し再起動の必要があるため、末端としてしか扱われていない。中心は常にPLC。 そもそも組み込みLinuxなのに起動に失敗するときもあったのには驚いた。 過酷かつ失敗の許されない環境では、PLC+ラダー言語に勝るものはないのかもしれない。 他の言語でできないのかと考えたこともあるけど、知れば知るほど そりゃ替えられないわ と思い知らされた。


今後、プログラミングが進化していくならば、このラダー言語レベルの情報可視化と変更の簡易化が必要だと思う。ビジュアルプログラミング+αが必須だと思う。
近い将来、VRやARで直接内部情報をプログラミングする時が来るはず。というか来て欲しい。みんなで作ろう。 組み込みやIoT、VR/AR/MRをやるならば、機器につながったら簡単に内部を閲覧変更できるようにしたい。 GDB では足りない。既存の言語環境もまだまだ足りない。SmallTalkはあとちょっと足りない。新しい開発環境が必要なんだと思う。

まとめとして、ビジュアルプログラミングの先はこんなプログラミング開発環境が欲しい

  • ソースコードとUIからの双方向プログラミング
  • ソフトウェアの hot swapping 対応
  • 状態のリアルタイム可視化
  • オブジェクトや他機器との通信簡易化
  • デバッグ容易性