Me quedaría con eso. Dos razones:
- Muchos de los algoritmos que aprende en 210 requieren una comprensión de las abstracciones como la recursividad y el paralelismo de datos (flujos, mapas, reducciones, etc.). Las clases de algoritmos más adelante (es decir, 15-451) se vuelven aún más abstractas; ni siquiera codificas las malditas cosas, solo discutes sus tiempos de ejecución / etc. Por lo tanto, comprender los conceptos en 150 proporciona una base decente para esas clases. Que estás teniendo dificultades con la recursividad / continuaciones / etc. es una parte natural del aprendizaje de un paradigma de programación diferente, pero debes esforzarte para tratar de comprender los diversos temas a la mano.
- La mayoría de los lenguajes de sistemas modernos tienen características de estilo funcional. Rust tiene una coincidencia de patrones y tipos de datos algebraicos casi idénticos a SML, Java (aunque no es realmente un lenguaje de sistemas) incluye flujos de datos paralelos / mapas / reducciones / etc. como ciudadano de primera clase en Java 8, y estoy seguro de que D / C ++ 14 / etc. tienen funciones relacionadas. Además, aprender a programar funcionalmente le permite comprender cómo funcionan los lenguajes / programas puramente funcionales, que desea emular en los lenguajes de sistemas para evitar condiciones de carrera / otros problemas.
Digo esto habiendo tomado tres clases de sistemas y TA’d 150/210/418.