¿Debo ir a un curso de algoritmos o comenzar a resolver problemas en TopCoder / CodeChef, etc.?

Si realmente está interesado en la programación, le sugiero que primero vaya al curso de Algoritmos. La razón detrás de esto es que la mayoría de las personas tienden a aprender en orden inverso como: Primero aprender un lenguaje de programación y luego aprender a escribir Algoritmos. Sin embargo, el orden correcto para aprender debe ser Algoritmos primero y el lenguaje de programación y su lógica. Esto se debe a que los Algoritmos ayudan a construir el pensamiento lógico que es muy necesario al escribir programas complejos o resolver problemas complejos de codificación.

Aquí hay algunos recursos para comenzar con Algoritmos:

Introducción a los algoritmos – Wikipedia

El diseño y análisis de algoritmos informáticos: 9780201000290: Computer Science Books @ Amazon.com

Algoritmos y estructuras de datos con Swift

Introducción a los algoritmos (SMA 5503)

¡Espero que esto ayude! Buena suerte.

Debes hacer ambas cosas, en paralelo.

¿Por qué?

Porque, aunque aprender algoritmos a través de un curso te hace aprender más rápido, también hace que las cosas sean aburridas. Por otro lado, resolver problemas en TopCoder o cualquier otra plataforma de este tipo lo involucrará, como jugar al ajedrez. Pero puede sentirse frustrado, ya que no conoce algoritmos básicos.

Entonces, el mejor enfoque será seguir resolviendo desafíos de algoritmos de nivel fácil en TopCoder, etc., que están relacionados con el capítulo que acaba de terminar. De esta manera retendrá más de lo que ha aprendido, así como también mantendrá las cosas interesantes / adictivas.

Realmente te recomiendo que hagas ambas cosas, ya que leer un libro de algoritmos no es útil para un principiante, por lo que primero debes resolver los problemas y fortalecerte al hacerlo, luego comenzar a leer libros y blogs de algoritmos.

Para obtener más información sobre cómo estudiar programación y algoritmos competitivos, consulte esto:

La respuesta de Abdelrahman Hamdy a ¿Cómo puedo ser bueno en la programación competitiva? ¿Hay algún curso que me lleve un paso adelante antes de comenzar a hacer problemas SPOJ o TopCoder? Soy bueno en estructuras de datos.