¿Puede un programador intermedio con experiencia previa en Java comprender el SICP (Estructura e Interpretación de Programas de Computadora) por sí solo junto con el curso correspondiente del MIT?

Ciertamente. Tenía un poco de experiencia previa en programación con Lisp (no profesionalmente, solo en mi propio tiempo) antes de ingresar a SICP. Descargué una implementación de Common Lisp, revisé un pequeño tutorial de Common Lisp y leí “Common Lisp: Una introducción suave a la computación simbólica” (https://www.cs.cmu.edu/~dst/LispBook/book .pdf). Eso me familiarizó con la estructura básica de la lista y me acostumbré un poco a navegar y trabajar con ella. Esto es importante, porque ingresa a un mundo donde ya no hay una distinción entre el código fuente y las matrices / colecciones de datos. Es todo lo mismo. Quizás SICP también lo familiarice con eso. Lo revisé con un grupo de usuarios de Lisp y omitimos los preliminares. Parecía proporcionar muchas oportunidades para practicar con operaciones básicas en Scheme antes de entrar en conceptos avanzados.

Antes de esto, había programado profesionalmente en C, C ++ durante varios años y 1 año en C #, con unos pocos meses de Java.

Eso no quiere decir que no encontrará algunos de los ejercicios realmente difíciles, porque no está familiarizado con cómo pensar como un programador funcional. Los ejercicios a veces desafiarán sus suposiciones sobre la programación, pero esas son excelentes oportunidades para aprender algo nuevo. Lo que te animo a hacer es darte tiempo para reflexionar sobre eso por un tiempo. Si parecen imposibles, lo mejor de atravesarlo en su propio tiempo es que puede saltarse los problemas que son demasiado difíciles de resolver en el momento y volver a ellos más tarde.

Descubrí que el libro no se vuelve progresivamente más difícil cuanto más lo revisas. Los problemas difíciles están esparcidos por todo el libro. Simplemente aparecen de vez en cuando. ¡Vale la pena completarlos para los momentos “a-ha” que obtienes cuando lo haces!