Eso sigue siendo súper dificil de contestar... como varios han dicho, realmente tienes que meterte, intentar lograr algo y ver lo que te gusta.
Por ejemplo, solo contestando a tu pregunta respecto de tipos o "paradigmas" de programación: en mi trabajo habemos muchos "Ingenieros de Software" (programadores, en el fondo), pero cada uno es un mundo de diferencia en gustos y formas de abordar problemas y soluciones. Voy a describirte algunos de esos perfiles solo pensando en mi pega y ya vas a ver cuanta diferencia puede haber entre cada uno:
1) Joe: Programador fanático del paradigma de la programación funcional, del desarrollo ágil y el open source. Purista en el uso de los conceptos, tanto que a veces escribe código que solo programadores funcionales puros entienden y ha llegado a decir que la "Orientación a objetos" ha sido una farsa. Tiende a creer que toda la programación es "Computer Science" y que todos los programadores deben tener una profunda formación matemática. Odia Java, ama Scala.
2) Rob: Programador ávido en el mundo de la programación funcional, muy enfocado en problemas de algoritmía y test unitario, pero se olvida de que el Software es un producto que se entrega
Toma un enfoque teórico para resolver problemas y si tiene que resolver algo de forma compleja pero que es más apropiado para sustentar la teoría, prefiere dar el paso largo. Se enfoca en tópicos usualmente poco amigables como expresiones regulares, extractores, construcción de lenguajes, etc. Hay que tener cuidado cuando se le pide ayuda, ya que gusta de comentar más de lo que sabe que escuchar lo que necesitas de él
3) Rod: Formación francesa donde realmente se le toma a la programación como una rama de la matemática. Su especialidad es entonces en la compresión de problemas desde una perspectiva matemática, más que de tecnología... No parece importarle mucho los aspectos "TI" de la programación, sino más bien lo que tiene que ver con problemas lingüisticos asociados con la matemática, mientras hace parecer que tiene un interés en tópicos de programación pero solo le interesan las "Higher order functions"... está más interesado en aprender tecnologías para usarlo para emprender que para mejorar como programador.
4) Etc. etc.
En resumen... todos hablan un lenguaje distinto y tienen formas de enfrentar los problemas y presentar una solución. Cualquiera sea el caso, lo que diría que tenemos en común "todos" los programadores es "El pensamiento lógico/matemático" (que no significa necesariamente saber matemáticas!), en el sentido abordar los problemas de forma metodológica: separar un problema, ver cuál es el camino para dar una solución que sea susceptible de programar (es decir, generar una "solución computable") y si esto produce un resultado esperable como solución al problema. En forma más concreta, pensar en algoritmos.
Probablemente de los perfiles que describí entendiste solo una parte, pero eso es el punto también... programación es un tema demasiado amplio y mucho de ello es solo cosa de estilos.... esa es conversación de nunca acabar, mejor producir 
PD: Los problemas que posteó @EstebanGaete estaban muy buenos para comenzar a ejercitar, una vez que comprendas el tipo de pensamiento que está detrás de "programar" una solución.