No hay una respuesta correcta con respecto a lo que debe perseguir un estudiante de informática en sus vacaciones de verano de primer año, pero puedo responder lo que hubiera hecho si tuviera que elegir entre las tres opciones que ha seleccionado. Veamos cada opción con un pequeño detalle.
- Aprendizaje automático
ML requiere muy poco o ningún conocimiento de los temas centrales de Ciencias de la Computación, por lo que no importa que uno haya tomado ningún currículum de CS o no. Lo que uno necesita es conocimiento de temas matemáticos como cálculo y probabilidad y algo de programación básica para codificar esos conceptos. Hay algunos MOOC muy buenos disponibles para aprender ML, uno puede practicar sus habilidades en Kaggle. Además, dos meses es un muy buen momento para comenzar.
2. Estructura de datos y algoritmo
- ¿Es una mala idea usar Python para aprender algoritmos y programación competitiva?
- ¿Hay alguna estructura de datos que pueda realizar las funciones de inserción, búsqueda y eliminación en O (log n)?
- ¿Cuándo debo usar un árbol de sufijos sobre una matriz de sufijos?
- ¿Cuáles son algunos algoritmos que usamos diariamente que tienen complejidades [matemáticas] O (n), O (n ^ 2), [/ matemáticas] y [matemáticas] O (\ log n) [/ matemáticas]?
- ¿Qué libro debo comprar para aprender sobre algoritmos: estructuras de datos y algoritmos simplificados por Narsimha Karumanchi o Introducción a los algoritmos (CLRS)?
DS y Algorithm es muy importante para cada estudiante de informática. Por eso, hay un curso dedicado para cada plan de estudios universitario en los próximos años. Yo diría que en los próximos años tendrás suficiente tiempo para profundizar en estos temas. Pero aún así, si desea seguir con este tema, hay muchos buenos tutoriales en TopCoder. Puedes practicar en Codechef y participar en competiciones para aumentar tu adrenalina.
3. Entrenamiento de verano en Java
Java se usa ampliamente en muchos lugares, siempre es bueno tener esta habilidad. Pero yo diría que es solo otro lenguaje, y ya sabes C y Python. Así que retrase el aprendizaje de Java cuando realmente necesite usarlo en algunos proyectos. Hasta entonces, tomar un entrenamiento en Java sin ningún objetivo inmediato en mente podría no ser fructífero.
Teniendo en cuenta las tres opciones, mi elección sería Machine Learning.