This is something I have experience with...
If you haven't done any programming before, starting this from scratch is not something you want to do. Getting the back-end done right is critical to your engine, incorrect spark timing leads to pre-ignition or detonation and can destroy your engine. Injecting at the wrong time can get your cat soaked in unburnt fuel and even start a fire.
The problem here is real-time systems and responding to interrupts at the right time. If you are off doing something else in the program and you miss your crank sensor by a couple milliseconds, you pre-ignite and bust a piston.
What is within reach is starting from something and hacking on it. I would start with the
MicroSquirt[
^] which is basically the hardware for what you want along with the code to run it and the UI to tune it. You can bend the Micro/MegaSquirt to do whatever you need.