You can create a network connection between two EV3s using USB + ev3dev. Just enable tethering (the "Gadget" checkbox) on one of the EV3s. Connect the USB cable to the USB peripheral port on that brick (the small port next to the output ports) and the host port on the other EV3 (the USB port on the side of the brick).
Then, you could use something like RPyC ...
I've had great success with Bricx Command Center or BricxCC (as mentioned in this post) on my NXT using NXC (which is easy to pick-up when you already have a C/C++ foundation like you've mentioned).
Installation, using the supplied drivers and connecting via USB is a breeze :)
Hope this helps!
What you're trying to accomplish is called Odometry, and fortunately it's a pretty common task in robotics so there's a lot of information available on how to do it. The short answer is, it's relatively easy to implement, but hard to make it work really well.
Let's make things simpler by deciding that the robot can only a) drive straight and b) turn 90 ...
ev3dev works pretty well for that purpose, and all you need is a microSD card.
You'll need to use the Motor class. It work with both large and medium motors, and either can be use to shoot balls, so this part will be at your preference.
This isn't exactly sending direct commands to your robot, but LEGO Education recently released a python stack for the EV3 brick.
I haven't tried it; but as I understand it, it's an alternative firmware which should allow you to have python scripts running natively on your EV3 brick, allowing for full autonomous robots programmed in python.
It's definitely possible and feasible to communicate from a program on your PC through bluetooth with an EV3 brick, several example projects can be found on the internet.
Assuming you want to code Python on your PC, I found this link: http://ev3directcommands.blogspot.com/2016/01/no-title-specified-page-table-border_94.html
In my experience, most 3rd-party firmware can be flashed to the NXT brick using the standard NXT-G software "Firmware Update Tool." As others have mentioned, BricxCC with NXC is also a great option.
And if you're having trouble with the Python implementation, it's definitely worth checking out LeJOS (Java for Mindstorms). While Java may not be the usual ...
I have not tried this for myself. But as far as I know ev3dev does not support EV3 USB daisy chaining.
EV3 serial to EV3 serial over sensor ports should work. e.g. as an example https://github.com/ev3dev/ev3dev/issues/346 and https://github.com/ev3dev/ev3dev/issues/695
Make your own cable with a wire for ground, and cross-over wires for TX and RX.