In either case, you'll need a relay or a MOSFET (or something) to handle the voltage & current. A mechanical relay probably isn't a good idea, assuming that your 95% duty-cycle switches rapidly. A mechanical relay will also generally need a transistor or MOSFET to supply the coil current. On the other hand, solid state relays are very easy to use. Just make sure to get a solid-state relay rated for DC (assuming your heating element is running off DC) and also rated for 12 amps or more. A machanical relay will work with AC or DC, but solid state relays are made specifically for one or the other.
Doing it in software is probably eaiser than hardware (555s) and it's a LOT easier to experiment with different timer settings, but a programmable microcontroller and software/firmware is actually overkill.
...but as for programming Ive got no clue so Im here to see if you guys can help me out.
Something like this is a good way to "dip your toes" into programming. The [u]Blink Example[/u] will get you started. You'll just have to change the delay time (5 min = 300,000 milliseconds), add a couple of more steps, and another [u]loop[/u] in order to get your initial 5 minute time-delay followed by loop with a 90% duty cycle.
I suggest you review the [u]Language Reference[/u] to get an idea of what your program can do. For example, there are 4 different ways to make a loop.
Also take a look at the [u]Blink Without Delay Example[/u]. In your application, delay() is OK. But, delay() makes the CPU pause and do nothing. In most programs, that's a bad idea.
The most important concepts in programming are loops and conditional branching. (if-statements, etc). If-statements are how computers "make decisions".
It's pretty easy to get started programming the Arduino. But in general, programming is NOT easy. The most important thing for a beginner is to write/change only one or two lines of code at a time. Then, test-compile and test-run your program. Compliers are VERY picky, and sometimes one small error can cause the compiler to report several errors. Or the complier can be wrong wien it tells you where teh error is. The compiler doesn't really know what's wrong, and if you've only added one line, at least you'll know where the problem is.
And of course, sometimes there are things that make perfect sense to the complier, so it won't report an error, but your program doesn't do what you expect. If you get a bug like that and you can't figure-out what's going-on the [u]Serial Monitor[/u] can also be helpful. You can send-out variable values, or messages like "looping now", etc., to your computer to get some hints about what your program is really doing.
Sometimes, your program won't make sense (to you or to the compiler) with one line added. So sometimes, you'll have to write 2 or 3 lines at a time. It also usually doesn't make sense if you just start at the top and work down... It takes some experience to learn how to develop & "build up" your program in a logical sequence.
Professional programmers write & test code one small part a time too, but they might write several lines or a small function before testing.