Hola fran, la idea surge de la cabeza del programador. No todos tenemos igual capacidad para resolver problemas o plantear algoritmos, igual que no todos tenemos la misma capacidad para dibujar. Hay personas que de forma "innata" tienen mucha facilidad para dibujar, y otras que han llegado a dibujar a base de mucho esfuerzo y estudio. Con la programación pasa algo similar, hay gente a quienes las ideas le vienen fácilmente a la cabeza y otros que necesitan estudiar mucho. Si no te viene una idea a la cabeza, lo suyo es buscar información en libros, internet, otras personas, etc. que te puedan orientar. En general, a medida que vayas estudiando y resolviendo problemas, irás adquiriendo mayor agilidad y te será más fácil que esas ideas las tengas tú mismo.