Какими способами можно организовать взаимодействие между разными программами?
Способов очень много. Некоторые от них зависят от применяемой ОС, некоторые - нет. Все зависит от решаемой задачи - нет смысла переписывать сюда учебник.
Делай на TCP, решение универсальное. Сейчас модно через сервер очередей RabbitMQ делать взаимодействие, но там тот же TCP.