Para hacer un curso de gráficos 3D tengo que aprender C++ así que salí a buscar materiales. Lo mejor que encontré fue este curso de Stanford.

El curso es el segundo curso de computación que tienen los alumnos de Stanford, (el primero es en Java). Como tal, es interesante porque no se detiene mucho en la sintaxis de C++ (es bastante similar a Java y a C) sino en aspectos más conceptuales (el énfasis es en programar abstracciones (queues, vector, map, stack)). Sin ser un curso de algoritmos, es una buena intro.

La profe se llama Julie Zelenski y es excelente: graciosa, inteligente, casi linda… Como no pude usar las librerías que le dan a los alumnos no pude hacer los assignments. Lo que si pude hacer es tratar de hacer andar el código que tratan en clase. Un ejemplo interesante es este Sudoku Solver.

sudoku300

El algoritmo explora recursivamente el árbol de posibilidades hasta encontrar una solución. Es similar  al pset5 de MIT 6.00. El principal problema consiste en manejar correctamente la memoria del stack. Acá está el código [link al gist].

Aparte de eso implementamos varias ADTs (Queue, Stack, Map, Vector), lo que es una forma bastante interesante de conocer como funciona C++. Obviamente que me distraje un poco de los gráficos 3D.

Otra cosa totalmente nueva que estoy aprendiendo son los pointers. Creo que eso vale la pena entenderlo en detalle por lo que estoy pasando más tiempo de lo esperado en este material. También hay otro curso de Stanford en Youtube que tiene unas cuantas clases sobre pointers y como programar funciones genéricas en C.

Cómo en C no hay templates, es necesario manipular la memoria a nivel de bits para hacer funciones genéricas (un linear search que sirva para un array de ints o un array de strings). Todas esas cosas que damos por obvias los que usamos lenguajes de alto nivel como Python y Ruby, hay que hacerlas a pedal en lenguajes más rústicos como C.

En otro post entraré más en detalle sobre estas clases, porque me parecen bastante interesantes y probablemente las mire con atención.

Anuncios