The beginning programmer needs to have, and develop, a few basic skills to write usable programs. These skills can best be developed by keeping beginning programming tasks simple and basic. As the skills become stronger, larger, more complicated, programs can be attempted. Included in the basic skill set are some basic math skills, logic, the ability to plan, and at least a basic understanding of your computer hardware/OS environment.
Yes, it does require math skills to program computers. Computers are just that-computational machines. That most users interact with text or graphic data on computers does not change that fact. In the computer, all information is stored and manipulated as numbers. However, the math skills necessary are not typically too complicated - if you can count, add, subtract, multiply and divide (and know when to do so), and perform comparative operations (such as "2 is less than 3,") you are well on your way to some useful programming. This is not to say that higher order math is not needed for more complicated programming, but these simple skills will be required for even simple programs.
Logic refers to the ability to put sequences of instructions in the proper order. For example, if you were explaining to someone how to open a door, you will have to include the "turn knob" instruction before the "pull knob" instruction. The desired operation of a computer program almost always requires the instructions to be placed in the proper order. Logic errors can cause unpredictable results, and simply switching the order of two instructions (or blocks of instructions) may make the difference between a program running or crashing.
While small programs may be written with little planning, large ones will have to be carefully planned. Planning includes designed data structures, file systems, user interfaces and overall structure of the program. This may require no more than deciding what buttons to put on a form (such as "OK" "Cancel" and "Help"); however, if the program is expected to grow, careful planning (based on previous programming experience) will make the project go faster and smoother, while poor planning may prevent a program from ever being completed.
Finally, programmers should have some basic understanding of the computer systems for which they are programming. For example, if programming in Windows, it is helpful to understand concepts that range from the difference between a text box and a message box to Windows message passing, events, device contexts and handles. As with the other skills mentioned, this knowledge will grow as programs are written, and starting small and simple will be the best path.